Skip to content

docker-compose.yml

yml
x-environment: &oncall-environment
  DATABASE_TYPE: sqlite3
  BROKER_TYPE: redis
  BASE_URL: http://engine:8080
  SECRET_KEY: LQvXRJjAUe9piep89ljDvqAGQktmxXLG
  FEATURE_PROMETHEUS_EXPORTER_ENABLED: ${FEATURE_PROMETHEUS_EXPORTER_ENABLED:-false}
  PROMETHEUS_EXPORTER_SECRET: ${PROMETHEUS_EXPORTER_SECRET:-}
  REDIS_URI: redis://:redis_redis@redis:6379/0
  DJANGO_SETTINGS_MODULE: settings.hobby
  CELERY_WORKER_QUEUE: "default,critical,long,slack,telegram,mattermost,webhook,retry,celery,grafana"
  CELERY_WORKER_CONCURRENCY: "1"
  CELERY_WORKER_MAX_TASKS_PER_CHILD: "100"
  CELERY_WORKER_SHUTDOWN_INTERVAL: "65m"
  CELERY_WORKER_BEAT_ENABLED: "True"
  GRAFANA_API_URL: http://grafana:3000

services:
  engine:
    image: grafana/oncall:latest
    container_name: oncall_engine
    restart: always
    ports:
      - "10258:8080"
    command: sh -c "uwsgi --ini uwsgi.ini"
    networks:
      - 1panel-network
    extra_hosts:
      - "host.docker.internal:host-gateway"  
    environment: *oncall-environment
    volumes:
      - ./oncall_data:/var/lib/oncall
    depends_on:
      oncall_db_migration:
        condition: service_completed_successfully


  celery:
    image: grafana/oncall:latest
    container_name: oncall_celery
    restart: always
    command: sh -c "./celery_with_exporter.sh"
    environment: *oncall-environment
    volumes:
      - ./oncall_data:/var/lib/oncall
    networks:
      - 1panel-network  
    extra_hosts:
      - "host.docker.internal:host-gateway"  
    depends_on:
      oncall_db_migration:
        condition: service_completed_successfully

  oncall_db_migration:
    image: grafana/oncall:latest
    command: python manage.py migrate --noinput
    environment: *oncall-environment
    volumes:
      - ./oncall_data:/var/lib/oncall


  grafana:
    image: grafana/grafana:12.4.3
    container_name: grafana
    restart: always
    ports:
      - "13000:3000"
    networks:
      - 1panel-network
    extra_hosts:
      - "host.docker.internal:host-gateway"  
    environment:
      GF_FEATURE_TOGGLES_ENABLE: externalServiceAccounts
      GF_SECURITY_ADMIN_USER: admin
      GF_SECURITY_ADMIN_PASSWORD: proposal8-proud-modulator
      GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS: grafana-oncall-app
      GF_INSTALL_PLUGINS: grafana-oncall-app
      GF_AUTH_MANAGED_SERVICE_ACCOUNTS_ENABLED: true
    volumes:
      - ./grafana_data:/var/lib/grafana
      - ./grafana.ini:/etc/grafana/grafana.ini


networks:
    1panel-network:
        external: true

宿主机执行执行

bash
curl -X POST 'http://admin:proposal8-proud-modulator@localhost:13000/api/plugins/grafana-oncall-app/settings' \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": true,
    "jsonData": {
      "stackId": 5,
      "orgId": 100,
      "onCallApiUrl": "http://engine:8080/",
      "grafanaUrl": "http://grafana:3000/"
    }
  }'
/src/technology/dateblog/2026/04/20260417-grafana-oncall-%E9%83%A8%E7%BD%B2.html