AWS t3.micro 버전에서 Jenkins를 사용하기 무리가 있어보인다..
용량을 늘려서 실행은 되지만, 관리자 포탈이 매우 느리고 빌드가 오래 걸리는 문제가 있다.
그리하여 깃에서 실행해 사용할 수 있는 GitHub Actions을 사용하고자 한다.
Jenkins는 서버에서 빌드되지만 GitHub Actions는 깃에서 빌드되어 올라간다.
도커로 실행 환경을 구성하고 GitHub Actions로 자동 배포할 예정이다.

이제 GitHub Actions 실행 yml 파일을 생성하겠다.
.github/workflows 파일 내 yml 파일을 생성하면 Actions탭에 배포될 작업에 대하여 리스트가 추가된다.

간단한 문법을 설명하자면
name: 워커 플로우 이름
env: 워커 플로우 내 환경변수 설정
jobs: 워크플로우 내부의 작업들
deploy-build:
runs-on: ubuntu-latest
steps: 실제로 실행되는 명령 또는 action
나는 ssh 인증서 발급 → frontend, backend 소스 빌드 → docker container 생성 ( nginx, frontend, backend, redis, mongoDB, mysql ) → 헬드 체크 순서로 실행되도록 구성하였다.
- name: Prepare Project
uses: appleboy/ssh-action@v1.2.0
env:
EC2_HOST: ${{ secrets.EC2_HOST }}
EC2_USER: ${{ secrets.EC2_USER }}
EC2_KEY: ${{ secrets.EC2_KEY }}
PAT_TOKEN: ${{ secrets.PAT_TOKEN }}
with:
host: ${{ env.EC2_HOST }}
username: ${{ env.EC2_USER }}
key: ${{ env.EC2_KEY }}
port: 22
timeout: 600s
command_timeout: 15m
debug: true
script: |
git config --global user.name "GitHub Actions"
git config --global user.email "actions@github.com"
if [ -d ~/bookTalkTok-web ]; then
cd ~/bookTalkTok-web
git fetch origin
git reset --hard origin/main
else
git clone https://$PAT_TOKEN@github.com/${{ github.repository }}.git ~/****
cd ~/****
fi
- name: Setup SSL Certificates
env:
uses: appleboy/ssh-action@v1.2.0
with:
script:
cd ~/*******/deployment
mkdir -p nginx/ssl
sudo cp /etc/letsencrypt/live/****/fullchain.pem nginx/ssl/cert.pem
sudo cp /etc/letsencrypt/live/****/privkey.pem nginx/ssl/key.pem
sudo chown -R $USER:$USER nginx/ssl/
chmod 644 nginx/ssl/cert.pem
chmod 600 nginx/ssl/key.pem
- name: Deploy Application with Domain
env:
uses: appleboy/ssh-action@v1.2.0
with:
script:
cd ~/***/deployment
# Docker 정리
sudo docker system prune -f
sudo docker volume prune -f
# Docker 이미지 빌드
sudo docker-compose -f docker-compose.aws.yml build --no-cache frontend
# 컨테이너 실행
sudo docker-compose -f docker-compose.aws.yml up -d
echo "🔨 Frontend 빌드 실행 중..."
if timeout 1800 sudo docker-compose -f docker-compose.aws.yml build --no-cache frontend >/dev/null 2>&1; then
echo "✅ Frontend 빌드 성공"
else
echo "❌ Frontend 빌드 실패"
echo "📋 Frontend 빌드 로그 확인 중..."
sudo docker-compose -f docker-compose.aws.yml build --no-cache frontend 2>&1 | tail -20
exit 1
fi
sudo docker-compose -f docker-compose.aws.yml up -d
if curl -f --connect-timeout 10 "http://localhost:3000" 2>/dev/null; then
frontend_status="✅"
fi
docker ps

docker logs -f 컨테이너 이름