From 72b386cbd40d867be659919dec77acc80b47fb31 Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Wed, 23 Sep 2026 17:53:43 +0900 Subject: [PATCH] =?UTF-8?q?NAS=20API=20=EC=A0=84=EC=9A=A9=20=EB=B0=B0?= =?UTF-8?q?=ED=8F=AC=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/nas-deploy-83a6c882.sh | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 scripts/nas-deploy-83a6c882.sh diff --git a/scripts/nas-deploy-83a6c882.sh b/scripts/nas-deploy-83a6c882.sh new file mode 100644 index 0000000..98dc7ca --- /dev/null +++ b/scripts/nas-deploy-83a6c882.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# 2026-09-23 83a6c882 배포 — API 이미지만 교체한다. +# 변경 범위: apps/api/app/services/provider_oauth.py (Google OAuth 스코프 형식). +# engine·web 코드와 requirements·apps/api/Dockerfile은 바뀌지 않았으므로 engine은 재생성하지 않는다. +# 실행: ssh yunchan@192.168.0.38 'sh -s' < scripts/nas-deploy-83a6c882.sh +set -eu + +SHA=83a6c882 +cd /volume1/docker/vignette-prod + +echo "[0/5] 백업 (DB dump + env.nas)" +docker exec vignette-prod-db-1 pg_dump -U vignette_owner -d vignette -Fc > "backups/pre-deploy-${SHA}.dump" +cp private/env.nas "private/env.nas.before-deploy-${SHA}" + +echo "[1/5] Forgejo master 클론" +rm -rf "src-${SHA}" +docker run --rm -v "$PWD:/work" alpine/git clone --depth 1 --branch master \ + http://192.168.0.38:3000/yunchan/vignette.git "/work/src-${SHA}" + +echo "[2/5] 클론한 커밋이 ${SHA}인지 검증" +CLONED=$(docker run --rm -v "$PWD:/work" alpine/git -C "/work/src-${SHA}" rev-parse HEAD) +case "$CLONED" in + "$SHA"*) echo "cloned=$CLONED" ;; + *) echo "SHA_MISMATCH: cloned=$CLONED expected=${SHA}" >&2; exit 1 ;; +esac + +echo "[3/5] API 이미지 빌드 (수 분 소요)" +cd "src-${SHA}" +docker build -f apps/api/Dockerfile -t "vignette-nas-api:${SHA}" . +cd .. + +echo "[4/5] 이미지 참조 갱신 + compose 설정 검증" +sed -i "s#^VIGNETTE_NAS_API_IMAGE=.*#VIGNETTE_NAS_API_IMAGE=vignette-nas-api:${SHA}#" private/env.nas +grep VIGNETTE_NAS_API_IMAGE private/env.nas +docker compose -f docker-compose.nas.yml --env-file private/env.nas config --quiet + +echo "[5/5] api 컨테이너만 교체 (engine 유지)" +docker compose -f docker-compose.nas.yml --env-file private/env.nas up -d --no-deps api +sleep 60 +docker compose -f docker-compose.nas.yml --env-file private/env.nas ps api +curl -s http://127.0.0.1:18080/health +echo "" +echo "DEPLOY_OK"