2025-12-04 17:49:19 +00:00
|
|
|
services:
|
|
|
|
|
fitness:
|
|
|
|
|
build: .
|
|
|
|
|
container_name: fitness-tracker
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
environment:
|
|
|
|
|
# DB file inside container
|
|
|
|
|
- DATABASE_URL=/data/fitness.db
|
|
|
|
|
volumes:
|
|
|
|
|
# Host folder -> container /data
|
|
|
|
|
# On host, your db will be: ./fitness-data/fitness.db
|
|
|
|
|
- ./fitness-data:/data
|
2025-12-05 10:11:44 +00:00
|
|
|
# ports:
|
2025-12-04 17:49:19 +00:00
|
|
|
# For quick testing; in production you'd put Traefik in front instead
|
2025-12-05 10:11:44 +00:00
|
|
|
# - "8080:8080"
|
|
|
|
|
labels:
|
|
|
|
|
- "traefik.enable=true"
|
|
|
|
|
|
|
|
|
|
# Public domain
|
|
|
|
|
- "traefik.http.routers.fitness.rule=Host(`fitness.rozic-dev.com`)"
|
|
|
|
|
|
|
|
|
|
# Listen on HTTP & HTTPS
|
|
|
|
|
- "traefik.http.routers.fitness.entrypoints=web,websecure"
|
|
|
|
|
|
|
|
|
|
# Force HTTPS using your GLOBAL redirect middleware
|
|
|
|
|
- "traefik.http.routers.fitness.middlewares=redirect-to-https, fitness-auth"
|
|
|
|
|
|
|
|
|
|
# TLS + Let's Encrypt
|
|
|
|
|
- "traefik.http.routers.fitness.tls=true"
|
|
|
|
|
- "traefik.http.routers.fitness.tls.certresolver=letsencrypt"
|
|
|
|
|
|
|
|
|
|
# App internal port
|
|
|
|
|
- "traefik.http.services.fitness.loadbalancer.server.port=8080"
|
|
|
|
|
|
|
|
|
|
# - "traefik.http.routers.traefik.middlewares=fitness-auth"
|
|
|
|
|
#- "traefik.http.middlewares.traefik-auth.basicauth.users=admin:$$apr1$$8EVjn/nj$$GiLUZqcbueTFeD23SuB6x0" # admin:admin123
|
|
|
|
|
#- "traefik.http.middlewares.traefik-auth.basicauth.users=admin:$apr1$yGKxPD8U$z4eeZaKNzoASEpr2yh4wQ" # admin:admin123
|
|
|
|
|
- "traefik.http.middlewares.fitness-auth.basicauth.users=Dejan:$$apr1$$F5Y8CeQ1$$C2jX95nwyeJAjhtGxvnOJ/" # admin:admin123
|
|
|
|
|
networks:
|
|
|
|
|
- traefik_default
|
|
|
|
|
|
|
|
|
|
networks:
|
|
|
|
|
traefik_default:
|
|
|
|
|
external: true
|