This part of the tutorial is a hands on setup to have Laravel working on nginx under Linux. this is not the only way to run Laravel, for all the options, see here
NOTE: Most if not all of the popular development tools are available for Linux and Windows, so If this setup is for development, you might want to install Debian Linux with the Gnome GUI so that you can install the development tools used in the next part of this tutorial, if you are going to be developing on a different machine or this is for production, then you shouldn’t.
STEP 1: Install Debian 11 (Bullseye) on a computer.
STEP 2: Install the basic Laravel environment with the following commands, Laravel 9 requires PHP 8, which at the time of writing is not available in Debian 11 repositories, so we will need to add the repositories from the guy who manages PHP for Debian anyway
sudo apt-get install ca-certificates apt-transport-https software-properties-common gnupg unzip curl echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - apt-get update
Now, to the actual installation of the environment
apt install php8.1-fpm nginx apt install php8.1-{dev,common,xml,tokenizer,zip,mysql,curl,mbstring,mysql,opcache,gd,intl,xsl,bcmath,imap,soap,readline,sqlite3,gmp} apt install redis-server apt-get install php8.1-redis apt install mariadb-server mariadb-client
Now you need to secure redis !
Now remember to secure your mariaDB (MySQL) installation with the following command
mysql_secure_installation
Next, we need composer, the PHP dependency manager, to get it execute the following
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer chmod +x /usr/local/bin/composer composer --version
The last line above should show you what version of composer you have just installed
Now, remember to never run composer as root, but rather as a regular user, from this point on I am assuming you are running the terminal as a regular user.
I understand that Debian puts the web root in /var/www/html, but i usually like to create a separate directory called /var/vhosts and put all my web projects in it
mkdir /var/vhosts
Now, we need to create a sample project for our learning and training experience
cd /var/vhosts composer create-project laravel/laravel laraveltestapp chmod -R 0777 /var/vhosts/laravelapp/storage
Next, We would need to setup nginx to serve this website (“Would like to” actually, because there are alternatives, but I’m keeping it simple), here is an almost standard template for nginx, modify the host name and project name to match your project and preferences.
NGINX vhost config file (In my case /etc/nginx/sites-available/laraveltestapp)
server { listen 80; listen [::]:80; server_name ltest.net www.ltest.net; root /var/vhosts/laraveltestapp/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_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }
Surely for this to work, you will need to add the following two lines to the end of the /etc/hosts file
127.0.0.1 ltest.net
127.0.0.1 www.ltest.net
As soon as we have the file above, we need to create a symbolic link for it in the sites enabled directory
cd /etc/nginx/sites-enabled ln -s /etc/nginx/sites-available/laraveltestapp
Suddenly, it works through nginx, you should see the welcome page (View) here
Now, to the development environment, how to setup your development environment can be found here