Skip to content

Commit 547ceae

Browse files
authored
Merge pull request #515 from Jo-Minseok/main
📦 chore: mysql exporter, rabbitmq exporter 오류 수정 및 포트 비공개화
2 parents c90b504 + 0dc0e93 commit 547ceae

17 files changed

+194
-245
lines changed

.github/workflows/deploy_email-worker.yml

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Email-Worker Deployment
33
on:
44
push:
55
branches: [main]
6-
paths: ['email-worker/**']
6+
paths: ['email-worker/**', 'docker-compose/docker-compose.prod.yml']
77
workflow_dispatch:
88

99
permissions:
@@ -15,10 +15,10 @@ env:
1515
EMAIL_WORKER_IMAGE: ${{ vars.GHCR }}/email-worker
1616
EMAIL_WORKER_TAG: sha-${{ github.sha }}
1717
SERVICE: email-worker
18-
ENV_DIR: /var/prod_config/email-worker
19-
ENV_FILE: /var/prod_config/email-worker/.env.prod
18+
EMAIL-WORKER_ENV_DIR: /var/prod_config/email-worker
19+
EMAIL-WORKER_ENV_FILE: /var/prod_config/email-worker/.env.prod
20+
INFRA_ENV_FILE: /var/prod_config/infra/.env.prod
2021
COMPOSE_FILE: docker-compose/docker-compose.prod.yml
21-
STOP_GRACE_PERIOD: 30
2222

2323
jobs:
2424
build-and-push:
@@ -68,47 +68,25 @@ jobs:
6868

6969
- name: 환경변수 최신화
7070
run: |
71-
sudo mkdir -p "$ENV_DIR"
72-
sudo install -m 600 /dev/null "$ENV_FILE"
71+
sudo mkdir -p "${{env.EMAIL-WORKER_ENV_DIR}}"
72+
sudo install -m 600 /dev/null "${{env.EMAIL-WORKER_ENV_FILE}}"
7373
{
7474
echo "EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }}"
7575
echo "EMAIL_USER=${{ secrets.EMAIL_USER }}"
7676
echo "RABBITMQ_HOST=${{ secrets.RABBITMQ_HOST }}"
7777
echo "RABBITMQ_PASSWORD=${{ secrets.RABBITMQ_PASSWORD }}"
7878
echo "RABBITMQ_PORT=${{ secrets.RABBITMQ_PORT }}"
7979
echo "RABBITMQ_USER=${{ secrets.RABBITMQ_USER }}"
80-
} | sudo tee "$ENV_FILE" >/dev/null
81-
82-
# 인프라용 환경변수 파일 생성 (Redis, MySQL 등)
83-
sudo mkdir -p /var/prod_config/infra
84-
sudo install -m 600 /dev/null /var/prod_config/infra/.env.prod
85-
{
86-
echo "MYSQL_ROOT_HOST=localhost" # MYSQL
87-
echo "MYSQL_DATABASE=${{ secrets.DB_NAME }}" # MYSQL
88-
echo "MYSQL_PASSWORD=${{ secrets.DB_PASSWORD }}" # MYSQL, MYSQL Exporter
89-
echo "MYSQL_PORT=${{ secrets.DB_PORT}}" # MYSQL, MYSQL Exporter
90-
echo "MYSQL_ROOT_PASSWORD=${{ secrets.DB_ROOT_PASSWORD }}" # MYSQL
91-
echo "MYSQL_USER=${{ secrets.DB_USER }}" # MYSQL, MYSQL Exporter
92-
echo "REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}" # Redis
93-
echo "REDIS_USER=${{ secrets.REDIS_USER }}" # Redis, Redis Exporter
94-
echo "REDIS_ADDR=${{ secrets.REDIS_ADDR }}" # Redis Exporter
95-
echo "RABBITMQ_HOST=${{ secrets.RABBITMQ_HOST }}" # RabbitMQ
96-
echo "RABBIT_PASSWORD=${{ secrets.RABBITMQ_PASSWORD }}" # RabbitMQ Exporter
97-
echo "RABBITMQ_DEFAULT_PASS=${{ secrets.RABBITMQ_PASSWORD }}" # RabbitMQ
98-
echo "RABBITMQ_PORT=${{ secrets.RABBITMQ_PORT }}" # RabbitMQ
99-
echo "RABBIT_USER=${{ secrets.RABBITMQ_USER }}" # RabbitMQ Exporter
100-
echo "RABBITMQ_DEFAULT_USER=${{ secrets.RABBITMQ_USER }}" # RabbitMQ
101-
echo "RABBIT_URL=http://${{ secrets.RABBITMQ_HOST }}:${{ secrets.RABBITMQ_PORT }}" # RabbitMQ Exporter
102-
echo "TZ=Asia/Seoul" # ALL
103-
} | sudo tee /var/prod_config/infra/.env.prod >/dev/null
104-
105-
- name: Docker 이미지 Pull
106-
run: |
107-
docker pull "$EMAIL_WORKER_IMAGE:latest" || true
108-
docker compose -f "$COMPOSE_FILE" pull "$SERVICE"
80+
} | sudo tee "${{env.EMAIL-WORKER_ENV_FILE}}" >/dev/null
10981
11082
- name: Graceful Shutdown & 서비스 재시작
11183
run: |
112-
docker compose -f "$COMPOSE_FILE" stop -t $STOP_GRACE_PERIOD "$SERVICE" || true
113-
docker compose -f "$COMPOSE_FILE" up -d --no-deps --force-recreate "$SERVICE"
114-
docker image prune -f || true
84+
set -a
85+
source ${{ env.EMAIL-WORKER_ENV_FILE }}
86+
source ${{ env.INFRA_ENV_FILE }}
87+
set +a
88+
89+
docker compose -f "${{env.COMPOSE_FILE}}" pull "${{env.SERVICE}}"
90+
docker compose -f "${{env.COMPOSE_FILE}}" stop "${{env.SERVICE}}"
91+
docker compose -f "${{env.COMPOSE_FILE}}" up -d --no-deps --force-recreate "${{env.SERVICE}}"
92+
docker image prune -f

