lamp

LAMP – instalacja i konfiguracja

Osoby nie interesujące się tematem instalacji oraz konfiguracji serwerów, nazwa LAMP niewiele mówi. Otóż ten akronim jest skrótowym zapisem od Linux Apache MySQL PHP najczęściej instalowanego zestawu pakietów serwera. W tym artykule zajmiemy się instalacją tego zastawu w Ubuntu Server 22.04 Jammy Jellyfish.

Jeżeli chcesz przetestować w sposób praktyczny to, co będę prezentował w tym artykule polecam instalację VirtualBox (https://www.virtualbox.org/). Następnie pobrać gotowy obraz serwera ze strony https://www.osboxes.org/ubuntu-server/#ubuntu-server-22-04-vbox lub stworzyć własny przeprowadzając standardową instalację, ale z użyciem VirtualBox (https://ubuntu.com/download/server).

W przypadku jeżeli masz dostęp do serwera w chmurze,możesz połączyć się przy pomocy ssh lub inny i wykonywać wszystkie czynności krok po kroku. Decyzję pozostawiam Tobie.

Jeżeli zdecydujesz się na serwer w VirtualBox to ustaw sieć na bridge oraz po uruchomieniu połączyć się z maszyną wirtualną przy pomocy ssh. Będziesz w stanie kopiować polecenia, a nie je przepisywać. No to teraz zaczynamy instalację i konfigurację LAMP!

 

Sprawdź, czego nauczysz się dzięki kursowi Grafany!

Udostępniamy darmowo ponad godzinny materiał z kursu. Przekonaj się, że jest idealny dla Ciebie!

Chcesz wziąć udział w kursie? Kliknij w link i obejrzyj co Cię czeka: https://asdevops.pl/demo-grafana/

 

 

 

 

Instalacja Apache

Po połączeniu do serwera pierwsze co należy wykonać to zainstalować apache2. Korzystamy z systemu Ubuntu dlatego na samym początku pobieramy repozytoria przy pomocy polecenia:

sudo apt update

Następnie przystępujemy do instalacji niezbędnych pakietów:

sudo apt install apache2

Instalacja w zależności od zasobów dostępnych na serwerze może chwilę potrwać. Po jej wykonaniu sprawdzamy status zainstalowanego przed chwilą apache2:

sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
 	Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
 	Active: active (running) since Tue 2022-11-08 08:11:13 UTC; 2min 28s ago
   	Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 3012 (apache2)
  	Tasks: 55 (limit: 2241)
 	Memory: 5.1M
    	CPU: 25ms
 	CGroup: /system.slice/apache2.service
         	├─3012 /usr/sbin/apache2 -k start
         	├─3014 /usr/sbin/apache2 -k start
         	└─3015 /usr/sbin/apache2 -k start

Zgodnie z informacją w przykładzie serwer apache2 jest uruchomiony. Jednak zawsze warto jest ustawić automatyczne uruchamianie po restarcie serwera. Wykonujemy to przy pomocy polecenia:

sudo systemctl enable apache2

Jeżeli jednak z jakiegoś powodu serwer nie uruchomił się to musisz wprowadzić polecenie:

sudo systemctl start apache2

Po czym ponownie sprawdzić status.

Podstawowe konfiguracje

Prezentowane poniżej konfiguracje uważam, za podstawowe jakie muszą być wykonane po jego zainstalowaniu. Jednak musisz wiedzieć, że nie istnieje rozwiązanie idealne. W związku z tym bezpieczeństwo jak i zużycie zasobów serwera wiąże się z ciągłą obserwacją jego funkcjonowania oraz przeglądania logów systemowych. Kolejnym istotnym elementem są tak zwane backupy które muszą być często wykonywane. Rozwiązanie które prezentuje nie jest idealne, bo takie nie istnieje.

Konfiguracja Firewall

Następne co musimy skonfigurować to firewall aby umożliwić komunikację na porcie 80 i 443. Port 80 odpowiada za HTTP, natomiast 443 za HTTPS. W systemie Ubuntu aby umożliwić komunikację na tych dwóch portach wystarczy, że posłużymy się prostym poleceniem ufw:

sudo ufw allow in "Apache Full"

Dzięki wprowadzeniu tego polecenia odblokujemy dwa wspomniane wcześniej porty. Teraz wprowadzając taką zmianę należy zrestartować usługę ufw. Jednak nim to zrobimy sprawdźmy jej status:

sudo ufw status
Status: inactive

U mnie usługa odpowiedzialna za firewall jest nieaktywna. Polecam ją uruchomić po instalacji wszystkich niezbędnych elementów. Dlatego jeżeli jest ona uruchomiona, aby ją wyłączysz wprowadzasz polecenie:

sudo ufw disable

Jednak pamiętaj, że wyłączenie firewalla wiąże się z pewnym ryzykiem. Dlatego skorzystaj z tego polecenia tylko w przypadku gdy stawiasz LAMP na nowym serwerze do którego nikt nie ma dostępu.

Aby zrestartować firewalla wystarczy użyć polecenia:

sudo ufw reload

W przypadku gdy był on wyłączony nie ma konieczności przeładowania jego ustawień. Dlatego, aby uaktywnić firewall należy użyć polecenia:

 sudo ufw enable

Test serwera apache

Sprawdzenie czy serwer apache został uruchomiony wykonujemy poprzez wprowadzenie w przeglądarce internetowej adresu IP lub korzystając z localhost jeżeli instalację przeprowadzamy na naszej lokalnej maszynie.

Pozostałe ustawienia serwera apache

Wszystkie pliki konfiguracyjne serwera znajdują się w katalogu /etc/apache2/. Pierwszym jakim się zajmiemy jest plik apache2.conf.

Obecnie w wersji  Apache/2.4.52 (Ubuntu) konfiguracja zarządzająca pamięcią RAM jest automatycznie uruchomiona. Jednak jeżeli chodzi o ustawienie limitu zapytań w trakcie jednego połączenia jest ono zbyt wysokie. Dlatego we wskazanym pliku odnajdujemy etykietę:

MaxKeepAliveRequests 100

I zmieniamy przypisaną wartość ze 100 na 40 – 80. Optymalnie możesz ustawić 60.

Konfiguracja Virtual Host

Pierwsze co wykonujemy to tworzymy odpowiednia katalogi dla naszego hosta:

sudo mkdir /var/www/html/strona.pl/public_html
sudo mkdir /var/www/html/strona.pl/logs

Pamiętaj, aby tam gdzie wpisałem nazwę katalogu strona.pl wpisać swoją domenę.

Określamy właściciela katalogu:

sudo chown -R $USER:$USER /var/www/html/strona.pl/public_html

Następnie nadajemy odpowiednie uprawnienia do tego katalogu:

sudo chmod -R 755 /var/www/html/strona.pl/public_html

W ten sposób właściciel uzyskuje pełne prawa do katalogu.

Następnie tworzymy plik konfiguracyjny:

sudo nano -w /etc/apache2/sites-available/strona.pl.conf

Pamiętaj aby nazwać plik w taki sposób jak domena z jakiej korzystasz. Do pliku dodajesz informacje:

<Directory /var/www/html/strona.pl/public_html>
        Require all granted
</Directory>
<VirtualHost *:80>
        ServerName strona.pl
        ServerAlias www.strona.pl
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/strona.pl/public_html

        ErrorLog /var/www/html/strona.pl/logs/error.log
        CustomLog /var/www/html/strona.pl/logs/access.log combined

</VirtualHost>

W pliku określasz domenę pod jaką katalog występuje oraz miejsca gdzie mają być magazynowane logi. Jak i również ustawiasz port pod jakim witryna będzie dostępna.

Teraz uaktywniamy naszą konfigurację:

sudo a2ensite strona.pl

Dzięki powyższemu poleceniu dodaliśmy nową konfigurację. Jednak pamiętaj, że bez niej serwer działał. W związku z tym musi występować konfiguracja domyślna. Po skonfigurowaniu własnej należy tę domyślną wyłączyć. Robimy to przy pomocy polecenia:

sudo a2dissite 000-default.conf

Aby wprowadzona konfiguracja została aktywowana należy zrestartować usługę apache2:

sudo systemctl reload apache2

I zawsze po wykonaniu polecenia związanego z usługą sprawdzić jej status:

sudo systemctl status apache2

Oczywiście aby móc skorzystać z nazwy domeny musisz mieć ją wykupioną oraz skonfigurowaną.

Instalacja MySQL

Na samym początku aktualizujemy repozytoria systemowe:

sudo apt update

Następnie instalujemy niezbędne pakiety bazy MySQL:

sudo apt install mysql-server

Sprawdzamy czy MySQL został zainstalowany oraz przy okazji poznajemy zainstalowaną wersję:

sudo mysqld --version
/usr/sbin/mysqld  Ver 8.0.31-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))

