Laravel is a popular, open-source PHP web application framework. It has an expressive, elegant syntax and provides tools needed for large, robust applications. Deployer is a modular open-source PHP deployment tool packed with time-saving features and optimizations. It supports deployment of many popular frameworks, including Laravel, Symfony, Zend Framework and CodeIgniter. In this tutorial, we will show you how to deploy a Laravel application with Deployer on Ubuntu 16.04.
Table of Contents
Requirements
- Ubuntu 16.04 server with root or sudo access.
- Git server. You can either use your own self hosted git server or any popular Git services such as Gitlab, Github or Bitbucket.
Setting up the Local Development Environment
You will deploy your Laravel application from your local computer so first you need to setup the local development environment and install Deployer.
First if you already don’t have composer installed on your local computer install it with:
curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer chmod +x /usr/local/bin/composer
Next, create a new Laravel project on your local computer:
composer create-project --prefer-dist laravel/laravel my-laravel-app
To install Deployer on your local computer run the following commands in the console:
curl -LO https://deployer.org/deployer.phar mv deployer.phar /usr/local/bin/dep chmod +x /usr/local/bin/dep
Finally connect to the git server by adding your local PC ssh key to the git server.
If you don’t have SSH keys, you can check visit our article about How To Set Up SSH Keys on Ubuntu 16.04
If you are using Git hosted service you can check their documentation about how to add SSH key to your account.
Install and configure PHP
Now that your local development machine is ready before we can start deploying we need to configure the server by installing all thw necessary services.
To install the latest stable version of PHP version 7 and all necessary modules, run:
sudo apt update sudo apt install php7.0-fpm php7.0-cli php7.0-gd php7.0-mysql php7.0-mcrypt php-pear php7.0-curl
We also need to install composer:
curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer chmod +x /usr/local/bin/composer
Install and configure Nginx
Install the latest stable Nginx version from the official Ubuntu repositories:
sudo apt install nginx
Next, create a new Nginx server block:
sudo nano /etc/nginx/sites-available/my-laravel-app.com
server { listen 80; server_name my-laravel-app.com; root /var/www/html/my-laravel-app.com/current/public; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } }
Activate the server block by creating a symbolic link:
sudo ln -s /etc/nginx/sites-available/my-laravel-app.com /etc/nginx/sites-enabled/my-laravel-app.com
Test the Nginx configuration and restart nginx:
sudo nginx -t sudo service nginx restart
Create MySQL database
If you don’t have MySQL installed you can visit our tutorial about How to Install MySQL on Ubuntu 16.04
To create a database for the laravel application, run the following commands:
mysql -u root -p
CREATE DATABASE laravel; GRANT ALL PRIVILEGES ON laravel.* TO 'laraveluser'@'localhost' IDENTIFIED BY 'your-password'; FLUSH PRIVILEGES; \q
Create a Deployer User
The main purpose of this user is to deploy our Laravel application by executing commands on our server.
To create the user run the following command:
sudo adduser deployer
Both Nginx and PHP FPM are running as a user www-data. The files and directories created by the deployer user must be writable by the www-user.
Run the following command to add the deployer user to the www-data group:
sudo usermod -aG www-data deployer
Change the document root ownership by running:
sudo chown deployer:www-data /var/www/html/my-laravel-app.com
and set user group ID
sudo chmod g+s /var/www/html/my-laravel-app.com
With the above command all new files and subdirectories created within the `/var/www/html/my-laravel-app.com` will inherit the directory group ID.
Add your local user public SSH key to the /home/deployer/.ssh/authorized_keys file so you can login to the remote sever from your local computer without a password as a user deployer and run the deployment commands.
Finally you need to add the deployer user SSH key to your git server, same as you did with your local computer user.
Using Deployer
Open your local computer terminal and switch over to the laravel project directory.
cd ~/my-laravel-app
Run the following command to create a recipe file named deploy.php
.
dep init -t Laravel
Open the file and configure and set the correct repository credentials and configure the host parameter as follows:
host('your_remove_server_ip') ->user('deployer') ->set('deploy_path', '/var/www/html/my-laravel-app.com');
From the inside project directory you can now run the `dep` command to deploy your application.
For more information about how to configure and use Deployer please visit their documentation page.
Of course, you don’t have to configure your remote server if you use one of our Blazing-Fast Ubuntu Servers, in which case you can simply ask our expert Linux admins to create the deployer user and install and configure all necessary services for you. They are available 24×7 and will take care of your request immediately.
PS. If you liked this post, on how to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04, please share it with your friends on the social networks using the buttons on the left or simply leave a reply below. Thanks.