O versiune anterioară a acestui tutorial a fost scrisă de Brennan Bearnes.

Introducere

O stivă „LAMP” este un grup de software open-source care este de obicei instalat împreună pentru a permite unui server să găzduiască site-uri web dinamice și aplicații web. Acest termen este de fapt 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, vom instala o stivă LAMP pe un server Ubuntu 18.04.

Precondiții

Pentru a finaliza acest tutorial, va trebui să aveți un server Ubuntu 18.04 cu un cont de utilizator care să nu fie activat sudoroot și un firewall de bază. Acesta poate fi configurat folosind ghidul nostru de configurare inițială a serverului pentru Ubuntu 18.04.

Pasul 1 – Instalarea Apache și actualizarea firewall-ului

Serverul web Apache este printre cele mai populare servere web din lume. Este bine documentat și a fost utilizat pe scară largă în cea mai mare parte a istoriei web, ceea ce îl face o alegere implicită excelentă pentru găzduirea unui site web.

Instalați Apache folosind managerul de pachete al Ubuntu, apt:

  • sudo apt update
  • sudo apt install apache2

Din moment ce aceasta este o comandă sudo, aceste operații sunt executate cu privilegii de root. Vă va cere parola de utilizator obișnuit pentru a vă verifica intențiile.

După ce ați introdus parola, apt vă va spune ce pachete intenționează să instaleze și cât spațiu suplimentar pe disc vor ocupa acestea. Apăsați Y și apăsați ENTER pentru a continua, iar instalarea va continua.

Ajustați firewall-ul pentru a permite traficul web

În continuare, presupunând că ați urmat instrucțiunile inițiale de configurare a serverului și ați activat firewall-ul UFW, asigurați-vă că firewall-ul dvs. permite traficul HTTP și HTTPS. Puteți verifica dacă UFW are un profil de aplicație pentru Apache, astfel:

  • sudo ufw app list
Output
Available applications: Apache Apache Full Apache Secure OpenSSH

Dacă vă uitați la profilul Apache Full, acesta ar trebui să arate că permite traficul către porturile 80 și 443:

  • sudo ufw app info "Apache Full"
Output
Profile: Apache FullTitle: Web Server (HTTP,HTTPS)Description: Apache v2 is the next generation of the omnipresent Apache webserver.Ports: 80,443/tcp

Allow incoming HTTP and HTTPS traffic for this profile:

  • sudo ufw allow in "Apache Full"

Puteți face imediat o verificare la fața locului pentru a verifica dacă totul a decurs conform planului, vizitând adresa IP publică a serverului dvs. în browserul dvs. web (consultați nota de la următorul titlu pentru a afla care este adresa dvs. IP publică, dacă nu aveți deja această informație):

http://your_server_ip

Vă veți vedea configurația implicită Ubuntu 18.04 Apache, care se află acolo în scop informativ și de testare. Ar trebui să arate cam așa:

Ubuntu 18.04 Apache default

Dacă vedeți această pagină, atunci serverul dvs. web este acum instalat corect și este accesibil prin firewall.

Cum să găsiți adresa IP publică a serverului dvs. De obicei, aceasta este adresa pe care o utilizați pentru a vă conecta la serverul dvs. prin SSH.

Există câteva moduri diferite de a face acest lucru din linia de comandă. În primul rând, ați putea folosi instrumentele iproute2 pentru a obține adresa IP, tastând acest lucru:

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

Aceasta vă va da două sau trei linii înapoi. Toate sunt adrese corecte, dar este posibil ca computerul dvs. să nu poată folosi decât una dintre ele, așa că nu ezitați să le încercați pe fiecare.

O metodă alternativă este să folosiți utilitarul curl pentru a contacta o parte externă care să vă spună cum vă vede serverul. Acest lucru se face întrebând un anumit server care este adresa dvs. IP:

  • sudo apt install curl
  • curl http://icanhazip.com

Indiferent de metoda pe care o folosiți pentru a obține adresa dvs. IP, tastați-o în bara de adrese a browserului dvs. web pentru a vizualiza pagina implicită Apache.

Pasul 2 – Instalarea MySQL

