Use this method when auto-installation is not available for your provider. The result is the same Track Arrow build: Docker, MySQL, Redis, ClickHouse, API, and admin panel.
ssh root@YOUR_IPssh root@YOUR_IPssh root@YOUR_IPOn a clean Ubuntu 22.04/24.04 server with at least 4 GB RAM:
# Install Docker
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
# Clone Track Arrow (use the repository URL from your license / account)
cd /opt
git clone https://github.com/YOUR_ORG/trackarrow.git
cd trackarrow
cp .env.example .env
# Start the stack
docker compose up -d
Wait until containers are healthy, then open http://YOUR_SERVER_IP/ in the browser. If you attached a domain, configure HTTPS (Caddy or the bundled reverse proxy) and open https://your-domain/.
Installation log on DigitalOcean-style scripts: less /var/log/trackarrow-install.log. Last lines: tail -n 200 /var/log/trackarrow-install.log.
On any VPS the default is the same: inbound 22, 80, 443 only; outbound leave open. Redis, MySQL, ClickHouse, and Adminer stay on localhost — Docker Compose already publishes those ports on 127.0.0.1 only.
Do not rely on UFW alone. Docker injects iptables rules and can expose a published port even when UFW looks closed. Prefer the provider cloud firewall (DigitalOcean, Hetzner, Vultr, …). If the provider has none, still keep compose ports bound to 127.0.0.1 and do not add -p 0.0.0.0:6379:6379.
From your computer (use nc, not telnet — macOS does not include telnet):
nc -vz -w 3 YOUR_SERVER_IP 6379
# refused / timed out = good
# succeeded = Redis is still public — fix the cloud firewall and compose bind