36 lines
1.7 KiB
Bash
36 lines
1.7 KiB
Bash
#!/bin/sh
|
|
# Forgejo master를 NAS(vignette-prod)에 배포한다. API 이미지만 교체하고 engine·web은 유지한다.
|
|
# engine 코드·공통 requirements·apps/api/Dockerfile이 바뀐 배포에서는 이 스크립트를 그대로 쓰지 말고
|
|
# docs/ops/deployment-pipeline.md §5의 변경 범위 판정을 먼저 따른다.
|
|
# 실행(NAS에서): curl -fsSLo /tmp/d 192.168.0.38:3000/yunchan/vignette/raw/branch/master/scripts/nas-deploy.sh && sh /tmp/d
|
|
set -eu
|
|
cd /volume1/docker/vignette-prod
|
|
|
|
echo "[1/5] Forgejo master 클론"
|
|
rm -rf src-deploy
|
|
docker run --rm -v "$PWD:/work" alpine/git clone --depth 1 --branch master \
|
|
http://192.168.0.38:3000/yunchan/vignette.git /work/src-deploy
|
|
SHA=$(docker run --rm -v "$PWD:/work" alpine/git -C /work/src-deploy rev-parse --short HEAD)
|
|
echo "cloned=$SHA"
|
|
|
|
echo "[2/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 "[3/5] API 이미지 빌드 (수 분 소요)"
|
|
cd src-deploy
|
|
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"
|