name: ${PROJECT_NAME:-diode} services: ingress-nginx: image: nginx:latest command: > /bin/sh -c "echo 'upstream diode-ingester { server diode-ingester:8081; } upstream diode-reconciler { server diode-reconciler:8081; } server { listen 80; http2 on; server_name localhost; client_max_body_size 25m; location /diode/diode.v1.IngesterService { rewrite /diode/(.*) /$$1 break; grpc_pass grpc://diode-ingester; } location /diode/diode.v1.ReconcilerService { rewrite /diode/(.*) /$$1 break; grpc_pass grpc://diode-reconciler; } }' > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" restart: always environment: - DIODE_NGINX_PORT=${DIODE_NGINX_PORT} ports: - ${DIODE_NGINX_PORT}:80 depends_on: - diode-ingester - diode-reconciler diode-ingester: image: netboxlabs/diode-ingester:${DIODE_TAG:-latest} environment: - REDIS_PASSWORD=${REDIS_PASSWORD} - REDIS_HOST=${REDIS_HOST} - REDIS_PORT=${REDIS_PORT} - RECONCILER_GRPC_HOST=${RECONCILER_GRPC_HOST} - RECONCILER_GRPC_PORT=${RECONCILER_GRPC_PORT} - INGESTER_TO_RECONCILER_API_KEY=${INGESTER_TO_RECONCILER_API_KEY} - SENTRY_DSN=${SENTRY_DSN} restart: always ports: [ ] depends_on: - diode-redis - diode-reconciler diode-reconciler: image: netboxlabs/diode-reconciler:${DIODE_TAG:-latest} environment: - REDIS_PASSWORD=${REDIS_PASSWORD} - REDIS_HOST=${REDIS_HOST} - REDIS_PORT=${REDIS_PORT} - NETBOX_DIODE_PLUGIN_API_BASE_URL=${NETBOX_DIODE_PLUGIN_API_BASE_URL} - NETBOX_DIODE_PLUGIN_SKIP_TLS_VERIFY=${NETBOX_DIODE_PLUGIN_SKIP_TLS_VERIFY} - DIODE_TO_NETBOX_API_KEY=${DIODE_TO_NETBOX_API_KEY} - NETBOX_TO_DIODE_API_KEY=${NETBOX_TO_DIODE_API_KEY} - INGESTER_TO_RECONCILER_API_KEY=${INGESTER_TO_RECONCILER_API_KEY} - DIODE_API_KEY=${DIODE_API_KEY} - LOGGING_LEVEL=${LOGGING_LEVEL} - SENTRY_DSN=${SENTRY_DSN} - MIGRATION_ENABLED=${MIGRATION_ENABLED} - RECONCILER_RATE_LIMITER_RPS=${RECONCILER_RATE_LIMITER_RPS} - RECONCILER_RATE_LIMITER_BURST=${RECONCILER_RATE_LIMITER_BURST} - POSTGRES_HOST=${POSTGRES_HOST} - POSTGRES_PORT=${POSTGRES_PORT} - POSTGRES_DB_NAME=${POSTGRES_DB_NAME} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} restart: always ports: [ ] volumes: - ../dbstore/postgres/migrations:/etc/diode/migrations:z,ro depends_on: diode-redis: condition: service_started postgres: condition: service_healthy diode-redis: image: redis/redis-stack-server:latest command: - sh - -c - redis-server --appendonly yes --dir /data --save 60 1 --requirepass $$REDIS_PASSWORD --loadmodule /opt/redis-stack/lib/rejson.so --loadmodule /opt/redis-stack/lib/redisearch.so --port $$REDIS_PORT environment: - REDIS_PASSWORD=${REDIS_PASSWORD} - REDIS_PORT=${REDIS_PORT} ports: [ ] volumes: - diode-redis-data:/data postgres: image: docker.io/postgres:16-alpine environment: - POSTGRES_DB=${POSTGRES_DB_NAME} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_USER=${POSTGRES_USER} ports: - ${POSTGRES_PORT:-5432}:5432 healthcheck: test: pg_isready -q -t 2 -d $$POSTGRES_DB -U $$POSTGRES_USER start_period: 20s interval: 1s timeout: 5s retries: 5 volumes: - diode-postgres-data:/var/lib/postgresql/data volumes: diode-redis-data: driver: local diode-postgres-data: driver: local