Acum că aveți serverul dvs. web instalat și funcțional, este timpul să instalați MySQL. MySQL este un sistem de gestionare a bazelor de date. Practic, acesta va organiza și va oferi acces la bazele de date în care site-ul dvs. poate stoca informații.

Încă o dată, utilizați apt pentru a achiziționa și instala acest software:

  • sudo apt install mysql-server

Nota: În acest caz, nu trebuie să rulați sudo apt update înainte de comandă. Acest lucru se datorează faptului că ați executat-o recent în comenzile de mai sus pentru a instala Apache. Indexul pachetelor de pe calculatorul dumneavoastră ar trebui să fie deja actualizat.

Această comandă, de asemenea, vă va arăta o listă a pachetelor care vor fi instalate, împreună cu cantitatea de spațiu pe disc pe care o vor ocupa. Introduceți Y pentru a continua.

Când instalarea este completă, rulați un script simplu de securitate care vine preinstalat cu MySQL și care va elimina unele valori implicite periculoase și va bloca accesul la sistemul de baze de date. Porniți scriptul interactiv executând:

  • sudo mysql_secure_installation

Acesta vă va întreba dacă doriți să configurați VALIDATE PASSWORD PLUGIN.

Nota: Activarea acestei caracteristici este un fel de decizie de judecată. Dacă este activată, parolele care nu corespund criteriilor specificate vor fi respinse de MySQL cu o eroare. Acest lucru va cauza probleme dacă folosiți o parolă slabă împreună cu un software care configurează automat acreditările de utilizator MySQL, cum ar fi pachetele Ubuntu pentru phpMyAdmin. Este sigur să lăsați validarea dezactivată, dar ar trebui să folosiț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 passwordsand improve security. It checks the strength of passwordand allows the users to set only those passwords which aresecure 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 veți încerca să setați orice parolă care nu conține numere, litere majuscule și minuscule și caractere speciale sau care se bazează pe cuvinte comune din dicționar.

There are three levels of password validation policy:LOW Length >= 8MEDIUM Length >= 8, numeric, mixed case, and special charactersSTRONG Length >= 8, numeric, mixed case, special characters and dictionary filePlease 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 rădăcină MySQL. Acesta este un cont administrativ în MySQL care are privilegii sporite. Gândiți-vă că este similar cu contul root pentru serverul propriu-zis (deși cel pe care îl configurați acum este un cont specific MySQL). Asigurați-vă că aceasta este o parolă puternică și unică și nu o lăsați goală.

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ă schimbați această parolă. Dacă sunteți mulțumit cu parola actuală, introduceți N pentru „nu” la întrebarea:

Using existing password for root.Estimated strength of the password: 100Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

Pentru restul întrebărilor, apăsați Y și apăsați tasta ENTER la fiecare întrebare. Acest lucru va elimina unii utilizatori anonimi și baza de date de test, va dezactiva autentificările root de la distanță și va încărca aceste noi reguli, astfel încât MySQL să respecte imediat modificările pe care le-ați făcut.

Rețineți că în sistemele Ubuntu care rulează MySQL 5.7 (și versiunile ulterioare), utilizatorul root MySQL este setat să se autentifice în mod implicit cu ajutorul plugin-ului auth_socket și nu cu o parolă. Acest lucru permite o oarecare securitate și utilizare mai mare în multe cazuri, dar poate, de asemenea, să complice lucrurile atunci când trebuie să permiteți unui program extern (de exemplu, phpMyAdmin) să acceseze utilizatorul.

Dacă preferați să folosiți o parolă atunci când vă conectați la MySQL ca root, va trebui să comutați metoda de autentificare a acestuia de la auth_socket la mysql_native_password. Pentru a face acest lucru, deschideți promptul MySQL din terminalul dvs.:

  • sudo mysql

În continuare, verificați ce metodă de autentificare utilizează fiecare dintre conturile dvs. de utilizator MySQL cu următoarea comandă:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | | auth_socket | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

În acest exemplu, puteți vedea că utilizatorul root se autentifică, de fapt, folosind extensia auth_socket. Pentru a configura contul root să se autentifice cu o parolă, executați următoarea comandă ALTER USER. Asigurați-vă că schimbați password cu o parolă puternică la alegere:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Apoi, rulați FLUSH PRIVILEGES care îi spune serverului să reîncarce tabelele de acordare și să pună în aplicare noile modificări:

  • FLUSH PRIVILEGES;

