Spaces:
Sleeping
Sleeping
services: | |
proxy: | |
image: traefik:v3.0 | |
env_file: | |
- .env | |
networks: | |
- ${TRAEFIK_PUBLIC_NETWORK?Variable not set} | |
- default | |
volumes: | |
- /var/run/docker.sock:/var/run/docker.sock | |
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 | |
# Enable the access log, with HTTP requests | |
- --accesslog | |
# Enable the Traefik log, for configurations and errors | |
- --log | |
# Enable the Dashboard and API | |
- --api | |
deploy: | |
placement: | |
constraints: | |
- node.role == manager | |
labels: | |
# Enable Traefik for this service, to make it available in the public network | |
- traefik.enable=true | |
# Use the traefik-public network (declared below) | |
- traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK?Variable not set} | |
# Use the custom label "traefik.constraint-label=traefik-public" | |
# This public Traefik will only use services with this label | |
- traefik.constraint-label=${TRAEFIK_PUBLIC_TAG?Variable not set} | |
# traefik-http set up only to use the middleware to redirect to https | |
- traefik.http.middlewares.${STACK_NAME?Variable not set}-https-redirect.redirectscheme.scheme=https | |
- traefik.http.middlewares.${STACK_NAME?Variable not set}-https-redirect.redirectscheme.permanent=true | |
# Handle host with and without "www" to redirect to only one of them | |
# Uses environment variable DOMAIN | |
# To disable www redirection remove the Host() you want to discard, here and | |
# below for HTTPS | |
- traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.rule=Host(`${DOMAIN?Variable not set}`) || Host(`www.${DOMAIN?Variable not set}`) | |
- traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.entrypoints=http | |
# traefik-https the actual router using HTTPS | |
- traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.rule=Host(`${DOMAIN?Variable not set}`) || Host(`www.${DOMAIN?Variable not set}`) | |
- traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.entrypoints=https | |
- traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.tls=true | |
# Use the "le" (Let's Encrypt) resolver created below | |
- traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.tls.certresolver=le | |
# Define the port inside of the Docker service to use | |
- traefik.http.services.${STACK_NAME?Variable not set}-proxy.loadbalancer.server.port=80 | |
# Handle domain with and without "www" to redirect to only one | |
# To disable www redirection remove the next line | |
- traefik.http.middlewares.${STACK_NAME?Variable not set}-www-redirect.redirectregex.regex=^https?://(www.)?(${DOMAIN?Variable not set})/(.*) | |
# Redirect a domain with www to non-www | |
# To disable it remove the next line | |
- traefik.http.middlewares.${STACK_NAME?Variable not set}-www-redirect.redirectregex.replacement=https://${DOMAIN?Variable not set}/$${3} | |
# Redirect a domain without www to www | |
# To enable it remove the previous line and uncomment the next | |
# - traefik.http.middlewares.${STACK_NAME}-www-redirect.redirectregex.replacement=https://www.${DOMAIN}/$${3} | |
# Middleware to redirect www, to disable it remove the next line | |
- traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.middlewares=${STACK_NAME?Variable not set}-www-redirect | |
# Middleware to redirect www, and redirect HTTP to HTTPS | |
# to disable www redirection remove the section: ${STACK_NAME?Variable not set}-www-redirect, | |
- traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.middlewares=${STACK_NAME?Variable not set}-www-redirect,${STACK_NAME?Variable not set}-https-redirect | |
backend: | |
image: "langflowai/langflow-backend:latest" | |
depends_on: | |
- db | |
- broker | |
- result_backend | |
env_file: | |
- .env | |
healthcheck: | |
test: "exit 0" | |
deploy: | |
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/v1`) || PathPrefix(`/docs`) || PathPrefix(`/health`) | |
- traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=7860 | |
db: | |
image: postgres:15.4 | |
volumes: | |
- app-db-data:/var/lib/postgresql/data/pgdata | |
environment: | |
- PGDATA=/var/lib/postgresql/data/pgdata | |
deploy: | |
placement: | |
constraints: | |
- node.labels.app-db-data == true | |
healthcheck: | |
test: "exit 0" | |
env_file: | |
- .env | |
pgadmin: | |
image: dpage/pgadmin4 | |
networks: | |
- ${TRAEFIK_PUBLIC_NETWORK?Variable not set} | |
- default | |
volumes: | |
- pgadmin-data:/var/lib/pgadmin | |
env_file: | |
- .env | |
deploy: | |
labels: | |
- traefik.enable=true | |
- traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK?Variable not set} | |
- traefik.constraint-label=${TRAEFIK_PUBLIC_TAG?Variable not set} | |
- traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-http.rule=Host(`pgadmin.${DOMAIN?Variable not set}`) | |
- traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-http.entrypoints=http | |
- traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-http.middlewares=${STACK_NAME?Variable not set}-https-redirect | |
- traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-https.rule=Host(`pgadmin.${DOMAIN?Variable not set}`) | |
- traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-https.entrypoints=https | |
- traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-https.tls=true | |
- traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-https.tls.certresolver=le | |
- traefik.http.services.${STACK_NAME?Variable not set}-pgadmin.loadbalancer.server.port=5050 | |
result_backend: | |
image: redis:6.2.5 | |
env_file: | |
- .env | |
ports: | |
- 6379:6379 | |
healthcheck: | |
test: "exit 0" | |
celeryworker: | |
<<: | |
env_file: | |
- .env | |
command: /bin/sh -c "python -m celery -A langflow.worker.celery_app worker --loglevel=INFO --concurrency=1 -n lf-worker@%h -P eventlet" | |
healthcheck: | |
test: "exit 0" | |
deploy: | |
replicas: 1 | |
flower: | |
<<: | |
env_file: | |
- .env | |
networks: | |
- default | |
environment: | |
- FLOWER_PORT=5555 | |
command: /bin/sh -c "python -m celery -A langflow.worker.celery_app --broker=${BROKER_URL?Variable not set} flower --port=5555" | |
deploy: | |
labels: | |
- traefik.enable=true | |
- traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK?Variable not set} | |
- traefik.constraint-label=${TRAEFIK_PUBLIC_TAG?Variable not set} | |
- traefik.http.routers.${STACK_NAME?Variable not set}-flower-http.rule=Host(`flower.${DOMAIN?Variable not set}`) | |
- traefik.http.routers.${STACK_NAME?Variable not set}-flower-http.entrypoints=http | |
- traefik.http.routers.${STACK_NAME?Variable not set}-flower-http.middlewares=${STACK_NAME?Variable not set}-https-redirect | |
- traefik.http.routers.${STACK_NAME?Variable not set}-flower-https.rule=Host(`flower.${DOMAIN?Variable not set}`) | |
- traefik.http.routers.${STACK_NAME?Variable not set}-flower-https.entrypoints=https | |
- traefik.http.routers.${STACK_NAME?Variable not set}-flower-https.tls=true | |
- traefik.http.routers.${STACK_NAME?Variable not set}-flower-https.tls.certresolver=le | |
- traefik.http.services.${STACK_NAME?Variable not set}-flower.loadbalancer.server.port=5555 | |
frontend: | |
image: "langflowai/langflow-frontend:latest" | |
env_file: | |
- .env | |
restart: on-failure | |
deploy: | |
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 | |
broker: | |
# RabbitMQ management console | |
image: rabbitmq:3-management | |
environment: | |
- RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER:-admin} | |
- RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS:-admin} | |
volumes: | |
- rabbitmq_data:/etc/rabbitmq/ | |
- rabbitmq_data:/var/lib/rabbitmq/ | |
- rabbitmq_log:/var/log/rabbitmq/ | |
ports: | |
- 5672:5672 | |
- 15672:15672 | |
prometheus: | |
image: prom/prometheus:v2.37.9 | |
env_file: | |
- .env | |
volumes: | |
- ./prometheus.yml:/etc/prometheus/prometheus.yml | |
command: | |
- "--config.file=/etc/prometheus/prometheus.yml" | |
# ports: | |
# - 9090:9090 | |
healthcheck: | |
test: "exit 0" | |
deploy: | |
labels: | |
- traefik.enable=true | |
- traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} | |
- traefik.http.routers.${STACK_NAME?Variable not set}-prometheus-http.rule=PathPrefix(`/metrics`) | |
- traefik.http.services.${STACK_NAME?Variable not set}-prometheus.loadbalancer.server.port=9090 | |
grafana: | |
image: grafana/grafana:8.2.6 | |
env_file: | |
- .env | |
# ports: | |
# - 3000:3000 | |
volumes: | |
- grafana_data:/var/lib/grafana | |
deploy: | |
labels: | |
- traefik.enable=true | |
- traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set} | |
- traefik.http.routers.${STACK_NAME?Variable not set}-grafana-http.rule=PathPrefix(`/grafana`) | |
- traefik.http.services.${STACK_NAME?Variable not set}-grafana.loadbalancer.server.port=3000 | |
volumes: | |
grafana_data: | |
app-db-data: | |
rabbitmq_data: | |
rabbitmq_log: | |
pgadmin-data: | |
networks: | |
traefik-public: | |
# Allow setting it to false for testing | |
external: false # ${TRAEFIK_PUBLIC_NETWORK_IS_EXTERNAL-true} | |