Docker installation
Install TestingOps On-Premise on a Linux server with Docker Compose
1. Prerequisites
- A Linux server with Docker Engine 24+ and Docker Compose v2 (
docker compose version). - 8 GB RAM, 4 vCPU, 100 GB disk (requirements).
- Outbound HTTPS to the TestingOps registry and to your model provider.
- Registry credentials and (optionally) the license file from the TestingOps team.
2. Download the installation kit
mkdir testingops && cd testingops
wget https://downloads.testingops.ai/testingops-configs.zip
unzip testingops-configs.zip && cd testingops
The kit contains:
| File | Purpose |
|---|---|
install.sh |
One-command installation |
.env |
Installation settings: version, registry, data directory, ports, bundled database |
env.list |
Application settings: public URL, model keys, execution engine, SMTP, storage |
docker-compose.yml |
Services: db (PostgreSQL + pgvector), migrate, app, caddy |
caddy/Caddyfile |
HTTP front end; HTTPS is configured here (HTTPS) |
license/ |
Put license.txt here |
upgrade.sh, backup.sh, restore.sh |
Day-2 operations |
3. Edit env.list
nano env.list
TESTINGOPS_PUBLIC_URL— the address users will open, e.g.http://testingops.company.local(usehttps://once TLS is configured).- At least one model key (
ANTHROPIC_API_KEYorOPENAI_API_KEY), or configure an OpenAI-compatible endpoint later from Administration → Integrations → AI models. TESTINGOPS_SMTP_*if you want invitation and password-reset e-mails.
.env can stay as shipped. Change TESTINGOPS_DATA_DIR (default /data-testingops) if the
data should live on another disk, and the ports if 80/443 are taken.
4. Run the installer
./install.sh
The installer checks prerequisites, generates the database password and the session secret, creates the data directory, logs into the registry (asks for the credentials you received), pulls the images, starts the database, runs the migrations, starts the application and waits for the health check. Non-interactive:
TESTINGOPS_REGISTRY_USER=… TESTINGOPS_REGISTRY_PASSWORD=… ./install.sh --no-prompt
5. Activate the license
Open TESTINGOPS_PUBLIC_URL in a browser. An On-Premise installation does not serve anything
before a valid license is installed, so the first screen asks for it: paste the license token you
received from the TestingOps team (or choose the license.txt file). The token is signed for your
company and carries its expiry; an edited or foreign token is refused. Alternatively copy the file
to license/license.txt and docker compose restart app.
When the license expires, enterprise features switch off after the grace period but the installation keeps running and your data is never locked. Renewal is a new token pasted on Administration → Enterprise.
6. Create the first user
Create the first account and confirm the claim this instance prompt — that account becomes the instance admin. Then close self-registration so the rest of the team joins by invitation:
sed -i 's/^TESTINGOPS_AUTH_DISABLE_SIGN_UP=.*/TESTINGOPS_AUTH_DISABLE_SIGN_UP=true/' env.list
docker compose up -d
7. First configuration
- License status at any time:
GET /api/license→"state":"valid". - Administration → Integrations: trackers (Jira, GitLab…), the execution engine (RunningOps), AI models, mobile lines.
- Invite users from Administration → Organization & users.
Useful commands
docker compose ps # service state
docker compose logs -f app # application log
docker compose logs migrate # migration output
docker compose exec app curl -s http://127.0.0.1:3100/api/health
Everything persistent is under TESTINGOPS_DATA_DIR: postgres/, app/ (uploads, evidence,
the secrets master key), caddy/ (certificates). Back it up with ./backup.sh
(backup and restore).