#!/usr/bin/env bash # exdev 서버(Mac Studio) — NAT hairpin 우회용 /etc/hosts 설정 # stock.exdev.co.kr · chatbot.exdev.co.kr → 127.0.0.1 (Caddy 443 / nginx 80) # # 사용 (서버 SSH): # bash scripts/setup-server-local-hosts.sh # sudo bash scripts/setup-server-local-hosts.sh # 비대화형 # set -euo pipefail RED='\033[0;31m' GREEN='\033[0;32m' CYAN='\033[0;36m' NC='\033[0m' log() { echo -e "${CYAN}[setup-local-hosts]${NC} $*"; } ok() { echo -e "${GREEN}✓${NC} $*"; } fail() { echo -e "${RED}✗${NC} $*"; exit 1; } HOSTS_FILE="/etc/hosts" MARKER="# GoldenChart local (NAT hairpin bypass)" ENTRIES=( "127.0.0.1 exdev.co.kr" "127.0.0.1 stock.exdev.co.kr" "127.0.0.1 chatbot.exdev.co.kr" ) apply_hosts() { local tmp tmp="$(mktemp)" cp "$HOSTS_FILE" "$tmp" # 기존 exdev 관련 항목·마커 제거 grep -vE 'exdev\.co\.kr|GoldenChart local \(NAT hairpin bypass\)' "$tmp" > "${tmp}.clean" || true mv "${tmp}.clean" "$tmp" { cat "$tmp" echo "" echo "$MARKER" for line in "${ENTRIES[@]}"; do echo "$line" done } > "${tmp}.new" cp "$HOSTS_FILE" "${HOSTS_FILE}.backup.$(date +%Y%m%d_%H%M%S)" mv "${tmp}.new" "$HOSTS_FILE" rm -f "$tmp" } verify() { local ok_count=0 for host in exdev.co.kr stock.exdev.co.kr; do if ping -c1 -t1 "$host" 2>/dev/null | grep -q '127.0.0.1'; then ok "ping $host → 127.0.0.1" ok_count=$((ok_count + 1)) elif dscacheutil -q host -a name "$host" 2>/dev/null | grep -q '127.0.0.1'; then ok "DNS $host → 127.0.0.1" ok_count=$((ok_count + 1)) else fail "DNS 확인 실패: $host (127.0.0.1 이 아님)" fi done curl -sf --connect-timeout 8 -o /dev/null -w "" "https://stock.exdev.co.kr/" \ || fail "https://stock.exdev.co.kr 접속 실패" ok "https://stock.exdev.co.kr → 200" curl -sf --connect-timeout 8 -o /dev/null "https://stock.exdev.co.kr/desktop/updates/latest.json" \ || fail "desktop latest.json HTTPS 실패" ok "desktop updater latest.json HTTPS OK" } main() { log "서버 로컬 hosts 설정 (NAT hairpin 우회)" if [[ "${1:-}" == "--as-root" ]]; then apply_hosts dscacheutil -flushcache 2>/dev/null || true killall -HUP mDNSResponder 2>/dev/null || true verify ok "설정 완료" return fi if [[ "$(id -u)" -eq 0 ]]; then apply_hosts dscacheutil -flushcache 2>/dev/null || true killall -HUP mDNSResponder 2>/dev/null || true verify ok "설정 완료" return fi if [[ -n "${SUDO_ASKPASS:-}" ]] && [[ -x "${SUDO_ASKPASS}" ]]; then log "SUDO_ASKPASS 사용" sudo -A bash "$0" --as-root return fi if [[ -t 0 ]]; then log "관리자 암호 필요 (sudo)" sudo bash "$0" --as-root return fi fail "sudo 권한 필요. 서버 콘솔에서: sudo bash $0" } main "$@"