.github/workflows/deploy_feed-crawler.yml

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Feed-Crawler Deployment
33
on:
44
push:
55
branches: [main]
6-
paths: ['feed-crawler/**']
6+
paths: ['feed-crawler/**', 'docker-compose/docker-compose.prod.yml']
77
workflow_dispatch:
88

99
permissions:
@@ -15,8 +15,9 @@ env:
1515
FEED_CRAWLER_IMAGE: ${{ vars.GHCR }}/feed-crawler
1616
FEED_CRAWLER_TAG: sha-${{ github.sha }}
1717
SERVICE: feed-crawler
18-
ENV_DIR: /var/prod_config/feed-crawler
19-
ENV_FILE: /var/prod_config/feed-crawler/.env.prod
18+
FEED-CRAWLER_ENV_DIR: /var/prod_config/feed-crawler
19+
FEED-CRAWLER_ENV_FILE: /var/prod_config/feed-crawler/.env.prod
20+
INFRA_ENV_FILE: /var/prod_config/infra/.env.prod
2021
COMPOSE_FILE: docker-compose/docker-compose.prod.yml
2122

2223
jobs:
@@ -67,8 +68,8 @@ jobs:
6768

6869
- name: 환경변수 최신화
6970
run: |
70-
sudo mkdir -p "$ENV_DIR"
71-
sudo install -m 600 /dev/null "$ENV_FILE"
71+
sudo mkdir -p "${{env.FEED-CRAWLER_ENV_DIR}}"
72+
sudo install -m 600 /dev/null "${{env.FEED-CRAWLER_ENV_FILE}}"
7273
{
7374
echo "AI_API_KEY=${{ secrets.AI_API_KEY }}"
7475
echo "DB_HOST=${{ secrets.DB_HOST }}"
@@ -86,34 +87,15 @@ jobs:
8687
echo "REDIS_USER=${{ secrets.REDIS_USER }}"
8788
echo "TIME_INTERVAL=${{ vars.FEED_CRAWLER_TIME_INTERVAL }}"
8889
echo "AI_RATE_LIMIT_COUNT=${{ vars.AI_RATE_LIMIT_COUNT }}"
89-
} | sudo tee "$ENV_FILE" >/dev/null
90-
91-
# 인프라용 환경변수 파일 생성 (Redis, MySQL 등)
92-
sudo mkdir -p /var/prod_config/infra
93-
sudo install -m 600 /dev/null /var/prod_config/infra/.env.prod
94-
{
95-
echo "MYSQL_ROOT_HOST=localhost" # MYSQL
96-
echo "MYSQL_DATABASE=${{ secrets.DB_NAME }}" # MYSQL
97-
echo "MYSQL_PASSWORD=${{ secrets.DB_PASSWORD }}" # MYSQL, MYSQL Exporter
98-
echo "MYSQL_PORT=${{ secrets.DB_PORT}}" # MYSQL, MYSQL Exporter
99-
echo "MYSQL_ROOT_PASSWORD=${{ secrets.DB_ROOT_PASSWORD }}" # MYSQL
100-
echo "MYSQL_USER=${{ secrets.DB_USER }}" # MYSQL, MYSQL Exporter
101-
echo "REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}" # Redis
102-
echo "REDIS_USER=${{ secrets.REDIS_USER }}" # Redis, Redis Exporter
103-
echo "REDIS_ADDR=${{ secrets.REDIS_ADDR }}" # Redis Exporter
104-
echo "RABBITMQ_HOST=${{ secrets.RABBITMQ_HOST }}" # RabbitMQ
105-
echo "RABBIT_PASSWORD=${{ secrets.RABBITMQ_PASSWORD }}" # RabbitMQ Exporter
106-
echo "RABBITMQ_DEFAULT_PASS=${{ secrets.RABBITMQ_PASSWORD }}" # RabbitMQ
107-
echo "RABBITMQ_PORT=${{ secrets.RABBITMQ_PORT }}" # RabbitMQ
108-
echo "RABBIT_USER=${{ secrets.RABBITMQ_USER }}" # RabbitMQ Exporter
109-
echo "RABBITMQ_DEFAULT_USER=${{ secrets.RABBITMQ_USER }}" # RabbitMQ
110-
echo "RABBIT_URL=http://${{ secrets.RABBITMQ_HOST }}:${{ secrets.RABBITMQ_PORT }}" # RabbitMQ Exporter
111-
echo "TZ=Asia/Seoul" # ALL
112-
} | sudo tee /var/prod_config/infra/.env.prod >/dev/null
90+
} | sudo tee "${{env.FEED-CRAWLER_ENV_FILE}}" >/dev/null
11391
11492
- name: Docker 이미지 Pull & 서비스 재시작
11593
run: |
116-
docker pull "$FEED_CRAWLER_IMAGE:latest" || true
117-
docker compose -f "$COMPOSE_FILE" pull "$SERVICE"
118-
docker compose -f "$COMPOSE_FILE" up -d --no-deps --force-recreate "$SERVICE"
119-
docker image prune -f || true
94+
set -a
95+
source ${{ env.FEED-CRAWLER_ENV_FILE }}
96+
source ${{ env.INFRA_ENV_FILE }}
97+
set +a
98+
99+
docker compose -f "${{env.COMPOSE_FILE}}" pull "${{env.SERVICE}}"
100+
docker compose -f "${{env.COMPOSE_FILE}}" up -d --no-deps --force-recreate "${{env.SERVICE}}"
101+
docker image prune -f

