10 kwi

Instalacja LAMP 馃挕 w Ubuntu 18

Konfiguracja LAMP w Ubuntu 18

W instrukcji poni偶ej poka偶emy w jaki spos贸b mo偶na zainstalowa膰 podstawowy zestaw LAMP (Apache, MySQL, PHP) do uruchomienia strony internetowej na PHP. Wszystkie komponenty s膮 darmowe i open source, i s膮 jedne z najcz臋艣ciej wykorzystywanych do uruchomienia stron z dynamiczn膮 tre艣ci膮. Czyli to b臋dzie: Linux jako system operacyjny, Apache jako serwer www, MariaDB lub MySQL jak serwer bazy danych i PHP jako interpretator j臋zyka programowania PHP do generacji stron.

Zaczynamy

Na pocz膮tek sprawdzamy jak膮 wersj臋 systemu operacyjnego posiadamy na naszej maszynie, poniewa偶 poni偶sze kroki b臋d膮 dotyczy艂y Ubuntu 18.04.

Zapraszamy zapozna膰 si臋 z naszymi聽VPS SSD, poniewa偶 z kodem聽RABATNABLOG聽dostaniesz 15% na dowoln膮 p艂atno艣膰 za serwer dla VPN!

Aktualizujemy system i paczki:

sudo apt update && sudo apt upgrade

Szybka Instalacja LAMP

Zamiast instalacji pojedynczych komponent贸w LAMP (Apache, MySQL, oraz PHP) mo偶emy skorzysta膰 z gotowego instalatora聽Tasksel, kt贸ry zrobi wszystko jednym poleceniem, co mo偶e znacznie przyspieszy膰 konfiguracj臋 serwera.

Instalujemy Tasksel, je偶eli nie mamy na serwerze tego pakietu:

sudo apt install tasksel

Instalujemy zestaw LAMP przy pomocy Tasksel:

sudo tasksel install lamp-server

Instalacja pojedynczych pakiet贸w LAMP

Je偶eli nie chcesz instalowa膰 oprogramowanie automatycznym instalatorem, mo偶na to bez problemu zrobi膰 r臋cznie:

  • instalacja Apache 2.4 z repozytorium Ubuntu:
sudo apt install apache2
  • instalacja bazy danych MySQL:
sudo apt install mysql-server
  • instalacja PHP z rozszerzeniami i wsparciem Apache, MySQL::
sudo apt install php7.2 libapache2-mod-php7.2 php-mysql
  • (opcjonalnie) mo偶na zainstalowa膰 od razu rozszerzenia cURL, JSON oraz CGI:
sudo apt install php-curl php-json php-cgi

Konfiguracja pojedynczych pakiet贸w LAMP

Apache

  • Ustawienie聽KeepAlive pozwoli serwerowi www Apache lepiej zarz膮dza膰 pami臋ci膮 i zmniejszy膰 obci膮偶enie od dzia艂aj膮cej strony.聽KeepAlive聽przyspiesza dzia艂anie strony je偶eli na serwerze zabraknie wolnej pami臋ci RAM, a konkretnie Apache b臋dzie korzysta膰 z ju偶 otwartych po艂膮cze艅 zamiast tworzenia nowych dla ka偶dego zapytania.

Otwieramy plik konfiguracyjny Apache –聽apache2.conf:

nano /etc/apache2/apache2.conf
KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 5
Ustawienie聽MaxKeepAliveRequests konfiguruje maksymaln膮 ilo艣膰 zapyta艅 w ci膮gu jednego po艂膮czenia. 50 jest w miar臋 odpowiedni膮 liczb膮 dla wi臋kszo艣ci projekt贸w, jednak je偶eli potrzebujesz, mo偶na bez problem zwi臋kszy膰 go. Ustawienie聽KeepAliveTimeout kontroluje jak d艂ugo (ile sekund) serwer b臋dzie czeka艂 na nowe zapytania od obecnych聽odwiedzaj膮cych. Ustawienie na 5 zmniejszy wykorzystanie RAM.
  • Domy艣lnie modu艂 MPM („multi-processing module”) mo偶e by膰 wy艂膮czony lub nie skonfigurowany, ale聽mpm_prefork kompatybilny z wi臋kszo艣ci膮 system贸w operacyjnych. Otwieramy mpm_prefork.conf i konfigurujemy wed艂ug ustawie艅 poni偶ej dla聽2 Gb RAM w naszym przypadku:
