-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
141 lines (135 loc) · 4.01 KB
/
Copy pathdocker-compose.yml
File metadata and controls
141 lines (135 loc) · 4.01 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
services:
api-dev:
profiles: ["dev"]
build:
context: .
dockerfile: ./apps/api/Dockerfile-dev
container_name: taskflow-api-dev
env_file:
- .env
environment:
NODE_ENV: development
DB_HOST: ${DB_HOST}
DB_PORT: ${DB_PORT}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
DB_NAME: ${DB_NAME}
ports:
- "${API_PORT}:3000"
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
- /usr/src/app/apps/api/node_modules
command: npm run start:dev -w apps/api
depends_on:
- postgres
networks:
- internal
- web
api-prod:
profiles: ["prod"]
build:
context: .
dockerfile: ./apps/api/Dockerfile
container_name: taskflow-api-prod
env_file:
- .env
environment:
NODE_ENV: production
DB_HOST: ${DB_HOST}
DB_PORT: 5432
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
DB_NAME: ${DB_NAME}
depends_on:
- postgres
networks:
- internal
- web
labels:
- "traefik.enable=true"
- "traefik.docker.network=shared-web"
- "traefik.http.routers.taskflow-api.rule=Host(`${API_PROD_DOMAIN}`)"
- "traefik.http.routers.taskflow-api.entrypoints=websecure"
- "traefik.http.routers.taskflow-api.tls.certresolver=myresolver"
- "traefik.http.routers.taskflow-api.service=taskflow-api-service"
- "traefik.http.services.taskflow-api-service.loadbalancer.server.port=3000"
- "traefik.http.routers.taskflow-api-http.rule=Host(`${API_PROD_DOMAIN}`)"
- "traefik.http.routers.taskflow-api-http.entrypoints=web"
- "traefik.http.routers.taskflow-api-http.middlewares=to-https"
- "traefik.http.middlewares.to-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.to-https.redirectscheme.permanent=true"
web-dev:
profiles: ["dev"]
build:
context: .
dockerfile: ./apps/web/Dockerfile-dev
container_name: taskflow-web-dev
env_file:
- .env
environment:
NODE_ENV: development
NEXT_TELEMETRY_DISABLED: 1
ports:
- "${WEB_PORT}:3000"
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
- /usr/src/app/apps/web/node_modules
- /usr/src/app/apps/web/.next
command: npm run dev -w apps/web
depends_on:
- api-dev
networks:
- web
web-prod:
profiles: ["prod"]
build:
context: .
dockerfile: ./apps/web/Dockerfile
container_name: taskflow-web-prod
env_file:
- .env
environment:
NODE_ENV: production
NEXT_TELEMETRY_DISABLED: 1
depends_on:
- api-prod
networks:
- web
labels:
- "traefik.enable=true"
- "traefik.docker.network=shared-web"
- "traefik.http.routers.taskflow-web.rule=Host(`${WEB_PROD_DOMAIN}`)"
- "traefik.http.routers.taskflow-web.entrypoints=websecure"
- "traefik.http.routers.taskflow-web.tls.certresolver=myresolver"
- "traefik.http.routers.taskflow-web.service=taskflow-web-service"
- "traefik.http.services.taskflow-web-service.loadbalancer.server.port=3000"
- "traefik.http.routers.taskflow-web-http.rule=Host(`${WEB_PROD_DOMAIN}`)"
- "traefik.http.routers.taskflow-web-http.entrypoints=web"
- "traefik.http.routers.taskflow-web-http.middlewares=to-https"
- "traefik.http.middlewares.to-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.to-https.redirectscheme.permanent=true"
postgres:
profiles: ["dev", "prod"] # /!\ Do not use the same postgres container for both environments
image: postgres:17
container_name: taskflow-postgres
environment:
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
ports:
- "${DB_PORT}:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- internal
networks:
internal:
external: true
name: shared-internal
web:
external: true
name: shared-web
volumes:
postgres-data: