-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
147 lines (139 loc) · 3.94 KB
/
docker-compose.yml
File metadata and controls
147 lines (139 loc) · 3.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
services:
subscription-db:
image: postgres:16
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- notification-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
# RabbitMQ Message Broker
rabbitmq:
image: rabbitmq:3-management
container_name: rabbitmq
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: admin
ports:
- "5672:5672"
- "15672:15672"
networks:
- notification-network
healthcheck:
test: rabbitmq-diagnostics -q ping
interval: 30s
timeout: 30s
retries: 3
# Subscription Server (base service, others depend on it)
subscription-server:
build:
context: .
dockerfile: apps/subscription-server/Dockerfile
container_name: subscription-server
ports:
- "3001:3003"
environment:
DATABASE_URL: postgresql://postgres:postgres@subscription-db:5432/postgres
PORT: 3003
# OAuth configuration for Slack
SLACK_CLIENT_ID: ${SLACK_CLIENT_ID:-}
SLACK_CLIENT_SECRET: ${SLACK_CLIENT_SECRET:-}
SLACK_REDIRECT_URI: ${SLACK_REDIRECT_URI:-}
TOKEN_ENCRYPTION_KEY: ${TOKEN_ENCRYPTION_KEY:-}
networks:
- notification-network
restart: unless-stopped
depends_on:
subscription-db:
condition: service_healthy
# Consumers (Telegram Bot + Slack Bot + RabbitMQ Consumer)
consumers:
build:
context: .
dockerfile: apps/consumers/Dockerfile
container_name: consumers
ports:
- "3003:3003"
environment:
TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN}
ANTICAPTURE_GRAPHQL_ENDPOINT: ${ANTICAPTURE_GRAPHQL_ENDPOINT}
BLOCKFUL_API_TOKEN: ${BLOCKFUL_API_TOKEN:-}
SLACK_SIGNING_SECRET: ${SLACK_SIGNING_SECRET}
SLACK_CHANNEL_ID: ${SLACK_CHANNEL_ID:-}
SUBSCRIPTION_SERVER_URL: http://subscription-server:3003
RABBITMQ_URL: amqp://admin:admin@rabbitmq:5672
TOKEN_ENCRYPTION_KEY: ${TOKEN_ENCRYPTION_KEY}
API_PORT_SLACK: 3002
depends_on:
subscription-server:
condition: service_started
rabbitmq:
condition: service_healthy
networks:
- notification-network
restart: unless-stopped
# Dispatcher
dispatcher:
build:
context: .
dockerfile: apps/dispatcher/Dockerfile
container_name: dispatcher
environment:
ANTICAPTURE_GRAPHQL_ENDPOINT: ${ANTICAPTURE_GRAPHQL_ENDPOINT}
BLOCKFUL_API_TOKEN: ${BLOCKFUL_API_TOKEN:-}
RABBITMQ_URL: amqp://admin:admin@rabbitmq:5672
SUBSCRIPTION_SERVER_URL: http://subscription-server:3003
depends_on:
subscription-server:
condition: service_started
rabbitmq:
condition: service_healthy
networks:
- notification-network
restart: unless-stopped
# Logic System (worker, no ports exposed)
logic-system:
build:
context: .
dockerfile: apps/logic-system/Dockerfile
container_name: logic-system
environment:
ANTICAPTURE_GRAPHQL_ENDPOINT: ${ANTICAPTURE_GRAPHQL_ENDPOINT}
BLOCKFUL_API_TOKEN: ${BLOCKFUL_API_TOKEN:-}
RABBITMQ_URL: amqp://admin:admin@rabbitmq:5672
TRIGGER_INTERVAL: 10000
PROPOSAL_STATUS: ACTIVE
depends_on:
rabbitmq:
condition: service_healthy
networks:
- notification-network
restart: unless-stopped
# Caddy reverse proxy for HTTPS (local development only)
caddy:
image: caddy:alpine
container_name: caddy-https
ports:
- "443:443" # HTTPS
- "80:80" # HTTP (optional, redirects to HTTPS)
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
networks:
- notification-network
depends_on:
- subscription-server
networks:
notification-network:
driver: bridge
volumes:
postgres_data:
driver: local