nano /etc/apache2/mods-available/mpm_prefork.conf
StartServers 4
MinSpareServers 3
MaxSpareServers 40
MaxRequestWorkers 200
MaxConnectionsPerChild 10000
  • W艂膮czamy zapor臋 sieciow膮 (firewall) aby聽odblokowa膰 ruch do stron. Opisujemy kroki dzia艂ania dla konfiguracji zapory UFW na serwerze.

a. Sprawdzamy dost臋pno艣膰 port贸w, kt贸re s膮 potrzebne dla profilu聽 Apache Full:

sudo ufw app info "Apache Full"

Porty 80 oraz 443 musz膮 by膰 w艂膮czone (enabled) dla Apache Full.

b. Odblokowujemy ruch poprzez HTTP i HTTPS dla profilu Apache Full:

sudo ufw allow in "Apache Full"
  • wy艂膮czamy logowanie wydarze艅 i w艂膮czamy prefork:
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
  • Uruchomiamy ponownie Apache:
sudo systemctl restart apache2

Virtual Hosts

Mo偶na skonfigurowa膰 domeny (virtual hosts) w kilka sposob贸w, jednak polecamy opisany poni偶ej. W ka偶dym kroku nale偶y zamieni膰 example.com na w艂asn膮 domen臋.

  • Tworzymy kopie domy艣lnego pliku konfiguracyjnego Apache dla nowej strony:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
  • Otwieramy nowy聽 plik domeny example.com w edytorze. Odkomentujemy opcj臋 ServerName i zmieniamy j膮 na nasz膮 domen臋. Wpisujemy 艣cie偶k臋 folderu g艂贸wnego domeny oraz 艣cie偶k臋 do przechowywania log贸w, i dodajemy blok z Directory:
nano /etc/apache2/sites-available/example.com.conf
<Directory /var/www/html/example.com/public_html>
        Require all granted
</Directory>
<VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/example.com/public_html

        ErrorLog /var/www/html/example.com/logs/error.log
        CustomLog /var/www/html/example.com/logs/access.log combined

</VirtualHost>
Przyk艂ad pliku powy偶ej nie zawiera 偶adnych komentarzy, kt贸re s膮 domy艣lnie w pliku, mo偶na ich zostawi膰 lub usun膮膰, nie ma r贸偶nicy :)

Opcja ServerAlias pozwala na konfiguracje kilku r贸偶nych domen lub poddomen (subdomen)聽dla jednej domeny. W przyk艂adzie聽skierowali艣my u偶ytkownik贸w na ten sam folder dla domen聽example.com i www.example.com.

  • Tworzymy foldery zgodnie z ustawieniem wy偶ej:
