services: db: image: postgres:16-alpine environment: POSTGRES_USER: printhive POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-printhive} POSTGRES_DB: printhive volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U printhive -d printhive"] interval: 5s timeout: 5s retries: 10 restart: unless-stopped app: # Pulled from the Forgejo registry (built by CI). To build locally instead: # docker build -t git.plexultra.com/dlawler489/printhive:latest . image: git.plexultra.com/dlawler489/printhive:latest pull_policy: always depends_on: db: condition: service_healthy environment: DATABASE_URL: postgres://printhive:${POSTGRES_PASSWORD:-printhive}@db:5432/printhive PORT: 3000 # Optional — these can also be set in the app's Settings menu (stored in the DB). THINGIVERSE_TOKEN: ${THINGIVERSE_TOKEN:-} FLARESOLVERR_URL: ${FLARESOLVERR_URL:-} MAKERWORLD_TOKEN: ${MAKERWORLD_TOKEN:-} PRINTABLES_TOKEN: ${PRINTABLES_TOKEN:-} volumes: - uploads:/app/uploads - thumbnails:/app/thumbnails - glb:/app/glb # Host port is only for Traefik to reach the app; set APP_PORT to any free # port (3000 was already taken on the host). If Traefik shares the Docker # network and routes by container, you can drop this whole `ports:` block. ports: - "${APP_PORT:-3000}:3000" restart: unless-stopped # Traefik (if using labels rather than your file provider): # labels: # - "traefik.enable=true" # - "traefik.http.routers.printhive.rule=Host(`printhive.plexultra.com`)" # - "traefik.http.routers.printhive.entrypoints=websecure" # - "traefik.http.routers.printhive.tls.certresolver=letsencrypt" # - "traefik.http.services.printhive.loadbalancer.server.port=3000" volumes: pgdata: uploads: thumbnails: glb: