All checks were successful
deploy-dev / deploy (push) Successful in 31s
Gitea 1.22.3은 workflow_dispatch(수동 실행)와 inputs 컨텍스트를 지원하지 않아 워크플로가 Actions 목록에 표시되지 않았다. 트리거를 push 하나로 단순화한다. 롤백은 서버에서 직접 수행하도록 README에 절차를 남긴다. Tomcat 힙도 768m -> 448m로 낮춘다. 가용 메모리 1G 안팎인 서버에서 Tomcat 재기동 직후 서버 전체가 응답 불능이 된 사례가 두 번 있었다.
85 lines
3.2 KiB
Bash
85 lines
3.2 KiB
Bash
#!/usr/bin/env bash
|
|
# csv.wise.ai.kr 웹 티어 구축 — 웹서버에서 실행
|
|
#
|
|
# 사용법: bash 01-web-server-setup.sh [WAS주소]
|
|
# WAS주소 기본값 101.79.17.164:8088 (같은 사설망이면 10.0.1.6:8088 로 주면 된다)
|
|
#
|
|
# 이 서버는 nginx만 올린다. WAS(Tomcat)와 DB(MariaDB)는 개발서버(101.79.17.164)를 그대로 쓴다.
|
|
# 멱등: 다시 실행해도 안전하다.
|
|
set -euo pipefail
|
|
|
|
WAS_ADDR=${1:-101.79.17.164:8088}
|
|
DOMAIN=csv.wise.ai.kr
|
|
SRC_DIR=$(cd "$(dirname "$0")" && pwd)
|
|
|
|
log() { echo -e "\n[$(date +'%F %T')] === $* ==="; }
|
|
|
|
# ----------------------------------------------------------- 1. nginx 설치
|
|
log "1. nginx 확인"
|
|
if command -v nginx > /dev/null; then
|
|
nginx -v 2>&1
|
|
else
|
|
echo "nginx 설치"
|
|
apt-get update -qq
|
|
apt-get install -y nginx
|
|
fi
|
|
|
|
# sites-enabled 구조가 없는 배포판(예: RHEL 계열)이면 만들어 준다
|
|
mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled
|
|
if ! grep -q "sites-enabled" /etc/nginx/nginx.conf; then
|
|
echo "경고: nginx.conf 가 sites-enabled 를 include 하지 않는다. 수동 확인 필요."
|
|
fi
|
|
|
|
# ------------------------------------------------- 2. WAS 도달 여부 확인
|
|
log "2. WAS 도달 확인 ($WAS_ADDR)"
|
|
CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 15 -H "Host: $DOMAIN" "http://$WAS_ADDR/" || echo 000)
|
|
echo "http://$WAS_ADDR/ → HTTP $CODE"
|
|
if [ "$CODE" = "000" ]; then
|
|
cat <<EOF
|
|
중단: WAS에 도달할 수 없다.
|
|
- WAS서버(101.79.17.164)에서 deploy/web/02-was-expose.sh <이 웹서버IP> 를 먼저 실행할 것
|
|
(Tomcat 바인딩 확대 + 방화벽에서 이 서버 IP만 8088 허용)
|
|
- 같은 사설망이면 WAS주소를 10.0.1.6:8088 로 주고 다시 실행할 것
|
|
EOF
|
|
exit 1
|
|
fi
|
|
|
|
# --------------------------------------------------------- 3. vhost 배치
|
|
log "3. nginx 가상호스트 등록"
|
|
install -m 644 "$SRC_DIR/$DOMAIN.conf" "/etc/nginx/sites-available/$DOMAIN.conf"
|
|
|
|
# upstream 주소를 인자 값으로 교체
|
|
sed -i "s|server 101.79.17.164:8088;|server $WAS_ADDR;|" "/etc/nginx/sites-available/$DOMAIN.conf"
|
|
grep -n "server .*:8088;" "/etc/nginx/sites-available/$DOMAIN.conf"
|
|
|
|
ln -sfn "/etc/nginx/sites-available/$DOMAIN.conf" "/etc/nginx/sites-enabled/$DOMAIN.conf"
|
|
|
|
if nginx -t; then
|
|
systemctl reload nginx
|
|
echo "nginx 반영 완료"
|
|
else
|
|
rm -f "/etc/nginx/sites-enabled/$DOMAIN.conf"
|
|
echo "nginx 설정 오류 → 링크 제거하고 중단"
|
|
exit 1
|
|
fi
|
|
|
|
# ------------------------------------------------------------- 4. 확인
|
|
log "4. 프록시 확인"
|
|
CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 30 -H "Host: $DOMAIN" http://127.0.0.1/ || echo 000)
|
|
echo "nginx 경유 → HTTP $CODE"
|
|
curl -s --max-time 30 -H "Host: $DOMAIN" http://127.0.0.1/ | grep -oiE "<title>[^<]*</title>" | head -1
|
|
|
|
# --------------------------------------------------------------- 5. SSL
|
|
log "5. SSL"
|
|
if [ -d "/etc/letsencrypt/live/$DOMAIN" ]; then
|
|
echo "인증서 이미 존재"
|
|
else
|
|
cat <<EOF
|
|
DNS A 레코드($DOMAIN → 이 서버 IP)가 등록된 뒤에 실행할 것:
|
|
certbot --nginx -d $DOMAIN --non-interactive --agree-tos --redirect
|
|
certbot 미설치 시: apt-get install -y certbot python3-certbot-nginx
|
|
EOF
|
|
fi
|
|
|
|
log "완료"
|