Skip to content

Commit dce54bb

Browse files
authored
Merge pull request #331 from boostcampwm-2024/refactor/docker-ci-cd
📦 chore: docker CI/CD 작성
2 parents 4549b3f + 7453ace commit dce54bb

File tree

7 files changed

+144
-48
lines changed

7 files changed

+144
-48
lines changed

.github/workflows/deploy_feed-crawler.yml

+15-21
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,24 @@ jobs:
2121
key: ${{ secrets.CLOUD_PUBLIC_INSTANCE_SSH_KEY }}
2222
port: ${{ secrets.CLOUD_PUBLIC_INSTANCE_PORT }}
2323
script: |
24-
export NVM_DIR=~/.nvm
25-
source ~/.nvm/nvm.sh
26-
2724
cd /var/web05-Denamu
2825
git pull origin main
2926
cd /var/web05-Denamu/feed-crawler/
3027
31-
echo "DB_PORT=${{ secrets.FEED_CRAWLER_DB_PORT }}" > .env
32-
echo "DB_HOST=${{ secrets.FEED_CRAWLER_DB_HOST }}" >> .env
33-
echo "DB_NAME=${{ secrets.FEED_CRAWLER_DB_NAME }}" >> .env
34-
echo "DB_USER=${{ secrets.FEED_CRAWLER_DB_USER }}" >> .env
35-
echo "DB_PASS=${{ secrets.FEED_CRAWLER_DB_PASSWORD }}" >> .env
36-
echo "TIME_INTERVAL=${{ vars.FEED_CRAWLER_TIME_INTERVAL }}" >> .env
37-
echo "TEST_TIME_INTERVAL=${{ vars.FEED_CRAWLER_TEST_TIME_INTERVAL }}" >> .env
38-
echo "REDIS_HOST=${{secrets.REDIS_HOST }}" >> .env
39-
echo "REDIS_PORT=${{secrets.REDIS_PORT}}" >> .env
40-
echo "REDIS_USERNAME=${{secrets.REDIS_USERNAME}}" >> .env
41-
echo "REDIS_PASSWORD=${{secrets.REDIS_PASSWORD}}" >> .env
42-
echo "AI_API_KEY=${{secrets.AI_API_KEY}}" >> .env
43-
echo "AI_RATE_LIMIT_COUNT=${{ vars.AI_RATE_LIMIT_COUNT }}" >> .env
28+
mkdir -p env
29+
echo "DB_PORT=${{ secrets.FEED_CRAWLER_DB_PORT }}" > env/.env.prod
30+
echo "DB_HOST=${{ secrets.FEED_CRAWLER_DB_HOST }}" >> env/.env.prod
31+
echo "DB_NAME=${{ secrets.FEED_CRAWLER_DB_NAME }}" >> env/.env.prod
32+
echo "DB_USER=${{ secrets.FEED_CRAWLER_DB_USER }}" >> env/.env.prod
33+
echo "DB_PASS=${{ secrets.FEED_CRAWLER_DB_PASSWORD }}" >> env/.env.prod
34+
echo "TIME_INTERVAL=${{ vars.FEED_CRAWLER_TIME_INTERVAL }}" >> env/.env.prod
35+
echo "REDIS_HOST=${{secrets.REDIS_HOST }}" >> env/.env.prod
36+
echo "REDIS_PORT=${{secrets.REDIS_PORT}}" >> env/.env.prod
37+
echo "REDIS_USERNAME=${{secrets.REDIS_USERNAME}}" >> env/.env.prod
38+
echo "REDIS_PASSWORD=${{secrets.REDIS_PASSWORD}}" >> env/.env.prod
39+
echo "AI_API_KEY=${{secrets.AI_API_KEY}}" >> env/.env.prod
40+
echo "AI_RATE_LIMIT_COUNT=${{ vars.AI_RATE_LIMIT_COUNT }}" >> env/.env.prod
4441
45-
npm ci
46-
npm run build
4742
cd /var/web05-Denamu
48-
49-
pm2 delete all
50-
pm2 start ecosystem.config.js
43+
docker-compose -f docker-compose/docker-compose.prod.yml up --build -d feed-crawler
44+
docker image prune -f

.github/workflows/deploy_server.yml

