-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathprod-stack.yml
More file actions
143 lines (135 loc) · 3.25 KB
/
prod-stack.yml
File metadata and controls
143 lines (135 loc) · 3.25 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
version: "3.7"
x-logging:
&default-logging
options:
max-size: '12m'
max-file: '5'
driver: json-file
x-deploy-php:
&default-php-deploy
replicas: 1
labels:
- "traefik.enable=false"
placement:
constraints:
- "node.labels.weaksauce==false"
resources:
limits:
memory: 2048M
cpus: "1"
reservations:
memory: 200M
update_config:
parallelism: 1
failure_action: rollback
order: start-first
x-deploy:
&default-deploy
replicas: 1
labels:
- "traefik.enable=false"
placement:
constraints:
- "node.labels.weaksauce==false"
resources:
limits:
memory: 2048M
update_config:
parallelism: 1
failure_action: rollback
order: start-first
services:
app:
image: ${IMAGE_NAME}
networks:
- proxy
- default
expose:
- "80"
environment:
CONTAINER_ROLE: app
secrets:
- source: dotenv
target: .env
deploy:
replicas: 2
placement:
constraints:
- "node.labels.weaksauce==false"
preferences:
- spread: node.labels.site
update_config:
parallelism: 1
failure_action: rollback
order: start-first
resources:
limits:
memory: 2048M
reservations:
memory: 128M
labels:
# note: this assumes traefik v2
- "traefik.enable=true"
- "traefik.http.routers.${TRAEFIK_BACKEND}.rule=Host(`${TRAEFIK_HOSTNAME}`)"
- "traefik.http.routers.${TRAEFIK_BACKEND}.entrypoints=web"
- "traefik.http.services.${TRAEFIK_BACKEND}.loadbalancer.server.port=80" # it seems you always need to give traefik a port so it 'notices' the service
- "traefik.http.routers.${TRAEFIK_BACKEND}-secured.rule=Host(`${TRAEFIK_HOSTNAME}`)"
- "traefik.http.routers.${TRAEFIK_BACKEND}-secured.entrypoints=web-secured"
- "traefik.http.routers.${TRAEFIK_BACKEND}-secured.tls.certresolver=mytlschallenge"
stop_grace_period: 2m
logging: *default-logging
scheduler:
image: ${IMAGE_NAME}
deploy: *default-php-deploy
stop_grace_period: 1m
networks:
- default
environment:
CONTAINER_ROLE: scheduler
secrets:
- source: dotenv
target: .env
logging: *default-logging
queue:
image: ${IMAGE_NAME}
deploy: *default-php-deploy
stop_grace_period: 1m
networks:
- default
environment:
CONTAINER_ROLE: queue
secrets:
- source: dotenv
target: .env
logging: *default-logging
migrations:
image: ${IMAGE_NAME}
deploy: *default-php-deploy
stop_grace_period: 1m
networks:
- default
environment:
CONTAINER_ROLE: migrations
secrets:
- source: dotenv
target: .env
redis:
# redis v5.0.5 tag as of 2019-06-25
# you can get the sha of an image by doing :
# docker pull redis:5.0.5
# docker images --digests | grep redis
image: redis@sha256:f0957bcaa75fd58a9a1847c1f07caf370579196259d69ac07f2e27b5b389b021
deploy: *default-deploy
logging: *default-logging
networks:
- default
healthcheck:
test: ["CMD", "redis-cli", "ping"]
secrets:
dotenv:
external: true
name: ${DOTENV_NAME}
networks:
default:
proxy:
external: true