-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
206 lines (199 loc) · 6.94 KB
/
docker-compose.yml
File metadata and controls
206 lines (199 loc) · 6.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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
x-shared-env: &shared-env
PHP_MEMORY_LIMIT: 256M
PHP_UPLOAD_MAX_FILESIZE: 20M
PHP_POST_MAX_SIZE: 25M
# Database settings
RDS_HOSTNAME: db
RDS_DB_NAME: development
RDS_USERNAME: root
RDS_PASSWORD: root
# Cache settings
REDIS_PRIMARY_ENDPOINT: redis
REDIS_READER_ENDPOINT: redis
# CDN settings
CDN_IMAGES_URL: https://images.php-ddd.test
services:
traefik:
image: traefik:v2.10
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--providers.file.directory=/etc/traefik/dynamic"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./dev-tools/traefik:/etc/traefik/dynamic:ro
- ./dev-tools/certs:/certs:ro
networks:
- php-ddd
labels:
- "traefik.enable=true"
db:
image: mysql:8.0.42
command: mysqld --sql_mode="NO_ENGINE_SUBSTITUTION" --authentication_policy=mysql_native_password
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=development
volumes:
- php-ddd-db:/var/lib/mysql
ports:
- "3306:3306"
networks:
- php-ddd
mail:
image: axllent/mailpit:latest
ports:
- "1025:1025" # SMTP (keep for direct access if needed)
environment:
- MP_MAX_MESSAGES=500
- MP_SMTP_AUTH_ACCEPT_ANY=1
- MP_SMTP_AUTH_ALLOW_INSECURE=1
networks:
- php-ddd
labels:
- "traefik.enable=true"
- "traefik.http.routers.mail.rule=Host(`mail.php-ddd.test`)"
- "traefik.http.routers.mail.entrypoints=websecure"
- "traefik.http.routers.mail.tls=true"
- "traefik.http.services.mail.loadbalancer.server.port=8025"
# HTTP to HTTPS redirect
- "traefik.http.routers.mail-http.rule=Host(`mail.php-ddd.test`)"
- "traefik.http.routers.mail-http.entrypoints=web"
- "traefik.http.routers.mail-http.middlewares=redirect-to-https"
redis:
image: redis:7.4.2
networks:
- php-ddd
ports:
- "6379:6379"
nginx:
build:
context: ./dev-tools/app-fuelphp
dockerfile: nginx.dockerfile
volumes:
- ./docker/nginx.conf:/etc/nginx/nginx.conf
- ./dev-tools/nginx_default.conf:/etc/nginx/conf.d/default.conf
- ./fuelphp/public:/app/fuelphp/public
- ./laravel/public:/app/laravel/public
networks:
- php-ddd
depends_on:
- fuelphp
- laravel
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`php-ddd.test`)"
- "traefik.http.routers.app.entrypoints=websecure"
- "traefik.http.routers.app.tls=true"
- "traefik.http.services.app.loadbalancer.server.port=80"
# Admin subdomain
- "traefik.http.routers.app-admin.rule=Host(`admin.php-ddd.test`)"
- "traefik.http.routers.app-admin.entrypoints=websecure"
- "traefik.http.routers.app-admin.tls=true"
- "traefik.http.routers.app-admin.service=app"
# Partner subdomain
- "traefik.http.routers.app-partner.rule=Host(`partner.php-ddd.test`)"
- "traefik.http.routers.app-partner.entrypoints=websecure"
- "traefik.http.routers.app-partner.tls=true"
- "traefik.http.routers.app-partner.service=app"
# HTTP to HTTPS redirect
- "traefik.http.routers.app-http.rule=Host(`php-ddd.test`)"
- "traefik.http.routers.app-http.entrypoints=web"
- "traefik.http.routers.app-http.middlewares=redirect-to-https"
- "traefik.http.routers.app-admin-http.rule=Host(`admin.php-ddd.test`)"
- "traefik.http.routers.app-admin-http.entrypoints=web"
- "traefik.http.routers.app-admin-http.middlewares=redirect-to-https"
- "traefik.http.routers.app-partner-http.rule=Host(`partner.php-ddd.test`)"
- "traefik.http.routers.app-partner-http.entrypoints=web"
- "traefik.http.routers.app-partner-http.middlewares=redirect-to-https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
fuelphp:
build:
context: ./dev-tools/app-fuelphp
dockerfile: php.dockerfile
environment:
<<: *shared-env
FUEL_ENV: development
APP_URL: https://php-ddd.test/
APP_CIPHER_KEY: 8218bc92e8f238e544019f211de3e7f6c143d781b3e25f0f35863833f371f9d9
APP_TOKEN_SALT: R2AvvgZcNEmmY6wbhPBMma4amsdUvHnLWvijER3a
PHP_IDE_CONFIG: serverName=Docker
volumes:
- ./backend:/app/backend
- ./fuelphp:/app/fuelphp
- ./docker/php-custom.ini:/usr/local/etc/php/conf.d/custom.ini
- ./docker/php-fpm-docker.conf:/usr/local/etc/php-fpm.d/zzz-docker.conf
networks:
- php-ddd
depends_on:
- redis
- db
- mail
laravel:
build:
context: ./dev-tools/app-laravel
dockerfile: php.dockerfile
environment:
<<: *shared-env
APP_NAME: PhpDdd
APP_ENV: local
APP_DEBUG: "true"
APP_URL: https://php-ddd.test
PHP_IDE_CONFIG: serverName=DockerLaravel
volumes:
- ./backend:/app/backend
- ./laravel:/app/laravel
- ./docker/php-custom.ini:/usr/local/etc/php/conf.d/custom.ini
- ./docker/php-fpm-docker.conf:/usr/local/etc/php-fpm.d/zzz-docker.conf
networks:
- php-ddd
depends_on:
- redis
- db
- mail
cdn:
image: nginx:alpine
volumes:
- ./fuelphp/public/assets:/usr/share/nginx/html:ro
- ./dev-tools/cdn-nginx.conf:/etc/nginx/conf.d/default.conf:ro
networks:
- php-ddd
labels:
- "traefik.enable=true"
- "traefik.http.routers.cdn.rule=Host(`images.php-ddd.test`)"
- "traefik.http.routers.cdn.entrypoints=websecure"
- "traefik.http.routers.cdn.tls=true"
- "traefik.http.services.cdn.loadbalancer.server.port=80"
# HTTP to HTTPS redirect
- "traefik.http.routers.cdn-http.rule=Host(`images.php-ddd.test`)"
- "traefik.http.routers.cdn-http.entrypoints=web"
- "traefik.http.routers.cdn-http.middlewares=redirect-to-https"
# Add cache headers middleware
- "traefik.http.middlewares.cdn-cache.headers.customResponseHeaders.Cache-Control=public, max-age=31536000, immutable"
- "traefik.http.middlewares.cdn-cache.headers.customResponseHeaders.X-CDN=local-cdn"
- "traefik.http.routers.cdn.middlewares=cdn-cache"
dashboard:
image: b4bz/homer:latest
volumes:
- ./dev-tools/dashboard:/www/assets
networks:
- php-ddd
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=Host(`dashboard.php-ddd.test`)"
- "traefik.http.routers.dashboard.entrypoints=websecure"
- "traefik.http.routers.dashboard.tls=true"
- "traefik.http.services.dashboard.loadbalancer.server.port=8080"
# HTTP to HTTPS redirect
- "traefik.http.routers.dashboard-http.rule=Host(`dashboard.php-ddd.test`)"
- "traefik.http.routers.dashboard-http.entrypoints=web"
- "traefik.http.routers.dashboard-http.middlewares=redirect-to-https"
networks:
php-ddd:
driver: bridge
volumes:
php-ddd-db: