Instalare LAMP in CentOS 7 folosind Software Collections

Un aspect important de care va veti lovi daca doriti sa folositi CentOS 7 pentru un webserver este existenta unei versiuni prea vechi a PHP si MariaDB din repozitoarele standard. Versiunea PHP pe care o veti gasi instalata default in CentOS 7 este 5.4. Daca veti dori sa folositi o serie de aplicatii care necesita PHP, veti vedea ca majoritatea vor avea nevoie de minim versiunea 5.5, ceea ce poate reprezenta o potentiala problema.

 

Instalare SCL si AMP

Initial vom instala Software Collections si EPEL cu comenzile:

sudo yum install scl-util scl-util-build
sudo yum install epel-release centos-release-scl

Vom cauta apoi fisierele specifie pentru PHP 7.1:

sudo yum search rh-php71 | less

Vom instala astfel PHP 7.1, folosind urmatoarea comanda:

sudo yum install rh-php71 rh-php71-php rh-php71-php-dba rh-php71-php-gd rh-php71-php-fpm rh-php71-php-json rh-php71-php-mbstring rh-php71-php-pdo rh-php71-php-mysqlnd

Vom cauta si instala Apache 2.4 cu comenzile:

sudo yum search httpd24
sudo yum install httpd24-httpd

Precum si MariaDB 10.2 cu comenzile:

sudo yum search rh-mariadb | less
sudo yum install rh-mariadb102-mariadb rh-mariadb102-mariadb-server

Odata instalate, trebuie retinut un lucru esential cu privire la pachetele din Software Collections. Acestea vor avea o locatie unica in sistemul de fisiere, diferita de cea standard – de aici si nevoia de a le activa inainte de a le folosi.

Astfel, noua locatia va fi in /opt/rh/ urmand ca restul locatiei sa fie formata din denumirea pachetului urmata de o structura arborescenta similara cu structura sistemului de fisiere standard.

Iata cum arata de exemplu structura de directoare pentru httpd24:

pwd
/opt/rh/httpd24/root
ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

Sau structura superioara, in care puteam vedea pachetele httpd24, rh-mariadb102 rh-php71:

cd /opt/rh/
ls
httpd24  rh-mariadb102  rh-php71

Astfel, pentru a crea noi VirtualHost-uri si pentru a configura Apache, trebuie sa folosim noua locatie. Fisierul de configurare este in /opt/rh/httpd24/root/etc/httpd/conf/httpd.conf iar noul DocumentRoot este in /opt/rh/httpd24/root/var/www/html.

Pentru a rula, de exemplu, scriptul mysql_secure_installation al MariaDB, fara a avea activate serviciile in prealabil, va trebui sa rulam comanda:

source /opt/rh/rh-mariadb102/enable
mysql_secure_installation

Pentru a activa noile pachete, in cazul serviciilor de genul Apache, MariaDB sau PHP, putem folosi comenzile:

sudo systemctl enable httpd24-httpd rh-mariadb102-mariadb rh-php71-php

Totodata, putem adauga urmatoarele linii in .bashrc:

source scl_source enable rh-php71
source scl_source enable rh-maridb102
source scl_source enable httpd24

 

Configurarea unui VirtualHost

In CentOS, spre deosebire de Ubuntu sau openSUSE, exista o metoda mai usoara de a configura VirtualHost-uri. Astfel, fisierele de configurare vor putea fi plasate in mod standard in directorul /etc/httpd/conf.d/ avand denumirea dorita si extensia .conf. Nu este nevoie sa le salvam intr-un director de forma sites-available sau sites-enabled. Acest lucru, personal, mi se pare un avantaj.

Tinand cont de faptul ca lucram cu un pachet instalat din Software Collections, locatia virtual hostului va fi urmatoarea: /opt/rh/httpd24/root/etc/httpd/conf.d/ urmata de denumirea fisierului. Nu voi continua prin a configura un virtual host, pentru ca acest pas il aveti deja detaliat intr-un articol precedent, iar structura unui fisier este similara.

 

Crearea unui Root Directory

Dupa cum aminteam mai sus, dat fiind faptul ca Apache httpd este instalat din Software Collections, root directory va avea alta locatie. Astfel, va trebui sa creati directorul:

sudo mkdir /opt/rh/httpd24/root/var/www/html

Acest director va trebui sa aiba drept user si group cele specifice serviciului httpd. Ca urmare, va trebui sa setam:

sudo chown -R apache:apache /opt/rh/httpd24/root/var/www/html/

 

Configurarea Firewall-ului

Pentru a putea permite comunicarea prin portul HTTP/HTTPS si SSH, trebuie in prealabil configurat firewall-ul. Nu vom folosi iptables, asa cum am face-o in Ubuntu spre exemplu, ci un nou utilitar numit firewalld. In multe cazuri acesta nu este instalat standard, asadar va trebui sa il instalam cu comanda:

sudo yum install firewalld

Dupa care ne asiguram ca este pornit si activat:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Abia acum, vom putea sa il configuram pentru porturile de care avem nevoie, prin comenzile:

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https

Iar apoi sa ii reincarcam configuratiile:

sudo firewall-cmd --reload

 

Instalarea unui certificat SSL Let's Encrypt folosing Certbot

Dat fiind faptul ca am folosit versiuni noi ale aplicatiilor AMP din Software Collections, rularea certbot conform instructiunilor de pe website-ul oficial nu va da niciun rezultat. Acest lucru este din cauza faptului ca locatiile noilor versiuni ale aplicatiilor sunt diferite de cele ale aplicatiilor standard. Ca sa intelegeti, de fapt ceea ce face utilitarul certbot la rulare, este sa caute locatia fisierelor de configurare pentru fiecare domeniu.

Astfel, pentru a rula certbot va trebui sa adaugam doua optiuni suplimentare, dupa cum urmeaza:

sudo cerbot --apache --apache-server-root /opt/rh/httpd24/root/etc/httpd --apache-vhost-root /opt/rh/httpd24/root/etc/httpd/conf.d -d www.numedomeniu.tld

Sau, alternativ, puteti sa editati fisierul de configurare al Let's Encrypt si sa adaugati noile locatii acolo, astfel:

sudo vim /etc/letsencrypt/cli.ini
#adaugati liniile urmatoare
apache-server-root=/opt/rh/httpd24/root/etc/httpd/
apache-challenge-location=/opt/rh/httpd24/root/etc/httpd/conf.d/
apache-vhost-root=/opt/rh/httpd24/root/etc/httpd/conf.d/

Avand instalat certificatul SSL, trebuie sa va asigurati ca acesta se va reinnoi la timp, pentru ca certificatele Let's Encrypt au o valabilitate de doar 90 de zile. Astfel, un cronjob ar putea fi util.

Iata cum ar putea sa arata o linie cu un cronjob specific:

26 15 * * * /bin/scl enable httpd24 /bin/bash && /bin/bash /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log

 

Concluzie

Iata cum puteti folosi ultimele versiuni de pachete existente in Software Collections pentru a configura un Server LAMP in CentOS 7. Nu este complicat deloc, chiar daca este nevoie de ceva mai multi pasi decat in Ubuntu, iar CentOS va va oferi stabilitate si securitate pentru multi ani de acum inainte. CentOS 7 va beneficia de update-uri pana in 2024, oferind stabilitate crescuta si siguranta, iar CentOS 8 posibil sa fie lansat in urmatorii doi ani, avand astfel o versiune mai noua care cu siguranta va aduce multe imbunatatiri fata de versiunea 7.