The preflight check
GoRunner tests everything it depends on before it starts, and says in plain sentences what to fix.
This page is for self-hosted installations. On GoRunner Cloud, GoRunner runs this for you.
It changes nothing it finds: a test table is rolled back, a test file is written and deleted, and the mail server is signed in to without sending.
- The setup
- Before GoRunner starts. A problem stops the setup; a re-run puts
.envback. - Every update
- The new version’s check, before anything changes.
- Every container start
- A quick part: the settings, the key, and whether the stores answer.
- Kubernetes
- In the migrations Job, before it applies anything.
Run it yourself
docker compose run --rm checkkubectl --namespace gorunner logs job/<its name> -c check✗ Database: 4 GoRunner processes with DB_MAX_CONNS=50 may open 202 connections; the server allows 197.
Set DB_MAX_CONNS=47 in .env (or raise max_connections).
✓ Redis: 7.4.11, never deletes keys, saved to disk, wake-ups and sessions only. Runs, Storage and Queue data are in Postgres (Redis keeps a copy for rollback)
✓ Storage: none: step data stays in the database
✓ Mail: none. People sign in with a password
✓ Settings: role all, ENCRYPTION_KEY opens the stored keys
✓ Workflow steps: private networks blocked
1 problem to fix (45 ms). GoRunner will not work until it is fixed.- ✓
- Fine: one line per part, listing what it found.
- !
- Worth fixing, but GoRunner works.
- ✗
- GoRunner won’t work until it is fixed. The line under it says what to change.
The parts come in order: Database, Redis, Storage, Mail, then Company proxy and Workers when they apply, Settings, and Workflow steps.
Options
--json- One JSON object, each test with its status, message, fix, and the pool size it recommends.
--quick- Only what a container checks as it starts.
--role api- Check for another role than
GORUNNER_ROLE:all,apiorworker. --timeout 60s- The most the whole check may take. 60 seconds by default.
--context helm- Name each fix as a Helm value, not a line of
.env.
What it tests
- Settings
- Only known words in the mode lines, every line each choice needs, and an
ENCRYPTION_KEYof the right shape that is this installation’s own. - Database
- PostgreSQL 15 or newer; can create tables and owns GoRunner’s; the extensions; enough connections, keeping 5 free; no pooler in transaction mode; the same version as this one, neither ahead nor behind (a worker server never applies migrations). Before an update, its line names the move, such as
schema 086 → 089. Warns about tables that aren’t GoRunner’s, ansslmodethat may fall back to no encryption, andPOSTGRES_HOSTset beside a whole address. - Redis
- 6.2 or newer;
noeviction; not in cluster mode. Warns when it isn’t saved to disk, holds other keys, allows too few clients (maxclients), or the server doesn’t allow memory overcommit: runsudo sysctl -w vm.overcommit_memory=1and add it to/etc/sysctl.d. - Workers
- On an api server, warns until a worker has checked in.
- Storage
- The bucket exists or can be made; a test file is written, read and deleted. Warns when a versioned bucket’s key may not delete versions (
s3:DeleteObjectVersion). - The server answers, its encryption works, the sign-in is accepted. Nothing is sent.
- Company proxy
- Readable settings, and the proxy answers. Warns when it is asked for sites by name.
- Workflow steps
- The private networks steps may reach.
Exit statuses
- 0
- Nothing wrong. Warnings may be there.
- 1
- At least one problem.
- 2
- The command was wrong, such as an unknown option.
- 4
- A problem that protects data GoRunner already holds.
Going past a problem
Sure it doesn’t matter? The setup and the update take --skip-check. The check still runs, and says how many problems it went past. On Kubernetes, check.enabled: false leaves them in the log.
./deploy.sh --skip-check v2026.10.24Status 4 is never skipped. It means one of two things: file storage is switched off while step data still lives there, or ENCRYPTION_KEY isn’t this installation’s key. Switch storage back on, or put the right key back.