+17-23
Original file line numberDiff line numberDiff line change
@@ -21,32 +21,26 @@ jobs:
2121
key: ${{ secrets.CLOUD_PUBLIC_INSTANCE_SSH_KEY }}
2222
port: ${{ secrets.CLOUD_PUBLIC_INSTANCE_PORT }}
2323
script: |
24-
export NVM_DIR=~/.nvm
25-
source ~/.nvm/nvm.sh
26-
2724
cd /var/web05-Denamu
2825
git pull origin main
2926
cd /var/web05-Denamu/server
3027
31-
mkdir -p configs
32-
echo "PORT=${{ secrets.PRODUCT_PORT }}" > configs/.env.db.production
33-
echo "DB_TYPE=mysql" >> configs/.env.db.production
34-
echo "DB_DATABASE=${{ secrets.PRODUCT_DB_DATABASE }}" >> configs/.env.db.production
35-
echo "DB_HOST=${{ secrets.PRODUCT_DB_HOST }}" >> configs/.env.db.production
36-
echo "DB_PORT=${{ secrets.PRODUCT_DB_PORT }}" >> configs/.env.db.production
37-
echo "DB_USERNAME=${{ secrets.PRODUCT_DB_USERNAME }}" >> configs/.env.db.production
38-
echo "DB_PASSWORD=${{ secrets.PRODUCT_DB_PASSWORD }}" >> configs/.env.db.production
39-
echo "REDIS_HOST=${{secrets.REDIS_HOST }}" >> configs/.env.db.production
40-
echo "REDIS_PORT=${{secrets.REDIS_PORT}}" >> configs/.env.db.production
41-
echo "REDIS_USERNAME=${{secrets.REDIS_USERNAME}}" >> configs/.env.db.production
42-
echo "REDIS_PASSWORD=${{secrets.REDIS_PASSWORD}}" >> configs/.env.db.production
43-
echo "EMAIL_USER=${{secrets.EMAIL_USER}}" >> configs/.env.db.production
44-
echo "EMAIL_PASSWORD=${{secrets.EMAIL_PASSWORD}}" >> configs/.env.db.production
45-
echo "AI_API_KEY=${{secrets.AI_API_KEY}}" >> configs/.env.db.production
28+
mkdir -p env
29+
echo "PORT=${{ secrets.PRODUCT_PORT }}" > env/.env.prod
30+
echo "DB_TYPE=mysql" >> env/.env.prod
31+
echo "DB_DATABASE=${{ secrets.PRODUCT_DB_DATABASE }}" >> env/.env.prod
32+
echo "DB_HOST=${{ secrets.PRODUCT_DB_HOST }}" >> env/.env.prod
33+
echo "DB_PORT=${{ secrets.PRODUCT_DB_PORT }}" >> env/.env.prod
34+
echo "DB_USERNAME=${{ secrets.PRODUCT_DB_USERNAME }}" >> env/.env.prod
35+
echo "DB_PASSWORD=${{ secrets.PRODUCT_DB_PASSWORD }}" >> env/.env.prod
36+
echo "REDIS_HOST=${{secrets.REDIS_HOST }}" >> env/.env.prod
37+
echo "REDIS_PORT=${{secrets.REDIS_PORT}}" >> env/.env.prod
38+
echo "REDIS_USERNAME=${{secrets.REDIS_USERNAME}}" >> env/.env.prod
39+
echo "REDIS_PASSWORD=${{secrets.REDIS_PASSWORD}}" >> env/.env.prod
40+
echo "EMAIL_USER=${{secrets.EMAIL_USER}}" >> env/.env.prod
41+
echo "EMAIL_PASSWORD=${{secrets.EMAIL_PASSWORD}}" >> env/.env.prod
42+
echo "AI_API_KEY=${{secrets.AI_API_KEY}}" >> env/.env.prod
4643
47-
npm ci
48-
npm run build
49-
5044
cd /var/web05-Denamu
51-
pm2 delete all
52-
pm2 start ecosystem.config.js
45+
docker-compose -f docker-compose/docker-compose.prod.yml up --build -d app
46+
docker image prune -f

