Skip to content

Self-host VisiConvert

A self-hosted install is one workspace. Docker runs the Rust API, the web app and a dedicated PostgreSQL database. You do not need a hosted subscription or a Twilio account to install it and try form leads and bookings.

  • Linux or macOS with Docker and the Docker Compose plugin.
  • Bash and Python 3.11 or newer. Rust, Node and PostgreSQL run inside Docker.
  • About 4 GiB of free RAM and 20 GiB of disk for the first build.
  • A free host port. The default is 3100, bound to loopback only.

Download the source from GitHub, then from the source directory:

Terminal window
bash scripts/self-host.sh init
bash scripts/self-host.sh up

Open http://127.0.0.1:3100. The login key is VISICONVERT_API_KEY in .local/self-host/config.env. The installer never prints it.

init generates the database password, workspace key and encryption key, and writes them to a mode-600 file. up builds the image, backs up the database, runs migrations, starts the app and checks it.

To use a different port or a public domain, pass them to the first init:

Terminal window
bash scripts/self-host.sh init --port 43110 --origin https://leads.example.com

Twilio has to reach your server over HTTPS. Point a reverse proxy or a Cloudflare Tunnel at http://127.0.0.1:3100 and set PUBLIC_URL in config.env to the HTTPS origin, then run up again. The installer does not manage DNS, TLS or firewalls.

For first access to a remote server, an SSH tunnel is enough:

Terminal window
ssh -N -L 3100:127.0.0.1:3100 user@your-server
Terminal window
bash scripts/self-host.sh status
bash scripts/self-host.sh verify
bash scripts/self-host.sh logs
bash scripts/self-host.sh backup
bash scripts/self-host.sh stop

Copy in the new source without deleting .local/self-host/, then run bash scripts/self-host.sh up. It backs up the database before migrating, and only restarts the app after migrations succeed.

Backups go to .local/self-host/backups/<timestamp>/. Each has the database dump, a copy of the configuration and a checksum manifest.

Restores only go into an empty installation, so they can never overwrite live data. The full procedure, along with rollback and troubleshooting, is in the self-hosting guide on GitHub.