.github/workflows/deploy_infra.yml

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ on:
55
branches:
66
- main
77
paths:
8-
- docker-compose/docker-compose.prod*.yml
8+
- docker-compose/docker-compose.prod.infra.yml
99
workflow_dispatch:
1010

1111
env:
1212
GHCR_URL: ${{ vars.GHCR }}
1313
COMPOSE_FILE: docker-compose/docker-compose.prod.yml
14+
INFRA_ENV_FILE: /var/prod_config/infra/.env.prod
15+
INFRA_ENV_DIR: /var/prod_config/infra
1416

1517
jobs:
1618
deployment:
@@ -28,44 +30,44 @@ jobs:
2830

2931
- name: 인프라 환경변수 및 설정 파일 최신화
3032
run: |
31-
sudo mkdir -p /var/prod_config/infra
32-
sudo install -m 600 /dev/null /var/prod_config/infra/.env.prod
33+
sudo mkdir -p "${{env.INFRA_ENV_DIR}}"
34+
sudo install -m 600 /dev/null "${{env.INFRA_ENV_FILE}}"
3335
{
3436
echo "MYSQL_ROOT_HOST=localhost" # MYSQL
37+
echo "MYSQL_HOST=${{ secrets.DB_HOST }}" # MYSQL Exporter
38+
echo "MYSQL_METRIC_PORT=${{ secrets.DB_METRIC_PORT }}" # MYSQL Exporter
3539
echo "MYSQL_DATABASE=${{ secrets.DB_NAME }}" # MYSQL
36-
echo "MYSQL_PASSWORD=${{ secrets.DB_PASSWORD }}" # MYSQL, MYSQL Exporter
37-
echo "MYSQL_PORT=${{ secrets.DB_PORT}}" # MYSQL, MYSQL Exporter
40+
echo "MYSQL_PASSWORD=${{ secrets.DB_PASSWORD }}" # MYSQL
41+
echo "MYSQL_PORT=${{ secrets.DB_PORT }}" # MYSQL
3842
echo "MYSQL_ROOT_PASSWORD=${{ secrets.DB_ROOT_PASSWORD }}" # MYSQL
39-
echo "MYSQL_USER=${{ secrets.DB_USER }}" # MYSQL, MYSQL Exporter
40-
echo "REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}" # Redis
41-
echo "REDIS_USER=${{ secrets.REDIS_USER }}" # Redis, Redis Exporter
42-
echo "REDIS_ADDR=${{ secrets.REDIS_ADDR }}" # Redis Exporter
43+
echo "MYSQL_USER=${{ secrets.DB_USER }}" # MYSQL
44+
echo "GRAFANA_PORT=${{ secrets.GRAFANA_PORT }}" # Grafana
45+
echo "NODE_METRIC_PORT=${{ secrets.NODE_METRIC_PORT }}" # Node Exporter
46+
echo "PROMETHEUS_PORT=${{ secrets.PROMETHEUS_PORT }}" # Prometheus
4347
echo "RABBITMQ_HOST=${{ secrets.RABBITMQ_HOST }}" # RabbitMQ
44-
echo "RABBIT_PASSWORD=${{ secrets.RABBITMQ_PASSWORD }}" # RabbitMQ Exporter
4548
echo "RABBITMQ_DEFAULT_PASS=${{ secrets.RABBITMQ_PASSWORD }}" # RabbitMQ
4649
echo "RABBITMQ_PORT=${{ secrets.RABBITMQ_PORT }}" # RabbitMQ
47-
echo "RABBIT_USER=${{ secrets.RABBITMQ_USER }}" # RabbitMQ Exporter
50+
echo "RABBITMQ_METRIC_PORT=${{ secrets.RABBITMQ_METRIC_PORT }}" # RabbitMQ
4851
echo "RABBITMQ_DEFAULT_USER=${{ secrets.RABBITMQ_USER }}" # RabbitMQ
49-
echo "RABBIT_URL=http://${{ secrets.RABBITMQ_HOST }}:${{ secrets.RABBITMQ_PORT }}" # RabbitMQ Exporter
52+
echo "REDIS_HOST=${{ secrets.REDIS_HOST }}" # Redis, Redis Exporter
53+
echo "REDIS_METRIC_PORT=${{ secrets.REDIS_METRIC_PORT }}" # Redis Exporter
54+
echo "REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}" # Redis
55+
echo "REDIS_PORT=${{ secrets.REDIS_PORT }}" # Redis, Redis Exporter
56+
echo "REDIS_USER=${{ secrets.REDIS_USER }}" # Redis, Redis Exporter
57+
echo "REDIS_ADDR=redis://${{ secrets.REDIS_HOST }}:${{ secrets.REDIS_PORT }}" # Redis Exporter
58+
echo "SERVER_PORT=${{ secrets.SERVER_PORT}}" # Server Port
5059
echo "TZ=Asia/Seoul" # ALL
51-
} | sudo tee /var/prod_config/infra/.env.prod >/dev/null
60+
} | sudo tee "${{env.INFRA_ENV_FILE}}" >/dev/null
5261
53-
sudo chmod +x docker-compose/redis-init.sh
62+
sudo chmod +x docker-compose/redis/redis-init.sh
5463
5564
- name: 인프라 서비스 재시작
5665
run: |
57-
echo "=== 환경변수 확인 ==="
58-
echo "GHCR_URL: $GHCR_URL"
59-
echo "COMPOSE_FILE: $COMPOSE_FILE"
60-
61-
echo "=== docker-compose config 미리보기 ==="
62-
docker compose -f "$COMPOSE_FILE" config | grep "image:"
66+
set -a
67+
source ${{ env.INFRA_ENV_FILE }}
68+
set +a
6369
6470
echo "=== 실제 배포 시작 ==="
65-
docker compose -f "$COMPOSE_FILE" down
66-
docker compose -f "$COMPOSE_FILE" up -d
67-
docker image prune -f || true
68-
69-
docker compose -f "$COMPOSE_FILE" down
70-
docker compose -f "$COMPOSE_FILE" up -d
71-
docker image prune -f || true
71+
docker compose -f "${{env.COMPOSE_FILE}}" down
72+
docker compose -f "${{env.COMPOSE_FILE}}" up -d
73+
docker image prune -f

