One place for hosting & domains

      Linux

      How To Install Linux, Nginx, MySQL, PHP (LEMP stack) on Debian 9


      Introduction

      The LEMP software stack is a group of software that can be used to serve dynamic web pages and web applications. This is an acronym that describes a Linux operating system, with an Nginx web server. The backend data is stored in the MySQL database and the dynamic processing is handled by PHP.

      In this guide, you’ll install a LEMP stack on a Debian server using the packages provided by the operating system.

      Prerequisites

      To complete this guide, you will need a Debian 9 server with a non-root user with sudo privileges. You can set up a user with these privileges in our Initial Server Setup with Debian 9 guide.

      Step 1 — Installing the Nginx Web Server

      In order to display web pages to our site visitors, we are going to employ Nginx, a modern, efficient web server.

      All of the software we will be using for this procedure will come directly from Debian’s default package repositories. This means we can use the apt package management suite to complete the installation.

      Since this is our first time using apt for this session, we should start off by updating our local package index. We can then install the server:

      • sudo apt update
      • sudo apt install nginx

      On Debian 9, Nginx is configured to start running upon installation.

      If you have the ufw firewall running, you will need to allow connections to Nginx. You should enable the most restrictive profile that will still allow the traffic you want. Since we haven’t configured SSL for our server yet, in this guide, we will only need to allow traffic on port 80.

      You can enable this by typing:

      • sudo ufw allow 'Nginx HTTP'

      You can verify the change by typing:

      You should see HTTP traffic allowed in the displayed output:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

      Now, test if the server is up and running by accessing your server's domain name or public IP address in your web browser. If you do not have a domain name pointed at your server and you do not know your server's public IP address, you can find it by typing one of the following into your terminal:

      • ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's//.*$//'

      This will print out a few IP addresses. You can try each of them in turn in your web browser.

      Type one of the addresses that you receive in your web browser. It should take you to Nginx's default landing page:

      http://your_domain_or_IP
      

      Nginx default page

      If you see the above page, you have successfully installed Nginx.

      Step 2 — Installing MySQL to Manage Site Data

      Now that we have a web server, we need to install MySQL, a database management system, to store and manage the data for our site.

      You can install this easily by typing:

      • sudo apt install mysql-server

      Note: In Debian 9 a community fork of the MySQL project – MariaDB – is packaged as the default MySQL variant. While, MariaDB works well in most cases, if you need features found only in Oracle's MySQL, you can install and use packages from a repository maintained by the MySQL developers. To install the official MySQL server, use our tutorial How To Install the Latest MySQL on Debian 9.

      The MySQL database software is now installed, but its configuration is not complete.

      To secure the installation, we can run a security script that will ask whether we want to modify some insecure defaults. Begin the script by typing:

      • sudo mysql_secure_installation

      You will be asked to enter the password for the MySQL root account. We haven't set this yet, so just hit ENTER. Then you'll be asked you if you want to set that password. You should type y then set a root password.

      For the rest of the questions the script asks, you should press y, followed by the ENTER key at each prompt. This will remove some anonymous users and the test database, disable remote root logins, and load these new rules so that MySQL immediately respects the changes you have made.

      At this point, your database system is now set up and secured. Let's set up PHP.

      Step 3 — Installing PHP for Processing

      We now have Nginx installed to serve our pages and MySQL installed to store and manage our data. However, we still don't have anything that can generate dynamic content. That's where PHP comes in.

      Since Nginx does not contain native PHP processing like some other web servers, we will need to install fpm, which stands for "fastCGI process manager". We will tell Nginx to pass PHP requests to this software for processing. We'll also install an additional helper package that will allow PHP to communicate with our MySQL database backend. The installation will pull in the necessary PHP core files to make that work.

      Then install the php-fpm and php-mysql packages:

      • sudo apt install php-fpm php-mysql

      We now have our PHP components installed. Next we'll configure Nginx to use them.

      Step 4 — Configuring Nginx to Use the PHP Processor

      Now we have all of the required components installed. The only configuration change we still need is to tell Nginx to use our PHP processor for dynamic content.

      We do this on the server block level (server blocks are similar to Apache's virtual hosts). We're going to leave the default Nginx configuration alone and instead create a new configuration file and new web root directory to hold our PHP files. We'll name the configuration file and the directory after the domain name or hostname that the server should respond to.

      First, create a new directory in /var/www to hold the PHP site:

      • sudo mkdir /var/www/your_domain

      Then, open a new configuration file in Nginx's sites-available directory:

      • sudo nano /etc/nginx/sites-available/your_domain

      This will create a new blank file. Paste in the following bare-bones configuration:

      /etc/nginx/sites-available/your_domain

      server {
          listen 80;
          listen [::]:80;
      
          root /var/www/your_domain;
          index index.php index.html index.htm;
      
          server_name your_domain;
      
          location / {
              try_files $uri $uri/ =404;
          }
      
          location ~ .php$ {
              include snippets/fastcgi-php.conf;
              fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
          }
      }
      

      This is a very basic configuration that listens on port 80 and serves files from the web root we just created. It will only respond to requests to the name provided after server_name, and any files ending in .php will be processed by the php-fpm process before Nginx sends the results to the user.

      Save and close the file when you're done customizing it.

      Activate your configuration by linking to the config file from Nginx's sites-enabled directory:

      • sudo ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/

      This will tell Nginx to use the configuration next time it is reloaded. First, test your configuration for syntax errors by typing:

      If any errors are reported, go back and recheck your file before continuing.

      When you are ready, reload Nginx to make the changes:

      • sudo systemctl reload nginx

      Next we'll create a file in our new web root directory to test out PHP processing.

      Step 5 — Create a PHP File to Test Configuration

      Your LEMP stack should now be completely set up. We can test it to validate that Nginx can correctly hand .php files off to our PHP processor.

      We can do this by creating a test PHP file in our document root. Open a new file called info.php within your document root in your text editor:

      • sudo nano /var/www/your_domain/info.php

      Type or paste the following lines into the new file. This is valid PHP code that will return information about our server:

      /var/www/your_domain/info.php

      <?php
        phpinfo();
      ?>
      

      When you are finished, save and close the file.

      Now, you can visit this page in your web browser by visiting your server's domain name or public IP address followed by /info.php:

      http://your_domain/info.php
      

      You should see a web page that has been generated by PHP with information about your server:

      PHP page info

      If you see a page that looks like this, you've set up PHP processing with Nginx successfully.

      After verifying that Nginx renders the page correctly, it's best to remove the file you created as it can actually give unauthorized users some hints about your configuration that may help them try to break in.

      For now, remove the file by typing:

      • sudo rm /var/www/html/info.php

      You can always regenerate this file if you need it later.

      Conclusion

      You should now have a LEMP stack configured on your Debian server. This gives you a very flexible foundation for serving web content to your visitors.



      Source link

      CentOS vs Ubuntu: Choosing the Right Linux Distribution for Your Server


      CentOS, Ubuntu, Debian, Fedora, RHEL, OpenSUSE, FreeBSD, Manjaro—the list of Linux distributions goes on and on. In fact, there are literally hundreds of distributions (a.k.a. distros) a Linux fanatic can choose from, and while not all stay active forever, 791 have existed since 2001, according to the DistroWatch database.1

      Despite the multitude of options, there are two distributions we see customers requesting most often for their dedicated servers: CentOS and Ubuntu. This post delves into the similarities, differences, and general IT user sentiment for these popular distros.

      Let’s start with a quick look at how these two stack up in terms of known website usage, as reported by w3techs.com:2

      As you can see, it’s a close race. Ubuntu is used by slightly more sites, as well as by more high traffic sites, with CentOS close behind. We’ll unpack some of the reasons why that might be, but first, here’s an overview of each respective distribution.

      Ubuntu Overview

      Based on the Debian architecture, Ubuntu was used early on for personal computers but has since become a household name in server-class computing and cloud environments. Ubuntu runs on the most popular architectures, including Intel, AMD, and ARM-based machines.

      Oh, and a fun fact: it’s named after the South African philosophy of ubuntu, which translates to “human-ness,” “humanity to others,” or “I am what I am because of who we all are.”3

      Ubuntu is known for its frequent update release cycles, which occurs publicly every six months with free support for a particular release for nine months following. Additionally, starting with Ubuntu 6.06, there’s a major release every two years that receives long-term support (LTS) for five years. These releases support hardware and integration for all updates in that series (i.e., 6.0X).

      Relative to other popular Linux distributions, Ubuntu is incredibly feature rich and friendly to developers looking to stay on the cutting edge. That said, it takes more support to stay up to date with the release cycle than some of the other distros, CentOS included. This can sometimes be seen as a con to going all-in on Ubuntu. More features and more releases can mean more complexity.

      Ubuntu utilizes the Advanced Package Tool (APT) using DEB packages for software management.

      Suggested Ubuntu-based alternatives: Linux Mint (desktop), elementary OS (desktop), Zorin OS (desktop), Pinguy OS (desktop), Trisquel GNU/Linux (free software), Bodhi Linux (desktop with Enlightenment) 

      CentOS Overview

      A free variant of Red Hat Enterprise Linux (RHEL), CentOS is known for its stability and support from their far-reaching community of enthusiasts. This Linux distribution falls in line with enterprise class needs and provides IT users a reliable way to deliver their applications and services. With a less-frequent release cycle than Ubuntu and others, CentOS typically requires less support and development expertise. Major release cycles happen every 2-3 years, which follows the RHEL release cycle.

      CentOS also comes with 7-10 years of free security updates. There’s an attractiveness to the fact that every version can serve for up to 10 years in that you don’t have to worry about major changes that could impact your applications, security, and user experience.

      Relative to Ubuntu, CentOS comes with fewer features, but this also makes it lightweight and consumes less of your compute resources. So if your applications are heavy, this operating system is one less resource-hungry area to worry about and factor into your growth model.

      CentOS utilizes the YUM graphical and command line utility using RPM packages for software management.

      Other RHEL clones and CentOS-based distributions: Scientific Linux, Springdale Linux, SME Server, Rocks Cluster Distribution, Oracle Enterprise Linux (according to distrowatch.com)

      Pros and Cons of Ubuntu and CentOS

      In some cases, a choice to go with Ubuntu over CentOS or vice versa comes down to personal preference. However, there are real pros and cons of each.

      CentOS

      Pros: Highly reliable and stable for enterprise workloads, a free variant of the well-trusted Red Hat Enterprise Linux (RHEL), each major version serves or up to 10 years with free security updates for 7-10 years, less support required, lightweight.

      Cons: Less frequent updates, lacks feature richness compared to other operating systems.

      Ubuntu

      Pros: Frequent updates, feature rich, leading edge, developer friendly, stable, support for five years for major releases.

      Cons: Higher resource consumption, less secure out of the box, requires more support to stay up to date.

      For a quick comparison, reference this side-by-side look from our friends at best-web-hosting.org:4

      Take the Next Step

      As a managed infrastructure and cloud hosting provider, we’re fans of all things Linux (and Windows), and hope you found this article helpful. If you’d like to learn more about these Linux distributions, how you can use them on our platform, or just want to talk shop, drop a question in the comments or schedule a free consultation with one of SingleHop’s server OS experts.

       Links, References, Further Reading:

      1. DistroWatch.com: https://distrowatch.com/dwres.php?resource=major
      2. Web Technology Surveys: https://w3techs.com/technologies/comparison/os-centos,os-ubuntu
      3. TedBlog: https://blog.ted.com/further-reading-on-ubuntu/
      4. Best-Web-Hosting:https://best-web-hosting.org/centos-vs-ubuntu-2018/

      On-Demand, Enterprise-Class Dedicated Servers

      Power your mission-critical workloads with bare metal services only found at SingleHop.



      Source link