Εγκατάσταση Lemp stack Σε Ubuntu 16.04 (Nginx, PHP, MariaDB)

egkatastasi-lempstack

To Lemp stack είναι ένα σύνολο από λογισμικά για τη φιλοξενία σελίδων στο Web. Αποτελείται από Linux στη περίπτωση μας Ubuntu 16.04, Nginx, MySQL(MariaDB) και PHP. Μια μεγάλη διαφορά του Lemp με το Lamp stack είναι η μικρότερη κατανάλωση πόρων.

Σε αυτό το άρθρο θα δούμε πως μπορούμε να εγκαταστήσουμε το Lemp stack σε ένα καινούργιο VM ή dedicated server που τρέχει Ubuntu 16.04, για τη φιλοξενία σελίδων όπως Joomla! και WordPress.

Για να ολοκληρώσουμε με επιτυχία αυτόν τον οδηγό χρειαζόμαστε ένα λογαριασμό με δικαιώματα χρήσης της εντολής sudo

ubuntu ssh

Βήμα 1, Ενημέρωση αποθετηρίων και λογισμικού.

Πριν ξεκινήσουμε είναι καλό να επιβεβαιώσουμε ότι έχουμε τις τελευταίες εκδόσεις αποθετηρίων και λογισμικού. Άρα πληκτρολογούμε:

sudo apt update
sudo apt upgrade -y

Βήμα 2, Εγκατάσταση Nginx web server:

H Εγκατάσταση του Nginx, όπου θα είναι ο Web Server μας, είναι απλή και γρήγορη με τη χρήση της παρακάτω εντολής:

sudo apt install nginx

Μας εμφανίζει το παρακάτω μήνυμα επιβεβαίωσης οπού πατάμε Y

The following NEW packages will be installed:
fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5 libvpx3
libxpm4 libxslt1.1 nginx nginx-common nginx-core
0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,994 kB of archives.
After this operation, 9,791 kB of additional disk space will be used.

Do you want to continue? [Y/n]

Εάν έχουμε ενεργοποιημένο το firewall δε ξεχνάμε να ανοίξουμε τις θύρες 80 και 443 στις οποίες θα δουλεύει ο web server:

sudo ufw allow in "Nginx full"

Αν όλα τα παραπάνω βήματα έγιναν με σωστό τρόπο, πληκτρολογώντας την IP του συστήματος μας σε ένα browser θα πρέπει να εμφανιστεί η βασική σελίδα του Nginx (παρόμοια με την παρακάτω εικόνα).

nginx wellcome page
nginx wellcome page

Βήμα 3, Εγκατάσταση ΜySQL(MariaDB):

Η MariaDB είναι είναι μία παραμετροποιημένη έκδοση της MySQL με πολλές βελτιώσεις και πιο διαδεδομένη στην open source community. H διαδικασία είναι λίγο πιο περίπλοκη από πριν, καθώς θα χρειαστεί πρώτα να περάσουμε το αποθετήριο της MariaDB πληκτρολογώντας την παρακάτω ακολουθία εντολών:

sudo apt install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.cc.uoc.gr/mirrors/mariadb/repo/10.1/ubuntu xenial main'

Πλέον έχουμε περάσει το αποθετήριο και μπορούμε να την εγκαταστήσουμε με τον ίδιο τρόπο που θα κάναμε εγκατάσταση σε ένα οποιοδήποτε άλλο πακέτο:

sudo apt update
sudo apt install mariadb-server -y

Τέλος, τρέχουμε τη παρακάτω εντολή για να αποκτήσουμε μόνιμα δικαιώματα υπερχρήστη. (Διαφορετικά στο επόμενο βήμα θα εμφάνιζε σφάλμα):

sudo su

Αμέσως μετά πρέπει να τρέξουμε τον οδηγό που θα κάνει κάποιες ρυθμίσεις ασφαλείας πάνω στη MariaDB:

mysql_secure_installation

