Merge pull request #328 from PromptPlace/feat/#295 #253
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: deploy-main | ||
| on: | ||
| push: | ||
| branches: [ main ] | ||
| workflow_dispatch: | ||
| jobs: | ||
| deploy: | ||
| runs-on: ubuntu-latest | ||
| permissions: | ||
| contents: read | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v4 | ||
| - name: Check prisma has changes | ||
| id: paths-filter | ||
| uses: dorny/paths-filter@v3 | ||
| with: | ||
| filters: | | ||
| prisma: ["prisma/**"] | ||
| - name: Configure SSH | ||
| env: | ||
| EC2_USER: ubuntu | ||
| EC2_HOST: ${{ secrets.EC2_HOST }} | ||
| EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }} | ||
| run: | | ||
| set -euo pipefail | ||
| mkdir -p ~/.ssh | ||
| printf "%s" "$EC2_SSH_KEY" > ~/.ssh/id_rsa | ||
| chmod 600 ~/.ssh/id_rsa | ||
| cat >>~/.ssh/config <<END | ||
| Host prod | ||
| HostName $EC2_HOST | ||
| User $EC2_USER | ||
| IdentityFile ~/.ssh/id_rsa | ||
| StrictHostKeyChecking no | ||
| END | ||
| - name: Prepare target dir | ||
| run: | | ||
| ssh prod 'sudo mkdir -p /opt/app-backup && sudo chown ubuntu:ubuntu /opt/app-backup' | ||
| - name: Sync workspace (rsync --delete) | ||
| run: | | ||
| rsync -az --delete \ | ||
| --exclude ".git" \ | ||
| --exclude "node_modules" \ | ||
| ./ prod:/opt/app-backup/ | ||
| - name: Write .env on EC2 | ||
| run: | | ||
| ssh prod 'cat > /opt/app-backup/.env <<EOF | ||
| ${{ secrets.ENV_CONTENT }} | ||
| EOF' | ||
| - name: Install, Generate & Build on server | ||
| run: | | ||
| ssh prod 'cd /opt/app-backup && \ | ||
| pnpm install --frozen-lockfile && \ | ||
| pnpm exec prisma generate && \ | ||
| rm -rf dist && \ | ||
| pnpm build' | ||
| - name: Prisma migrate (only when schema changed) | ||
| if: steps.paths-filter.outputs.prisma == 'true' | ||
| run: | | ||
| ssh prod 'cd /opt/app-backup && pnpm exec prisma migrate deploy' | ||
| - name: Install/Update systemd service | ||
| run: | | ||
| ssh prod 'cat > app.service << "UNIT" | ||
| [Unit] | ||
| Description=PromptPlace Backend | ||
| After=network.target | ||
| [Service] | ||
| User=ubuntu | ||
| WorkingDirectory=/opt/app-backup | ||
| EnvironmentFile=/opt/app-backup/.env | ||
| Environment=NODE_ENV=production | ||
| Environment=PNPM_HOME=/home/ubuntu/.local/share/pnpm | ||
| Environment=PATH=/home/ubuntu/.local/share/pnpm:/usr/local/bin:/usr/bin:/bin | ||
| ExecStart=/bin/bash -lc '"'"'pnpm start'"'"' | ||
| Restart=always | ||
| RestartSec=3 | ||
| # Optional: 확보/로그 | ||
| StandardOutput=journal | ||
| StandardError=journal | ||
| [Install] | ||
| WantedBy=multi-user.target | ||
| UNIT | ||
| sudo mv app.service /etc/systemd/system/app.service | ||
| sudo systemctl daemon-reload | ||
| sudo systemctl enable app | ||
| sudo systemctl restart app | ||
| ' | ||
| - name: Restart PM2 Application (promptplace-api) | ||
| run: | | ||
| ssh prod 'pm2 restart promptplace-api' | ||