Laravel is a free and open-source PHP web framework created by Taylor Otwell. It is based on Symfony and follows the model–view–controller architectural pattern. It is designed for building high-end web applications using its significant and graceful syntaxes. It has many built-in features that make developing web apps easier and faster. Laravel gained more popularity after releasing version 3, which includes handy features, including the Artisan command line and support database, and introduced a packaging system called bundles.
This tutorial will show you how to install Laravel PHP Framework with Nginx web server on Ubuntu 22.04.
Prerequisites
- A server running Ubuntu 22.04.
- A valid domain name pointed with your server IP.
- A root password is configured on the server.
Install LEMP Server
Before starting, you will need to install the Nginx web server, MariaDB database system, PHP, and other required dependencies on your server. You can install all of them by running the following command:
apt install -y nginx mariadb-server php php-fpm php-common php-cli php-gd php-mysqlnd php-curl php-intl php-mbstring php-bcmath php-xml php-zip wget git
Once all the packages are installed, verify the PHP version using the following command:
php -v
You should see the following output:
PHP 8.1.2 (cli) (built: Apr 7 2022 17:46:26) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.2, Copyright (c) Zend Technologies with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies
Install PHP Composer
Composer is a dependency manager for PHP used for managing PHP dependency. To install the Composer, you will need to install the curl package to your server.
apt install -y curl
Next, install the PHP Composer using the following command:
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
Once Composer is installed, you will get the following output:
All settings correct for using Composer Downloading... Composer (version 2.3.5) successfully installed to: /usr/bin/composer Use it: php /usr/bin/composer
Next, verify the Composer version using the following command:
composer --version
You should get the following output:
Composer version 2.3.5 2022-04-13 16:43:00
Install Laravel on Ubuntu 22.04
First, navigate to the Nginx web root directory and download the latest version of Laravel using the Composer command:
cd /var/www/html
composer create-project laravel/laravel laravel
You will get the following output:
55 package suggestions were added by new dependencies, use `composer suggest` to see details. Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: laravel/sail Discovered Package: laravel/sanctum Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Discovered Package: spatie/laravel-ignition Package manifest generated successfully. 78 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan vendor:publish --tag=laravel-assets --ansi --force No publishable resources for tag [laravel-assets]. Publishing complete. > @php artisan key:generate --ansi Application key set successfully.
Next, change the directory to the Laravel and launch the Laravel using the following command:
cd laravel
php artisan serve --host 0.0.0.0 --port 8000
If everything is fine, you should get the following output:
Starting Laravel development server: http://0.0.0.0:8000 [Sun May 22 08:17:45 2022] PHP 8.1.2 Development Server (http://0.0.0.0:8000) started
Press CTRL+C to stop the Laravel. Next, change the ownership and permission of the Laravel:
chown -R www-data:www-data /var/www/html/laravel
chmod -R 0777 /var/www/html/laravel
Configure Nginx for Laravel
Next, create an Nginx virtual host configuration file for Laravel using the following command:
nano /etc/nginx/conf.d/laravel.conf
Add the following lines:
server { listen 80; server_name laravel.example.com; root /var/www/html/laravel/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; 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$ { fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }
Save and close the file when you are finished then verify the Nginx for any syntax error using the following command:
nginx -t
You will get the following output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Next, restart the Nginx and PHP-FPM service to apply the changes:
systemctl restart php8.1-fpm nginx
You can also check the status of the Nginx using the following command:
systemctl status nginx
You should see the following output:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2022-05-22 08:19:20 UTC; 17s ago Docs: man:nginx(8) Process: 16865 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 16866 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 16867 (nginx) Tasks: 2 (limit: 2292) Memory: 2.6M CPU: 33ms CGroup: /system.slice/nginx.service ??16867 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;" ??16868 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" May 22 08:19:20 ubuntu2204 systemd[1]: Starting A high performance web server and a reverse proxy server... May 22 08:19:20 ubuntu2204 systemd[1]: Started A high performance web server and a reverse proxy server.
Access Laravel Web Interface
At this point, Laravel is installed and configured with Nginx. You can now access the Laravel Web UI using the URL http://laravel.example.com. You should see the Laravel Dashboard on the following page:
Secure Laravel with Let’s Encrypt
Next, you will need to install the Certbot client package to install and manage the Let’s Encrypt SSL.
First, install the Certbot with the following command:
apt-get install certbot python3-certbot-nginx -y
Once the installation is finished, run the following command to install the Let’s Encrypt SSL on your website:
certbot --nginx -d laravel.example.com
You will be asked to provide a valid email address and accept the term of service as shown below:
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): [email protected] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Obtaining a new certificate Performing the following challenges: http-01 challenge for laravel.example.com Waiting for verification... Cleaning up challenges Deploying Certificate to VirtualHost /etc/nginx/conf.d/laravel.conf
Next, choose whether or not to redirect HTTP traffic to HTTPS as shown below:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Type 2 and hit Enter to finish the installation. You should see the following output:
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/laravel.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://laravel.example.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=laravel.example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/laravel.example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/laravel.example.com/privkey.pem Your cert will expire on 2022-08-22. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le - We were unable to subscribe you the EFF mailing list because your e-mail address appears to be invalid. You can try again later by visiting https://act.eff.org.
Conclusion
Congratulations! You have successfully installed Laravel with Nginx on Ubuntu 22.04. You can now start developing high-performance PHP applications using the Laravel framework. Feel free to ask me if you have any questions.