Skip to content

๐Ÿ› fix: ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ๋ฐฐํฌ ์‹คํŒจ ๋ฌธ์ œ #5

๐Ÿ› fix: ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ๋ฐฐํฌ ์‹คํŒจ ๋ฌธ์ œ

๐Ÿ› fix: ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ๋ฐฐํฌ ์‹คํŒจ ๋ฌธ์ œ #5

Workflow file for this run

name: Deploy to EC2
on:
pull_request:
types: [closed]
branches: [main, develop]
jobs:
deploy:
if: github.event.pull_request.merged == true
runs-on: self-hosted
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- name: Deploy to EC2
run: |
set -e
# ๋ฐฐํฌ ๋กœ๊น…
echo "๐Ÿš€ Starting deployment..."
echo "๐Ÿ“ PR: #${{ github.event.pull_request.number }}"
echo "๐Ÿ”„ Commit: ${{ github.sha }}"
# ๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ
echo "๐Ÿงน Cleaning up Docker resources..."
docker system prune -f
# ๋ธŒ๋žœ์น˜๋ณ„ ํ™˜๊ฒฝ ์„ค์ •
if [ "${{ github.event.pull_request.base.ref }}" = "main" ]; then
CONTAINER_NAME="app-prod"
ENV_FILE="app-prod.env"
OTHER_CONTAINER="app-dev"
echo "๐Ÿš€ Deploying to PRODUCTION"
elif [ "${{ github.event.pull_request.base.ref }}" = "develop" ]; then
CONTAINER_NAME="app-dev"
ENV_FILE="app-dev.env"
OTHER_CONTAINER="app-prod"
echo "๐Ÿงช Deploying to DEVELOPMENT"
fi
# ๋ฐฐํฌ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
DEPLOY_DIR="/home/ubuntu/coplan/app"
# ๋ฉ”๋ชจ๋ฆฌ ํ™•๋ณด๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€
echo "โธ๏ธ Stopping other container to free memory..."
docker compose stop ${OTHER_CONTAINER} || true
# rsync๋กœ ํŒŒ์ผ ๋™๊ธฐํ™”
echo "๐Ÿ“‚ Synchronizing files..."
rsync -av \
--exclude='.git' \
--exclude='node_modules' \
--exclude='.next' \
--exclude='.env*' \
--exclude='*.log' \
--delete \
./ ${DEPLOY_DIR}/
# ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์ด๋™
cd /home/ubuntu/coplan
# ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํŒŒ์ผ ๋ณต์‚ฌ (์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ)
if [ -f "/home/ubuntu/env/${ENV_FILE}" ]; then
echo "๐Ÿ“‹ Copying environment variables..."
cp "/home/ubuntu/env/${ENV_FILE}" "${DEPLOY_DIR}/.env.production"
fi
# Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ
echo "๐Ÿ”จ Building Docker image..."
DOCKER_BUILDKIT=1 docker compose build ${CONTAINER_NAME}
# ์ปจํ…Œ์ด๋„ˆ ๊ต์ฒด (๋ฌด์ค‘๋‹จ ๋ฐฐํฌ)
echo "๐Ÿ”„ Updating container..."
docker compose up -d --no-deps ${CONTAINER_NAME}
# ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘
echo "๐Ÿ”„ Restarting other container..."
docker compose up -d ${OTHER_CONTAINER}
# ํ—ฌ์Šค์ฒดํฌ
echo "๐Ÿฅ Health check..."
sleep 10
if docker ps | grep -q ${CONTAINER_NAME}; then
echo "โœ… Container is running"
docker logs --tail 20 ${CONTAINER_NAME}
else
echo "โŒ Container failed to start"
docker logs ${CONTAINER_NAME}
exit 1
fi
echo "โœ… Deployment completed successfully!"