arko_renual/deploy/web/01-web-server-setup.sh
URP2026 62ef19c78f
All checks were successful
deploy-dev / deploy (push) Successful in 31s
Gitea 1.22 호환: 워크플로에서 workflow_dispatch 제거
Gitea 1.22.3은 workflow_dispatch(수동 실행)와 inputs 컨텍스트를 지원하지 않아
워크플로가 Actions 목록에 표시되지 않았다. 트리거를 push 하나로 단순화한다.
롤백은 서버에서 직접 수행하도록 README에 절차를 남긴다.

Tomcat 힙도 768m -> 448m로 낮춘다. 가용 메모리 1G 안팎인 서버에서
Tomcat 재기동 직후 서버 전체가 응답 불능이 된 사례가 두 번 있었다.
2026-07-29 17:03:55 +09:00

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 "완료"