Στην αρχή μας ζητάει τον τρέχοντα κωδικό του root. Tο αφήνουμε κενό, (εφόσον κενό είναι σαν προεπιλογή μετά την εγκατάσταση) και πατάμε enter. Θα εμφανίσει το παρακάτω κείμενο:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we’ll need the current
password for the root user. If you’ve just installed MariaDB, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):

Στην επόμενο μήνυμα μας ρωτάει αν θέλουμε να βάλουμε κωδικό υπερχρήστη για τη MySQL. Επιλέγουμε Y και πληκτρολογούμε τον κωδικό που επιθυμούμε.

OK, successfully used password, moving on…

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorization.

Set root password? [Y/n]

New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
… Success!

Η επόμενη ερώτηση αφορά την διαγραφή κάποιον χρηστών που δημιουργήθηκαν αυτόματα κατά την εγκατάσταση Δεν τους χρειαζόμαστε πλέον, άρα επιλέγουμε Υ

Remove anonymous users? [Y/n]

Στην συνέχεια, αν δεν έχουμε κάποιο συγκεκριμένο λόγο που να θέλουμε ο root να μπορεί να κάνει login από άλλο μηχάνημα, επιλέγουμε Y:

Disallow root login remotely? [Y/n]

Αμέσως μετά μας ρωτάει αν θέλουμε να αφαιρέσουμε την test database που έχει προ εγκατεστημένη. Επιλέγουμε και εδώ Υ.

Remove test database and access to it? [Y/n]

Και τέλος, μας ρωτάει αν θέλουμε να φορτώσει τα νέα δικαιώματα, όπου και εδώ επιλέγουμε Υ

Reload privilege tables now? [Y/n] Υ

Έχουμε πλέον τελειώσει την εγκατάσταση. Πλέον η MariaDB είναι εγκατεστημένη με επιτυχία και τρέχει στο σύστημα μας.

Βήμα 4, Εγκατάσταση PHP 7.0:

Αυτή τη στιγμή έχουμε εγκαταστήσει τον Nginx να για να εξυπηρετεί τις σελίδες μας και τη MySQL(MariaDB) να αποθηκεύει τα δεδομένα μας, αλλά δεν έχουμε ακόμα τρόπο να δημιουργούμε δυναμικό περιεχόμενο. Αυτό θα το κάνει η PHP.

H PHP 7.0 είναι η νεότερη έκδοση της PHP με πολλές βελτιώσεις στο κομμάτι της ταχύτητας. Πέραν από το βασικό πακέτο, θα χρειαστεί να περάσουμε και κάποια extra πρόσθετα της PHP για να τρέχει χωρίς πρόβλημα η σελίδα μας. Όλα αυτά θα γίνουν εύκολα, με την χρήση μίας εντολής.

sudo apt install php7.0-fpm php7.0-mysql php7.0-curl php7.0-json php7.0-intl php7.0-gd php7.0-mcrypt php7.0-xml php7.0-zip php7.0-mbstring php7.0-soap -y

Μόλις τελειώσουμε την εγκατάσταση θα κάνουμε μια μικρή αλλαγή στο configuration της PHP για να αποφύγουμε μελλοντικά προβλήματα με το security

Ανοίγουμε το κεντρικό αρχείο ρυθμίσεων της PHP μας:

sudo nano /etc/php/7.0/fpm/php.ini

Πατάμε ctrl+W για αναζήτηση και γράφουμε cgi.fix_pathinfo και πατάμε enter.

θα δούμε το παρακάτω:

php.ini configuration
php.ini configuration

Αντικαθιστούμε το ;cgi.fix_pathinfo=1 με cgi.fix_pathinfo=0 . Πατάμε Ctrl+X για έξοδο και Υ για αποθήκευση.

ΠΡΟΣΟΧΗ: αφαιρούμε και το ερωτηματικό από την αρχή

Και κάνουμε restart την PHP για να πάρει τη νέα ρύθμιση:

sudo systemctl restart php7.0-fpm

