-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdocker-compose.prod.yml
231 lines (219 loc) · 5.58 KB
/
docker-compose.prod.yml
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
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
services:
app:
build:
context: .
dockerfile: Dockerfile
container_name: kayak-app-prod
restart: unless-stopped
ports:
- "2222:22"
environment:
APP_ENV: production
APP_DEBUG: ${APP_DEBUG:-false}
APP_KEY: ${APP_KEY}
DB_HOST: db
DB_CONNECTION: mysql
DB_DATABASE: ${DB_DATABASE}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
CACHE_DRIVER: redis
REDIS_HOST: redis
QUEUE_CONNECTION: redis
APP_URL: https://wartkinurt.pl
APP_TIMEZONE: Europe/Warsaw
LOG_CHANNEL: stack
LOG_LEVEL: debug
PHP_FPM_PM: dynamic
PHP_FPM_PM_MAX_CHILDREN: 10
PHP_FPM_PM_START_SERVERS: 2
PHP_FPM_PM_MIN_SPARE_SERVERS: 2
PHP_FPM_PM_MAX_SPARE_SERVERS: 4
SSH_USER: ${SSH_USER}
SSH_PASSWORD: ${SSH_PASSWORD}
volumes:
- kayak_app:/var/www/html
- kayak_storage:/var/www/html/storage
- /home/services/kayak-prod/.env:/var/www/html/.env
networks:
- traefik-public
- internal
labels:
- "traefik.enable=false"
deploy:
resources:
limits:
cpus: '0.8'
memory: 1G
reservations:
memory: 1G
queue-worker:
build:
context: .
dockerfile: Dockerfile
container_name: kayak-queue-prod
restart: unless-stopped
command: php artisan queue:work redis --tries=3 --timeout=90
environment:
APP_ENV: production
APP_KEY: ${APP_KEY}
DB_CONNECTION: mysql
DB_HOST: db
DB_DATABASE: ${DB_DATABASE}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
QUEUE_CONNECTION: redis
REDIS_HOST: redis
CACHE_DRIVER: redis
volumes:
- kayak_storage:/var/www/html/storage
- /home/services/kayak-prod/.env:/var/www/html/.env
networks:
- internal
deploy:
resources:
limits:
cpus: '0.4'
memory: 512M
scheduler:
build:
context: .
dockerfile: Dockerfile
container_name: kayak-scheduler-prod
restart: unless-stopped
command: php artisan schedule:work
environment:
APP_ENV: production
APP_KEY: ${APP_KEY}
REDIS_HOST: redis
DB_CONNECTION: mysql
CACHE_DRIVER: redis
DB_HOST: db
DB_DATABASE: ${DB_DATABASE}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
volumes:
- kayak_storage:/var/www/html/storage
networks:
- internal
db:
image: mariadb:latest
container_name: mariadb-prod
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- db_data:/var/lib/mysql
- kayak_backups:/backups
ports:
- "3306:3306"
networks:
- internal
- traefik-public
deploy:
resources:
limits:
cpus: '0.4'
memory: 512M
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
restart: unless-stopped
environment:
- PMA_HOST=db
- PMA_PORT=3306
- UPLOAD_LIMIT=512M
networks:
- internal
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.pma.rule=Host(`db.wartkinurt.pl`)"
- "traefik.http.routers.pma.tls=true"
- "traefik.http.routers.pma.tls.certresolver=myresolver"
- "traefik.http.services.pma.loadbalancer.server.port=80"
redis:
image: redis:alpine
container_name: redis-prod
restart: unless-stopped
command: redis-server --appendonly yes
volumes:
- redis_data:/data
networks:
- internal
deploy:
resources:
limits:
cpus: '0.2'
memory: 256M
backup:
image: tiredofit/db-backup
container_name: db-backup
restart: unless-stopped
environment:
- DB_TYPE=mysql
- DB_HOST=db
- DB_PORT=3306
- DB_NAME=${DB_DATABASE}
- DB_USER=${DB_USERNAME}
- DB_PASS=${DB_PASSWORD}
- DB_DUMP_FREQ=10080
- DB_DUMP_BEGIN=0000
- DB_CLEANUP_TIME=43200
- COMPRESSION=gz
- SPLIT_DB=FALSE
- CHECKSUM=SHA1
volumes:
- kayak_backups:/backup
networks:
- internal
nginx:
image: nginx:alpine
container_name: kayak-nginx
restart: unless-stopped
volumes:
- kayak_app:/var/www/html
- /home/user/docker/nginx:/etc/nginx/conf.d
- kayak_storage:/var/www/html/storage
depends_on:
- app
networks:
- internal
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.main.rule=Host(`wartkinurt.pl`)"
- "traefik.http.routers.main.tls=true"
- "traefik.http.routers.main.tls.certresolver=myresolver"
- "traefik.http.services.nginx.loadbalancer.server.port=80"
# API
- "traefik.http.routers.api.rule=Host(`api.wartkinurt.pl`)"
- "traefik.http.routers.api.tls=true"
- "traefik.http.routers.api.tls.certresolver=myresolver"
# Dashboard
- "traefik.http.routers.dashboard.rule=Host(`dashboard.wartkinurt.pl`)"
- "traefik.http.routers.dashboard.tls=true"
- "traefik.http.routers.dashboard.tls.certresolver=myresolver"
volumes:
kayak_app:
name: kayak_app
kayak_storage:
driver: local
driver_opts:
type: none
device: /home/services/kayak-prod/storage
o: bind
db_data:
name: kayak_db_data
redis_data:
name: kayak_redis_data
kayak_backups:
name: kayak_backups
networks:
traefik-public:
external: true
internal:
name: kayak_internal
driver: bridge