Docker compose
This page describes how to set up a self-managed instance of Plumber using Docker-compose.
💻 Requirements
- GitLab instance version >=17.7
- The system requires a Linux server. It runs in 🐳 Docker containers using a docker-compose configuration. Specifications:
- OS: Ubuntu or Debian
- Hardware
- CPU x86_64/amd64 with at least 2 cores
- 4 GB RAM
- 250 GB of storage for Plumber
- Network
- Users must be able to reach the Plumber server on TCP ports 80 and 443
- The Plumber server must be able to access internet
- The Plumber server must be able to communicate with GitLab instance
- The installation process requires write access to the DNS Zone to set up Plumber domain
- Installed software
🚀 Installation
1. Configure your DNS
Create a DNS A record pointing your chosen domain to your server’s public IP address:
- Name:
<your_plumber_domain>(e.g.plumber.mydomain.com) - Type:
A - Content:
<your-server-public-ip>
2. Setup Plumber
Run the interactive installer on your server:
curl -fsSL https://raw.githubusercontent.com/getplumber/platform/main/install.sh | bashChoose “Production” when prompted. The installer will guide you through:
- Domain name configuration
- GitLab OIDC application setup
- TLS certificate method selection
- Database: internal PostgreSQL or your own external database
- Secrets: automatically generated
At the end, the installer will start Plumber for you.
Info
You can also clone the repository first and run the installer locally:
git clone https://github.com/getplumber/platform.git plumber-platformcd plumber-platform./install.shStep 1: Setup your environment
Clone the repository on your server
git clone https://github.com/getplumber/platform.git plumber-platformcd plumber-platformCreate your configuration file
cp .env.example .envcat versions.env >> .envStep 2: Configure Organization
In your .env file:
If you want to connect Plumber to a specific GitLab group only: add the path of the group in
ORGANIZATIONvariable (to run the onboarding, you must be at least Maintainer in this group).env ORGANIZATION="<group-path>"If you want to connect Plumber to the whole GitLab instance: let the
ORGANIZATIONvariable empty (to run the onboarding, you must be a GitLab instance Admin).env ORGANIZATION=""
Step 3: Configure Domain name and GitLab URL
Edit the .env file by updating value of DOMAIN_NAME and JOBS_GITLAB_URL variables
DOMAIN_NAME="<your_plumber_domain>"JOBS_GITLAB_URL="https://<url_of_your_gitlab_instance>"DOMAIN_NAME="plumber.mydomain.com"JOBS_GITLAB_URL="https://gitlab.mydomain.com"Step 4: Configure GitLab OIDC
Plumber uses GitLab as an OAuth2 provider to authenticate users.
Create an application on your GitLab instance. Open any group and navigate to Settings > Applications.
Create an application with the following information:
- Name:
Plumber - Redirect URI:
https://<your_plumber_domain>/api/auth/gitlab/callback - Confidential:
true(keep the box checked) - Scopes:
api
Click Save Application, then copy the Application ID and Secret into your .env file:
GITLAB_OAUTH2_CLIENT_ID="<application-id>"GITLAB_OAUTH2_CLIENT_SECRET="<application-secret>"Step 5: Generate secrets
Generate random secrets and set them in your .env file:
sed -i."" "s/^SECRET_KEY=.*/SECRET_KEY=\"$(openssl rand -hex 32)\"/" .envsed -i."" "s/^JOBS_DB_PASSWORD=.*/JOBS_DB_PASSWORD=\"$(openssl rand -hex 16)\"/" .envsed -i."" "s/^JOBS_REDIS_PASSWORD=.*/JOBS_REDIS_PASSWORD=\"$(openssl rand -hex 16)\"/" .envStep 6: Configure deployment profile
Option A — Let’s Encrypt (automatic certificates):
COMPOSE_PROFILES="letsencrypt,internal-db"CERT_RESOLVER="le"No further action needed! Certificates will be automatically generated at first launch.
Option B — Custom certificates:
COMPOSE_PROFILES="custom-certs,internal-db"CERT_RESOLVER=""Copy your certificate files:
cp /path/to/your/fullchain.pem .docker/traefik/certs/plumber_fullchain.pemcp /path/to/your/privkey.pem .docker/traefik/certs/plumber_privkey.pemIf you are using an external PostgreSQL database, remove
,internal-dbfromCOMPOSE_PROFILESand configure your database connection by uncommenting and updating the following variables in your.envfile:.env JOBS_DB_HOST="your-db-host"JOBS_DB_PORT="5432"JOBS_DB_USER="your-db-user"JOBS_DB_NAME="plumber"JOBS_DB_SSLMODE="disable" # Options: disable, require, verify-caJOBS_DB_TIMEZONE="Europe/Paris"
Step 7: (Optional) Add your custom CA
If your GitLab instance (or Plumber with custom certificates) uses a TLS certificate signed by your own Certificate Authority (CA), add the CA certificate file (.pem or .crt) in .docker/ca-certificates/:
cp /path/to/your/ca.pem .docker/ca-certificates/ca.pemStep 8: Launch the application
docker compose up -d⏫ Update
To update your self-managed instance to a new version, run the update script:
./scripts/update.shThe script will:
- Stop the running containers
- Pull the latest changes from the git repository
- Load the new image versions
- Migrate your
.envconfiguration if needed - Start the containers with the new images
🔄 Backup and restore
Data required to fully backup and restore a Plumber system are the following:
- Configuration file:
.env - Databases:
- PostgreSQL database of Jobs service
- Files data:
- File storing data about certificate for Traefik service
All these data can be easily backup and restored using 2 scripts from the installation git repository:
scripts/backup.shscripts/restore.sh
💽 Backup
To backup the system, go to your installation git repository and run the following command:
./scripts/backup.sh 18The script will create a backups directory and create a backup archive inside it prefixed with the date (backup_plumber-$DATE)
Info
You can use a cron job to perform regular backups. Here is a cron job that launch a backup every day at 2am:
0 2 * * * /plumber-platform/scripts/backup.sh 18It can be added to your crontab with the command crontab -e. Check more information about cron jobs here.
🛳️ Restore
To restore a backup from scratch on a new system, follow this process:
Be sure that your new system is compliant with requirements
Copy the backup file on your new server
Clone the installation repository
Terminal window git clone https://github.com/getplumber/platform.git plumber-platformcd plumber-platformIf the IP address of your server changed from your previous installation, update your DNS records. See Configure your DNS
Launch the restore script
Terminal window ./scripts/restore.sh 18 <path_to_your_backup_file>