-
Notifications
You must be signed in to change notification settings - Fork 1
132 lines (114 loc) · 4.87 KB
/
Copy pathdeploy.yml
File metadata and controls
132 lines (114 loc) · 4.87 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
name: Build and Deploy to ECR - AI
on:
push:
branches:
- main # main 브랜치에 푸시할 때 실행
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Build, tag, and push Docker image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: trinity-repo # 생성한 ECR 리포지토리 이름
IMAGE_TAG: ${{ github.sha }} # 커밋 해시를 태그로 사용
run: |
docker build -t $ECR_REPOSITORY:$IMAGE_TAG .
docker tag $ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
- name: Setup SSH config
run: |
mkdir -p ~/.ssh
# Bastion 호스트 설정
echo "Host bastion
HostName 13.124.67.16
User ec2-user
IdentityFile ~/.ssh/toby-instance-key.pem" > ~/.ssh/config
# 프라이빗 인스턴스(ml) 설정
echo "Host ml
HostName 10.0.172.33
User ec2-user
ProxyJump bastion
IdentityFile ~/.ssh/toby-instance-key.pem" >> ~/.ssh/config
chmod 600 ~/.ssh/config
- name: Set SSH key
run: |
echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/toby-instance-key.pem
chmod 600 ~/.ssh/toby-instance-key.pem
- name: Deploy to EC2 via SSH
uses: appleboy/ssh-action@v0.1.6
with:
host: '10.0.172.33' # 프라이빗 인스턴스 IP
username: ec2-user
key: ${{ secrets.DEPLOY_SSH_KEY }}
proxy_host: '13.124.67.16' # bastion 호스트 IP
proxy_username: ec2-user
proxy_key: ${{ secrets.DEPLOY_SSH_KEY }}
script: |
# EC2 인스턴스에서 ECR 로그인
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ steps.login-ecr.outputs.registry }}
# 작업 디렉토리로 이동
cd /home/ec2-user/TRI-AI
# .env 파일 생성
cat > .env << INNEREOF
# MongoDB Setting
MONGO_HOST=${{ secrets.MONGO_HOST }}
MONGO_PORT=${{ secrets.MONGO_PORT }}
MONGO_USER=${{ secrets.MONGO_USER }}
MONGO_PASSWORD=${{ secrets.MONGO_PASSWORD }}
MONGO_DATABASE=${{ secrets.MONGO_DATABASE }}
MONGO_COLLECTION=${{ secrets.MONGO_COLLECTION }}
USE_SSH_TUNNEL=false
INNEREOF
# 새 이미지 pull
docker pull ${{ steps.login-ecr.outputs.registry }}/trinity-repo:${{ github.sha }}
# 기존 컨테이너 중지 및 제거 (없으면 에러 무시)
docker stop trinity-container || true
docker rm trinity-container || true
# 새 컨테이너 실행 (환경 변수 직접 전달)
docker run -d --name trinity-container \
-p 5000:5000 \
-e MONGO_HOST=${{ secrets.MONGO_HOST }} \
-e MONGO_PORT=${{ secrets.MONGO_PORT }} \
-e MONGO_USER=${{ secrets.MONGO_USER }} \
-e MONGO_PASSWORD=${{ secrets.MONGO_PASSWORD }} \
-e MONGO_DATABASE=${{ secrets.MONGO_DATABASE }} \
-e MONGO_COLLECTION=${{ secrets.MONGO_COLLECTION }} \
-e USE_SSH_TUNNEL=false \
${{ steps.login-ecr.outputs.registry }}/trinity-repo:${{ github.sha }}
# Discord 알림 보내기
- name: Send Discord Notification
if: success()
uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
title: "🚀 배포 완료!"
description: |
Repository: ${{ github.repository }}
Branch: ${{ github.ref_name }}
Commit: ${{ github.event.head_commit.message }}
배포가 성공적으로 완료되었습니다.
color: 0x28A745
- name: Send Discord Notification on Failure
if: failure()
uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
title: "❌ 배포 실패!"
description: |
Repository: ${{ github.repository }}
Branch: ${{ github.ref_name }}
Commit: ${{ github.event.head_commit.message }}
배포 중 오류가 발생했습니다.
color: 0xE01E5A