docker-compose/docker-compose.infra.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ services:
1414
- --collation-server=utf8mb4_unicode_ci
1515
- --skip-character-set-client-handshake
1616
environment:
17+
MYSQL_ROOT_HOST: localhost
1718
MYSQL_ROOT_PASSWORD: "denamu-db"
1819
MYSQL_DATABASE: "denamu"
1920
MYSQL_USER: "denamu-db-user"
2021
MYSQL_PASSWORD: "denamu-db-pw"
21-
MYSQL_ROOT_HOST: "%"
2222
healthcheck:
2323
test:
2424
[
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
services:
2+
# DB 서비스
3+
mysql-db:
4+
image: "mysql:8.0.39"
5+
ports:
6+
- "3306:3306"
7+
volumes:
8+
- denamu-mysql:/var/lib/mysql
9+
networks:
10+
- Denamu
11+
command:
12+
- --character-set-server=utf8mb4
13+
- --collation-server=utf8mb4_unicode_ci
14+
- --skip-character-set-client-handshake
15+
environment:
16+
MYSQL_ROOT_HOST: localhost
17+
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
18+
MYSQL_DATABASE: ${MYSQL_DATABASE}
19+
MYSQL_USER: ${MYSQL_USER}
20+
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
21+
healthcheck:
22+
test:
23+
[
24+
"CMD",
25+
"mysqladmin",
26+
"ping",
27+
"-h",
28+
"localhost",
29+
"-u",
30+
"root",
31+
"-p$MYSQL_PASSWORD",
32+
]
33+
interval: 10s
34+
timeout: 5s
35+
retries: 3
36+
37+
# Redis 서비스
38+
redis:
39+
image: "redis:6.0.16-alpine"
40+
ports:
41+
- "6379:6379"
42+
volumes:
43+
- denamu-redis:/data
44+
networks:
45+
- Denamu
46+
entrypoint:
47+
[
48+
"sh",
49+
"-c",
50+
"redis-server & sleep 5 && echo 'ACL SETUSER ${REDIS_USER} on >${REDIS_PASSWORD} allkeys allcommands' | redis-cli && tail -f /dev/null",
51+
]
52+
healthcheck:
53+
test: ["CMD", "redis-cli", "ping"]
54+
interval: 10s
55+
timeout: 5s
56+
retries: 3
57+
58+
volumes:
59+
denamu-mysql:
60+
denamu-redis:
61+
62+
networks:
63+
Denamu:
64+
driver: bridge
+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: denamu-production
2+
3+
include:
4+
- docker-compose.infra.yml
5+
6+
services:
7+
# WAS 서비스
8+
app:
9+
build:
10+
context: ../server
11+
dockerfile: docker/Dockerfile.local
12+
ports:
13+
- "8080:8080"
14+
networks:
15+
- Denamu
16+
depends_on:
17+
mysql-db:
18+
condition: service_healthy
19+
redis:
20+
condition: service_healthy
21+
volumes:
22+
- ../server/logs:/var/web05-Denamu/server/logs
23+
environment:
24+
NODE_ENV: "PROD"
25+
26+
# Feed Crawler 서비스
27+
feed-crawler:
28+
build:
29+
context: ../feed-crawler
30+
dockerfile: docker/Dockerfile.local
31+
networks:
32+
- Denamu
33+
depends_on:
34+
mysql-db:
35+
condition: service_healthy
36+
redis:
37+
condition: service_healthy
38+
volumes:
39+
- ../feed-crawler/logs:/var/web05-Denamu/feed-crawler/logs
40+
environment:
41+
NODE_ENV: "PROD"

feed-crawler/env/.env.local

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
DB_PORT=3306
12
DB_HOST=mysql-db
23
DB_NAME=denamu
34
DB_USER=denamu-db-user
45
DB_PASS=denamu-db-pw
5-
DB_TABLE=rss_accept
66
TIME_INTERVAL=30
77
REDIS_HOST=redis
88
REDIS_PORT=6379
99
REDIS_USERNAME=denamu-redis-user
10-
REDIS_PASSWORD=denamu-redis-pw
10+
REDIS_PASSWORD=denamu-redis-pw
11+
AI_API_KEY=?
12+
AI_RATE_LIMIT_COUNT=5

server/env/.env.local

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ REDIS_PORT=6379
1010
REDIS_USERNAME=denamu-redis-user
1111
REDIS_PASSWORD=denamu-redis-pw
1212
EMAIL_USER=?
13-
EMAIL_PASSWORD=?
13+
EMAIL_PASSWORD=?
14+
AI_API_KEY=?

0 commit comments

Comments
 (0)