sudo mkdir -p /var/www/html/example.com/{public_html,logs}
Warto sprawdzi膰 czy nie zosta艂a dodana spacja pomi臋dzy public_html oraz logs, bo to mo偶e utworzy膰 folder o nazwie {public_html, i spowoduje problemy z Apache.
  • Przypisujemy w艂a艣ciciela do folderu public_html na zmienn膮 $USER:
sudo chown -R $USER:$USER /var/www/html/example.com/public_html
  • Ustawiamy uprawnienia do folderu public_html:
sudo chmod -R 755 /var/www/html/example.com/public_html
  • Przypisujemy plik konfiguracyjny z sites-available do folderu sites-enabled:
sudo a2ensite example.com
Aby wy艂膮czy膰 stron臋, mo偶na uruhcomi膰聽a2dissite example.com.
  • Wy艂膮czamy domy艣lny host aby zwi臋kszy膰 bezpiecze艅stwo serwera:
sudo a2dissite 000-default.conf
  • Uruchamiamy ponownie Apache:
sudo systemctl reload apache2

Hosty wirtualne (Virtual hosts) teraz s膮 pomy艣lnie skonfigurowane, aby skierowa膰 domen臋 na serwer – musisz sprawdzi膰 wpisy A Twojej domeny u Rejestratora domeny lub na serwerach DNS, musz膮 by膰 skierowane na adres IP serwera.

Dodanie kolejnych stron, domen, odbywa si臋 w taki sam spos贸b i wed艂ug krok贸w opisanych wy偶ej, dla ka偶dego po kolei.

MySQL

  • Logujemy si臋 do terminalu SQL – MySQL:
sudo mysql -u root
Autoryzacja, Logowanie si臋聽do MySQL
Domy艣lnie MySQL skonfigurowany w taki spos贸b, 偶eby korzysta膰 z wtyczki auth_socket. Taka metoda autoryzacji pozwala na logowanie si臋 do bazy danych jako root, je偶eli jeste艣my po艂膮czeni z serwerem jako root, lub jako u偶ytkownik z uprawnieniami聽sudo (czyli聽przy pomocy sudo mysql -u root). W tym przypadku has艂o jest niepotrzebne dla u偶ytkownika root MySQL:

mysql> SELECT user,host,authentication_string,plugin FROM mysql.user WHERE user='root';
+------+-----------+-----------------------+-------------+
| user | host | authentication_string | plugin |
+------+-----------+-----------------------+-------------+
| root | localhost | | auth_socket |
+------+-----------+-----------------------+-------------+
1 row in set (0.02 sec)

Mo偶na korzysta膰 z wtyczki聽auth_socket , ale mo偶emy zabezpieczy膰 dost臋p has艂em, jak poni偶ej:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'password';
mysql> FLUSH PRIVILEGES;

Po wykonaniu zmian w聽dost臋pach, logowa膰 si臋 b臋dziemy z dodaniem parametru -p:

mysql -u root -p
  • Tworzymy baz臋 danych oraz u偶ytkownika z uprawnieniami do niej. W naszym przypadku baza danych nazywa si臋 webdata, i u偶ytkownik webuser, oraz has艂o password. Upewnij si臋 偶e poda艂e艣 w艂asne has艂o, kt贸re r贸偶ni si臋 od has艂a do root w MySQL:
CREATE DATABASE webdata;
GRANT ALL ON webdata.* TO 'webuser' IDENTIFIED BY 'password';
  • Wylogujemy si臋 z terminalu SQL:
quit
  • Uruchamiamy narz臋dzie mysql_secure_installation do skonfigurowania regu艂 bezpiecze艅stwa. Narz臋dzie r贸wnie偶 zapyta o to, czy chcemy zmieni膰 has艂o dla u偶ytkownika root MySQL, co mo偶emy pomin膮膰:
sudo mysql_secure_installation

Wpisujemy聽Y na nast臋pne pytania:

  1. Remove anonymous users?
  2. Disallow root login remotely?
  3. Remove test database and access to it?
  4. Reload privilege tables now?

PHP

  • Edytujemy plik konfiguracyjny, kt贸ry znajduje si臋 w /etc/php/7.2/apache2/php.ini聽aby w艂膮czy膰 wy艣wietlenie b艂臋d贸w, logowanie oraz zwi臋kszy膰 wydajno艣膰. Proponujemy zmiany poni偶ej:
nano /etc/php/7.2/apache2/php.ini
error_reporting = E_COMPILE_ERROR | E_RECOVERABLE_ERROR | E_ERROR | E_CORE_ERROR
max_input_time = 30
error_log = /var/log/php/error.log
Na pocz膮tku pliku php.ini聽znajduj膮 si臋 zakomentowane przyk艂ady ze 艣rednikiem (;), kt贸ry wy艂膮czaj膮 opcje/konfiguracje, znajduj膮ce si臋 po nim. Upewnij si臋 czy linia, kt贸r膮 edytujesz nie zawiera 艣rednika na pocz膮tku.
  • Tworzymy folder do log贸w i聽ustawiamy uprawnienia aby Apache m贸g艂 edytowa膰 pliki w nim:
sudo mkdir /var/log/php
sudo chown www-data /var/log/php
  • Uruchomiamy ponownie Apache:
sudo systemctl restart apache2
Je偶eli planujesz trzyma膰 na serwerze z LAMP – stron臋 na WordPress, musisz dodatkowo zainstalowa膰 nast臋pne pakiety: sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc

Opcjonalnie: Sprawdzenie i testowanie zainstalowanego oprogramowania LAMP

Poni偶ej utworzymy testow膮 stron臋 w j臋zyku PHP, kt贸r膮 Apache b臋dzie w stanie wy艣wietli膰 oraz sprawdzimy czy dzia艂a po艂膮czenie z baz膮 danych MySQL. To mo偶e by膰 przydatne aby zidentyfikowa膰 na kt贸rym kroku pope艂nili艣my b艂膮d, albo jaki element nie dzia艂a.

Wklejamy nast臋pny kod do nowego pliku聽phptest.php,聽w folderze public_htm. Zmieniamy nazw臋 webuser oraz has艂o do u偶ytkownika bazy danych, kt贸rego utworzyli艣my wcze艣niej:

nano /var/www/html/example.com/public_html/phptest.php
<html>
<head>
    <title>PHP Test</title>
</head>
    <body>
    <?php echo '<p>Hello World</p>';

    // In the variables section below, replace user and password with your own MySQL credentials as created on your server
    $servername = "localhost";
    $username = "webuser";
    $password = "password";

    // Create MySQL connection
    $conn = mysqli_connect($servername, $username, $password);

    // Check connection - if it fails, output will include the error message
    if (!$conn) {
        die('<p>Connection failed: </p>' . mysqli_connect_error());
    }
    echo '<p>Connected successfully</p>';
    ?>
</body>
</html>

Przechodzimy do聽example.com/phptest.php聽w przegl膮darce, je偶eli wszystko dzia艂a poprawnie, zobaczymy komunikat „Connected successfully”. Je偶eli co艣 nie dzia艂a, zobaczymy komunikaat z b艂臋dem.

Usuwamy plik do test贸w:

sudo rm /var/www/html/example.com/public_html/phptest.php

FAQ

  • Je偶eli strona nie 艂aduje si臋 w cale, sprawdzamy czy Apache jest uruchomiony, i uruchomiamy go ponownie, je偶eli jest taka potrzeba:
sudo systemctl status apache2
sudo systemctl restart apache2
  • Je偶eli strona si臋 艂aduje, ale wy艣wietla si臋 standardowa domy艣lna strona Apache – 鈥淐ongratulations鈥, wracamy do dzia艂u z konfiguracj膮 Virtual Host, i sprawdzamy czy opcja z DocumentRoot聽 odpowiada naszej 艣cie偶ce do folderu example.com/public_html.
  • Je偶eli strona wy艣wietla list臋 katalog贸w/plik贸w – „Index of /„, musimy spr贸bowa膰 utworzy膰 plik do testu index.html.

O tym jak skonfigurowa膰 OpenVPN na Ubuntu 18 – pisali艣my chwil臋 wcze艣niej, zapraszamy do zapoznania si臋 z artyku艂em.

Zapraszamy zapozna膰 si臋 z naszymi聽VPS SSD, poniewa偶 z kodem聽RABATNABLOG聽dostaniesz 15% na dowoln膮 p艂atno艣膰 za serwer dla VPN!