| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | 
							- version: "3.3"
 
- services:
 
-   proxy:
 
-     ports:
 
-       - "80:80"
 
-       - "8090:8080"
 
-     command:
 
-       # Enable Docker in Traefik, so that it reads labels from Docker services
 
-       - --providers.docker
 
-       # Add a constraint to only use services with the label for this stack
 
-       # from the env var TRAEFIK_TAG
 
-       - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)
 
-       # Do not expose all Docker services, only the ones explicitly exposed
 
-       - --providers.docker.exposedbydefault=false
 
-       # Disable Docker Swarm mode for local development
 
-       # - --providers.docker.swarmmode
 
-       # Enable the access log, with HTTP requests
 
-       - --accesslog
 
-       # Enable the Traefik log, for configurations and errors
 
-       - --log
 
-       # Enable the Dashboard and API
 
-       - --api
 
-       # Enable the Dashboard and API in insecure mode for local development
 
-       - --api.insecure=true
 
-     labels:
 
-       - traefik.enable=true
 
-       - traefik.http.routers.${STACK_NAME?Variable not set}-traefik-public-http.rule=Host(`${DOMAIN?Variable not set}`)
 
-       - traefik.http.services.${STACK_NAME?Variable not set}-traefik-public.loadbalancer.server.port=80
 
-   pgadmin:
 
-     ports:
 
-       - "5050:5050"
 
-   flower:
 
-     ports:
 
-       - "5555:5555"
 
-   backend:
 
-     ports:
 
-       - "8888:8888"
 
-     volumes:
 
-       - ./backend/app:/app
 
-     environment:
 
-       - JUPYTER=jupyter lab --ip=0.0.0.0 --allow-root --NotebookApp.custom_display_url=http://127.0.0.1:8888
 
-       - SERVER_HOST=http://${DOMAIN?Variable not set}
 
-     build:
 
-       context: ./backend
 
-       dockerfile: backend.dockerfile
 
-       args:
 
-         INSTALL_DEV: ${INSTALL_DEV-true}
 
-         INSTALL_JUPYTER: ${INSTALL_JUPYTER-true}
 
-     # command: bash -c "while true; do sleep 1; done"  # Infinite loop to keep container live doing nothing
 
-     command: /start-reload.sh
 
-     labels:
 
-       - traefik.enable=true
 
-       - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
 
-       - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`)
 
-       - traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=80
 
-   celeryworker:
 
-     volumes:
 
-       - ./backend/app:/app
 
-     environment:
 
-       - RUN=celery worker -A app.worker -l info -Q main-queue -c 1
 
-       - JUPYTER=jupyter lab --ip=0.0.0.0 --allow-root --NotebookApp.custom_display_url=http://127.0.0.1:8888
 
-       - SERVER_HOST=http://${DOMAIN?Variable not set}
 
-     build:
 
-       context: ./backend
 
-       dockerfile: celeryworker.dockerfile
 
-       args:
 
-         INSTALL_DEV: ${INSTALL_DEV-true}
 
-         INSTALL_JUPYTER: ${INSTALL_JUPYTER-true}
 
-   frontend:
 
-     build:
 
-       context: ./frontend
 
-       args:
 
-         FRONTEND_ENV: dev
 
-     labels:
 
-       - traefik.enable=true
 
-       - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
 
-       - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.rule=PathPrefix(`/`)
 
-       - traefik.http.services.${STACK_NAME?Variable not set}-frontend.loadbalancer.server.port=80
 
- networks:
 
-   traefik-public:
 
-     # For local dev, don't expect an external Traefik network
 
-     external: false
 
 
  |