- Added PostgreSQL 16 Alpine service to Docker Swarm stack - db.py: schema for 17 tables, auto-seed from jv_data.json on first boot - /api/dashboard/data?start=&end= — server-side SQL filtering All Time: 0.43s (was 4MB JSON download stuck loading) Filtered (12mo): 0.20s with ~90% less data transferred - Dashboard HTML patched: calls API instead of static JSON - Integer casting for IsNewCustomer/HasDiscount/IsFreeShipping - Advisory lock prevents race condition during parallel worker startup - Returning Revenue now shows correctly: £14.5M (75% of total)
55 lines
1.3 KiB
YAML
55 lines
1.3 KiB
YAML
version: "3.8"
|
|
|
|
services:
|
|
justvitamin:
|
|
image: justvitamin:latest
|
|
build: .
|
|
environment:
|
|
- GEMINI_API_KEY=AIzaSyCHnesXLjPw-UgeZaQotut66bgjFdvy12E
|
|
- DATABASE_URL=postgresql://jv:jvpass@tasks.db:5432/justvitamin
|
|
volumes:
|
|
- jv-generated:/app/generated
|
|
networks:
|
|
- dokploy-network
|
|
- jv-internal
|
|
depends_on:
|
|
- db
|
|
deploy:
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.justvitamin.rule=Host(`justvitamin.quikcue.com`)"
|
|
- "traefik.http.routers.justvitamin.entrypoints=websecure"
|
|
- "traefik.http.routers.justvitamin.tls.certResolver=letsencrypt"
|
|
- "traefik.http.services.justvitamin.loadbalancer.server.port=5050"
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
|
|
db:
|
|
image: postgres:16-alpine
|
|
environment:
|
|
- POSTGRES_USER=jv
|
|
- POSTGRES_PASSWORD=jvpass
|
|
- POSTGRES_DB=justvitamin
|
|
volumes:
|
|
- jv-pgdata:/var/lib/postgresql/data
|
|
networks:
|
|
- jv-internal
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
resources:
|
|
limits:
|
|
memory: 512M
|
|
|
|
volumes:
|
|
jv-generated:
|
|
jv-pgdata:
|
|
|
|
networks:
|
|
dokploy-network:
|
|
external: true
|
|
jv-internal:
|
|
driver: overlay
|