-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcompose.yaml
More file actions
151 lines (143 loc) · 4.61 KB
/
Copy pathcompose.yaml
File metadata and controls
151 lines (143 loc) · 4.61 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
148
149
150
151
# Fastify 5 + PostgreSQL + OpenTelemetry Example
# Docker Compose Configuration | Jan 2026
services:
# ==========================================================================
# Database Migration (runs once before app starts)
# ==========================================================================
db-migrate:
build:
context: .
target: runtime
command: ["node", "dist/db/migrate.js"]
environment:
DATABASE_URL: postgresql://postgres:postgres@postgres:5432/fastify_app
depends_on:
postgres:
condition: service_healthy
networks:
- app-network
# ==========================================================================
# Fastify Application
# ==========================================================================
app:
build:
context: .
target: runtime
ports:
- "3000:3000"
environment:
NODE_ENV: development
PORT: "3000"
LOG_LEVEL: debug
JWT_SECRET: dev-secret-key-change-in-production-must-be-32-chars
JWT_EXPIRES_IN: 7d
DATABASE_URL: postgresql://postgres:postgres@postgres:5432/fastify_app
REDIS_URL: redis://redis:6379
OTEL_SERVICE_NAME: fastify-postgres-app
OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4318
OTEL_RESOURCE_ATTRIBUTES: deployment.environment=${SCOUT_ENVIRONMENT:-development},service.namespace=examples
depends_on:
db-migrate:
condition: service_completed_successfully
redis:
condition: service_healthy
otel-collector:
condition: service_started
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
networks:
- app-network
# ==========================================================================
# BullMQ Worker
# ==========================================================================
worker:
build:
context: .
target: runtime
command: ["node", "dist/jobs/worker.js"]
environment:
NODE_ENV: development
LOG_LEVEL: debug
DATABASE_URL: postgresql://postgres:postgres@postgres:5432/fastify_app
REDIS_URL: redis://redis:6379
OTEL_SERVICE_NAME: fastify-postgres-worker
OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4318
OTEL_RESOURCE_ATTRIBUTES: deployment.environment=${SCOUT_ENVIRONMENT:-development},service.namespace=examples
depends_on:
db-migrate:
condition: service_completed_successfully
redis:
condition: service_healthy
otel-collector:
condition: service_started
networks:
- app-network
# ==========================================================================
# PostgreSQL 18 Database (Jan 2026)
# ==========================================================================
postgres:
image: postgres:18.1-alpine3.23
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: fastify_app
volumes:
- postgres_data:/var/lib/postgresql
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
networks:
- app-network
# ==========================================================================
# Redis 8.4 (Jan 2026)
# ==========================================================================
redis:
image: redis:8.4.0-alpine3.22
volumes:
- redis_data:/data
ports:
- "6379:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 5
networks:
- app-network
# ==========================================================================
# OpenTelemetry Collector (Jan 2026)
# ==========================================================================
otel-collector:
image: otel/opentelemetry-collector-contrib:0.153.0
command: ["--config=/etc/otelcol-config.yaml"]
volumes:
- ./config/otel-config.yaml:/etc/otelcol-config.yaml:ro
ports:
- "4317:4317" # OTLP gRPC
- "4318:4318" # OTLP HTTP
- "13133:13133" # Health check
env_file:
- path: .env
required: false
environment:
SCOUT_ENDPOINT: ${SCOUT_ENDPOINT:-http://localhost:4318}
SCOUT_CLIENT_ID: ${SCOUT_CLIENT_ID:-}
SCOUT_CLIENT_SECRET: ${SCOUT_CLIENT_SECRET:-}
SCOUT_TOKEN_URL: ${SCOUT_TOKEN_URL:-}
SCOUT_ENVIRONMENT: ${SCOUT_ENVIRONMENT:-development}
networks:
- app-network
volumes:
postgres_data:
redis_data:
networks:
app-network:
driver: bridge