
Good content takes time and effort to come up with.
Please consider supporting us by just disabling your AD BLOCKER and reloading this page again.
Hello friends in this post I am gonna show you how to setup LEMP
in Ubuntu
server.
LEMP
stands for L
- LINUX, E
- NGINX, M
- MYSQL, P
- PHP (Basically PHP-FPM for NGINX server)
Before moving ahead with this article I request you guys to setup up Ubuntu
server in Digital Ocean, Linode or any other cloud platform. If you don't have an account then click on the link and get the free credits to play around :)
If your still using password
logins or root
SSH
logins. Then I highly recommend you to check on How To Do Basic Server Security Setup For Ubuntu / Linux
Login to you server and follow along with the following steps.
NGINX
is similar to you that of Apache
web server which handles all your server incoming requests on port 80
sudo apt-get update
sudo apt-get install nginx
To cross verify whether the installation is successful or not you can simply open your server ip_address
in browser as follows
http://your_server_ip_address
You will see a NGINX
successfully installed page. Which loads from /var/www/html/
folder
MYSQL is a relational database which is used to store the dynamic data and fetch the data which will come from login, register and various other types of forms
sudo apt-get install mysql-server
Now the MYSQL database is installed. As earlier now MYSQL wont prompt for password. So to securely install MYSQL server use the following commands
sudo mysql_secure_installation
You might be prompted with VALIDATE PASSWORD PLUGIN
please select NO
. Else, it will create a lot of fuss for the passwords
at later point.
By chance if you select YES
option then you will get the following prompt
There are three levels of password validation policy. Select difficulty based on your requirement.
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
Next add the root
user password and confirm the password.
New password:
Re-enter new password:
For best security practices its good idea to press YES
for the subsequent prompts. This prompts include remove anonymous users, remove test database, disable remote root logins and flush privileges to save changes into affect.
By default you will be root
user with auth_socket
enabled connection. Which means while connecting to database no need of any passwords. At some point later this might cause security issues. So its better to add the password
authentication for all requesting connections.
Let me show you the same. First lets login to MYSQL
sudo mysql
Next run the following to see the details of the root
user
SELECT user,authentication_string,plugin,host FROM mysql.user;
Once you run the above command you can see that root
user doesn't have the authentication_string
ie password.
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
To set the password
run the following command, make sure to change the your_password
with valid required password
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
Run the following command so that the changes make will take an affect.
FLUSH PRIVILEGES;
Now again if you re-run the above command to check if the password is set or not then it will set with mysql_native_password
. No worries if your not able to see the authentication_string
as it will be encrypted by MYSQL
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *549966GJ45794839F92C1571D6D78F | mysql_native_password | localhost |
Now you can safely exit
from MYSQL
prompt. If you try to login as sudo mysql
then it wont allow. You need to add your_password
to do so.
Your doing great job. Now you have installed NGINX
web server and MYSQL
its time to setup your PHP
so that your PHP
scripts runs.
NGINX
unlike APACHE
doesn't have any native code to instruct that PHP
scripts needs to be processed. Now, NGINX has to pass the PHP
processing requests to PHP-FPM
(FAST CGI PROCESS MANAGER)
Now install all the PHP
packages in Ubuntu server with following command. No need to add specific version like the way I will do in the following command. But make sure that your local development and now installing PHP version matches else if you use composer in future you will have to face some problems.
sudo apt install php7.2-fpm php7.2-mysql php7.2-curl php7.2-zip php7.2-json
If your installing LARAVEL
then better to run the following command to install all packages at once
sudo apt-get install php7.2-fpm php7.2-cli php7.2-common php7.2-curl php7.2-gd php7.2-gmp php7.2-json php7.2-mbstring php7.2-mysql php7.2-xml php7.2-zip
You can add composer, zip, unzip, git
in the same command instead of adding later :)
Once the PHP
, MYSQL
& NGINX
installation is done then your left with configuring NGINX
with PHP-FPM
. As we had discussed earlier that NGINX
by itself cannot process the PHP
scripts you need to do this process.
First you need to setup NGINX for your site. Basically you will find all NGINX available configurations in the following path
/etc/nginx/sites-available/
To check if any of these configurations are enabled or not then you need to check in the following path.
NOTE: This are only symbolic links
which will be pointing to your /etc/nginx/sites-available
directory
/etc/nginx/sites-enabled/
Make sure to replace your_website_name.com
with your domain name in the following configuration.
sudo nano /etc/nginx/sites-available/your_domain_name.com
Now add the following configuration to the file. In the following if you don't have domain name still then just add the ip_address
of your domain name.
server {
listen 80;
root /var/www/html;
index index.php index.html;
#Make sure to change your domain name in the following line too.
server_name your_domain_name.com www.your_domain_name.com;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Now you have added your_domain_name.com
NGINX configuration, lets activate it by the following command
sudo ln -s /etc/nginx/sites-available/your_domain_name.com /etc/nginx/sites-enabled/
Activating your domain name is nothing but adding the symbolic link in your /etc/nginx/sites-enabled/
folder. Which will be read by the NGINX
main configuration file nginx.conf
which resides in /etc/nginx/nginx.conf
As a default NGINX will have default
configuration which will be activated we have to unlink
from /etc/nginx/sites-enabled/default
with the following command
sudo unlink /etc/nginx/sites-enabled/default
NOTE: Remember here we just unlinking the file. Still your main file exists in /etc/nginx/sites-available
folder which you can activated at any given point of time with the following command
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
This is very important step. Don't forget to restart you NGINX
server. Else the configuration that you have added wont work.
First check if the NGINX
added code to configuration file is proper or not by the following command
sudo nginx -t
You must be able to see similar output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Now reload the NGINX
server configuration file with the following
sudo service nginx reload
Now you have install LEMP and its time to check if it paid your efforts. First create testing.php
file inside /var/www/html/
like /var/www/html/testing.php
sudo nano /var/www/hml/testing.php
And add the following code
<?php
echo 'LEMP installtion completed.';
Now browse URL http://website_name.com/testing.php
or http://ip_address/testing.php
from browser and you must be able to see the following output
LEMP installation completed.
Congrats on setting up your LEMP stack.
Now you know how to install LEMP stack. Hope this article helped you. I have written other articles on NGINX kindly check them too
Automate Repeating Tasks In Linux Server With Cronjobs
Move Uploaded Files From Local Computer Or Server To Amazon S3 Bucket In PHP
Install Linux, Apache, MYSQL, PHP (LAMP Stack) on Ubuntu
Laravel Clear Cache Of Route, View, Config Command
Foreign Key Migrations Simplified In Laravel 7.x
Composer Install v/s Composer Update
Plain PHP Resumable Large File Uploads In Chunks Using FlowJs
Custom Validation Rules In PHP Laravel (Using Artisan Command)
Free SSL Certificate For CPanel
SummerNote WYSIWYG Text Editor Save Images To Public Path In PHP Laravel
GitHub Login With PHP Laravel Socialite