-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
133 lines (123 loc) · 4.06 KB
/
Copy pathdocker-compose.yml
File metadata and controls
133 lines (123 loc) · 4.06 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
# =============================================================================
# Named volumes — data persists across container restarts
# =============================================================================
volumes:
pgdata:
redisdata:
rmqdata:
# =============================================================================
# Services
# =============================================================================
services:
# ---------------------------------------------------------------------------
# PostgreSQL 16
# ---------------------------------------------------------------------------
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: github_int
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- "127.0.0.1:5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
# ---------------------------------------------------------------------------
# Redis 7
# ---------------------------------------------------------------------------
redis:
image: redis:7-alpine
restart: unless-stopped
ports:
- "127.0.0.1:6379:6379"
volumes:
- redisdata:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
# ---------------------------------------------------------------------------
# RabbitMQ 3 (with management UI on :15672)
# ---------------------------------------------------------------------------
rabbitmq:
image: rabbitmq:3-management-alpine
restart: unless-stopped
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
ports:
- "127.0.0.1:5672:5672"
- "127.0.0.1:15672:15672"
volumes:
- rmqdata:/var/lib/rabbitmq
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "ping"]
interval: 15s
timeout: 10s
retries: 5
start_period: 30s
# ---------------------------------------------------------------------------
# Mailpit — local SMTP server + web UI for email testing
# ---------------------------------------------------------------------------
mailpit:
image: axllent/mailpit:latest
restart: unless-stopped
ports:
- "127.0.0.1:1025:1025" # SMTP (app → mailpit)
- "8025:8025" # Web UI (open in browser)
environment:
MP_MAX_MESSAGES: 500
# ---------------------------------------------------------------------------
# GitHub Integration Service
# ---------------------------------------------------------------------------
app:
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
rabbitmq:
condition: service_healthy
ports:
- "8080:8080"
# Mount the config file as read-only; env vars below override specific keys
# via viper's AutomaticEnv (key replacer: "." → "_", uppercased).
volumes:
- ./config.yaml:/app/config.yaml:ro
environment:
# --- Database (overrides config.yaml database.host) ---
DATABASE_HOST: postgres
DATABASE_PORT: "5432"
DATABASE_NAME: github_int
DATABASE_USER: postgres
DATABASE_PASSWORD: postgres
DATABASE_SSLMODE: disable
# --- Redis (overrides config.yaml redis.addr) ---
REDIS_ADDR: redis:6379
REDIS_PASSWORD: ""
REDIS_DB: "0"
# --- RabbitMQ (overrides config.yaml rabbitmq.url) ---
RABBITMQ_URL: amqp://guest:guest@rabbitmq:5672/
RABBITMQ_EXCHANGE: github.events
RABBITMQ_ROUTING_KEY: pull_request.created
RABBITMQ_QUEUE: email.pr.notifications
# --- SMTP (Mailpit) ---
SMTP_HOST: mailpit
SMTP_PORT: "1025"
SMTP_FROM: noreply@github-integration.local
# --- Server ---
SERVER_PORT: "8080"
SERVER_ENV: production