Using Caddy to deploy Laravel apps with zero downtime
Caddy 2 is a popular web server written in Go. It is known for its simplicity and ease of use. It is also very easy to configure and deploy. In this tutorial, we will see how Eddy Server Management can help you deploy Laravel apps with zero downtime.
Setting up the server
Once you've created an account, you can provision a server at your preferred cloud provider. While you can use any cloud provider, Eddy has integrations with DigitalOcean and HetznerCloud. Simply log in to your cloud provider, create a new API token, and add it to Eddy. Now you can provision a new server with a click of a button without having to log in to your cloud provider.
Eddy will provision Ubuntu 22.04 with Caddy 2. It also installs other software like PHP, MySQL, Redis, and Node. Of course, it makes also sure that the server is secure and up-to-date, and that you can connect to it via SSH.
Deploying a Laravel app
Once the server is provisioned, you can deploy your Laravel app. Eddy supports deploying apps from GitHub or any other Git repository. When you connect your GitHub account, you can select the repository and branch you want to deploy. You can select a PHP version per site. By default, it will select Laravel as the site type, but you can also select Generic, Static or WordPress. The Laravel site type makes sure the storage
directory is shared between releases, and that the .env
file is symlinked. It also comes with a default script to compile assets, cache configuration, route and view files, and run database migrations.
How it works
When you choose to use Eddy's zero-downtime deployment, it will create a directory structure on the server like this:
/home/eddy/example.com/current
/home/eddy/example.com/releases
/home/eddy/example.com/shared
Every time you deploy a new release, it will create a new directory in the releases
directory. It will then run the deployment script in the new release directory for things like installing dependencies and compiling assets. If the deployment is successful, it will update the current
symlink to point to the new release directory. Eddy uses Caddy's php_fastcgi directive to proxy requests to the PHP-FPM process. With the resolve_root_symlink
option, Caddy will resolve to the current
symlink. This way, you can deploy new releases without having to restart Caddy.