Best 7 Open-Source Free Laravel App Deployment Solutions
Deploying Laravel applications efficiently and reliably is crucial for developers. Thankfully, there are numerous open-source solutions that streamline the deployment process, ensuring your applications run smoothly.
Here’s a look at some of the best open-source, free Laravel deployment solutions available.
1. Deployer
Deployer is a PHP-based deployment tool that supports Laravel among other PHP frameworks. It is known for its simplicity and flexibility, making it a favorite among many Laravel developers.
Features:
- Easy Configuration: Simple configuration using a
deploy.php
file. - Multiple Environments: Supports deployment to multiple environments.
- Rollback: Easy rollback to previous releases if something goes wrong.
- Zero Downtime Deployments: Ensures that your application remains online during the deployment process.
Example Configuration:
namespace Deployer;
require 'recipe/laravel.php';
host('example.com')
->set('deploy_path', '~/{{application}}');
set('repository', 'git@github.com:username/repository.git');
task('deploy', [
'deploy:prepare',
'deploy:vendors',
'deploy:publish',
]);
after('deploy:failed', 'deploy:unlock');
2. Envoyer
Envoyer is a zero-downtime deployment tool specifically designed for Laravel applications. Although it has premium features, the open-source version still provides robust deployment capabilities.
Features:
- Zero Downtime: Deploy without interrupting your users.
- Health Checks: Monitor your application health during deployment.
- Notifications: Get notifications via Slack, SMS, or email.
- Automation: Automatically deploy new commits to your server.
- Works seamlessly on macOS and Linux
- Works with many frameworks including Laravel
- Developer friendly
3. GitHub Actions
GitHub Actions is a powerful CI/CD tool integrated into GitHub. It allows you to automate the deployment of your Laravel application directly from your repository.
Features:
- Automation: Automated workflows for building, testing, and deploying.
- Integration: Seamlessly integrates with your GitHub repository.
- Custom Workflows: Create custom workflows tailored to your deployment needs.
- Community Support: Large community and plenty of reusable workflows.
Example Workflow:
name: Laravel Deployment
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
- name: Install dependencies
run: composer install --no-dev --prefer-dist --optimize-autoloader
- name: Deploy
run: |
rsync -avz --delete . user@example.com:/path/to/your/project
ssh user@example.com 'cd /path/to/your/project && php artisan migrate'
4. GitLab CI/CD
GitLab CI/CD offers a comprehensive solution for deploying Laravel applications. With its built-in CI/CD capabilities, you can automate the entire deployment pipeline.
Features:
- Integrated CI/CD: Built directly into GitLab.
- Custom Pipelines: Define custom pipelines using the
.gitlab-ci.yml
file. - Security: Provides robust security features for your deployments.
- Scalability: Scalable to accommodate projects of any size.
Example Pipeline:
stages:
- build
- deploy
build:
stage: build
script:
- composer install --no-dev --prefer-dist --optimize-autoloader
deploy:
stage: deploy
script:
- rsync -avz --delete . user@example.com:/path/to/your/project
- ssh user@example.com 'cd /path/to/your/project && php artisan migrate'
5. Capistrano
Capistrano is a remote server automation tool primarily for Ruby, but it has excellent support for PHP and Laravel with the help of plugins.
Features:
- Remote Execution: Run commands on remote servers.
- Rollback: Easily roll back to previous versions.
- Multi-stage Deployment: Deploy to different environments like staging and production.
- Extensible: Extend its capabilities with various plugins.
Example Configuration:
# Capfile
require 'capistrano/setup'
require 'capistrano/deploy'
install_plugin Capistrano::Laravel
# config/deploy.rb
set :application, 'my_app_name'
set :repo_url, 'git@example.com:me/my_repo.git'
# Define server(s)
server 'example.com', user: 'deploy', roles: %w{app db web}
# Default deploy_to directory
set :deploy_to, '/var/www/my_app_name'
6- VitoDeploy
VitoDeploy is a user-friendly deployment platform designed to make deploying applications a breeze. Whether you’re a developer, freelancer, or part of a small to medium-sized enterprise, VitoDeploy has got you covered. Here’s why:
Key Features:
- Easy Setup: Get started quickly with a straightforward setup process.
- Automated Deployments: Save time with automated deployment workflows.
- Scalability: Easily scale your applications as your business grows.
- Real-Time Monitoring: Keep track of your deployments with real-time monitoring.
- Rollback Capabilities: Quickly revert to previous versions if needed.
- Secure: Ensure your deployments are safe with robust security features.
- Cost-Effective: Affordable pricing plans to suit your budget.
7- Docker
Deploying a Laravel Application Using Docker and Docker Compose
Docker is a platform that enables developers to automate the deployment, scaling, and management of applications within containerized environments. Containers package an application with its dependencies and environment, ensuring consistent performance across different development, testing, and production stages.
Docker Compose is a tool specifically designed to define and manage multi-container Docker applications. Using a simple YAML file, Docker Compose allows developers to configure and link multiple services together, making it an ideal solution for complex applications that require various components such as databases, cache, and web servers.
Benefits of Using Docker and Docker Compose
- Consistency: Ensures the application runs identically in different environments.
- Scalability: Easily scale applications by adding or removing containers.
- Isolation: Each container runs in its isolated environment, preventing conflicts between dependencies.
- Portability: Containers can run on any system that supports Docker.
- Simplified Deployment: Automate deployment processes using Docker Compose.
Example Code: Deploying a Laravel Application
Create a Dockerfile
A Dockerfile is a script that contains a series of instructions on how to build a Docker image for the Laravel application.
# Use the official PHP image as the base
FROM php:8.1-fpm
# Set the working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl
# Install PHP extensions
RUN docker-php-ext-install pdo pdo_mysql mbstring exif pcntl bcmath gd
# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Copy existing application directory contents
COPY . /var/www
# Copy existing application directory permissions
COPY --chown=www-data:www-data . /var/www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
Create a docker-compose.yml File
The docker-compose.yml
file is used to define and run multi-container Docker applications. It helps link the Laravel application container with other necessary services such as MySQL.
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
image: laravel-app
container_name: laravel-app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
volumes:
- .:/var/www
- ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- app-network
webserver:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
tty: true
ports:
- "8000:80"
volumes:
- .:/var/www
- ./docker/nginx/conf.d:/etc/nginx/conf.d
networks:
- app-network
db:
image: mysql:5.7.22
container_name: mysql
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: root
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
dbdata:
driver: local
Configure Nginx
Create the Nginx configuration file in docker/nginx/conf.d/app.conf
to link with the Laravel application.
server {
listen 80;
index index.php index.html;
server_name localhost;
root /var/www/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Build and Run Containers
Navigate to the directory containing the docker-compose.yml
file and run the following commands to build and start the containers:
# Build the Docker images
docker-compose build
# Start the Docker containers
docker-compose up -d
Conclusion
Choosing the right deployment solution for your Laravel application can significantly impact your workflow and productivity. Each tool has its own set of features and advantages, so consider your specific needs and environment when selecting the best deployment solution for your project.
By leveraging these open-source tools, Laravel developers can ensure smooth, efficient, and reliable deployments, ultimately enhancing the performance and reliability of their applications.