Before you begin, note this process is not overly complex but can be difficult if you are not familiar (and comfortable) with SSH console access to your servers.

If you have doubts, just ask us to help you - we're experts at this migration process and can do it all for you. Just use the chat widget available or contact

Step 1: Set up a new V2 server

For setting up your new installation, we highly recommend you follow our guides that use bash scripts to automate setup and config:

More instructions are in the documents above. 

NOTE: The scripts below only work with CentOS V7. Please do not deploy a CentOS V8 server as many commands change there, making these scripts fail.

The general scripts used can be downloaded using:


You can head to and log in, click Download FunnelFlux > here you can get your license key(s).

The minimum requirements have changed slightly for V2, namely the PHP/IonCube versions (see here).

A $20/mo VM with 4 GB RAM and 2 vCPU is still our recommendation.

Step 2: Migrate old V1 server config to V2

On your old server you will need to export the basic resources like funnels, landers, offers and so on.


Export Data

Connect to your old server via SSH and execute the following command:

mysqldump --hex-blob flux affiliate_networks campaign_funnel_connections campaign_funnel_nodes campaign_funnel_paths campaign_funnels campaigns code_snippets conditions domains meta page_categories pages rights_management stored_links stored_links_tags stored_links_visits tags traffic_filters traffic_source_categories traffic_source_url_params traffic_sources users visit_tags > data_only_dump.sql

This will export a file data_only_dump.sql  that contains the data you need.

Note, in the command above, the DB is called flux  -- you will need to change this to your database name if you chose something other than flux  during installation.


Import Data

Now that you have this dump, SSH into your V2 server and import it:

mysql flux < data_only_dump.sql

This will work if you used our setup scripts, which create the flux  database. Otherwise, be sure to change the name, user etc. accordingly:

mysql -u #MYSQL_USER# -p #MYSQL_PASS# #MYSQL_DB# < data_only_dump.sql

You can get some of the above details from your FunnelFlux appConfig.php file.

Now that data is imported, you can log into your V2 server and check it.


Update your V2 server appConfig.php file

The MySQL data export provides most config, but there are some values declared in appConfig that need to be updated separately.

We can't simply transfer the file, as the V2 appConfig is a bit different and is created by the installer.

Navigate to your FunnelFlux folder > /includes/appConfig.php

If using our installer, this is likely /usr/share/nginx/html/includes/appConfig.php

You can also find it in a console environment using find / -name appC*

In that file, there are a few key values:

const API_KEY = '7E86-1399';
const FORCE_URL_SCHEME = 'https';
const DEFAULT_URL = '';

In your new V2 server, you will want to ensure the API_KEY and DEFAULT_URL values get updated manually. If you are using the hosts test method below, the https forcing above can get in the way, so we suggest changing this last if its set to https.


Checking your new server

Since your domain is still pointed to the V1 server, its difficult to access your new server to check the config is correct and imported properly.

You can't just point a temporary domain/record at it since the license will not work. 

There's a simple trick here - you can temporarily update your hosts file so that  goes to your new server IP directly.

You can find instructions for Windows, Mac and Linux HERE.

In general, you'll be adding a line like: 

Now when you load your tracker domain, it should go to your old server and the license will still work, since the domain is the same.

Remember to remove this hosts entry once you're done.

Step 3: Update domain to point to V2 server

Now that you have a V2 server set up and you have confirmed the config is imported, funnels, landers, offers etc. are present and system settings area correct, you're ready to update your domain to point to the new instance.

The new instance should be able to handle all incoming traffic, the only difference being the old stats are absent.

If you are using Cloudflare and had the domain in orange cloud mode (using their reverse proxy network), this will be a fast and easy change without the annoyances of DNS caching.

Wherever you have your DNS records, update the A-record to point to the IP of the new server.


If you have your custom domains CNAME'd to a single core domain, you don't need to make any further changes. 

BUT, it would be wise to check all custom domains and ensure this is true, and otherwise update their IPs as well to point to the new server.

Don't panic since the old server is still working just fine too.

If you have hundreds of custom domains all using A-records, well, you'll see why we recommend having a core domain with others CNAME'ing to it 😅

Once you update the DNS records, keep an eye on the V2 installation's stats to see the data coming through.


Since you are doing DNS migration, if using traditional DNS where caching is involved, the speed of propagation can vary greatly. Because of this, there's a chance some clicks will go to one server then switch to another. Not much we can do about this.

Additionally, its possible that old hits from the V1 server will convert in your networks, but the postback will go to the V2 server, or vice versa, causing conversions to be lost. Once you import your V1 stats > V2 server, you can manually upload converted hit IDs from your networks to reconcile, if you believe its an issue.

Step 4: Confirm no new data is hitting the V1 server

Once you have all new traffic pointing at the V2 server, firstly confirm that no new visitors are coming to the old V1 server.

The easiest way to do this is logging in to the old V1 server and checking the stats. Since DNS results can be cached, it can take time - sometimes days, for every user to point to the new server.

If you were using Cloudflare in orange cloud mode (as we recommend), it should be more or less instant, since there's no DNS caching involved.

Nevertheless, we recommend you run a report for the last 72 hours in FunnelFlux and wait a few days > check today, last 24 h etc. until you are confident no visits are coming.

Once you have confirmed that no new visits are appearing, you're ready to export the data to the V2 server.

Step 5: Backup and export old V1 stats data

Before you export your V1 data I would highly recommend backing up the server. It's now dormant (not receiving traffic), so you can power it off and run a snaphost or backup of some kind.

Why not - it gives peace of mind in case anything goes wrong, or you delete the server and later realise the data import was missing something or had an issue.

Once you're ready, here is the process to export the V1 data:

  • Download the latest FunnelFlux archive from your Member's Dashboard
  • Rename the file
  • Login to your V1 server via SSH (console required here!)
  • Create a new temp folder:
mkdir /tmp/exporter
cd /tmp/exporter

  • Upload the archive into /tmp/exporter/
  • Run:

unzip data.bin

cp /usr/share/nginx/html/includes/appConfig.php includes/

cd admin/tools


Note: your path to appConfig.php may be different.

Then, follow the on-screen instructions.

Step 6: Import old V1 stats data on V2 server

Upload the  file to your V2 server in some appropriate temp directory, then follow these commands one by one:


cat _01_hits.tsv | clickhouse-client -h localhost --port 9001 --password=#CH_PASS# --query="insert into ff_events format TabSeparated"

cat _02_clicks.tsv | clickhouse-client -h localhost --port 9001 --password=#CH_PASS# --query="insert into ff_events format TabSeparated"

cat _03_conversions.tsv | clickhouse-client -h localhost --port 9001 --password=#CH_PASS# --query="insert into ff_events format TabSeparated"

cat _04_path_conversions.tsv | clickhouse-client -h localhost --port 9001 --password=#CH_PASS# --query="insert into ff_events format TabSeparated"

...where #CH_PASS# needs to be replaced with the respective values from /usr/share/nginx/html/includes/appConfig.php:

  • DB_PWD

Once complete, your stats will be added to the Clickhouse database and should appear within your new FunnelFlux installation.

Step 7: Celebrate 🎉

Once you have completed the above, you're all done!

For now we would recommend keeping your old server alive for a few days just to be safe (ya never know), and backing it up if you do plan to delete it.

The cost of a backup or running that server for a few extra days is small vs the value it gives to have a near-instant rollback available.

Do reach out if you have any questions, concerns or get stuck during this migration procedure. 

Best of luck! 🍀

Did this answer your question?