Verificați din nou metodele de autentificare folosite de fiecare dintre utilizatorii dumneavoastră pentru a confirma că root nu se mai autentifică folosind plugin-ul auth_socket:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

Vezi în acest exemplu de ieșire că utilizatorul MySQL root se autentifică acum folosind o parolă. După ce confirmați acest lucru pe propriul server, puteți ieși din shell-ul MySQL:

  • exit

În acest moment, sistemul dvs. de baze de date este acum configurat și puteți trece la instalarea PHP, componenta finală a stivei LAMP.

Pasul 3 – Instalarea PHP

PHP este componenta din configurația dvs. care va procesa codul pentru a afișa conținut dinamic. Poate rula scripturi, se poate conecta la bazele de date MySQL pentru a obține informații și poate preda conținutul procesat serverului dvs. web pentru a-l afișa.

Încă o dată, profitați de sistemul apt pentru a instala PHP. În plus, includeți de data aceasta câteva pachete de ajutor, astfel încât codul PHP să poată rula sub serverul Apache și să vorbească cu baza dumneavoastră de date MySQL:

  • sudo apt install php libapache2-mod-php php-mysql

Acest lucru ar trebui să instaleze PHP fără probleme. Vom testa acest lucru într-un moment.

În cele mai multe cazuri, veți dori să modificați modul în care Apache servește fișierele atunci când este solicitat un director. În prezent, dacă un utilizator solicită un director de la server, Apache va căuta mai întâi un fișier numit index.html. Vrem să îi spunem serverului web să prefere fișierele PHP în detrimentul altora, așa că faceți ca Apache să caute mai întâi un fișier index.php.

Pentru a face acest lucru, tastați această comandă pentru a deschide fișierul dir.conf într-un editor de text cu privilegii de root:

  • sudo nano /etc/apache2/mods-enabled/dir.conf

Acesta va arăta astfel:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c> DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm</IfModule>

Mutați fișierul index PHP (evidențiat mai sus) în prima poziție după specificația DirectoryIndex, astfel:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm</IfModule>

Când ați terminat, salvați și închideți fișierul apăsând CTRL+X. Confirmați salvarea tastând Y și apoi apăsați ENTER pentru a verifica locația de salvare a fișierului.

După aceasta, reporniți serverul web Apache pentru ca modificările dvs. să fie recunoscute. Faceți acest lucru tastând acest lucru:

  • sudo systemctl restart apache2

De asemenea, puteți verifica starea serviciului apache2 folosind systemctl:

  • sudo systemctl status apache2
Sample Output
● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-04-23 14:28:43 EDT; 45s ago Docs: man:systemd-sysv-generator(8) Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) Tasks: 6 (limit: 512) CGroup: /system.slice/apache2.service ├─13623 /usr/sbin/apache2 -k start ├─13626 /usr/sbin/apache2 -k start ├─13627 /usr/sbin/apache2 -k start ├─13628 /usr/sbin/apache2 -k start ├─13629 /usr/sbin/apache2 -k start └─13630 /usr/sbin/apache2 -k start

Presați Q pentru a ieși din această ieșire de stare.

Pentru a îmbunătăți funcționalitatea PHP, aveți opțiunea de a instala unele module suplimentare. Pentru a vedea opțiunile disponibile pentru modulele și bibliotecile PHP, introduceți rezultatele lui apt search în less, un pager care vă permite să derulați prin ieșirea altor comenzi:

  • apt search php- | less

Utilizați tastele săgeată pentru a derula în sus și în jos și apăsați Q pentru a ieși.

Rezultatele sunt toate componentele opționale pe care le puteți instala. Vă va oferi o scurtă descriere pentru fiecare:

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64 Tracks usage of TCP/IP and builds html files with graphsbluefish/bionic 2.2.10-1 amd64 advanced Gtk+ text editor for web and software developmentcacti/bionic 1.1.38+ds1-1 all web interface for graphing of monitoring systemsganglia-webfrontend/bionic 3.6.1-3 all cluster monitoring toolkit - web front-endgolang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all PHP-like Compression and Archive Extensions in Gohaserl/bionic 0.9.35-2 amd64 CGI scripting program for embedded environmentskdevelop-php-docs/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-phpkdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-php-l10n…:

