services: db: image: postgres:15 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: todo_db ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data redis: image: redis:7 ports: - "6379:6379" volumes: - redis_data:/data backend: build: context: ./backend ports: - "8000:8000" environment: DATABASE_URL: postgresql://user:password@db:5432/todo_db REDIS_HOST: redis REDIS_URL: redis://redis:6379/1 FRONTEND_URLS: http://localhost:5173,http://localhost:3000,http://127.0.0.1:5173,http://localhost LOKI_URL: http://loki:3100/loki/api/v1/push OTLP_HTTP_ENDPOINT: http://tempo:4318/v1/traces volumes: - uploads_data:/app/uploads depends_on: - db - redis - loki - tempo frontend: build: context: ./frontend ports: - "80:80" - "443:443" volumes: - /etc/letsencrypt:/etc/letsencrypt:ro depends_on: - backend # celery worker will consume lot of CPU in deployment thats why its commented out. # celery_worker: # build: # context: ./backend # command: celery -A worker.celery_app worker --loglevel=info # environment: # DATABASE_URL: postgresql://user:password@db:5432/todo_db # REDIS_HOST: redis # REDIS_URL: redis://redis:6379/1 # LOKI_URL: http://loki:3100/loki/api/v1/push # OTLP_HTTP_ENDPOINT: http://tempo:4318/v1/traces # depends_on: # - db # - redis # - backend # - loki # - tempo # celery_beat: # build: # context: ./backend # command: celery -A worker.celery_app beat --loglevel=info # environment: # DATABASE_URL: postgresql://user:password@db:5432/todo_db # REDIS_HOST: redis # REDIS_URL: redis://redis:6379/1 # LOKI_URL: http://loki:3100/loki/api/v1/push # OTLP_HTTP_ENDPOINT: http://tempo:4318/v1/traces # depends_on: # - db # - redis # - backend # - loki # - tempo prometheus: image: prom/prometheus:latest ports: - "9090:9090" volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml extra_hosts: - "host.docker.internal:host-gateway" grafana: image: grafana/grafana:latest ports: - "3000:3000" volumes: - ./grafana/provisioning:/etc/grafana/provisioning depends_on: - prometheus - loki - tempo tempo: image: grafana/tempo:latest command: [ "-config.file=/etc/tempo.yaml" ] volumes: - ./tempo/tempo.yaml:/etc/tempo.yaml ports: - "3200:3200" # tempo - "4317:4317" # otlp grpc - "4318:4318" # otlp http loki: image: grafana/loki:latest ports: - "3100:3100" volumes: postgres_data: redis_data: uploads_data: