Apache
Server WWW
Apache este un server open source pentru a furniza serviciul HTTP. Cuvântul apache este numele apașilor, triburi de amerindieni (populația nativă din America).
Hypertext Transfer Protocol (HTTP) este un protocol folosit pentru accesarea informațiilor în Internet care sunt păstrate pe servere World Wide Web (WWW). Protocolul HTTP este un protocol de tip text, fiind protocolul "implicit" al WWW.
Instalare server Apache în Ubuntu
Toate comenzile de mai jos sunt realizate de către userul root sau de către un user ce are drept de administrare (de exemplu folosind comanda sudo). Pentru cazul în care utilizatorul root nu este activat vom obține drepturile acestuia folosind comanda:
sudo su -
Sistemul folosit este GNU/Linux iar distribuția este Ubuntu 22.04.3 LTS (Jammy Jellyfish) varianta stabilă LTS (Long Time Support).
Pentru început vom actualiza sistemul, pentru a fi siguri că instalăm ultima versiune considerată stabilă:
apt update && apt upgrade && apt full-upgrade
Cu următoarea comandă vom instala serverul Apache:
apt install apache2
După instalare serviciul pornește automat. Pentru verificare rulăm comanda:
systemctl status apache2
După ce serviciul a pornit putem să ne conectăm, folosind browser-ul de web preferat, la adresa acestuia, în acest caz 192.168.1.62
ce va încărca pagina index.html
din directorul rădăcină al serverului Apache, amplasat, în cazul distribuției Ubuntu, în calea /var/www/html/
În cazul in care firewall-ul ufw
este activ vom lăsa conexiunile din exterior să se poată conectat la serviciul apache2:
ufw app list
ufw allow "Apache Full"
ufw reload
ufw status
Definirea porturilor pentru serverul Apache sunt definite în fișierul /etc/ufw/applications.d/apache2-utils.ufw.profile
Activăm pornirea serviciului la pornirea calculatorului/serverului:
systemctl enable apache2
Instalare PHP
PHP (acronim recursiv pentru PHP: Hypertext Preprocessor) este un limbaj de scripting de uz general, cu cod-sursă deschis (open source), utilizat pe scară largă, și care este potrivit în special pentru dezvoltarea aplicațiilor web și poate fi integrat în HTML.
Vom instala versiunea 8.1 a PHP din depozitul ppa:ondrej/php.
Vom verifica întâi dacă sunt instalate pachetele necesare pentru aducerea de noi depozite de pachete:
apt install software-properties-common
Instalam depozitul necesar:
sudo add-apt-repository ppa:ondrej/php
Realizăm un update al sursei pachetelor:
apt update
Realizăm upgrade la pachetele necesare, deoarece anterior am fost informți că sunt pachete de actualizat:
apt upgrade
Dupa care instalăm pachetul PHP versiunea 8.2 cu modulele necesare:
apt install php8.2 php8.2-curl php8.2-mbstring php8.2-xml php8.2-gd php8.2-zip php8.2-apcu php8.2-opcache php8.2-yaml
Pentru verificarea instalării vom crea fișierul info.php în directorul rădăcina al serverului apache:
nano /var/www/html/info.php
în care vom scrie urmatoarele:
<?php
phpinfo();
?>
Activăm modulul php pentru apache, folosind comanda:
a2enmod
ocazie cu care vedem toate modulele disponibile instalate:
Dacă rezultatul este ca cel de mai jos, totul este ok
După care ne conectăm la serverul apache pagina info.php creată anterior și vom obține pagina cu informațiile privitoare la configurarea PHP:
Apache cu PHP-FPM
PHP-FPM oferă performanțe îmbunătățite pentru site-urile web aglomerate.
Pentru a instala PHP 8.2 în Ubuntu cu PHP-FPM pentru Apache vom rula comanda de instalare a următoarelor pachete:
apt install php8.2-fpm libapache2-mod-fcgid
Pentru a activa PHP-FPM va trebui să activăm următoare module:
a2enmod proxy_fcgi setenvif
și să activăm fișierul de configurare aferent PHP-FPM:
a2enconf php8.2-fpm
După care va trebui sa notificăm serviciul Apache să reîncarce fișerele de configurare:
systemctl reload apache2
Instalare CMS Grav
Grav este un Content Management System (CMS) - sistem de administrare a conținutului. Acesta este un CMS ce nu are nevoie, pentru management, de o bază de date iar scriere paginilor se realizează folosind limbajul Markdown.
Pentru instalare avem nevoie de serviciul apache și limbajul PHP să fie funcționale și instalate cât și de un utilitar de dezarhivare a arhivelor zip, fapt pentru care vom alege unzip
.
apt install unzip
După descărcarea CMS-ului Grav cu tot cu pluginul admin la pagina https://github.com/getgrav/grav/releases,
wget https://github.com/getgrav/grav/releases/download/1.7.43/grav-admin-v1.7.43.zip
- versiunea folosită la scrierea acestui tutorial.
vom dezarhiva arhiva în directorul rădăcină a serverului Apache:
cd /var/www/
unzip /root/grav-admin-v1.7.43.zip
În continuare conform documentației, determinăm sub ce user și grup rulează apache pentru a schimba drepturile fișierelor:
ps aux | grep -v root | grep apache | cut -d\ -f1 | sort | uniq
iar cu rezultatul întors al utilizatorului în acest caz www-data
aflăm grupurile din care face parte:
groups www-data
Schimbăm calea directorului curent în directorul unde se află CMS-ul Grav, dezarhivat anterior:
cd /var/www/grav-admin
chgrp -R www-data .
find . -type f | xargs chmod 664
find ./bin -type f | xargs chmod 775
find . -type d | xargs chmod 775
find . -type d | xargs chmod +s
umask 0002
După cum observăm lipsește un modul al serverului apache:
Cu umătoarea comandă activăm modulul:
a2enmod rewrite
După care vom reporni serviciul:
systemctl restart apache2
Dezactivăm configurarea site-ul implicit al serverului apache:
a2dissite 000-default
și creăm un nou fișier de configurare pentru CMS-ul nou instalat în directorl rădăcină. Fișierele de configurare se află în directorul /etc/apache2/sites-available
:
nano /etc/apache2/sites-available/grav-site.conf
în fișierul creat cu editorul preferat, în acest caz nano
vom adăuga următorul text, la care adresa de email al adminului și numele serverului se vor înlocui cu cele adevărate:
<VirtualHost *:80>
ServerName nume.server.net
ServerAlias www.nume.server.net
ServerAdmin adresa.email@admin.com
DocumentRoot /var/www/grav-admin
<Directory /var/www/grav-admin>
Options -Indexes
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Activăm noua configurație, ce va realiza un link al fișierului grav-site.conf
în directorul /etc/apache2/sites-enabled
:
a2ensite grav-site
Vom reponi serverul pentru ca noile configurații să-și facă efectul:
systemctl restart apache2
Verificăm dacă îndeplinim condițiile de utilizare a CMS-ului dar de data aceasta la adresa http://192.168.1.62/admin
deoarece în fișierul de configurare am modificat directorul rădăcină al serverului și stabilim credențialele de conectare:
După înregistrarea utilizatorului de administrare vom putea intra panoul de comandă al CMS-ului cu ajutorul căruia vom putea realiza paginile site-ului, vom instala pluginuri, etc.:
Securizarea comunicației
Având în vedere că, comunicația între browser și server este în clar iar pe viitor se dorește a instala servicii și CMS care are cel puțin un form de autentificare cu user și parolă este necesar a se securiza comunicația prin utilizarea unui mijloc de criptare a acesteia folosind, în acest caz, protocolul SSL.
Stabilirea zonei de timp
Pentru a seta zona de timp vom folosi comanda:
timedatectl set-timezone Europe/Bucharest
și verificăm că a avut loc schimbarea cu:
timedatectl
Realizarea cheilor de certificare
Cheile vor fi create folosind o parolă care în pasul al doilea va fi eliminată, nu va trebui să o ținem minte pentru mult timp:).
cd /etc/ssl/private
openssl genrsa -aes128 -out server.key 2048
Eliminăm parola
openssl rsa -in server.key -out server.key
openssl req -new -days 3650 -key server.key -out server.csr
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Verificăm crearea cheilor:
ls
Vom avea nevoie ca modulul SSL din apache să fie încărcat, verificarea modulelor încărcate se realizează cu comanda:
apache2ctl -M
Vom crea un fișier de configurare a site-ului ce va încărca cheile de securitate:
nano /etc/apache2/sites-available/grav-site-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName nume.server.net
ServerAlias www.nume.server.net
ServerAdmin adresa.email@admin.com
DocumentRoot /var/www/grav-admin
<Directory /var/www/grav-admin>
Options -Indexes
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/private/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Activăm fișierul de configurare creat:
a2ensite grav-site-ssl
Activăm modulul ssl:
a2enmod ssl
Repornim serviciul apache pentru a incărca noile modificări:
systemctl restart apache2
Folosind browserul preferat vom încărca pagina https://192.168.1.62
de la care vom primi un avertisment ca nefiind de încredere, deoarece cheia creată de noi (este privată) nu este realizată de un organism agrementat (nu poate fi verificată public):
Apăsăm butonul Avansat
, pentru a deschide noi opțiuni:
Apăsăm butonul Acceptă riscul și continuă
după care pagina va fi încărcată. Cheia va fi descărcata în browser și nu vom mai fi întrebați în viitor atât timp cât avem cheia:
Odată conectați cu userul și parola aleasă pentru administrarea siteului putem face modificări la site prin introducerea de noi pagini și de module. Pagina de administrare arată ca în imaginea de mai jos:
iar pagina de unde putem adăuga pagini noi va arăta ca în imaginea de mai jos:
Atenție - Pentru cazul în care site-ul va deveni public este bine a se lucra cu chei SSL alocate de o entitate recunoscută ca de exemplu Let's Encrypt. Procesul de instalare a resurselor necesare este descris la pagina Let's Encrypt din aria Servere.
Astfel, pentru fiecare pagină, GRAV realizează un director în care se țin fișierele media ale acesteia (imagini, fișiere pdf, etc) și pagina editată în limbajul Markdown, pentru exemplificare o captură a paginii home. În funcție de ierarhia directoarelor se stabilește și ordinea în meniuri: