@@ -8,12 +8,54 @@ x-common: &common
88x-image : &image "nsidc/aross-stations-db"
99
1010services :
11+ traefik :
12+ image : traefik:v3.0
13+ container_name : traefik
14+ command :
15+ - --entrypoints.web.address=:80
16+ - --entrypoints.web.http.redirections.entryPoint.to=websecure
17+ - --entrypoints.web.http.redirections.entryPoint.scheme=https
18+ - --entrypoints.websecure.address=:443
19+ - --entrypoints.api.address=:8000
20+ - --certificatesresolvers.letsencrypt.acme.tlschallenge=true
21+ - --certificatesresolvers.letsencrypt.acme.email=scott.lewis@colorado.edu
22+ - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
23+ - --providers.docker=true
24+ - --log.level=INFO
25+ ports :
26+ - " 8000:8000"
27+ - " 80:80"
28+ - " 443:443"
29+ volumes :
30+ - /var/run/docker.sock:/var/run/docker.sock:ro
31+ - ./config:/letsencrypt
32+ labels :
33+ - " traefik.enable=true"
34+ restart : unless-stopped
35+
1136 ui :
1237 container_name : " aross-stations-ui"
1338 depends_on : ["api"]
1439 image : " nsidc/aross-stations-ui:latest"
15- ports :
16- - " 80:80"
40+ labels :
41+ - " traefik.enable=true"
42+
43+ - " traefik.http.routers.aross-ui.rule=Host(`localhost`) && PathPrefix(`/apps/aross-stations`)"
44+ - " traefik.http.routers.aross-ui.entrypoints=websecure"
45+ - " traefik.http.routers.aross-ui.tls=true"
46+ - " traefik.http.routers.aross-ui.tls.certresolver=letsencrypt"
47+ - " traefik.http.routers.aross-ui.middlewares=aross-ui"
48+ - " traefik.http.routers.aross-ui.service=aross-ui"
49+ - " traefik.http.middlewares.aross-ui.stripprefix.prefixes=/apps/aross-stations"
50+ - " traefik.http.services.aross-ui.loadbalancer.server.port=80"
51+
52+ # Production domain (nsidc.org)
53+ # - "traefik.http.routers.aross-prod.rule=Host(`nsidc.org`) && PathPrefix(`/apps/aross`)"
54+ # - "traefik.http.routers.aross-prod.entrypoints=websecure"
55+ # - "traefik.http.routers.aross-prod.tls.certresolver=letsencrypt"
56+ # - "traefik.http.routers.aross-prod.middlewares=strip-aross-path"
57+
58+ restart : unless-stopped
1759 profiles : ["ui"]
1860
1961
@@ -25,8 +67,20 @@ services:
2567
2668 entrypoint : " fastapi"
2769 command : ["run", "--host", "0.0.0.0", "./src/aross_stations_db/api"]
28- ports :
29- - " 8000:8000"
70+
71+ labels :
72+ - " traefik.enable=true"
73+
74+ # local
75+ - " traefik.http.routers.aross-api.rule=Host(`localhost`) && PathPrefix(`/api/aross-stations`)"
76+ - " traefik.http.routers.aross-api.entrypoints=websecure"
77+ - " traefik.http.routers.aross-api.tls=true"
78+ - " traefik.http.routers.aross-api.tls.certresolver=letsencrypt"
79+ - " traefik.http.routers.aross-api.middlewares=aross-api"
80+ - " traefik.http.routers.aross-api.service=aross-api"
81+ - " traefik.http.middlewares.aross-api.stripprefix.prefixes=/api/aross-stations"
82+ - " traefik.http.services.aross-api.loadbalancer.server.port=8000"
83+
3084 environment :
3185 AROSS_DB_CONNSTR : null
3286
@@ -40,6 +94,8 @@ services:
4094 POSTGRES_DB : " aross"
4195 POSTGRES_USER : " aross"
4296 POSTGRES_PASSWORD : null
97+ ports :
98+ - " 5432:5432"
4399 volumes :
44100 - " ./_data:/var/lib/postgresql/data"
45101
0 commit comments