.github/workflows/deploy_server.yml

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: BE Deployment
33
on:
44
push:
55
branches: [main]
6-
paths: ['server/**']
6+
paths: ['server/**', 'docker-compose/docker-compose.prod.yml']
77
workflow_dispatch:
88

99
permissions:
@@ -15,8 +15,9 @@ env:
1515
APP_IMAGE: ${{ vars.GHCR }}/server
1616
APP_TAG: sha-${{ github.sha }}
1717
SERVICE: app
18-
ENV_DIR: /var/prod_config/server
19-
ENV_FILE: /var/prod_config/server/.env.prod
18+
SERVER_ENV_DIR: /var/prod_config/server
19+
SERVER_ENV_FILE: /var/prod_config/server/.env.prod
20+
INFRA_ENV_FILE: /var/prod_config/infra/.env.prod
2021
COMPOSE_FILE: docker-compose/docker-compose.prod.yml
2122

2223
jobs:
@@ -67,8 +68,8 @@ jobs:
6768

6869
- name: 환경변수 최신화
6970
run: |
70-
sudo mkdir -p "$ENV_DIR"
71-
sudo install -m 600 /dev/null "$ENV_FILE"
71+
sudo mkdir -p "${{env.SERVER_ENV_DIR}}"
72+
sudo install -m 600 /dev/null "${{env.SERVER_ENV_FILE}}"
7273
{
7374
echo "DB_HOST=${{ secrets.DB_HOST }}"
7475
echo "DB_NAME=${{ secrets.DB_NAME }}"
@@ -93,34 +94,15 @@ jobs:
9394
echo "REDIS_PORT=${{ secrets.REDIS_PORT }}"
9495
echo "REDIS_USER=${{ secrets.REDIS_USER }}"
9596
echo "SERVER_PORT=${{ secrets.SERVER_PORT }}"
96-
} | sudo tee "$ENV_FILE" >/dev/null
97-
98-
# 인프라용 환경변수 파일 생성 (Redis, MySQL 등)
99-
sudo mkdir -p /var/prod_config/infra
100-
sudo install -m 600 /dev/null /var/prod_config/infra/.env.prod
101-
{
102-
echo "MYSQL_ROOT_HOST=localhost" # MYSQL
103-
echo "MYSQL_DATABASE=${{ secrets.DB_NAME }}" # MYSQL
104-
echo "MYSQL_PASSWORD=${{ secrets.DB_PASSWORD }}" # MYSQL, MYSQL Exporter
105-
echo "MYSQL_PORT=${{ secrets.DB_PORT}}" # MYSQL, MYSQL Exporter
106-
echo "MYSQL_ROOT_PASSWORD=${{ secrets.DB_ROOT_PASSWORD }}" # MYSQL
107-
echo "MYSQL_USER=${{ secrets.DB_USER }}" # MYSQL, MYSQL Exporter
108-
echo "REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}" # Redis
109-
echo "REDIS_USER=${{ secrets.REDIS_USER }}" # Redis, Redis Exporter
110-
echo "REDIS_ADDR=${{ secrets.REDIS_ADDR }}" # Redis Exporter
111-
echo "RABBITMQ_HOST=${{ secrets.RABBITMQ_HOST }}" # RabbitMQ
112-
echo "RABBIT_PASSWORD=${{ secrets.RABBITMQ_PASSWORD }}" # RabbitMQ Exporter
113-
echo "RABBITMQ_DEFAULT_PASS=${{ secrets.RABBITMQ_PASSWORD }}" # RabbitMQ
114-
echo "RABBITMQ_PORT=${{ secrets.RABBITMQ_PORT }}" # RabbitMQ
115-
echo "RABBIT_USER=${{ secrets.RABBITMQ_USER }}" # RabbitMQ Exporter
116-
echo "RABBITMQ_DEFAULT_USER=${{ secrets.RABBITMQ_USER }}" # RabbitMQ
117-
echo "RABBIT_URL=http://${{ secrets.RABBITMQ_HOST }}:${{ secrets.RABBITMQ_PORT }}" # RabbitMQ Exporter
118-
echo "TZ=Asia/Seoul" # ALL
119-
} | sudo tee /var/prod_config/infra/.env.prod >/dev/null
97+
} | sudo tee "${{env.SERVER_ENV_FILE}}" >/dev/null
12098
12199
- name: Docker 이미지 Pull & 서비스 재시작
122100
run: |
123-
docker pull "$APP_IMAGE:latest" || true
124-
docker compose -f "$COMPOSE_FILE" pull "$SERVICE"
125-
docker compose -f "$COMPOSE_FILE" up -d --no-deps --force-recreate "$SERVICE"
126-
docker image prune -f || true
101+
set -a
102+
source ${{ env.SERVER_ENV_FILE }}
103+
source ${{ env.INFRA_ENV_FILE }}
104+
set +a
105+
106+
docker compose -f "${{env.COMPOSE_FILE}}" pull "${{env.SERVICE}}"
107+
docker compose -f "${{env.COMPOSE_FILE}}" up -d --no-deps --force-recreate "${{env.SERVICE}}"
108+
docker image prune -f

0 commit comments

Comments
 (0)