Install
SSH into the server as a user that can usesudo, then run:
When it finishes it prints the panel URL. Open
https://panel.example.com/setup to create the admin account and turn on two-factor authentication.
Running it again
If Laravelify is already installed, running the install command again only updates it. It shows the installed and new version and asksUpdate Laravelify only? [Y/n]. Packages such as PHP, MySQL, Node, and pm2 are not checked or reinstalled. Answer n, or run with LARAVELIFY_REINSTALL=1, to repair the whole install.
A repair run skips what is already installed, and nothing needs retyping: it shows the answers from last time and asks whether to use them.
n to answer every question again. The answers are kept in /etc/laravelify/install.env, readable only by root; the uninstaller removes it.
Unattended install
Every prompt can be given as an environment variable, which is handy for provisioning scripts:What gets installed
Web and PHP
Web and PHP
- nginx, the web server for every site, the panel, and phpMyAdmin.
- PHP-FPM 8.0, 8.1, 8.2, 8.3, 8.4, 8.5 (whichever the PHP repository still publishes for your Ubuntu), with the common extensions Laravel needs.
- Composer.
Data
Data
- MySQL 8.4 LTS (Ubuntu’s MySQL as a fallback), with the root password you chose.
- Redis, used by the panel for sessions and queues and available to your sites.
- phpMyAdmin on its own domain, with one-click sign-in from the panel.
Node and processes
Node and processes
- Node.js 20, 22, and 24 (through
n) and PM2 for Next.js sites. - Supervisor, which runs the panel’s
laravelify-queue(deploys) andlaravelify-scheduler(monitoring, alerts), plus each Laravel site’s workers.
Network and security
Network and security
- cloudflared, connected with your tunnel token.
- ufw firewall: deny incoming by default, allow SSH (22), 80, and 443.
- A sudoers rule that lets the panel (
www-data) run onlyscripts/host-apply.shas root. That script validates every argument before it touches the system.
/opt/laravelify. Sites live in /var/www/{slug}.
After installing
1
Add the public hostnames in Cloudflare
Tunnel → Public hostnames:
panel.example.com → http://localhost:80 and db.example.com → http://localhost:80.2
Create the admin and enable 2FA
Open
https://panel.example.com/setup.3
Set a Redis password
Redis starts without a password. Set one under Server → Redis.