Skip to content

Commit 4b33d1a

Browse files
committed
refactor: enhance Docker Compose configurations with reusable YAML anchors
- Introduced common configurations for services in Docker Compose files using YAML anchors for better maintainability. - Updated services to utilize these anchors, streamlining environment variable handling, logging, and network settings. - Removed redundant configurations to simplify the overall structure.
1 parent 15ae98a commit 4b33d1a

File tree

4 files changed

+121
-152
lines changed

4 files changed

+121
-152
lines changed

docker-compose-advanced-prod.yml

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
11
x-base: &base
22
image: remnawave/backend:2
3+
4+
x-common: &common
35
restart: always
4-
env_file:
5-
- .env
66
networks:
77
- remnawave-network
88

9+
x-logging: &logging
10+
logging:
11+
driver: json-file
12+
options:
13+
max-size: 100m
14+
max-file: 5
15+
16+
x-env: &env
17+
env_file: .env
18+
919
services:
1020
remnawave-rest-api: # Scaling is OK
11-
<<: *base
21+
<<: [*base, *common, *logging, *env]
1222
container_name: 'remnawave-rest-api'
1323
hostname: remnawave-rest-api
1424
entrypoint: []
@@ -24,7 +34,7 @@ services:
2434
- '127.0.0.1:3000:3000' # Expose Rest API port
2535

2636
remnawave-scheduler: # Do not scale this service!
27-
<<: *base
37+
<<: [*base, *common, *logging, *env]
2838
container_name: 'remnawave-scheduler'
2939
hostname: remnawave-scheduler
3040
entrypoint: ['/bin/sh', 'docker-entrypoint.sh'] # Migrations, seeding, etc. IMPORTANT: Entrypoint needs to be in one of services. Its applies migrations and seeding database!
@@ -44,7 +54,7 @@ services:
4454
start_period: 30s
4555

4656
remnawave-processor: # Do not scale this service!
47-
<<: *base
57+
<<: [*base, *common, *logging, *env]
4858
container_name: 'remnawave-processor'
4959
hostname: remnawave-processor
5060
entrypoint: []
@@ -61,9 +71,8 @@ services:
6171
image: postgres:17.6
6272
container_name: 'remnawave-db'
6373
hostname: remnawave-db
64-
restart: always
65-
env_file:
66-
- .env
74+
<<: [*common, *logging, *env]
75+
6776
environment:
6877
- POSTGRES_USER=${POSTGRES_USER}
6978
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
@@ -73,8 +82,6 @@ services:
7382
- '127.0.0.1:6767:5432'
7483
volumes:
7584
- remnawave-db-data:/var/lib/postgresql/data
76-
networks:
77-
- remnawave-network
7885
healthcheck:
7986
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
8087
interval: 3s
@@ -85,11 +92,13 @@ services:
8592
image: valkey/valkey:8.1-alpine
8693
container_name: remnawave-redis
8794
hostname: remnawave-redis
88-
restart: always
89-
networks:
90-
- remnawave-network
91-
volumes:
92-
- remnawave-redis-data:/data
95+
<<: [*common, *logging]
96+
command: >
97+
valkey-server
98+
--save ""
99+
--appendonly no
100+
--maxmemory-policy noeviction
101+
--loglevel warning
93102
healthcheck:
94103
test: ['CMD', 'valkey-cli', 'ping']
95104
interval: 3s
@@ -104,10 +113,6 @@ networks:
104113

105114
volumes:
106115
remnawave-db-data:
107-
driver: local
108-
external: false
109116
name: remnawave-db-data
110-
remnawave-redis-data:
111117
driver: local
112118
external: false
113-
name: remnawave-redis-data
Lines changed: 26 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
1+
x-common: &common
2+
restart: always
3+
networks:
4+
- remnawave-network
5+
6+
x-logging: &logging
7+
logging:
8+
driver: json-file
9+
options:
10+
max-size: 100m
11+
max-file: 5
12+
13+
x-env: &env
14+
env_file: .env
15+
116
services:
217
remnawave-db:
318
image: postgres:17.6
419
container_name: 'remnawave-db'
520
hostname: remnawave-db
6-
restart: always
7-
env_file:
8-
- .env
21+
<<: [*common, *logging, *env]
922
environment:
1023
- POSTGRES_USER=${POSTGRES_USER}
1124
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
@@ -15,33 +28,23 @@ services:
1528
- '127.0.0.1:6767:5432'
1629
volumes:
1730
- remnawave-db-data:/var/lib/postgresql/data
18-
networks:
19-
- remnawave-network
2031
healthcheck:
2132
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
2233
interval: 3s
2334
timeout: 10s
2435
retries: 3
25-
logging:
26-
driver: 'json-file'
27-
options:
28-
max-size: '100m'
29-
max-file: '10'
3036

3137
remnawave-redis:
3238
image: valkey/valkey:8.1-alpine
3339
container_name: remnawave-redis
3440
hostname: remnawave-redis
35-
restart: always
36-
networks:
37-
- remnawave-network
38-
volumes:
39-
- remnawave-redis-data:/data
40-
logging:
41-
driver: 'json-file'
42-
options:
43-
max-size: '100m'
44-
max-file: '10'
41+
<<: [*common, *logging]
42+
command: >
43+
valkey-server
44+
--save ""
45+
--appendonly no
46+
--maxmemory-policy noeviction
47+
--loglevel warning
4548
healthcheck:
4649
test: ['CMD', 'valkey-cli', 'ping']
4750
interval: 3s
@@ -52,14 +55,10 @@ services:
5255
image: remnawave/backend:2
5356
container_name: 'remnawave'
5457
hostname: remnawave
55-
restart: always
58+
<<: [*common, *logging, *env]
5659
ports:
5760
- '127.0.0.1:3000:${APP_PORT:-3000}'
5861
- '127.0.0.1:3001:${METRICS_PORT:-3001}'
59-
env_file:
60-
- .env
61-
networks:
62-
- remnawave-network
6362
depends_on:
6463
remnawave-db:
6564
condition: service_healthy
@@ -71,51 +70,30 @@ services:
7170
timeout: 5s
7271
retries: 3
7372
start_period: 30s
74-
logging:
75-
driver: 'json-file'
76-
options:
77-
max-size: '100m'
78-
max-file: '10'
7973

