Introducere
Un pachet „LAMP” este un grup de software open source care este instalat pentru a permite unui server să găzduiască site-uri și aplicații web scrise în PHP. Acest termen este un acronim care reprezintă sistemul de operare Linux cu serverul web Apache. Datele site-ului sunt stocate într-o bază de date MySQL, iar conținutul dinamic este procesat de PHP.
În acest ghid, veți configura un pachet LAMP pe un server Ubuntu 22.04.
Pasul 1 — Instalarea Apache și actualizarea firewall-ului
Serverul web Apache este printre cele mai populare servere web din lume. Este bine documentat, are o comunitate activă de utilizatori și a fost utilizat pe scară largă pentru o mare parte din istoria webului, ceea ce îl face o alegere excelentă pentru găzduirea unui site web.
Începeți prin a actualiza memoria cache a managerului de pachete. Dacă este prima dată când utilizați sudo
în această sesiune, vi se va solicita să furnizați parola utilizatorului pentru a confirma că aveți privilegiile potrivite pentru a gestiona pachetele de sistem cu apt
:
sudo apt update
Apoi, instalați Apache cu:
sudo apt install apache2
Vi se va solicita să confirmați instalarea Apache. Confirmați apăsând Y
, apoi ENTER
.
Odată ce instalarea este finalizată, va trebui să ajustați setările firewall-ului pentru a permite traficul HTTP. Instrumentul de configurare implicit al firewall-ului Ubuntu se numește Uncomplicated Firewall (UFW). Are diferite profiluri de aplicație pe care le puteți folosi. Pentru a lista toate profilurile de aplicație UFW disponibile în prezent, executați această comandă:
sudo ufw app list
OutputAvailable applications:
Apache
Apache Full
Apache Secure
OpenSSH
Iată ce înseamnă fiecare dintre aceste profiluri:
- Apache : Acest profil deschide numai portul
80
(trafic web normal, necriptat). - Apache Full : Acest profil deschide atât portul
80
(trafic web normal, necriptat) cât și portul443
(trafic criptat TLS/SSL). - Apache Secure : Acest profil deschide doar portul
443
(trafic criptat TLS/SSL).
Deocamdată, cel mai bine este să permiteți numai conexiuni pe port 80
, deoarece aceasta este o instalare Apache nouă și încă nu aveți un certificat TLS/SSL configurat pentru a permite traficul HTTPS pe serverul dvs.
Pentru a permite traficul numai pe port 80
, utilizați Apache
profilul:
sudo ufw allow in "Apache"
Verificați modificarea cu:
sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
Traficul pe port 80
este acum permis prin firewall.
Puteți face o verificare imediată pentru a verifica dacă totul a decurs conform planificării, vizitând adresa IP publică a serverului dvs. în browserul dvs. web (consultați nota de sub titlul următor pentru a afla care este adresa dvs. IP publică dacă nu aveți aceste informații deja):
http://your_server_ip
Pagina web implicită Ubuntu 22.04 Apache este acolo în scop informativ și de testare. Mai jos este un exemplu de pagină web implicită Apache:
Dacă puteți vizualiza această pagină, serverul dvs. web este instalat corect și este accesibil prin firewall.
Pasul 2 – Instalarea MySQL
Acum că aveți un server web în funcțiune, trebuie să instalați sistemul de baze de date pentru a putea stoca și gestiona datele pentru site-ul dvs. MySQL este un sistem popular de gestionare a bazelor de date utilizat în mediile PHP.
Din nou, folosiți apt
pentru a achiziționa și instala acest software:
sudo apt install mysql-server
Când vi se solicită, confirmați instalarea tastând Y
, apoi ENTER
.
Când instalarea este finalizată, se recomandă să rulați un script de securitate care vine preinstalat cu MySQL. Acest script va elimina unele setări implicite nesigure și va bloca accesul la sistemul dumneavoastră de baze de date. Porniți scriptul interactiv rulând:
sudo mysql_secure_installation
Acesta vă va întreba dacă doriți să configurați VALIDATE PASSWORD PLUGIN
.
Notă: Activarea acestei funcții este o chemare de judecată. Dacă este activată, parolele care nu corespund criteriilor specificate vor fi respinse de MySQL cu o eroare. Este sigur să lăsați validarea dezactivată, dar ar trebui să utilizați întotdeauna parole puternice și unice pentru acreditările bazei de date.
Răspundeți Y
pentru da, sau orice altceva pentru a continua fără activare.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
Dacă răspundeți „da”, vi se va cere să selectați un nivel de validare a parolei. Rețineți că, dacă introduceți 2
pentru cel mai puternic nivel, veți primi erori atunci când încercați să setați orice parolă care nu conține cifre, litere mari și mici și caractere speciale:
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Indiferent dacă ați ales să configurați VALIDATE PASSWORD PLUGIN
, serverul vă va cere în continuare să selectați și să confirmați o parolă pentru utilizatorul root MySQL . Aceasta nu trebuie confundată cu rădăcina sistemului . Utilizatorul rădăcină al bazei de date este un utilizator administrativ cu privilegii complete asupra sistemului bazei de date. Chiar dacă metoda implicită de autentificare pentru utilizatorul root MySQL nu implică utilizarea unei parole, chiar dacă una este setată , ar trebui să definiți aici o parolă puternică ca măsură suplimentară de siguranță.
Dacă ați activat validarea parolei, vi se va afișa puterea parolei pentru parola root pe care tocmai ați introdus-o și serverul vă va întreba dacă doriți să continuați cu parola respectivă. Dacă sunteți mulțumit de parola dvs. actuală, introduceți Y
„da” la solicitare:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
Pentru restul întrebărilor, apăsați Y
și apăsați ENTER
tasta la fiecare solicitare. Acest lucru va elimina unii utilizatori anonimi și baza de date de testare, va dezactiva autentificarea de la distanță root și va încărca aceste reguli noi, astfel încât MySQL să respecte imediat modificările pe care le-ați făcut.
În cazul in care întâmpinați eroarea „… Failed! Error: SET PASSWORD has no significance for user ‘root’@’localhost’ as the authentication method used doesn’t store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.” … deshideți o sesiune nouă către server și închideți mysql_secure_installation folosind comanda killall
sudo killall -9 mysql_secure_installation
Porniți clientul mysql și rulați comanda de mai jos:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password;
exit
Dupa ce ați urmat pașii de mai jos rulati din nou mysql_secure_installation si urmați pașii de configurare.
Când ați terminat, testați dacă vă puteți conecta la consola MySQL tastând:
sudo mysql
Aceasta se va conecta la serverul MySQL ca rădăcină a utilizatorului bazei de date administrative , care este dedusă prin utilizarea lui sudo
la rularea acestei comenzi. Mai jos este un exemplu de ieșire:
OutputWelcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Pentru a ieși din consola MySQL, tastați:
exit
Observați că nu a fost nevoie să furnizați o parolă pentru a vă conecta ca utilizator root, chiar dacă ați definit una atunci când rulați scriptul mysql_secure_installation
. Asta pentru că metoda implicită de autentificare pentru utilizatorul administrativ MySQL este unix_socket
în loc de password
. Chiar dacă acest lucru ar putea părea o problemă de securitate, face serverul bazei de date mai sigur, deoarece singurii utilizatori care au permisiunea de a se conecta ca utilizator MySQL root sunt utilizatorii de sistem cu privilegii sudo care se conectează de la consolă sau printr-o aplicație care rulează cu aceleași privilegii. . În termeni practici, asta înseamnă că nu veți putea folosi utilizatorul rădăcină al bazei de date administrative pentru a vă conecta de la aplicația dvs. PHP. Setarea unei parole pentru rootContul MySQL funcționează ca o protecție, în cazul în care metoda de autentificare implicită este schimbată de la unix_socket
la password
.
Pentru o securitate sporită, cel mai bine este să aveți conturi de utilizator dedicate cu privilegii mai puțin extinse configurate pentru fiecare bază de date, mai ales dacă intenționați să aveți mai multe baze de date găzduite pe serverul dvs.
Notă: Există unele versiuni mai vechi de PHP care nu acceptă caching_sha2_password
, metoda implicită de autentificare pentru MySQL 8. Din acest motiv, atunci când creați utilizatori de baze de date pentru aplicații PHP pe MySQL 8, poate fi necesar să configurați aplicația dvs. pentru a utiliza mysql_native_password
plug -ul. în schimb. Acest tutorial va demonstra cum să faceți acest lucru în Pasul 6 .
Serverul dvs. MySQL este acum instalat și securizat. Apoi, veți instala PHP, componenta finală din stiva LAMP.
Pasul 3 – Instalarea PHP
Aveți instalat Apache pentru a vă servi conținutul și MySQL instalat pentru a vă stoca și gestiona datele. PHP este componenta configurației noastre care va procesa codul pentru a afișa conținut dinamic utilizatorului final. În plus față de php
pachet, veți avea nevoie php-mysql
de un modul PHP care să permită PHP să comunice cu bazele de date bazate pe MySQL. De asemenea, va trebui libapache2-mod-php
să activați Apache să gestioneze fișierele PHP. Pachetele de bază PHP vor fi instalate automat ca dependențe.
Pentru a instala aceste pachete, executați următoarea comandă:
sudo apt install php libapache2-mod-php php-mysql
Odată ce instalarea este finalizată, rulați următoarea comandă pentru a vă confirma versiunea PHP:
php -v
OutputPHP 8.1.2 (cli) (built: Mar 4 2022 18:13:46) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies
În acest moment, stiva dumneavoastră LAMP este complet operațională, dar înainte de a vă testa configurarea cu un script PHP, cel mai bine este să configurați o gazdă virtuală Apache adecvată pentru a păstra fișierele și folderele site-ului dvs.
Pasul 4 – Crearea unei gazde virtuale pentru site-ul dvs. web
Când utilizați serverul web Apache, puteți crea gazde virtuale (asemănătoare cu blocurile de server din Nginx) pentru a încapsula detaliile de configurare și pentru a găzdui mai mult de un domeniu de pe un singur server. În acest ghid, vom configura un domeniu numit your_domain , dar ar trebui să îl înlocuiți cu propriul nume de domeniu .
Notă : În cazul în care utilizați DigitalOcean ca furnizor de găzduire DNS, consultați documentația produsului nostru pentru instrucțiuni detaliate despre cum să configurați un nou nume de domeniu și să îl îndreptați către serverul dvs.
Apache pe Ubuntu 22.04 are o gazdă virtuală activată în mod implicit, care este configurată pentru a servi documente din /var/www/html
director. Deși acest lucru funcționează bine pentru un singur site, poate deveni greu de utilizat dacă găzduiți mai multe site-uri. În loc să modificăm /var/www/html
, vom crea o structură de director în interiorul site /var/www
-ului dvs._domeniu , lăsând /var/www/html
în loc ca director prestabilit pentru a fi servit dacă o solicitare a clientului nu se potrivește cu niciun alt site.
Creați directorul pentru domeniul dvs. după cum urmează:
sudo mkdir /var/www/your_domain
Apoi, atribuiți proprietatea directorului cu $USER
variabila de mediu, care va face referire la utilizatorul curent al sistemului:
sudo chown -R $USER:$USER /var/www/your_domain
Apoi, deschideți un nou fișier de configurare în sites-available
directorul Apache folosind editorul preferat de linie de comandă. Aici, vom folosi nano
:
sudo nano /etc/apache2/sites-available/your_domain.conf
Aceasta va crea un nou fișier gol. Adăugați următoarea configurație simplă cu propriul nume de domeniu:/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80>
ServerName your_domain
ServerAlias www.your_domain
ServerAdmin webmaster@localhost
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Salvați și închideți fișierul când ați terminat. Dacă utilizați nano
, faceți asta apăsând CTRL+X
, apoi Y
și ENTER
.
Cu această VirtualHost
configurație, îi spunem lui Apache să servească your_domain
folosind ca director rădăcină web. Dacă doriți să testați Apache fără un nume de domeniu, puteți elimina sau comenta opțiunile și adăugând un semn de litere ( ) la începutul liniilor fiecărei opțiuni./var/www/your_domain
ServerName
ServerAlias
#
Acum, folosiți a2ensite
pentru a activa noua gazdă virtuală:
sudo a2ensite your_domain
Poate doriți să dezactivați site-ul web implicit care este instalat cu Apache. Acest lucru este necesar dacă nu utilizați un nume de domeniu personalizat, deoarece în acest caz configurația implicită a Apache ar suprascrie gazda dvs. virtuală. Pentru a dezactiva site-ul web implicit al Apache, tastați:
sudo a2dissite 000-default
Pentru a vă asigura că fișierul de configurare nu conține erori de sintaxă, executați următoarea comandă:
sudo apache2ctl configtest
În cele din urmă, reîncărcați Apache, astfel încât aceste modificări să aibă efect:
sudo systemctl reload apache2
Noul dvs. site web este acum activ, dar rădăcina web este încă goală. Creați un fișier în acea locație pentru a testa dacă gazda virtuală funcționează conform așteptărilor:/var/www/your_domain
index.html
nano /var/www/your_domain/index.html
Includeți următorul conținut în acest fișier:/var/www/domeniul_dvs./index.html
<html>
<head>
<title>your_domain website</title>
</head>
<body>
<h1>Hello World!</h1>
<p>This is the landing page of <strong>your_domain</strong>.</p>
</body>
</html>
Salvați și închideți fișierul, apoi accesați browserul și accesați numele de domeniu sau adresa IP a serverului:
http://server_domain_or_IP
Pagina dvs. web ar trebui să reflecte conținutul fișierului pe care tocmai l-ați editat:
Puteți lăsa acest fișier pe loc ca pagină de destinație temporară pentru aplicația dvs. până când configurați un index.php
fișier care să îl înlocuiască. Odată ce faceți asta, amintiți-vă să eliminați sau să redenumiți index.html
fișierul din rădăcina documentului, deoarece ar avea prioritate față de un index.php
fișier în mod implicit.
O notă despre DirectoryIndex
Cu DirectoryIndex
setările implicite pe Apache, un fișier numit index.html
va avea întotdeauna prioritate față de un index.php
fișier. Acest lucru este util pentru configurarea paginilor de întreținere în aplicațiile PHP, prin crearea unui index.html
fișier temporar care conține un mesaj informativ pentru vizitatori. Deoarece această pagină va avea prioritate față de index.php
pagină, va deveni apoi pagina de destinație a aplicației. Odată ce întreținerea s-a încheiat, index.html
este redenumit sau eliminat din rădăcina documentului, readucerea paginii obișnuite de aplicație.
În cazul în care doriți să modificați acest comportament, va trebui să editați /etc/apache2/mods-enabled/dir.conf
fișierul și să modificați ordinea în care index.php
fișierul este listat în DirectoryIndex
directivă:
sudo nano /etc/apache2/mods-enabled/dir.conf
/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
După salvarea și închiderea fișierului, va trebui să reîncărcați Apache, astfel încât modificările să aibă efect:
sudo systemctl reload apache2
În pasul următor, vom crea un script PHP pentru a testa dacă PHP este instalat și configurat corect pe serverul dvs.
Pasul 5 — Testarea procesării PHP pe serverul dvs. web
Acum că aveți o locație personalizată pentru a găzdui fișierele și folderele site-ului dvs., creați un script de testare PHP pentru a confirma că Apache este capabil să gestioneze și să proceseze cererile pentru fișiere PHP.
Creați un fișier nou numit info.php
în dosarul personalizat rădăcină web:
nano /var/www/your_domain/info.php
Aceasta va deschide un fișier gol. Adăugați următorul text, care este cod PHP valid, în interiorul fișierului:/var/www/domeniul_dvs./info.php
<?php
phpinfo();
Când ați terminat, salvați și închideți fișierul.
Pentru a testa acest script, accesați browserul dvs. web și accesați numele de domeniu sau adresa IP a serverului dvs., urmată de numele scriptului, care în acest caz este info.php
:
http://server_domain_or_IP/info.php
Iată un exemplu de pagină web PHP implicită:
Această pagină oferă informații despre serverul dvs. din perspectiva PHP. Este util pentru depanare și pentru a vă asigura că setările dvs. sunt aplicate corect.
Dacă vedeți această pagină în browser, atunci instalarea PHP funcționează conform așteptărilor.
După ce ați verificat informațiile relevante despre serverul dvs. PHP prin pagina respectivă, cel mai bine este să eliminați fișierul creat, deoarece conține informații sensibile despre mediul dvs. PHP și serverul Ubuntu. Folosiți rm
pentru a face acest lucru:
sudo rm /var/www/your_domain/info.php
Puteți oricând să recreați această pagină dacă aveți nevoie să accesați din nou informațiile mai târziu.
Pasul 6 – Testarea conexiunii la baza de date din PHP (Opțional)
Dacă doriți să testați dacă PHP este capabil să se conecteze la MySQL și să execute interogări de bază de date, puteți crea un tabel de testare cu date de testare și interogare pentru conținutul său dintr-un script PHP. Înainte de a face asta, trebuie să creați o bază de date de testare și un nou utilizator MySQL configurat corespunzător pentru a o accesa.
Creați o bază de date numită example_database și un utilizator numit example_user . Puteți înlocui aceste nume cu valori diferite.
Mai întâi, conectați-vă la consola MySQL folosind contul root :
sudo mysql -p
Pentru a crea o nouă bază de date, executați următoarea comandă din consola dvs. MySQL:
CREATE DATABASE example_database;
Acum creați un utilizator nou și acordați-i privilegii complete pe baza de date personalizată pe care tocmai ați creat-o.
Următoarea comandă creează un nou utilizator numit example_user
care se autentifică cu caching_sha2_password
metoda. Definim parola acestui utilizator ca password
, dar ar trebui să înlocuiți această valoare cu o parolă sigură pe care o alegeți.
CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';
Notă : ALTER USER
Declarația anterioară setează utilizatorul MySQL rădăcină să se autentifice cu pluginul caching_sha2_password
. Conform documentației oficiale MySQL , caching_sha2_password
este pluginul de autentificare preferat al MySQL, deoarece oferă o criptare a parolei mai sigură decât cea mai veche, dar încă utilizată pe scară largă mysql_native_password
.
Cu toate acestea, unele versiuni de PHP nu funcționează în mod fiabil cu caching_sha2_password
. PHP a raportat că această problemă a fost remediată începând cu PHP 7.4 , dar dacă întâmpinați o eroare când încercați să vă conectați la phpMyAdmin mai târziu, este posibil să doriți să setați root pentru a se autentifica cu mysql_native_password
:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Acum acordați acestui utilizator permisiunea asupra bazei de example_database
date:
GRANT ALL ON example_database.* TO 'example_user'@'%';
Acest lucru va oferi utilizatorului example_user privilegii complete asupra bazei de date example_database , împiedicând în același timp acest utilizator să creeze sau să modifice alte baze de date pe serverul dumneavoastră.
Acum ieșiți din shell-ul MySQL cu:
exit
Testați dacă noul utilizator are permisiunile corespunzătoare conectându-vă din nou la consola MySQL, de data aceasta folosind acreditările personalizate de utilizator:
mysql -u example_user -p
Observați -p
indicatorul din această comandă, care vă va solicita parola utilizată la crearea utilizatorului example_user . După ce vă conectați la consola MySQL, confirmați că aveți acces la baza de date example_database :
SHOW DATABASES;
Acest lucru vă va oferi următoarea ieșire:
Output+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)
Apoi, creați un tabel de testare numit todo_list . Din consola MySQL, executați următoarea instrucțiune:
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);
Introduceți câteva rânduri de conținut în tabelul de testare. Repetați următoarea comandă de câteva ori, folosind valori diferite, pentru a completa tabelul de testare:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");
Pentru a confirma că datele au fost salvate cu succes în tabelul dvs., rulați:
SELECT * FROM example_database.todo_list;
Următorul este rezultatul:
Output+---------+--------------------------+
| item_id | content |
+---------+--------------------------+
| 1 | My first important item |
| 2 | My second important item |
| 3 | My third important item |
| 4 | and this one more thing |
+---------+--------------------------+
4 rows in set (0.000 sec)
După ce confirmați că aveți date valide în tabelul de testare, părăsiți consola MySQL:
exit
Acum puteți crea scriptul PHP care se va conecta la MySQL și se va interoga pentru conținutul dvs. Creați un nou fișier PHP în directorul dvs. rădăcină web personalizat folosind editorul dvs. preferat:
nano /var/www/your_domain/todo_list.php
Următorul script PHP se conectează la baza de date MySQL și interogează conținutul tabelului todo_list , afișând rezultatele într-o listă. Dacă există o problemă cu conexiunea la baza de date, se va lansa o excepție.
Adăugați acest conținut în todo_list.php
scriptul dvs., amintindu-vă să înlocuiți example_user
și password
cu datele dvs.: /var/www/domeniul_dvs./todo_list.php
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>TODO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
Salvați și închideți fișierul când ați terminat de editat.
Acum puteți accesa această pagină în browserul dvs., vizitând numele de domeniu sau adresa IP publică configurată pentru site-ul dvs. web, urmată de /todo_list.php
:
http://your_domain_or_IP/todo_list.php
Această pagină web ar trebui să dezvăluie vizitatorului dvs. conținutul pe care l-ați inserat în tabelul de testare:
Aceasta înseamnă că mediul dvs. PHP este gata să se conecteze și să interacționeze cu serverul dvs. MySQL.
Concluzie
În acest ghid, ați construit o bază flexibilă pentru a oferi vizitatorilor site-uri web și aplicații PHP, folosind Apache ca server web și MySQL ca sistem de bază de date.
Ca pas imediat următor, ar trebui să vă asigurați că conexiunile la serverul dvs. web sunt securizate, servindu-le prin HTTPS. Pentru a realiza acest lucru, puteți folosi Let’s Encrypt pentru a vă securiza site-ul cu un certificat TLS/SSL gratuit.