-
Notifications
You must be signed in to change notification settings - Fork 4
/
docker-compose.yml
108 lines (102 loc) · 3.24 KB
/
docker-compose.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
version: "3.9"
networks:
boilerplate_network:
external: false
services:
app:
volumes:
- ./app:/app/app
build: .
restart: ${RESTART}
env_file:
- ${ENV_FILE}
command: uvicorn app.main:app --host 0.0.0.0 --port ${API_PORT}
networks:
- boilerplate_network
labels:
- traefik.enable=true
- traefik.http.routers.fastapi.rule=Host(`${API_HOSTNAME}`)
- traefik.http.routers.fastapi.tls=${ENABLE_TLS}
- traefik.docker.network=boilerplate_network
- traefik.http.routers.fastapi.tls.certresolver=myresolver
- traefik.http.services.fastapi.loadbalancer.server.port=${API_PORT}
depends_on:
db:
condition: service_healthy
db:
image: postgres:14
restart: ${RESTART}
environment:
POSTGRES_USER: ${DATABASE_USER}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_DB: ${DATABASE_DB}
PGDATA: ${PGDATA}
networks:
- boilerplate_network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DATABASE_USER} -d ${DATABASE_DB}"]
interval: 5s
timeout: 5s
retries: 5
volumes:
- ./data:/data
labels:
- traefik.enable=false
frontend:
volumes:
- ./frontend/src:/front/src
- /front/node_modules
restart: ${RESTART}
build:
context: ./frontend
dockerfile: Dockerfile
args:
- FRONT_CMD=${FRONT_CMD}
- API_HOSTNAME=${API_HOSTNAME}
- FRONT_PORT=${FRONT_PORT}
env_file:
- ${ENV_FILE}
networks:
- boilerplate_network
labels:
- traefik.enable=true
- traefik.http.routers.frontend.rule=Host(`${DOMAIN}`)
- traefik.http.routers.frontend.tls=${ENABLE_TLS}
- traefik.docker.network=boilerplate_network
- traefik.http.routers.frontend.tls.certresolver=myresolver
- traefik.http.services.frontend.loadbalancer.server.port=${FRONT_PORT}
traefik:
image: "traefik:v2.6"
restart: ${RESTART}
container_name: "traefik"
command:
#- "--log.level=DEBUG"
- "--api.insecure=${API_INSECURE}"
- "--api.dashboard=true"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.tlschallenge=${ENABLE_TLS}"
#- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
#- "--certificatesresolvers.myresolver.acme.email={EMAIL}@${DOMAIN}.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
- "--providers.providersThrottleDuration=100s"
ports:
- "${TRAEFIK_PORTS}"
- "8080:8080"
networks:
- boilerplate_network
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
whoami:
image: "traefik/whoami"
restart: ${RESTART}
container_name: "whoami"
labels:
- "traefik.enable=${ENABLE_TLS}"
- "traefik.http.routers.whoami.rule=Host(`whoami.${DOMAIN}`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls.certresolver=myresolver"