Documentation
Install the panel
Use a fresh Ubuntu 24.04 server with a public IPv4. The installer needs root. A hostname is required for HTTPS.
Point DNS
- 1
Create an A record
Point your panel hostname (for examplepanel.example.com) at the server’s public IP. Wait until it resolves before requesting a certificate. - 2
Open panel ports
If a firewall is already enabled, allow22(SSH),80, and443. Game allocations (for example25565) are not opened automatically — add them when you create servers.
Run the installer
apt-get update && apt-get install -y git
git clone https://github.com/Flutter-Software/Flutter-Panel.git /usr/local/src/flutter-panel
sudo bash /usr/local/src/flutter-panel/install/ubuntu-24.04.shThe script asks for the public panel URL, whether to issue a Let's Encrypt certificate, and whether to install the game-node daemon on this machine. It then installs Docker, Node.js 22, MongoDB, Redis, nginx, and systemd units under /opt/flutter.
Non-interactive HTTPS example:
sudo FLUTTER_URL=https://panel.example.com FLUTTER_EMAIL=you@example.com \
FLUTTER_LETSENCRYPT=1 bash /usr/local/src/flutter-panel/install/ubuntu-24.04.sh --yesWhat gets installed
| Path / unit | Role |
|---|---|
| /opt/flutter | Application (user flutter) |
| /opt/flutter/.env | Secrets and URLs (mode 640) |
| /var/lib/flutter | Daemon data and game server files |
| flutter-api | API on 127.0.0.1:4000 |
| flutter-web | Panel on 127.0.0.1:3010 |
| flutter-daemon | Node agent on 0.0.0.0:8080 |
| nginx sites-enabled/flutter | Public HTTP(S) → web + /api/ |
| Docker Compose (mongo, redis) | Bound to localhost only |
systemctl status flutter-api flutter-web flutter-daemon
journalctl -u flutter-api -u flutter-web -u flutter-daemon -f
cd /opt/flutter && docker compose psFirst admin
Open the URL the installer prints. The first account you create is the admin. Later accounts are regular users unless you promote them in Admin → Users.
Flags and env
| Flag / env | Meaning |
|---|---|
| --yes | Do not prompt; use flags and FLUTTER_* env vars |
| --url URL / FLUTTER_URL | Public panel URL (http://IP or https://hostname) |
| --letsencrypt / FLUTTER_LETSENCRYPT=1 | Issue a Let's Encrypt certificate (hostname required) |
| --email EMAIL / FLUTTER_EMAIL | Contact email for Let's Encrypt |
| --no-nginx / FLUTTER_NO_NGINX=1 | Skip nginx; panel listens on port 3010 |
| --no-daemon / FLUTTER_NO_DAEMON=1 | Panel only (attach a node later) |
| --prefix DIR / FLUTTER_PREFIX | Install directory (default /opt/flutter) |
| --force | Allow distros other than Ubuntu 24.04 |
Firewall
If UFW was already active, the installer opens SSH, 80/443 (or 3010 without nginx), and 8080 when the local daemon is installed. Publish game ports as you add allocations:
sudo ufw allow 25565/tcp
sudo ufw status- Same-machine node: see First game server
- Another VPS: Game node (VPS)