112 lines
2.8 KiB
Bash
Executable File
112 lines
2.8 KiB
Bash
Executable File
#!/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 "$@"
|