Skip to content

Commit b5266ac

Browse files
authored
Merge pull request #476 from boostcampwm-2024/chore/setting-rabbitmq-dev-and-local
📦 chore: RabbitMQ docker compose 및 WAS/Feed-Crawler에서의 연결 설정
2 parents af726b0 + 941bdd9 commit b5266ac

21 files changed

+400
-2
lines changed

.github/workflows/deploy_infra.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ jobs:
2929
echo "MYSQL_DATABASE=${{ secrets.PRODUCT_DB_DATABASE }}"
3030
echo "MYSQL_USER=${{ secrets.PRODUCT_DB_USERNAME }}"
3131
echo "MYSQL_PASSWORD=${{ secrets.PRODUCT_DB_PASSWORD }}"
32+
echo "RABBITMQ_USERNAME=${{ secrets.PRODUCT_RABBITMQ_USERNAME }}"
33+
echo "RABBITMQ_PASSWORD=${{ secrets.PRODUCT_RABBITMQ_PASSWORD }}"
34+
echo "RABBITMQ_HOST=${{ secrets.PRODUCT_RABBITMQ_HOST }}"
35+
echo "RABBITMQ_PORT=${{ secrets.PRODUCT_RABBITMQ_PORT }}"
36+
echo "RABBITMQ_MANAGEMENT_PORT=${{ secrets.PRODUCT_RABBITMQ_MANAGEMENT_PORT }}"
3237
} | sudo tee /var/prod_config/infra/.env.prod >/dev/null
3338
3439
- name: 인프라 서비스 재시작

.github/workflows/deploy_server.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@ jobs:
102102
echo "MYSQL_DATABASE=${{ secrets.PRODUCT_DB_DATABASE }}"
103103
echo "MYSQL_USER=${{ secrets.PRODUCT_DB_USERNAME }}"
104104
echo "MYSQL_PASSWORD=${{ secrets.PRODUCT_DB_PASSWORD }}"
105+
echo "RABBITMQ_USERNAME=${{ secrets.PRODUCT_RABBITMQ_USERNAME }}"
106+
echo "RABBITMQ_PASSWORD=${{ secrets.PRODUCT_RABBITMQ_PASSWORD }}"
107+
echo "RABBITMQ_HOST=${{ secrets.PRODUCT_RABBITMQ_HOST }}"
108+
echo "RABBITMQ_PORT=${{ secrets.PRODUCT_RABBITMQ_PORT }}"
109+
echo "RABBITMQ_MANAGEMENT_PORT=${{ secrets.PRODUCT_RABBITMQ_MANAGEMENT_PORT }}"
105110
} | sudo tee /var/prod_config/infra/.env.prod >/dev/null
106111
107112
- name: Docker 이미지 Pull & 서비스 재시작

docker-compose/docker-compose.dev.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ services:
6868
condition: service_healthy
6969
redis:
7070
condition: service_healthy
71+
rabbitmq:
72+
condition: service_healthy
7173
volumes:
7274
- ../server:/var/web05-Denamu/server
7375
- /var/web05-Denamu/server/node_modules
@@ -94,6 +96,8 @@ services:
9496
condition: service_healthy
9597
redis:
9698
condition: service_healthy
99+
rabbitmq:
100+
condition: service_healthy
97101
volumes:
98102
- ../feed-crawler:/var/web05-Denamu/feed-crawler
99103
- /var/web05-Denamu/feed-crawler/node_modules

docker-compose/docker-compose.infra.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,32 @@ services:
6363
profiles:
6464
- was-dev
6565

66+
# RabbitMQ 서비스
67+
rabbitmq:
68+
image: rabbitmq:4.1-management
69+
networks:
70+
- Denamu
71+
ports:
72+
- "5672:5672" #AMQP 프로토콜 포트
73+
- "15672:15672" # Management UI 포트
74+
environment:
75+
RABBITMQ_DEFAULT_USER: "denamu-rabbitmq-user"
76+
RABBITMQ_DEFAULT_PASS: "denamu-rabbitmq-password"
77+
volumes:
78+
- denamu-rabbitmq:/var/lib/rabbitmq
79+
healthcheck:
80+
test: [ "CMD", "rabbitmq-diagnostics", "ping" ]
81+
interval: 30s
82+
timeout: 10s
83+
retries: 3
84+
start_period: 40s
85+
profiles:
86+
- was-dev
87+
6688
volumes:
6789
denamu-mysql:
6890
denamu-redis:
91+
denamu-rabbitmq:
6992

