The LEMP stack is one of many server stacks website hosting. It is an acronym for the technologies used in the stack. L for a Linux operating system; CentOS 8 in this case. E for NGINX; albeit it starting with an N, it is commonly pronounced as en-gin-ex. M is for MySQL. P is for PHP. This is an excellent stack for fully custom PHP websites and even PHP CMS options like WordPress.
To follow along with this guide, it is assumed that you have access to CentOS 8 server and that it is properly configured. If you don’t have a CentOS 8 server, here is a $100 credit(Or two months) with DigitalOcean so you can get started: https://m.do.co/c/453e482edaba. They’re the cheapest reliable solution for only $5 per month.
“NGINX is open source software for web serving, reverse proxying, caching, load balancing, media streaming, and more.” -nginx.com. In the LEMP stack, NGINX is used to serve your website’s content.
Install the nginx package with the command:
sudo dnf install nginx
When prompted, confirm the installation by entering “y”.
After the installation has completed, start the server with the command:
sudo systemctl start nginx
To make sure that the NGINX server starts up when your CentOS 8 server reboots, run the command:
sudo systemctl enable nginx
If you use the firewalld package, you will need to whitelist the HTTP port(80) to allow connections. Run the command:
sudo firewall-cmd --permanent --add-service=http
You would then need to reload firewalld to accept the changes. Run the command:
sudo firewall-cmd --reload
NGINX should then be running as expected. To test that the installation is successful, visit your server’s IP in your web browser. You should see the NGINX welcome page.
You can create your NGINX configuration files at the directory: /etc/nginx/conf.d
By default, NGINX will serve content from /usr/share/nginx/html/. You can place your PHP files here for testing later.
Almost any website will need a database. As aforementioned, we use MySQL through MariaDB.
To install the MySQL package, run the command:
sudo dnf install mariadb-server
Once the package has installed, start the MariaDB server with the command:
sudo systemctl start mariadb
To make sure that the MariaDB server starts up when your CentOS 8 server reboots, run the command:
sudo systemctl enable mariadb
To improve the security of your MariaDB server, it is highly recommended that you run the following security script. It will have you setup a username, password, and other settings related to the integrity of your server’s security. Run the command:
After all of that is done, you can expect to be able to connect to the MariaDB server and execute your database operations.
Because we’re using NGINX, we’ll need to install the php-fpm package. This is unlike the Apache where PHP is already embedded. We need PHP to process code for dynamic web-pages.
To install the php-fpm and php-mysql packages, run:
sudo dnf install php-fpm php-mysqlnd
Install the nano package so we can edit a configuration file with the command:
sudo dnf install nano
Now run this command to edit the php-fpm configuration file:
sudo nano /etc/php-fpm.d/www.conf
You should see two lines in the file that say “user = apache” and “group = apache”. Replace “apache” with “nginx” for both lines.
Now you can start the php-fpm service with the command:
sudo systemctl start php-fpm
The command will automatically edit your NGINX default configuration so it will support PHP processing. You will need to restart the NGINX server so it will process the changes. Run the command:
sudo systemctl restart nginx
PHP should then be running as expected.
You should now have a flexible foundation for your PHP based website, but using NGINX as your efficient web server and MariaDB as your MySQL database.