Skip to content

Installing FunnelFlux

FunnelFlux is self-hosted. You install it on a server you control, then point a domain at that server.

If you would rather not do this yourself, email support or use the chat icon on this page.

We can deploy a server for you if you send hosting-account access.

This article is the current install path: a fresh Ubuntu 24.04 LTS VPS and the ff1.sh → ff4.sh scripts.

Do not use shared hosting, cPanel, Plesk, or a machine that already serves other sites.

  1. A new Ubuntu 24.04 LTS VPS with root (or sudo) SSH access.
  2. A domain or subdomain you control, for example tracker.example.com.
  3. The licensed email and license key from your FunnelFlux account.
  4. Outbound internet from the server (package mirrors, Let’s Encrypt, and license checks).

Recommended size: 2 vCPU, 4 GB RAM, and at least 50 GB SSD. Plans under about $20/month are usually too small.

We recommend:

Pick the datacenter near your traffic, not near you. Western Europe is a reasonable default for mixed global traffic.

When you create the VPS:

  • OS: Ubuntu 24.04 LTS x64
  • Enable provider backups if they offer them
  • Attach an SSH key so you can log in as root

More hardware notes: Minimum installation requirements.

Provider click-through screenshots (use Ubuntu 24.04, not 22.04): Install on Vultr.

Step What you do
1 Point DNS at the server
2 SSH in and run ff1.sh
3 Issue a Let’s Encrypt certificate
4 Run ff2.sh (databases)
5 Run ff3.sh (download and unpack FunnelFlux)
6 Finish install.php in the browser
7 Run ff4.sh (remove installer files)
8 Install the V2 UI

Scripts live at https://licensing.funnelflux.com/installers/ubuntu_24/.

ff1.sh installs Nginx, PHP 8.4-FPM, ionCube Loader, MariaDB, ClickHouse, Memcached, and a firewall with SSH, HTTP, and HTTPS open.

Create an A record for your tracker hostname to the VPS public IP.

tracker.example.com. A 203.0.113.10

Wait until it resolves from your laptop:

Terminal window
dig +short tracker.example.com

It must return that IP before you continue.

DNS overview: How DNS works. Cloudflare notes: Using Cloudflare DNS.

If the domain is on Cloudflare, set the record to DNS only (grey cloud) until the certificate in step 3 exists. Orange-cloud proxying usually breaks Let’s Encrypt HTTP-01. After HTTPS works, you can enable the proxy. Use SSL/TLS mode Full (strict), never Flexible.

Terminal window
ssh root@YOUR_SERVER_IP

Then:

Terminal window
wget https://licensing.funnelflux.com/installers/ubuntu_24/ff1.sh
bash ff1.sh

This is non-interactive and often takes 10–20 minutes. It updates the OS, installs the stack above, writes a temporary self-signed certificate, opens the firewall, and enables FunnelFlux’s once-per-minute cron.

If SSH drops, reconnect and go on to the next step. Do not re-run ff1.sh unless the first run failed.

Nginx is already listening on 80 and 443.

Terminal window
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d tracker.example.com

Add extra names with more -d flags, for example -d www.tracker.example.com.

Confirm HTTPS:

Terminal window
curl -I https://tracker.example.com

You want a response from Nginx, not a certificate warning.

Terminal window
wget https://licensing.funnelflux.com/installers/ubuntu_24/ff2.sh
bash ff2.sh

This creates MariaDB database flux_db and user flux_user, sets up ClickHouse access, and writes:

  • /usr/share/nginx/html/fluxdb.ini
  • /usr/share/nginx/html/clickhouse-password.xml

The script prints the database password. Keep that terminal output until the wizard in step 6 has finished. The wizard prefills these values; you should not invent new database credentials.

Terminal window
wget https://licensing.funnelflux.com/installers/ubuntu_24/ff3.sh
bash ff3.sh

It asks for:

  • Licensed email (the address the license is registered to)
  • License key

It writes those into fluxlic.ini so the wizard can prefill them.

If latest_version.zip is not already in the current directory or /tmp, it downloads:

https://licensing.funnelflux.com/downloads/installers/latest_version.zip

Then it extracts install.php and data.bin into /usr/share/nginx/html/.

Open:

https://tracker.example.com/install.php

Use the same hostname you put on the certificate.

The first page unpacks data.bin. That can take a minute on a small VPS. Do not close the tab.

Then you get three forms.

License — license key and licensed email. These should already be filled from ff3.sh. If they are empty, paste the same values you typed there.

Database — keep the prefilled host (localhost), name (flux_db), user (flux_user), and password from ff2.sh.

Admin user — this is the FunnelFlux login, not the Linux user.

  • Username — default admin
  • Password — choose a strong password and store it
  • Email for notifications — can be the same as the license email

Click Create and wait until it reports success. Do not close the tab while it creates tables.

When it finishes, sign in at:

https://tracker.example.com/admin/

or:

https://tracker.example.com/admin/login.php

Only after the wizard has completed:

Terminal window
wget https://licensing.funnelflux.com/installers/ubuntu_24/ff4.sh
bash ff4.sh

This deletes install.php, data.bin, fluxdb.ini, fluxlic.ini, and the downloaded scripts in your home directory. It also tightens permissions under /usr/share/nginx/html.

If you run it too early, the web installer cannot finish.

ff1.sh currently allows ports 22, 80, 443, 3306, and 8123. MariaDB (3306) and ClickHouse HTTP (8123) do not need to be public. After a normal install you can close them:

Terminal window
sudo ufw delete allow 3306/tcp
sudo ufw delete allow 8123/tcp
sudo ufw status

The encoded ZIP does not include the React admin UI.

Terminal window
cd /usr/share/nginx/html
bash ./scripts/install-v2-ui-from-release.sh --latest

Then open:

https://tracker.example.com/v2-ui/

It uses the same login as /admin/.

To list versions without installing:

Terminal window
bash ./scripts/install-v2-ui-from-release.sh --list

If the VPS is larger than 2 vCPU / 4 GB:

Terminal window
wget https://licensing.funnelflux.com/installers/ubuntu_24/optimize-server.sh
sudo bash optimize-server.sh

Pick the preset closest to the real CPU and RAM.

Next: Getting in to the tracker for the first time.

If the license key is rejected, see My license key is not accepted during installation.