# Using Podman (recommended)podman pull ghcr.io/myk-org/github-webhook-server:latest# Using Dockerdocker pull ghcr.io/myk-org/github-webhook-server:latest
The recommended way to run the webhook server is using Docker Compose. Here’s the complete configuration from examples/docker-compose.yaml:
services: github-webhook-server: container_name: github-webhook-server image: ghcr.io/myk-org/github-webhook-server:latest volumes: - "./webhook_server_data_dir:/home/podman/data:Z" # Should include config.yaml and webhook-server.private-key.pem # Mount temporary directories to prevent boot ID mismatch issues - "/tmp/podman-storage-${USER:-1000}:/tmp/storage-run-1000" environment: - PUID=1000 - PGID=1000 - TZ=Asia/Jerusalem - MAX_WORKERS=50 # Defaults to 10 if not set - WEBHOOK_SERVER_IP_BIND=0.0.0.0 # IP to listen - WEBHOOK_SERVER_PORT=5000 # Port to listen - WEBHOOK_SECRET=<secret> # If set verify hook is a valid hook from Github - VERIFY_GITHUB_IPS=1 # Verify hook request is from GitHub IPs - VERIFY_CLOUDFLARE_IPS=1 # Verify hook request is from Cloudflare IPs - ENABLE_LOG_SERVER=true # Enable log viewer endpoints (default: false) - ENABLE_MCP_SERVER=false # Enable MCP server for AI agent integration (default: false) # AI CLI API keys for pr-test-oracle integration # - ANTHROPIC_API_KEY=sk-ant-xxx # Claude Code # - GEMINI_API_KEY=xxx # Gemini CLI # - CURSOR_API_KEY=xxx # Cursor Agent (API key method) # For Cursor interactive login: docker exec -it github-webhook-server agent ports: - "5000:5000" privileged: true restart: unless-stopped
# Check volume ownershipls -la ./webhook_server_data_dir# Fix ownership (1000:1000 is the podman user in the container)chown -R 1000:1000 ./webhook_server_data_dir