Βήμα 5, Διασύνδεση Nginx με PHP:

Σε αντίθεση με τον Apache , ο Nginx δε φορτώνει την PHP σα module αλλά την εκτελεί αυτόνομα για αυτο θα πρέπει να ρυθμίσουμε τον Nginx να καλεί την PHP όταν υπάρχει δυναμικό περιεχόμενο.

Αυτό θα το κάνουμε σε επίπεδο server block. Τα block στον Nginx είναι σαν τα virtual host του Apache και μας επιτρέπουν να φιλοξενήσουμε παραπάνω από ένα site στον ίδιο server. Κάθε εγκατάσταση έχει ένα default server block που βρίσκεται στο /etc/nginx/sites-available/default

ανοιγουμε το αρχείο, Αν αφαιρέσουμε τα σχόλια από το αρχείο για να είναι πιο ευανάγνωστο θα είναι αυτής της μορφής:

sudo nano /etc/nginx/sites-available/default

server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
try_files $uri $uri/ =404;
}
}

Και θα χρειαστεί να κάνουμε καποιες αλλαγες μεσα:

  • Στην οδηγία index πριν από το index.html θα πρέπει να προσθέσουμ index.php.
  • Θα πρέπει να προσθέσουμε ακόμα ένα location block.
  • Και τέλος θα πρεπει να μπλοκάρουμε την πρόσβαση στα αρχεία .htaccess αφου ο Nginx δεν τα επεξεργάζεται.

Με αυτές τις αλλαγες το αρχειο μας θα γίνει:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name _;                  

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Για να ελέγξουμε ότι δεν έχουμε κάνει κάποιο λάθος στο configuration μπορούμε να τρέξουμε την εντολή:

sudo nginx -t

οπού θα ελέγξει τα αρχεία του Νginx για συντακτικά λάθη. Εάν δεν μας βγάλει κάποιο λάθος μπορούμε με σιγουριά να κάνουμε επανεκκίνηση τον Nginx για να πάρει τις αλλαγές:

sudo systemctl restart nginx

Βήμα 6, Έλεγχος της PHP:

Έχουμε τελειώσει με την εγκατάσταση όλων των λογισμικών και το τελευταίο που μας μένει είναι να ελεγξουμε ότι ο nginx μπορεί να εξυπηρετήσει PHP σελίδες καλώντας την PHP. Πρώτα θα σβήσουμε την παλιά index του Nginx και μετά θα φτιάξουμε μια καινούργια index.php για τη PHP:

sudo rm /var/www/html/index.nginx-debian.html
sudo nano /var/www/html/index.php

προσθέτουμε το παρακάτω στον κειμενογράφο:

<?php
phpinfo();

Πατάμε Ctrl+X για έξοδο και Υ για αποθήκευση.

Τώρα αν βάλουμε την ip του vm μας στο browser θα πρέπει να δούμε μια σελίδα με πληροφορίες της PHP.

nginx-php
nginx-php

Για λόγους ασφαλείας είναι καλό να αφαιρέσουμε την phpinfo() μετά τον έλεγχο μας. Έτσι θα αποφύγουμε να εκθέσουμε σε τρίτους σημαντικές πληροφορίες για το server μας:

sudo rm /var/www/html/index.php

Με αυτόν τον τρόπο πλέον έχουμε έναν πλήρη και λειτουργικό Web Server βασισμένο σε Nginx, ικανό να φιλοξενήσει οποιαδήποτε ιστοσελίδα. Ο χρόνος ολοκλήρωσης του παραπάνω οδηγού σε ένα νέο μηχάνημα υπολογίζεται περίπου στα 45 λεπτά.

Μην διστάσετε να αφήσετε σχόλιο για οποιαδήποτε απορία ή παρατήρηση που μπορεί να έχετε.

4 comments: On Εγκατάσταση Lemp stack Σε Ubuntu 16.04 (Nginx, PHP, MariaDB)

Site Footer