Skip to content

탈퇴

탈퇴 #246

Workflow file for this run

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 && sudo chown ubuntu:ubuntu /opt/app'
- name: Sync workspace (rsync --delete)
run: |
rsync -az --delete \
--exclude ".git" \
--exclude "node_modules" \
./ prod:/opt/app/
- name: Write .env on EC2
run: |
ssh prod 'cat > /opt/app/.env <<EOF
${{ secrets.ENV_CONTENT }}
EOF'
- name: Install, Generate & Build on server
run: |
ssh prod 'cd /opt/app && \
pnpm install --frozen-lockfile && \
pnpm exec prisma generate && \
pnpm build'
- name: Prisma migrate (only when schema changed)
if: steps.paths-filter.outputs.prisma == 'true'
run: |
ssh prod 'cd /opt/app && 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
EnvironmentFile=/opt/app/.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
'
# PM2를 쓰고 있었다면 서비스 충돌 방지를 위해 종료(1회 실행)
- name: Stop PM2 app (one-time)
run: |
ssh prod 'pm2 delete promptplace || true'