Matomo Analytics

Documentation

How do I migrate from Laravel Forge?

Ploi can take over a server that Laravel Forge provisioned. It connects over SSH, scans what is there and registers it in the panel. You keep the serv...

Ploi can take over a server that Laravel Forge provisioned. It connects over SSH, scans what is there and registers it in the panel. You keep the server, the IP address and the files, and your sites stay online while it runs. On a small server this takes about two minutes. The import is in beta, so make a snapshot at your provider before your first one.

Import Image

Before you start

  • You need root access over SSH. As the forge user, sudo -i gets you there.

  • The server runs Ubuntu 22.04, 24.04 or 26.04, or Debian 12 or 13, and is not managed by Ploi yet.

  • Leave the server connected in Forge until the import is done. Disconnecting is an optional last step.

Step by step

  1. In Ploi, open Servers, click Create server and pick Import server.

  2. Choose Laravel Forge and fill in a name, the IP address and the SSH port.

  3. Run the command Ploi shows you as root on the server. It only adds Ploi's SSH key to /root/.ssh/authorized_keys.

  4. Click Verify connection & scan. The scan is read-only and takes under a minute.

  5. Review what was found, tick the sites you want and choose whether to disconnect from Forge at the end.

  6. Start the import and follow the progress on the building page.

What Ploi changes

Ploi adds a ploi user, installs certbot (Forge does not install it) and supervisor if it is missing, and adds its own renewal and composer cronjobs. The webserver, PHP, the database server, the firewall and sshd are left as they are.

  • The forge user and isolated site users become Ploi system users. Ploi appends its key to their authorized_keys, nothing else changes about them.

  • Sites keep their directory, user and PHP version. Their NGINX configuration is regenerated from Ploi's template after an nginx -t check, so certificates, redirects and the other NGINX features in Ploi work. The Forge configuration stays in the site's NGINX history and in /root/ploi-import-backup. NGINX runs as the ploi user afterwards and sites of the forge user get their own PHP-FPM pool.

  • Certificates, databases, database users, supervisor daemons, cron entries, ufw rules and git remotes are registered. Daemons restart once, cron entries move to Ploi's scheduler so nothing runs twice.

  • Database users have no password in Ploi, because MySQL only stores hashes. Use reset password when you need one and update the application's .env.

Certificates

Forge stops renewing Let's Encrypt certificates once the server leaves Forge. The ones it already issued keep working until they expire. Before that date, request a new Let's Encrypt certificate from the site's SSL tab in Ploi. Ploi renews it from then on.

Deployments

Git remotes are linked as custom repositories on the branch the checkout is on, so git pull works with the deploy key that is already on the server. Connect your GitHub, GitLab or Bitbucket account on the site for commit details and push to deploy through your provider. Sites with Forge's zero downtime layout (releases plus a current symlink) are marked in the site log. Enable zero downtime deployments in Ploi on those sites before you deploy.

Disconnecting from Forge

With the disconnect option on, the last step removes Forge's SSH key from root and the site users, its certificate renewal scripts and its cleanup cronjob. The sudoers rules that let the forge user reload PHP-FPM, NGINX and supervisor stay, deploy scripts may use them. With the option off, Forge keeps its access until you archive the server there. Cancel your Forge subscription only after the import has finished.

If something goes wrong

Every step writes to the server logs. A site whose new NGINX configuration fails nginx -t keeps its Forge configuration and is marked in its site log, the rest continues. If the import stops, the server shows as failed. Send us the server ID through support or get in touch over Discord. Migrations are a managed feature, and we monitor them closely so we're able to help you quickly.

Dennis Smink

Written by Dennis Smink

Dennis brings over 13 years of hands-on experience in server management, specializing in optimizing web services for scalability and security.

Ready to dive in?
Start your free trial today.

Create an account and enjoy your 5-day free trial — no credit card required.

Start your free trial