Zmiana sposobu logowania administratora oraz konta z uprawnieniami użytkownika root

Pierwsze co musimy wyłączyć to możliwość automatyczne logowania. Gdy jesteśmy na serwerze zalogowani jako root lub jako użytkownik z uprawnieniami sudo możemy automatycznie zalogować się na konto mysql. Bez podawania hasła. Potwierdza to poniższy przykład:

sudo mysql -u root

Zostaniesz automatycznie zalogowany. W celu wyłączenia tej możliwości należy będąc zalogowanym do bazy wprowadzić polecenie:

ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'bardzotrudnehaslo';
Query OK, 0 rows affected (0.01 sec)
FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Teraz jeżeli zechcemy w tej sam sposób połączyć się z bazą danych, zostanie ono odrzucone:

sudo mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Aby zalogować się musimy użyć opcji -p odpowiedzialnej za hasło:

sudo mysql -u root -p

Zostaniemy poproszeni o podanie hasła które ustawiliśmy kilka poleceń wcześniej.

Stworzenie bazy danych oraz użytkownika

Każdy z użytkowników powinien posiadać swoje własne konto jak i również powinien mieć przypisaną bazę danych. Standardowo jeżeli tworzysz nową bazę jest ona przypisywana do konta root. Po jej stworzeniu powinniśmy przypisać uprawnienia odpowiedniemu użytkownikowi.