Pentru a afla mai multe despre ceea ce face fiecare modul, puteți căuta pe internet mai multe informații despre acestea. Alternativ, uitați-vă la descrierea lungă a pachetului, tastând:

  • apt show package_name

Va fi o mulțime de rezultate, cu un câmp numit Description care va avea o explicație mai lungă a funcționalității pe care o oferă modulul.

De exemplu, pentru a afla ce face modulul php-cli, ați putea tasta acest lucru:

  • apt show php-cli

Pe lângă o mare cantitate de alte informații, veți găsi ceva care arată așa:

Output
…Description: command-line interpreter for the PHP scripting language (default) This package provides the /usr/bin/php command interpreter, useful for testing PHP scripts from a shell or performing general shell scripting tasks. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. . This package is a dependency package, which depends on Ubuntu's default PHP version (currently 7.2).…

Dacă, după ce ați cercetat, decideți că doriți să instalați un pachet, puteți face acest lucru folosind comanda apt install, așa cum ați făcut pentru celelalte programe.

Dacă ați decis că php-cli este ceva de care aveți nevoie, puteți tasta:

  • sudo apt install php-cli

Dacă doriți să instalați mai multe module, puteți face acest lucru enumerându-le pe fiecare dintre ele, separate prin câte un spațiu, după comanda apt install, astfel:

  • sudo apt install package1 package2 ...

În acest moment, stiva LAMP este instalată și configurată. Înainte de a face orice altceva, vă recomandăm să configurați o gazdă virtuală Apache unde puteți stoca detaliile de configurare a serverului dumneavoastră.

Pasul 4 – Configurarea gazdelor virtuale (recomandat)

Când folosiți serverul web Apache, puteți utiliza gazde virtuale (similare blocurilor de servere din Nginx) pentru a încapsula detaliile de configurare și pentru a găzdui mai mult de un domeniu de pe un singur server. Noi vom configura un domeniu numit your_domain, dar ar trebui să îl înlocuiți cu propriul nume de domeniu. Pentru a afla mai multe despre configurarea unui nume de domeniu cu DigitalOcean, consultați introducerea noastră la DigitalOcean DNS.

Apache pe Ubuntu 18.04 are un singur bloc de servere activat în mod implicit, care este configurat pentru a servi documente din directorul /var/www/html. Deși acest lucru funcționează bine pentru un singur site, poate deveni greoi dacă găzduiți mai multe site-uri. În loc să modificăm /var/www/html, haideți să creăm o structură de directoare în /var/www pentru site-ul nostru your_domain, lăsând /var/www/html pe loc ca director implicit care va fi servit în cazul în care o cerere a clientului nu se potrivește cu niciun alt site.

Creăm directorul pentru your_domain după cum urmează:

sudo mkdir /var/www/your_domain

În continuare, atribuiți proprietatea asupra directorului cu variabila de mediu $USER:

  • sudo chown -R $USER:$USER /var/www/your_domain

Autorizațiile rădăcinilor web ar trebui să fie corecte dacă nu ați modificat valoarea unmask, dar vă puteți asigura tastând:

  • sudo chmod -R 755 /var/www/your_domain

În continuare, creați o pagină de probă index.html folosind nano sau editorul dumneavoastră preferat:

  • nano /var/www/your_domain/index.html

În interior, adăugați următoarea mostră HTML:

/var/www/your_domain/index.html
<html> <head> <title>Welcome to Your_domain!</title> </head> <body> <h1>Success! The your_domain server block is working!</h1> </body></html>

Salvați și închideți fișierul când ați terminat.

Pentru ca Apache să servească acest conținut, este necesar să creați un fișier virtual host cu directivele corecte. În loc să modificăm direct fișierul de configurare implicit aflat la /etc/apache2/sites-available/000-default.conf, să creăm unul nou la /etc/apache2/sites-available/your_domain.conf:

  • sudo nano /etc/apache2/sites-available/your_domain.conf

