Skip to main content
What fireflo-install automates. Read this if you are packaging FireFlo yourself, or if an installer step failed and you need to know what it was doing.
The prerequisites below are scripted. setup.sh installs PostgreSQL, RabbitMQ and Node on Ubuntu and Debian, and Java behind --with-java. This page is the long hand — read it to know what that script does, or to do it on a distribution it refuses.

Prerequisites

  • Java 25. The build targets release 25 and will not run on 21.
  • PostgreSQL 14 or newer. Optional for the gateway alone in file mode; required for the control panel, prepaid credit, whitelisting, and call records in a table.
  • RabbitMQ, only if submitted messages must survive a gateway restart. Without it the queue is in memory and a restart drops whatever had not reached a vendor.
  • A service user with no login shell.

The awkward part of this platform

Two of the three runtimes are not what Ubuntu ships:
1

Base packages

2

Java 25 from Adoptium

3

Node 22 from NodeSource

Next.js 16 does not run on Ubuntu’s Node 18 — this is for the control panel.
4

Service user and directories

5

Database

Keep the password out of shell history — write it straight into the environment file.

Layout

Configuration is kept out of the artefact directory, so an upgrade can replace the artefact wholesale without touching anything you edited.
If you built the JVM packaging, the artefact is a directory, not a file. quarkus-run.jar will not run without the lib/, app/ and quarkus/ directories beside it. Copying the jar alone produces a process that starts and then fails to find its classes.A native build is the opposite: one executable, nothing beside it, and no Java on the host. That is what a release tarball contains, and the installer takes either.

The environment file

chmod 600. It holds the database password and both operational tokens.
Set FIREFLO_CONF_DIR to an absolute path. A relative value — including the conf default — resolves against the process working directory, so a unit with WorkingDirectory=/opt/fireflo reads /opt/fireflo/conf/, which is not where you edited anything.

Ports

systemd

Two settings matter more than the rest:
SIGTERM rather than SIGKILL is not a nicety. A clean shutdown returns unspent reserved prepaid credit; a kill -9 strands it until fireflo credit release runs.

Log retention, which you now own

Nothing in the gateway removes httpapi.log. Quarkus rotates it daily and keeps every file forever. fireflo-install installs a daily systemd timer for exactly this; installing by hand means arranging one yourself, or accepting unbounded growth. See Logging.

Verify

And check the two tokens really are separate — reading with the admin token must 404: