Use this method when auto-installation is not available for your provider. SSH in as root and run one command — same Track Arrow build: Docker, MySQL, Redis, ClickHouse, API, and admin panel.
ssh root@YOUR_IPssh root@YOUR_IPssh root@YOUR_IPInstall and image updates require an active Track Arrow subscription. Copy the license key from trackarrow.io (Licenses). Format: XXXX-XXXX-XXXX-XXXX. On the same page click Generate License Token and copy LICENSE_TOKEN (starts with ta_). The installer checks the key before it pulls images. A canceled, expired, or unpaid key stops install.
Buy or renew at trackarrow.io, then paste LICENSE_KEY and Generate License Token as LICENSE_TOKEN.
On a clean Ubuntu 22.04/24.04 server with at least 4 GB RAM, as root. The script installs Docker, downloads the runtime bundle, pulls images, and writes /root/trackarrow-credentials.txt. First run takes about 5–15 minutes. Log: /var/log/trackarrow-install.log.
export LICENSE_KEY="XXXX-XXXX-XXXX-XXXX"
export LICENSE_TOKEN="ta_xxxxxxxxxxxxxxxxx"
# Optional: beta channel instead of stable
# export LICENSE_CHANNEL="beta"
# Optional: HTTPS (A record must point to this server)
# export DOMAIN="tracker.example.com"
# export LETSENCRYPT_EMAIL="admin@example.com"
curl -fsSL https://docs.trackarrow.io/releases/install.sh | bash
When it finishes, open http://YOUR_SERVER_IP/ (or https://your-domain/ if you set DOMAIN). Then create an administrator. Read the password with cat /root/trackarrow-credentials.txt.
LICENSE_CHANNEL=beta installs the current Beta from https://docs.trackarrow.io/updates/beta.json. Leave LICENSE_CHANNEL unset for Stable when a stable tag exists. Maintenance → Update reads that feed after each GitHub Release.
If you prefer to run the steps yourself (same result as the one-liner):
# Prefer the one-liner above. Same idea, step by step:
# 1) Install Docker
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
# 2) Download the installer and set your license key
export LICENSE_KEY="XXXX-XXXX-XXXX-XXXX"
export LICENSE_TOKEN="ta_xxxxxxxxxxxxxxxxx"
curl -fsSL https://docs.trackarrow.io/releases/install.sh | bash
Installation log: 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, check that Redis on port 6379 is closed. Connection refused or timed out is correct.
# Windows (PowerShell)
Test-NetConnection YOUR_SERVER_IP -Port 6379
# TcpTestSucceeded : False = good
# macOS (Terminal)
nc -vz -w 3 YOUR_SERVER_IP 6379
# Linux
nc -vz -w 3 YOUR_SERVER_IP 6379
# if nc is missing: sudo apt install netcat-openbsd (Debian/Ubuntu)