Introduceți următorul bloc de configurare, care este similar cu cel implicit, dar actualizat pentru noul nostru director și nume de domeniu:

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName your_domain ServerAlias www.your_domain DocumentRoot /var/www/your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>

Observați că am actualizat DocumentRoot la noul nostru director și ServerAdmin la un e-mail pe care administratorul site-ului your_domain îl poate accesa. De asemenea, am adăugat două directive: ServerName, care stabilește domeniul de bază care ar trebui să se potrivească pentru această definiție de gazdă virtuală, și ServerAlias, care definește alte nume care ar trebui să se potrivească ca și cum ar fi numele de bază.

Salvați și închideți fișierul când ați terminat.

Să activăm fișierul cu instrumentul a2ensite:

  • sudo a2ensite your_domain.conf

Dezactivați site-ul implicit definit în 000-default.conf:

  • sudo a2dissite 000-default.conf

În continuare, să testăm dacă există erori de configurare:

  • sudo apache2ctl configtest

Ar trebui să vedeți următoarea ieșire:

Output
Syntax OK

Reporniți Apache pentru a pune în aplicare modificările:

  • sudo systemctl restart apache2

Apache ar trebui să servească acum numele dvs. de domeniu. Puteți testa acest lucru navigând la http://your_domain, unde ar trebui să vedeți ceva de genul:

Apache virtual host example

Cu aceasta, gazda dvs. virtuală este complet configurată. Totuși, înainte de a face alte modificări sau de a implementa o aplicație, ar fi util să testați proactiv configurația PHP în cazul în care există probleme care ar trebui rezolvate.

Pasul 5 – Testarea procesării PHP pe serverul dvs. web

Pentru a testa dacă sistemul dvs. este configurat corespunzător pentru PHP, creați un script PHP foarte simplu numit info.php. Pentru ca Apache să găsească acest fișier și să îl servească corect, acesta trebuie salvat în directorul rădăcină web.

Creați fișierul la rădăcina web pe care l-ați creat în pasul anterior, rulând:

  • sudo 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:

info.php
<?phpphpinfo();?>

Când ați terminat, salvați și închideți fișierul.

Acum puteți testa dacă serverul dvs. web este capabil să afișeze corect conținutul generat de acest script PHP. Pentru a încerca acest lucru, vizitați această pagină în browserul dumneavoastră web. Veți avea nevoie din nou de adresa IP publică a serverului dumneavoastră.

Adresa pe care veți dori să o vizitați este:

http://your_domain/info.php

Pagina la care ajungeți ar trebui să arate cam așa:

Ubuntu 18.04 default PHP info

Această pagină oferă câteva informații de bază despre serverul dumneavoastră din perspectiva PHP. Este utilă pentru depanare și pentru a vă asigura că setările dvs. sunt aplicate corect.

Dacă puteți vedea această pagină în browserul dvs., atunci PHP-ul dvs. funcționează conform așteptărilor.

Probabil că doriți să eliminați acest fișier după acest test, deoarece ar putea oferi de fapt informații despre serverul dvs. unor utilizatori neautorizați. Pentru a face acest lucru, rulați următoarea comandă:

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

Puteți oricând recrea această pagină dacă aveți nevoie să accesați din nou informațiile mai târziu.

Concluzie

Acum că aveți o stivă LAMP instalată, aveți multe opțiuni pentru ceea ce trebuie să faceți în continuare. Practic, ați instalat o platformă care vă va permite să instalați majoritatea tipurilor de site-uri web și software web pe serverul dumneavoastră.

Ca un pas imediat următor, ar trebui să vă asigurați că conexiunile la serverul dumneavoastră web sunt securizate, servindu-le prin HTTPS. Cea mai simplă opțiune aici este să folosiți Let’s Encrypt pentru a vă securiza site-ul cu un certificat TLS/SSL gratuit.

Alte opțiuni populare sunt:

  • Instalați WordPress cel mai popular sistem de gestionare a conținutului de pe internet.
  • Configurați PHPMyAdmin pentru a vă ajuta să vă gestionați bazele de date MySQL din browserul web.
  • Învățați cum să folosiți SFTP pentru a transfera fișiere către și de pe serverul dvs.

.