깃허브 워크플로우 ' 수정 #22
This file contains 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 # main 브랜치에 새로운 커밋이 올라왔을 때만 실행 | |
workflow_dispatch: # 필요한 경우 사용자가 수동 실행 | |
jobs: | |
deploy: | |
runs-on: ubuntu-latest | |
steps: | |
# CI/CD 파이프라인이 실행될 운영체제 환경 지정 | |
- name: Checkout | |
uses: actions/checkout@v4 | |
# prisma 폴더 파일의 변경사항이 있는지 검사 | |
# - name: Check prisma has changes | |
# uses: dorny/paths-filter@v3 | |
# id: paths-filter | |
# with: | |
# filters: | | |
# prisma: ["prisma/**"] | |
- name: Set up Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '20' | |
- name: Install dependencies | |
run: | | |
npm install -g yarn | |
yarn install | |
- name: Generate Tsoa Routes | |
run: | | |
yarn tsoa routes -c ./config/tsoa.json | |
- name: Generate Swagger document | |
run: | | |
yarn tsx ./swagger/swagger.js | |
yarn tsoa spec -c ./config/tsoa.json | |
- name: Run build | |
run: | | |
yarn prisma generate | |
yarn build | |
- name: Compress dist folder | |
run: | | |
tar -czvf dist.tar.gz ./dist | |
# SSH 설정 | |
- name: Configure SSH | |
run: | | |
mkdir -p ~/.ssh | |
echo "$EC2_SSH_KEY" > ~/.ssh/id_rsa | |
chmod 600 ~/.ssh/id_rsa | |
cat >>~/.ssh/config <<END | |
Host sweepic-ec2 | |
HostName $EC2_HOST | |
User $EC2_USER | |
IdentityFile ~/.ssh/id_rsa | |
StrictHostKeyChecking no | |
Host * | |
ServerAliveInterval 120 | |
TCPKeepAlive no | |
END | |
env: | |
EC2_USER: ubuntu | |
EC2_HOST: ${{ secrets.EC2_HOST }} | |
EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }} | |
# 프로젝트 폴더의 압축 파일을 EC2 서버로 전송 | |
- name: Copy Workspace | |
run: | | |
ssh sweepic-ec2 'sudo mkdir -p /opt/app' | |
ssh sweepic-ec2 'sudo chown ubuntu:ubuntu /opt/app' | |
scp dist.tar.gz sweepic-ec2:/opt/app | |
# 전송된 압축 배포파일을 압축풀기 | |
- name: Release Compressed File | |
run: | | |
ssh sweepic-ec2 'sudo tar -xzvf /opt/app/dist.tar.gz' | |
# 원격 서버에서 애플리케이션을 Systemd 서비스로 등록하는 과정 | |
- name: Copy systemd service file | |
run: | | |
ssh sweepic-ec2 ' | |
echo "[Unit] | |
Description=Sweepic Project | |
After=network.target | |
[Service] | |
User=${USER} | |
WorkingDirectory=/opt/app | |
ExecStart=/usr/bin/node dist/app.cjs | |
Restart=always | |
[Install] | |
WantedBy=multi-user.target" | sudo tee /etc/systemd/system/app.service | |
' | |
# systemd 서비스 활성화 | |
- name: Enable systemd service | |
run: | | |
ssh sweepic-ec2 'sudo systemctl daemon-reload' | |
ssh sweepic-ec2 'sudo systemctl enable app' | |
# systemd 서비스 재시작 | |
- name: Restart systemd service | |
run: | | |
ssh sweepic-ec2 'sudo systemctl restart app' |