b46ec3c1a6
Deploy momo-erp to production / deploy (push) Failing after 0s
이전 실패 원인: Gitea Actions runner 가 actions/checkout@v4 를 가져오지 못해 4초만에 즉사. 어차피 원격 서버에서 git clone 하므로 checkout 단계 자체가 불필요. 첫 단계에서 필수 secret 부재 여부를 명시적으로 검사. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
96 lines
3.8 KiB
YAML
96 lines
3.8 KiB
YAML
name: Deploy momo-erp to production
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Verify required secrets
|
|
run: |
|
|
[ -n "${{ secrets.DEPLOY_SSH_KEY }}" ] || { echo "::error::DEPLOY_SSH_KEY secret 누락"; exit 1; }
|
|
[ -n "${{ secrets.DEPLOY_HOST }}" ] || { echo "::error::DEPLOY_HOST secret 누락"; exit 1; }
|
|
[ -n "${{ secrets.DEPLOY_USER }}" ] || { echo "::error::DEPLOY_USER secret 누락"; exit 1; }
|
|
[ -n "${{ secrets.DATABASE_URL }}" ] || { echo "::error::DATABASE_URL secret 누락"; exit 1; }
|
|
echo "✔ secrets present"
|
|
|
|
- name: Setup SSH
|
|
run: |
|
|
mkdir -p ~/.ssh
|
|
printf '%s\n' "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/id_rsa
|
|
chmod 600 ~/.ssh/id_rsa
|
|
ssh-keyscan -H "${{ secrets.DEPLOY_HOST }}" >> ~/.ssh/known_hosts 2>/dev/null || true
|
|
|
|
- name: Deploy via SSH
|
|
env:
|
|
SSH_USER: ${{ secrets.DEPLOY_USER }}
|
|
SSH_HOST: ${{ secrets.DEPLOY_HOST }}
|
|
DATABASE_URL: ${{ secrets.DATABASE_URL }}
|
|
NEXTAUTH_URL: ${{ secrets.NEXTAUTH_URL }}
|
|
NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET }}
|
|
MASTER_PWD: ${{ secrets.MASTER_PWD }}
|
|
AES_KEY: ${{ secrets.AES_KEY }}
|
|
SMTP_HOST: ${{ secrets.SMTP_HOST }}
|
|
SMTP_PORT: ${{ secrets.SMTP_PORT }}
|
|
SMTP_USER: ${{ secrets.SMTP_USER }}
|
|
SMTP_PASS: ${{ secrets.SMTP_PASS }}
|
|
SMTP_FROM: ${{ secrets.SMTP_FROM }}
|
|
MOMO_BANK_ACCOUNT: ${{ secrets.MOMO_BANK_ACCOUNT }}
|
|
MOMO_PHONE: ${{ secrets.MOMO_PHONE }}
|
|
run: |
|
|
# 환경변수를 원격 셸로 전달하기 위해 export 한 뒤 -E 로 보내거나, heredoc 안에서 GitHub-style 변수 보간 사용
|
|
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=15 "$SSH_USER@$SSH_HOST" \
|
|
"DATABASE_URL='$DATABASE_URL' \
|
|
NEXTAUTH_URL='$NEXTAUTH_URL' \
|
|
NEXTAUTH_SECRET='$NEXTAUTH_SECRET' \
|
|
MASTER_PWD='$MASTER_PWD' \
|
|
AES_KEY='$AES_KEY' \
|
|
SMTP_HOST='$SMTP_HOST' \
|
|
SMTP_PORT='$SMTP_PORT' \
|
|
SMTP_USER='$SMTP_USER' \
|
|
SMTP_PASS='$SMTP_PASS' \
|
|
SMTP_FROM='$SMTP_FROM' \
|
|
MOMO_BANK_ACCOUNT='$MOMO_BANK_ACCOUNT' \
|
|
MOMO_PHONE='$MOMO_PHONE' \
|
|
bash -s" <<'REMOTE_SCRIPT'
|
|
set -e
|
|
DEPLOY_DIR="$HOME/momo-erp/source"
|
|
mkdir -p "$HOME/momo-erp"
|
|
if [ -d "$DEPLOY_DIR/.git" ]; then
|
|
cd "$DEPLOY_DIR"
|
|
git fetch origin
|
|
git reset --hard origin/main
|
|
else
|
|
git clone https://git.junggomoa.com/chpark/distribution_erp.git "$DEPLOY_DIR"
|
|
cd "$DEPLOY_DIR"
|
|
fi
|
|
|
|
cat > .env.production <<ENVEOF
|
|
DATABASE_URL="$DATABASE_URL"
|
|
NEXTAUTH_URL="$NEXTAUTH_URL"
|
|
NEXTAUTH_SECRET="$NEXTAUTH_SECRET"
|
|
NEXT_PUBLIC_APP_NAME="유통관리 ERP"
|
|
NEXT_PUBLIC_COMPANY_NAME="모모유통"
|
|
MASTER_PWD="$MASTER_PWD"
|
|
AES_KEY="$AES_KEY"
|
|
FILE_STORAGE_PATH="/data_storage"
|
|
LOG_LEVEL=info
|
|
SMTP_HOST="$SMTP_HOST"
|
|
SMTP_PORT="$SMTP_PORT"
|
|
SMTP_USER="$SMTP_USER"
|
|
SMTP_PASS="$SMTP_PASS"
|
|
SMTP_FROM="$SMTP_FROM"
|
|
MOMO_BANK_ACCOUNT="$MOMO_BANK_ACCOUNT"
|
|
MOMO_PHONE="$MOMO_PHONE"
|
|
ENVEOF
|
|
|
|
docker compose -f docker-compose.prod.yml up -d --build
|
|
# 마이그레이션 (실패해도 배포는 성공으로 간주)
|
|
docker compose -f docker-compose.prod.yml exec -T momo-erp npm run migrate:momo || \
|
|
echo "::warning::migration step failed or skipped"
|
|
docker compose -f docker-compose.prod.yml ps
|
|
REMOTE_SCRIPT
|