-
Notifications
You must be signed in to change notification settings - Fork 0
138 lines (114 loc) · 4.69 KB
/
Copy pathdeploy.yml
File metadata and controls
138 lines (114 loc) · 4.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
name: bookpar2
on:
push:
branches:
- main
jobs:
backend:
name: Deploy Django Backend
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: SSH to EC2 and Deploy
env:
SSH_PRIVATE_KEY: ${{ secrets.EC2_SSH_KEY }}
EC2_HOST: ${{ secrets.EC2_HOST }}
EC2_USER: ${{ secrets.EC2_USER }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID}}
AWS_S3_REGION_NAME: ${{ secrets.AWS_S3_REGION_NAME}}
AWS_S3_SIGNATURE_VERSION: ${{ secrets.AWS_S3_SIGNATURE_VERSION}}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
AWS_STORAGE_BUCKET_NAME: ${{ secrets.AWS_STORAGE_BUCKET_NAME}}
IMAGE_BUCKET_NAME: ${{ secrets.IMAGE_BUCKET_NAME }}
run: |
# SSH 키 설정
mkdir -p ~/.ssh
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh -o StrictHostKeyChecking=no $EC2_USER@$EC2_HOST << 'EOF'
set -e # 오류 발생 시 스크립트 중단
# 환경 변수 설정
export DATABASE_URL="${{ secrets.DATABASE_URL }}"
export AWS_ACCESS_KEY_ID="${{ secrets.AWS_ACCESS_KEY_ID }}"
export AWS_S3_REGION_NAME="${{ secrets.AWS_S3_REGION_NAME }}"
export AWS_S3_SIGNATURE_VERSION="${{ secrets.AWS_S3_SIGNATURE_VERSION }}"
export AWS_SECRET_ACCESS_KEY="${{ secrets.AWS_SECRET_ACCESS_KEY }}"
export AWS_STORAGE_BUCKET_NAME="${{ secrets.AWS_STORAGE_BUCKET_NAME }}"
export IMAGE_BUCKET_NAME="${{ secrets.IMAGE_BUCKET_NAME }}"
# 백엔드 디렉토리 이동
cd /home/ubuntu/docker/backend
# 최신 코드 가져오기
git pull origin main
# Python 가상환경 설정
if [ ! -d "venv" ]; then
python3 -m venv venv
fi
source venv/bin/activate
# 종속성 설치
pip install --upgrade pip
pip install -r requirements.txt
# .env 파일 생성 (Django 환경 변수)
echo "DATABASE_URL=$DATABASE_URL" > .env
echo "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID" >> .env
echo "AWS_S3_REGION_NAME=$AWS_S3_REGION_NAME" >> .env
echo "AWS_S3_SIGNATURE_VERSION=$AWS_S3_SIGNATURE_VERSION" >> .env
echo "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY" >> .env
echo "AWS_STORAGE_BUCKET_NAME=$AWS_STORAGE_BUCKET_NAME" >> .env
echo "IMAGE_BUCKET_NAME=$IMAGE_BUCKET_NAME" >> .env
# Django 마이그레이션 실행
python manage.py migrate
# # 정적 파일 수집
# python manage.py collectstatic --noinput
# MySQL 실행 확인 및 시작
if ! systemctl is-active --quiet mysql; then
echo "Starting MySQL..."
sudo systemctl start mysql
fi
# Gunicorn 실행
sudo systemctl restart gunicorn
# Nginx 재시작
sudo systemctl restart nginx
EOF
frontend:
name: Deploy Frontend build
runs-on: ubuntu-latest
needs: backend
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Configure AWS CLI and Deploy to EC2
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_S3_REGION_NAME }}
AWS_STORAGE_BUCKET_NAME: ${{ secrets.AWS_STORAGE_BUCKET_NAME }}
PRIVATE_KEY: ${{ secrets.EC2_SSH_KEY }}
EC2_HOST: ${{ secrets.EC2_HOST }}
EC2_USER: ${{ secrets.EC2_USER }}
VITE_API_BASE_URL: ${{ secrets.VITE_API_BASE_URL }}
run: |
# EC2 접속
mkdir -p ~/.ssh
echo "$PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
aws configure set region $AWS_REGION
# 파일 빌드 및 S3 업로드
ssh -o StrictHostKeyChecking=no $EC2_USER@$EC2_HOST << 'EOF'
cd /home/ubuntu/docker/frontend
git pull origin main
npm install
npm run build
aws s3 sync ./dist s3://bookpar2.shop --delete
EOF