Newer
Older
netbox-docker / docker-compose.yml
version: '3.4'
services:
  netbox: &netbox
    image: netboxcommunity/netbox:${VERSION-latest}
    depends_on:
    - postgres
    - redis
    - redis-cache
    - netbox-worker
    env_file: env/netbox.env
    user: '101'
    volumes:
    - ./startup_scripts:/opt/netbox/startup_scripts:z,ro
    - ./initializers:/opt/netbox/initializers:z,ro
    - ./configuration:/etc/netbox/config:z,ro
    - ./reports:/etc/netbox/reports:z,ro
    - ./scripts:/etc/netbox/scripts:z,ro
    - netbox-nginx-config:/etc/netbox-nginx:z
    - netbox-static-files:/opt/netbox/netbox/static:z
    - netbox-media-files:/opt/netbox/netbox/media:z
    - type: tmpfs
      target: /tmp/metrics
      read_only: false
  netbox-worker:
    <<: *netbox
    depends_on:
    - redis
    entrypoint:
    - python3
    - /opt/netbox/netbox/manage.py
    command:
    - rqworker

  # nginx
  nginx:
    command: nginx -c /etc/netbox-nginx/nginx.conf
    image: nginx:1.19-alpine
    depends_on:
    - netbox
    ports:
    - 8080
    volumes:
    - netbox-static-files:/opt/netbox/netbox/static:ro
    - netbox-nginx-config:/etc/netbox-nginx/:ro

  nginx-exporter:
    image: nginx/nginx-prometheus-exporter
    depends_on:
    - nginx
    command:
    - -nginx.scrape-uri
    - http://nginx:8081/stub_status

  # postgres
  postgres:
    image: postgres:12-alpine
    env_file: env/postgres.env
    volumes:
    - netbox-postgres-data:/var/lib/postgresql/data

  postgres-exporter:
    image: wrouesnel/postgres_exporter:v0.8.0
    depends_on:
    - postgres
    env_file: env/postgres-exporter.env

  # redis
  redis: &redis
    image: redis:6-alpine
    command:
    - sh
    - -c # this is to evaluate the $REDIS_PASSWORD from the env
    - redis-server --appendonly yes --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose
    env_file: env/redis-worker.env
    volumes:
    - netbox-redis-data:/data
  redis-cache:
    image: redis:6-alpine
    command:
    - sh
    - -c # this is to evaluate the $REDIS_PASSWORD from the env
    - redis-server --appendonly yes --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose
    env_file: env/redis-cache.env

  redis-worker-exporter:
    image: oliver006/redis_exporter
    depends_on:
    - redis
    env_file: env/redis-worker-exporter.env
  redis-cache-exporter:
    image: oliver006/redis_exporter
    depends_on:
    - redis-cache
    env_file: env/redis-cache-exporter.env

  # prometheus
  prometheus:
    image: prom/prometheus:v2.22.0
    depends_on:
    - postgres-exporter
    - redis-cache-exporter
    - redis-worker-exporter
    - nginx-exporter
    - netbox
    ports:
    - 9090
    volumes:
    - ./monitoring/prometheus/:/etc/prometheus/
    - prometheus-data:/prometheus/data

  # grafana
  grafana:
    image: grafana/grafana:7.2.1
    depends_on:
    - prometheus
    ports:
    - 3000
    volumes:
    - ./monitoring/grafana/plugins/:/var/lib/grafana/plugins/:z,ro
    - ./monitoring/grafana/provisioning/:/etc/grafana/provisioning/:z,ro
    - ./monitoring/grafana/dashboards/:/etc/grafana/dashboards/:z,ro
    - grafana-data:/var/lib/grafana

volumes:
  netbox-static-files:
    driver: local
  netbox-nginx-config:
    driver: local
  netbox-media-files:
    driver: local
  netbox-postgres-data:
    driver: local
  netbox-redis-data:
    driver: local
  prometheus-data:
    driver: local
  grafana-data:
    driver: local