version: "3.9" services: traefik: image: traefik:v2.11 command: - "--api.insecure=true" # Enable Traefik dashboard (remove in production) - "--providers.docker=true" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" - "--certificatesresolvers.letsencrypt.acme.email=your-email@example.com" # Replace with your email - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" - "traefik-letsencrypt:/letsencrypt" labels: - "traefik.enable=true" db: image: postgis/postgis:15-3.3 restart: unless-stopped environment: POSTGRES_DB: database POSTGRES_USER: adventure POSTGRES_PASSWORD: your_postgres_password # Replace with the actual password volumes: - postgres-data:/var/lib/postgresql/data/ web: image: ghcr.io/seanmorley15/adventurelog-frontend:latest restart: unless-stopped environment: PUBLIC_SERVER_URL: "http://server:8000" BODY_SIZE_LIMIT: "100000" labels: - "traefik.enable=true" - "traefik.http.routers.adventurelogweb.entrypoints=websecure" - "traefik.http.routers.adventurelogweb.rule=Host(`yourdomain.com`) && !(PathPrefix(`/media`) || PathPrefix(`/admin`) || PathPrefix(`/static`) || PathPrefix(`/accounts`))" # Replace with your domain - "traefik.http.routers.adventurelogweb.tls=true" - "traefik.http.routers.adventurelogweb.tls.certresolver=letsencrypt" depends_on: - server server: image: ghcr.io/seanmorley15/adventurelog-backend:latest restart: unless-stopped environment: PGHOST: "db" PGDATABASE: "database" PGUSER: "adventure" PGPASSWORD: your_postgres_password # Replace with the actual password SECRET_KEY: your_secret_key # Replace with the actual secret key DJANGO_ADMIN_USERNAME: "admin" DJANGO_ADMIN_PASSWORD: your_admin_password # Replace with the actual admin password DJANGO_ADMIN_EMAIL: "adventurelog-admin@yourdomain.com" # Replace with your email PUBLIC_URL: "https://yourdomain.com" # Replace with your domain CSRF_TRUSTED_ORIGINS: "https://yourdomain.com" # Replace with your domain DEBUG: "false" FRONTEND_URL: "https://yourdomain.com" # Replace with your domain volumes: - adventurelog-media:/code/media labels: - "traefik.enable=true" - "traefik.http.routers.adventurelogserver.entrypoints=websecure" - "traefik.http.routers.adventurelogserver.rule=Host(`yourdomain.com`) && (PathPrefix(`/media`) || PathPrefix(`/admin`) || PathPrefix(`/static`) || PathPrefix(`/accounts`))" # Replace with your domain - "traefik.http.routers.adventurelogserver.tls=true" - "traefik.http.routers.adventurelogserver.tls.certresolver=letsencrypt" depends_on: - db volumes: postgres-data: adventurelog-media: traefik-letsencrypt: