#!/usr/bin/env bash # csv.wise.ai.kr 웹 티어 구축 — 웹서버(utimsurpai.cafe24.com / 211.37.173.197)에서 실행 # # 사용법: bash 01-web-server-setup.sh # 멱등: 다시 실행해도 안전하다. # # 이 서버는 nginx만 담당한다. WAS(Tomcat)와 DB(MariaDB)는 개발서버(101.79.17.164)를 그대로 쓴다. # # 선행 조건: # 1) /root/.ssh/id_arko_tunnel 키가 있고, 그 공개키가 WAS의 authorized_keys에 # restrict,permitopen="127.0.0.1:8088" 로 등록되어 있을 것 # (WAS에서 deploy/web/03-was-tunnel-key.sh 실행) # 2) csv.wise.ai.kr A/CNAME 레코드가 이 서버를 가리킬 것 set -euo pipefail DOMAIN=csv.wise.ai.kr WAS_HOST=101.79.17.164 KEY=/root/.ssh/id_arko_tunnel SRC_DIR=$(cd "$(dirname "$0")" && pwd) log() { echo -e "\n[$(date +'%F %T')] === $* ==="; } # ------------------------------------------------------- 1. 사전 확인 log "1. 사전 확인" command -v nginx > /dev/null || { echo "nginx가 없다"; exit 1; } nginx -v 2>&1 [ -f "$KEY" ] || { echo "터널 키가 없다: $KEY"; exit 1; } echo "터널 키 확인" # --------------------------------------------------------- 2. 터널 log "2. WAS 터널 서비스" install -m 644 "$SRC_DIR/arko-was-tunnel.service" /etc/systemd/system/arko-was-tunnel.service systemctl daemon-reload systemctl enable arko-was-tunnel systemctl restart arko-was-tunnel for i in $(seq 1 20); do ss -lnt 2>/dev/null | grep -q "127.0.0.1:8088" && break sleep 1 done if ! ss -lnt 2>/dev/null | grep -q "127.0.0.1:8088"; then echo "터널이 열리지 않았다" systemctl status arko-was-tunnel --no-pager | tail -15 exit 1 fi echo "터널 개통: 127.0.0.1:8088 → $WAS_HOST" CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 20 -H "Host: $DOMAIN" http://127.0.0.1:8088/ || echo 000) echo "WAS 응답 → HTTP $CODE" [ "$CODE" = "200" ] || [ "$CODE" = "302" ] || { echo "WAS가 정상 응답하지 않는다"; exit 1; } # --------------------------------------------------------- 3. nginx log "3. nginx 가상호스트" # 이 서버는 sites-enabled 없이 conf.d 만 include 한다 install -m 644 "$SRC_DIR/$DOMAIN.conf" "/etc/nginx/conf.d/$DOMAIN.conf" if nginx -t; then systemctl reload nginx echo "nginx 반영 완료" else rm -f "/etc/nginx/conf.d/$DOMAIN.conf" echo "nginx 설정 오류 → 제거하고 중단" exit 1 fi 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 "[^<]*" | head -1 # ----------------------------------------------------------- 4. SSL log "4. SSL" if [ -d "/etc/letsencrypt/live/$DOMAIN" ]; then echo "인증서 이미 존재 — 건너뜀" else certbot --nginx -d "$DOMAIN" --non-interactive --agree-tos --redirect fi log "완료" echo "확인: https://$DOMAIN/"