Concourse
Concourse is the inboard backend server. It handles authentication, user management, extension hosting, query dispatch, and audit logging.
Quick start
Section titled “Quick start”docker run -d --name concourse \ -p 8080:8080 \ -v concourse-data:/data \ -e CONCOURSE_JWT_SECRET=your-secret-at-least-32-bytes-long \ -e CONCOURSE_ADMIN_EMAIL=admin@example.com \ -e CONCOURSE_ADMIN_PASSWORD=changeme \ ghcr.io/inboard-ai/concourse:latestVerify the server is running:
curl http://localhost:8080/healthExpected response:
{"status": "ok", "version": "0.1.0"}Docker Compose
Section titled “Docker Compose”For production deployments, use Docker Compose with a config file:
services: concourse: image: ghcr.io/inboard-ai/concourse:latest ports: - "8080:8080" volumes: - concourse-data:/data - ./config.yaml:/etc/concourse/config.yaml:ro environment: CONCOURSE_JWT_SECRET: ${CONCOURSE_JWT_SECRET} CONCOURSE_ADMIN_EMAIL: admin@example.com CONCOURSE_ADMIN_PASSWORD: changeme healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s timeout: 3s start_period: 5s
volumes: concourse-data:Container layout
Section titled “Container layout”| Path | Purpose |
|---|---|
/app/concourse-api | Server binary |
/etc/concourse/config.yaml | Configuration file (optional, mount read-only) |
/data | SQLite databases (primary + audit). Mount a persistent volume here. |
First run
Section titled “First run”On first startup, Concourse creates the database schema and bootstraps an admin user from the CONCOURSE_ADMIN_EMAIL and CONCOURSE_ADMIN_PASSWORD environment variables. These variables are only used when no admin user exists.
Networking
Section titled “Networking”Concourse listens on a single port (default 8080) for both HTTP API requests and WebSocket connections. It does not terminate TLS. For HTTPS, place Concourse behind a reverse proxy such as nginx, Caddy, or a cloud load balancer.
Example nginx configuration:
server { listen 443 ssl; server_name concourse.example.com;
ssl_certificate /etc/ssl/certs/concourse.pem; ssl_certificate_key /etc/ssl/private/concourse.key;
location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }}Stopping and upgrading
Section titled “Stopping and upgrading”# Stopdocker stop concourse
# Pull new versiondocker pull ghcr.io/inboard-ai/concourse:latest
# Start with same volumesdocker start concourseDatabase migrations run automatically on startup. Back up the /data volume before upgrading.