7093
networks:
7194
Denamu:

docker-compose/docker-compose.prod.infra.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,28 @@ services:
7979
environment:
8080
TZ: "Asia/Seoul"
8181

82+
# RabbitMQ 서비스
83+
rabbitmq:
84+
image: rabbitmq:4.1-management
85+
networks:
86+
- Denamu
87+
ports:
88+
- "5672:5672"
89+
- "15672:15672"
90+
env_file:
91+
- /var/prod_config/infra/.env.prod
92+
environment:
93+
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USERNAME}
94+
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
95+
volumes:
96+
- denamu-rabbitmq:/var/lib/rabbitmq
97+
healthcheck:
98+
test: [ "CMD", "rabbitmq-diagnostics", "ping" ]
99+
interval: 30s
100+
timeout: 10s
101+
retries: 3
102+
start_period: 40s
103+
82104
# Redis Metrics
83105
redis_metrics:
84106
image: oliver006/redis_exporter
@@ -147,6 +169,7 @@ services:
147169
volumes:
148170
denamu-mysql:
149171
denamu-redis:
172+
denamu-rabbitmq:
150173
denamu-prometheus:
151174
denamu-grafana:
152175

docker-compose/docker-compose.prod.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ services:
1818
condition: service_healthy
1919
redis:
2020
condition: service_healthy
21+
rabbitmq:
22+
condition: service_healthy
2123
volumes:
2224
- /var/prod_data/server/logs:/app/logs
2325
- /var/prod_data/objects:/app/objects
@@ -37,6 +39,8 @@ services:
3739
condition: service_healthy
3840
redis:
3941
condition: service_healthy
42+
rabbitmq:
43+
condition: service_healthy
4044
volumes:
4145
- /var/prod_data/feed-crawler/logs:/app/logs
4246
environment:

feed-crawler/env/.env.local

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,8 @@ REDIS_PORT=6379
99
REDIS_USERNAME=denamu-redis-user
1010
REDIS_PASSWORD=denamu-redis-pw
1111
AI_API_KEY=?
12-
AI_RATE_LIMIT_COUNT=5
12+
AI_RATE_LIMIT_COUNT=5
13+
RABBITMQ_USERNAME=denamu-rabbitmq-user
14+
RABBITMQ_PASSWORD=denamu-rabbitmq-password
15+
RABBITMQ_HOST=rabbitmq
16+
RABBITMQ_PORT=5672

feed-crawler/package-lock.json

Lines changed: 53 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

feed-crawler/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"dependencies": {
33
"@anthropic-ai/sdk": "^0.36.3",
4+
"amqplib": "^0.10.9",
45
"cross-env": "^7.0.3",
56
"dotenv": "^16.4.5",
67
"fast-xml-parser": "^4.5.0",
@@ -16,6 +17,7 @@
1617
},
1718
"devDependencies": {
1819
"@testcontainers/mysql": "^10.25.0",
20+
"@types/amqplib": "^0.10.7",
1921
"@types/jest": "^29.5.2",
2022
"@types/node": "^22.9.0",
2123
"@types/node-fetch": "^2.6.11",
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { injectable } from 'tsyringe';
2+
import * as amqp from 'amqplib';
3+
import { Channel, ChannelModel } from 'amqplib';
4+
5+
@injectable()
6+
export class RabbitMQConnection {
7+
private connection: ChannelModel;
8+
private channel: Channel;
9+
private nameTag: string;
10+
11+
constructor() {
12+
this.nameTag = '[RabbitMQ]';
13+
this.connect();
14+
}
15+
16+
async connect() {
17+
this.connection = await amqp.connect({
18+
protocol: 'amqp',
19+
hostname: process.env.RABBITMQ_HOST,
20+
port: Number.parseInt(process.env.RABBITMQ_PORT),
21+
username: process.env.RABBITMQ_USERNAME,
22+
password: process.env.RABBITMQ_PASSWORD,
23+
});
24+
}
25+
}

0 commit comments

Comments
 (0)