8074
remnawave-subscription-page:
8175
image: remnawave/subscription-page:latest
8276
container_name: remnawave-subscription-page
8377
hostname: remnawave-subscription-page
84-
restart: always
78+
<<: [*common, *logging]
8579
environment:
8680
- REMNAWAVE_PANEL_URL=http://remnawave:3000
8781
- META_TITLE=Subscription page
8882
- META_DESCRIPTION=Subscription page description
8983
ports:
9084
- '127.0.0.1:3010:3010'
91-
networks:
92-
- remnawave-network
9385
depends_on:
9486
- remnawave
95-
logging:
96-
driver: 'json-file'
97-
options:
98-
max-size: '100m'
99-
max-file: '10'
10087

10188
remnawave-cloudflared:
10289
container_name: remnawave-cloudflared
10390
hostname: remnawave-cloudflared
10491
image: cloudflare/cloudflared:latest
105-
env_file:
106-
- .env
107-
networks:
108-
- remnawave-network
109-
restart: always
92+
<<: [*common, *logging, *env]
11093
command: tunnel --no-autoupdate run --token ${CLOUDFLARE_TOKEN}
11194
depends_on:
11295
- remnawave
11396
- remnawave-subscription-page
114-
logging:
115-
driver: 'json-file'
116-
options:
117-
max-size: '100m'
118-
max-file: '10'
11997
healthcheck:
12098
test: ['CMD', 'cloudflared', '--version']
12199
interval: 30s
@@ -131,10 +109,6 @@ networks:
131109

132110
volumes:
133111
remnawave-db-data:
134-
driver: local
135-
external: false
136112
name: remnawave-db-data
137-
remnawave-redis-data:
138113
driver: local
139114
external: false
140-
name: remnawave-redis-data

docker-compose-prod-with-cf.yml

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
1+
x-common: &common
2+
restart: always
3+
networks:
4+
- remnawave-network
5+
6+
x-logging: &logging
7+
logging:
8+
driver: json-file
9+
options:
10+
max-size: 100m
11+
max-file: 5
12+
13+
x-env: &env
14+
env_file: .env
15+
116
services:
217
remnawave-db:
318
image: postgres:17.6
419
container_name: 'remnawave-db'
520
hostname: remnawave-db
6-
restart: always
7-
env_file:
8-
- .env
21+
<<: [*common, *logging, *env]
922
environment:
1023
- POSTGRES_USER=${POSTGRES_USER}
1124
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
@@ -15,8 +28,6 @@ services:
1528
- '127.0.0.1:6767:5432'
1629
volumes:
1730
- remnawave-db-data:/var/lib/postgresql/data
18-
networks:
19-
- remnawave-network
2031
healthcheck:
2132
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
2233
interval: 3s
@@ -27,14 +38,10 @@ services:
2738
image: remnawave/backend:2
2839
container_name: 'remnawave'
2940
hostname: remnawave
30-
restart: always
41+
<<: [*common, *logging, *env]
3142
ports:
3243
- '127.0.0.1:3000:${APP_PORT:-3000}'
3344
- '127.0.0.1:3001:${METRICS_PORT:-3001}'
34-
env_file:
35-
- .env
36-
networks:
37-
- remnawave-network
3845
healthcheck:
3946
test: ['CMD-SHELL', 'curl -f http://localhost:${METRICS_PORT:-3001}/health']
4047
interval: 30s
@@ -51,11 +58,13 @@ services:
5158
image: valkey/valkey:8.1-alpine
5259
container_name: remnawave-redis
5360
hostname: remnawave-redis
54-
restart: always
55-
networks:
56-
- remnawave-network
57-
volumes:
58-
- remnawave-redis-data:/data
61+
<<: [*common, *logging]
62+
command: >
63+
valkey-server
64+
--save ""
65+
--appendonly no
66+
--maxmemory-policy noeviction
67+
--loglevel warning
5968
healthcheck:
6069
test: ['CMD', 'valkey-cli', 'ping']
6170
interval: 3s
@@ -65,12 +74,7 @@ services:
6574
remnawave-cloudflared:
6675
container_name: remnawave-cloudflared
6776
image: cloudflare/cloudflared:latest
68-
69-
env_file:
70-
- .env
71-
networks:
72-
- remnawave-network
73-
restart: always
77+
<<: [*common, *logging, *env]
7478
command: tunnel --no-autoupdate run --token ${CLOUDFLARE_TOKEN}
7579
depends_on:
7680
- remnawave
@@ -83,10 +87,6 @@ networks:
8387

8488
volumes:
8589
remnawave-db-data:
86-
driver: local
87-
external: false
8890
name: remnawave-db-data
89-
remnawave-redis-data:
9091
driver: local
9192
external: false
92-
name: remnawave-redis-data

0 commit comments

Comments
 (0)