Będąc zalogowany do MySQL jako użytkownik root wprowadzamy polecenia:

  • Tworzymy bazę danych:
CREATE DATABASE userdatabase;
  • Tworzymy użytkownika:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'bardzotrudnehaslo';
  • Nadajemy uprawnienia użytkownikowi
GRANT ALL PRIVILEGES ON userdatabase. * TO 'newuser'@'localhost';

Zawsze warto sprawdzić czy konto zostało utworzone i właściwie przypisana baza. Dlatego korzystamy z poznanego przed chwilą polecenia podając nazwę użytkownika jaką stworzyliśmy:

sudo mysql -u newuser -p

Następnie po zalogowaniu się wpisujemy polecenie:

SHOW DATABASES;
+--------------------+
| Database       	|
+--------------------+
| information_schema |
| performance_schema |
| userdatabase   	|
+--------------------+
3 rows in set (0.00 sec)

Nasza baza znajduje się na samym końcu listy.

Konfigurator

Bardzo dobrym narzędziem konfiguracyjnym jest instalowany razem z MySQL mysql_secure_installation. Dlatego jeżeli jesteś zalogowany do MySQL, wyloguj się i w konsoli serwera wprowadź polecenie:

sudo mysql_secure_installation

Program zada kilka intuicyjnych pytań. Osobiście na każde z zadanych odpowiadam yes.

Instalacja PHP

Tak jak w przypadku dwóch poprzednich na samym początku aktualizujemy repozytoria:

sudo apt update

Następnie instalujemy niezbędne pakiety:

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

Zmiany w pliku php.ini

Wprowadzimy pewne zmiany w ustawieniach PHP które znajdują się w pliku php.ini. Dlatego edytujemy go w następujący sposób:

sudo nano -w /etc/php/8.1/apache2/php.ini

Następnie przy pomocy skrótu klawiszowego ctrl + w będziemy wprowadzać nazwy opcji w których będziemy chcieli wprowadzić zmiany:

file_uploads = Off

Ustawiamy na Off, dzięki czemu wyłączamy opcję przesyłania plików przy pomocy metody POST.

allow_url_fopen = Off

Ustawiamy na Off, blokuje możliwość uruchomienia plików na zdalnych serwerach.

session.cookie_domain = www.strona.pl
session.referer_check = www.strona.pl

Uniemożliwiają w znacznym stopniu przekazanie identyfikatora sesji nieautoryzowanemu serwerowi.

disable_functions = dl, exec, passthru, system, shell_exec, popen

Usuwamy możliwość korzystania z kilku wbudowanych mechanizmów dostępnych w PHP.

Prezentowane w tym paragrafie powinny być ustawione tak jak napisałem. Niemniej jednak jak już wspominałem na początku tego artykułu, nie istnieje idealne zabezpieczenie.

Aby wprowadzić do serwera zmiany należy usługę apache zrestartować:

sudo systemctl restart apache2

Podsumowanie – instalacja i konfiguracja LAMP

Instalacja i konfiguracja LAMP nie jest tak skomplikowana jakby się mogło wydawać. Jednak sama administracja, gdy się rozrasta potrafi sprawić pewne problemy. Dlatego ważnym elementem jest prowadzenie częstych backupów, jak i również sprawdzanie logów systemowych. I wtedy z LAMP będzie wszystko w porządku!

Chcesz wiedzieć więcej na temat administracji? Przeczytaj nasze artykuły, a także weź udział w kursach!

 

 

 

Sprawdź, czego nauczysz się dzięki kursowi Grafany!

Udostępniamy darmowo ponad godzinny materiał z kursu. Przekonaj się, że jest idealny dla Ciebie!

Chcesz wziąć udział w kursie? Kliknij w link i obejrzyj co Cię czeka: https://asdevops.pl/demo-grafana/

 
 
 

Lekcja demo kursu Grafany!

X