Skip to main content
This guide covers deploying the Pullbase central server using containers. The central server coordinates environments, monitors Git repositories, and serves the web dashboard.
Agents should run natively on your Linux servers, not in containers. Container agents require privileged access and have significant limitations. See Agent Operations for native agent installation.This page is for deploying the central server only.
Pullbase publishes a container image for the central server (pullbaseio/pullbase). This guide shows how to deploy it with Docker Compose, but the same environment variables apply if you run the image under Kubernetes, Nomad, or another orchestrator.

Prerequisites

  • Docker 24.0+ with the Compose plugin (or an equivalent container runtime)
  • PostgreSQL 15+ (container service or managed instance)
  • Git repository containing your environment configuration (config.yaml)
  • (Production) Reverse proxy for TLS termination
For production clusters, place PostgreSQL on managed infrastructure, store secrets in a vault, and terminate TLS at a reverse proxy. The examples below target a single host for clarity.

Directory layout

  • config/ holds the GitHub App private key or other secrets you mount read-only.
  • logs/ can be bound if you prefer file-based log collection; otherwise rely on docker logs.

Compose template

docker-compose.yml
Populate secrets in .env:

Launch the stack

1

Start services

2

Verify health

3

Tail logs

TLS configuration

Pullbase supports two approaches for TLS in production.

Option 1: Native TLS

Enable native TLS by adding these environment variables to your Compose file:
Mount your certificates in the config volume:
For development, you can start the server with --generate-dev-certs to auto-generate self-signed certificates.

Option 2: Reverse proxy

For existing infrastructure, place Pullbase behind a reverse proxy that handles TLS:

NGINX example

Traefik example

Always use TLS in production. Agents transmit authentication tokens over the network, and the web UI handles user credentials.

External databases

Using Amazon RDS, Azure Database for PostgreSQL, or another managed service?
  1. Create the database and grant Pullbase a dedicated user.
  2. Set PULLBASE_DB_HOST, PULLBASE_DB_USER, PULLBASE_DB_PASSWORD, and PULLBASE_DB_NAME to match the instance.
  3. Enable TLS by setting PULLBASE_DB_SSLMODE=require or PULLBASE_DB_SSLMODE=verify-full.
  4. Remove the db service from docker-compose.yml.

Upgrades

  • Pin the image tag (for example, pullbaseio/pullbase:vX.Y.Z) and update intentionally.
  • Run docker compose pull && docker compose up -d to roll forward with minimal downtime.
  • Review release notes for database migrations and watch container logs during the upgrade.
Automate backups before upgrades: docker compose exec db pg_dump -U pullbaseuser pullbasedb > backup.sql. Managed databases often provide scheduled snapshots—enable them.