Skip to content

Step 1 of 8 · Docker

Run install.sh on your Linux server and open the appliance on port 8443.

  • A Linux server with 4 GB RAM and 20 GB of free disk space.
  • Docker 24.0 or later with Compose v2, plus Python 3. The script offers to install Docker if it is missing.
  • Access as root or a user with sudo.
  1. Log in to the server as the user who will own the installation and run:

    Terminal window
    bash <(curl -fsSL https://sslbrain.com/install.sh)
  2. Accept the script’s suggestions. If it adds your user to the docker group, it stops: log out and back in, then run the same command.

  3. Wait while the script downloads the appliance, checks its signature and starts it. This takes up to 5 minutes.

  1. Open the address printed by the script, for example https://192.168.1.20:8443/setup.

  2. Continue past the browser’s warning about the self-signed certificate.

The script shows sslbrain is running. The browser shows Log in with sslbrain Cloud. Include port :8443 in the appliance address.

Continue with 2. First-time setup.

  • The script stops with code 2 → install what the error names and run the script again.
  • The script stops with code 3 → the signature could not be approved. The appliance has not started. Download the script again and see No connection to sslbrain Cloud (EU).
  • The script stops with code 4 → read docker logs sslbrain and data/control/controller.log in the deployment directory.
  • The browser cannot open the page → run docker ps. The sslbrain container must be healthy and port 8443 must be open from the client to the server.
  • The log shows Permission denied on /data → run sudo chown -R 1000:1000 ~/sslbrain/data. Use your deployment directory if it differs.
  • The appliance cannot reach sslbrain Cloud → check Network and firewall.

Everything the appliance stores is in the data directory inside the installation directory, ~/sslbrain/data by default. The container sees it as /data. It holds the database, the vault, the appliance’s keys and the backups you take in the web interface.

  • The directory must be owned by user and group 1000. The script sets this itself.
  • Never delete or move the directory while the appliance is running.
  • Copy backups off the server. See Save a backup.
  • The host controller’s log is ~/sslbrain/data/control/controller.log.

Put the proxy’s address or network in TRUSTED_PROXIES in docker-compose.yml, for example TRUSTED_PROXIES=10.0.0.5,192.168.50.0/24. Then recreate the container with docker compose up -d. Without that line, the appliance does not trust the proxy’s X-Forwarded-For. If the proxy runs on the same server, its traffic comes from the Docker network’s gateway (docker network inspect), not from 127.0.0.1.

You maintain the server’s operating system and Docker yourself.

  • docker-compose.yml and two public keys for the signature check in the installation directory, ~/sslbrain by default.
  • The host controller /usr/local/bin/sslbrain-controller. It carries out the updates, restarts and restores you start from the web interface, and starts the appliance again if it stops.
  • The cron entry * * * * * /usr/local/bin/sslbrain-controller, which runs the host controller every minute.
  • sslbrain-shutdown.service, if the server uses systemd. It stops the appliance cleanly when the server shuts down.
OptionEnvironment variableWhat it does
--deploy-dir <path>DEPLOY_DIRInstallation directory. Default ~/sslbrain.
--yes or -yASSUME_YES=1Answers yes to every question, for example for an unattended installation.
--skip-cronSKIP_CRON=1Creates no cron entry. The script prints how to run the controller instead.
DECLINE_DOCKER_INSTALL=1Does not install Docker if it is missing.
--helpShows the options.
CodeMeaning
0The installation is complete.
1A required step was declined, or an option was invalid.
2Something is missing on the server, such as Docker, Compose v2 or Python 3.
3The signature on the appliance image could not be verified. The appliance has not been started.
4The appliance did not answer within 5 minutes.

Downloads in sslbrain Cloud offers a compose file, docker-compose.yml. It starts the appliance on port 443 with its data in the Docker volume sslbrain-data. It does not install the host controller.

Without the controller, the appliance cannot update itself. Update it by hand in the directory containing docker-compose.yml:

Terminal window
docker compose pull && docker compose up -d

The paths below use the default directory, ~/sslbrain. Choose another with --deploy-dir.

  1. Run the script on the same server:

    Terminal window
    bash <(curl -fsSL https://sslbrain.com/install.sh)
  2. The script finds the running sslbrain container, stops it and copies its data from the volume to ~/sslbrain/data. It keeps the installation ID, licence, certificates and port, installs the controller and its cron entry, and starts the appliance from ~/sslbrain.

  3. Copy any settings you changed, such as TRUSTED_PROXIES, from your existing docker-compose.yml into ~/sslbrain/docker-compose.yml. Run docker compose up -d from ~/sslbrain to apply them. From then on, start the installation only from ~/sslbrain.

  4. Check that the appliance runs. The Docker volume is left unchanged as a backup. Docker names it after the folder the compose file was in, for example sslbrain_sslbrain-data, and the script prints the name. Delete it yourself once the appliance runs.