도메인 생성 공통 스크립트 수정

This commit is contained in:
2026-06-18 11:57:58 +09:00
parent ae1133aa7b
commit 2bf905352b
+49 -23
View File
@@ -116,24 +116,59 @@ runs:
TOKEN=$(printf '%s' "$TOKEN_BODY" | jq -r '.token') TOKEN=$(printf '%s' "$TOKEN_BODY" | jq -r '.token')
AUTH="Authorization: Bearer ${TOKEN}" AUTH="Authorization: Bearer ${TOKEN}"
WS=$([ "$WEBSOCKETS" = "true" ] && echo true || echo false)
# --------------------------------------------------------------- # ---------------------------------------------------------------
# 2. 도메인 중복 체크 (2번째 실행 대응) # 2. 기존 프록시 호스트 확인 (멱등성: 2번째 실행 대응)
# --------------------------------------------------------------- # ---------------------------------------------------------------
HOST_ID=$(api GET "/nginx/proxy-hosts" \ HOST_ID=$(api GET "/nginx/proxy-hosts" \
| jq -r --arg d "$DOMAIN" \ | jq -r --arg d "$DOMAIN" \
'map(select(.domain_names | index($d))) | .[0].id // empty') 'map(select(.domain_names | index($d))) | .[0].id // empty')
if [ -n "$HOST_ID" ]; then CREATED=false
echo "이미 존재하는 도메인입니다: ${DOMAIN} (host id=${HOST_ID})"
echo "host-id=${HOST_ID}" >> "$GITHUB_OUTPUT" # ---------------------------------------------------------------
echo "created=false" >> "$GITHUB_OUTPUT" # 3. HTTP 전용 프록시 호스트 먼저 생성 (SSL 없이)
exit 0 # 도메인이 80포트로 응답해야 Let's Encrypt HTTP-01 검증이 통과합니다.
# ---------------------------------------------------------------
if [ -z "$HOST_ID" ]; then
echo "HTTP 프록시 호스트 생성 중: ${DOMAIN} -> ${FORWARD_SCHEME}://${FORWARD_HOST}:${FORWARD_PORT}"
HTTP_PAYLOAD=$(jq -nc \
--arg d "$DOMAIN" \
--arg fh "$FORWARD_HOST" \
--arg fp "$FORWARD_PORT" \
--arg fs "$FORWARD_SCHEME" \
--argjson ws "$WS" \
'{domain_names:[$d],
forward_host:$fh,
forward_port:($fp|tonumber),
forward_scheme:$fs,
certificate_id:0,
ssl_forced:false,
http2_support:false,
hsts_enabled:false,
hsts_subdomains:false,
caching_enabled:false,
allow_websocket_upgrade:$ws,
block_exploits:true,
access_list_id:0,
advanced_config:"",
locations:[],
meta:{}}')
HOST_ID=$(api POST "/nginx/proxy-hosts" "$HTTP_PAYLOAD" | jq -r '.id')
if [ -z "$HOST_ID" ] || [ "$HOST_ID" = "null" ]; then
echo "프록시 호스트 생성 실패: ${DOMAIN}"
exit 1
fi
CREATED=true
else
echo "기존 프록시 호스트 사용: ${DOMAIN} (host id=${HOST_ID})"
fi fi
# --------------------------------------------------------------- # ---------------------------------------------------------------
# 3. Let's Encrypt 인증서 발급 — 인증서도 멱등 처리 # 4. Let's Encrypt 인증서 발급 (HTTP 호스트가 떠 있는 상태에서 검증)
# 같은 도메인 인증서가 이미 있으면 재사용합니다.
# --------------------------------------------------------------- # ---------------------------------------------------------------
# 같은 도메인의 기존 인증서가 있으면 재사용합니다.
CERT_ID=$(api GET "/nginx/certificates" \ CERT_ID=$(api GET "/nginx/certificates" \
| jq -r --arg d "$DOMAIN" \ | jq -r --arg d "$DOMAIN" \
'map(select(.provider=="letsencrypt" and (.domain_names | index($d)))) | .[0].id // empty') 'map(select(.provider=="letsencrypt" and (.domain_names | index($d)))) | .[0].id // empty')
@@ -158,13 +193,10 @@ runs:
fi fi
# --------------------------------------------------------------- # ---------------------------------------------------------------
# 4. 프록시 호스트 생성 (SSL 강제 + HTTP/2 고정 적용) # 5. 프록시 호스트에 SSL 적용 (PUT 업데이트: SSL 강제 + HTTP/2)
# --------------------------------------------------------------- # ---------------------------------------------------------------
echo "프록시 호스트 생성 중: ${DOMAIN} -> ${FORWARD_SCHEME}://${FORWARD_HOST}:${FORWARD_PORT}" echo "프록시 호스트에 SSL 적용 중: ${DOMAIN} (cert id=${CERT_ID})"
SSL_PAYLOAD=$(jq -nc \
WS=$([ "$WEBSOCKETS" = "true" ] && echo true || echo false)
PAYLOAD=$(jq -nc \
--arg d "$DOMAIN" \ --arg d "$DOMAIN" \
--arg fh "$FORWARD_HOST" \ --arg fh "$FORWARD_HOST" \
--arg fp "$FORWARD_PORT" \ --arg fp "$FORWARD_PORT" \
@@ -187,14 +219,8 @@ runs:
advanced_config:"", advanced_config:"",
locations:[], locations:[],
meta:{}}') meta:{}}')
api PUT "/nginx/proxy-hosts/${HOST_ID}" "$SSL_PAYLOAD" > /dev/null
HOST_ID=$(api POST "/nginx/proxy-hosts" "$PAYLOAD" | jq -r '.id') echo "도메인 생성/SSL 적용 완료: ${DOMAIN} (host id=${HOST_ID})"
if [ -z "$HOST_ID" ] || [ "$HOST_ID" = "null" ]; then
echo "프록시 호스트 생성 실패: ${DOMAIN}"
exit 1
fi
echo "도메인 생성 완료: ${DOMAIN} (host id=${HOST_ID})"
echo "host-id=${HOST_ID}" >> "$GITHUB_OUTPUT" echo "host-id=${HOST_ID}" >> "$GITHUB_OUTPUT"
echo "created=true" >> "$GITHUB_OUTPUT" echo "created=${CREATED}" >> "$GITHUB_OUTPUT"