🚀 Jak zainstalować Linux, Apache, MySQL, PHP (LAMP) stack na Ubuntu 20.04
Stos LAMP (Linux, Apache, MySQL, PHP) to potężna kombinacja technologii open-source, która stanowi podstawę dla większości dynamicznych stron i aplikacji internetowych. Ten szczegółowy przewodnik przeprowadzi Cię krok po kroku przez instalację i konfigurację pełnego środowiska LAMP na Ubuntu 20.04, dając Ci solidną podstawę pod tworzenie nowoczesnych aplikacji webowych.
⚡ Ekspresowe Podsumowanie:
- Aktualizacja systemu Ubuntu 20.04 - Zawsze zaczynaj od aktualnego systemu.
- Instalacja Apache - Konfiguracja serwera WWW wraz z podstawowymi ustawieniami bezpieczeństwa.
- Konfiguracja MySQL - Instalacja bazy danych z zabezpieczeniami i optymalizacją wydajności.
- Wdrożenie PHP - Instalacja interpretera PHP i niezbędnych modułów dla aplikacji webowych.
🗺️ Spis Treści - Twoja Mapa Drogowa
📋 Przygotowanie środowiska Ubuntu 20.04
Przed instalacją stosu LAMP, konieczne jest odpowiednie przygotowanie systemu Ubuntu 20.04. Upewnij się, że pracujesz na czystej instalacji lub na serwerze z wystarczającymi uprawnieniami.
Aktualizacja systemu
Pierwszym krokiem jest aktualizacja repozytoriów pakietów i istniejącego oprogramowania:
sudo apt update
sudo apt upgrade -y
Ten krok zapewnia, że wszystkie pozostałe pakiety systemowe są aktualne, co zmniejsza ryzyko konfliktów podczas instalacji komponentów LAMP.
Instalacja podstawowych narzędzi
Zainstaluj kilka przydatnych narzędzi, które będą pomocne podczas konfiguracji:
sudo apt install -y software-properties-common curl git unzip
Konfiguracja firewalla
Dla zwiększenia bezpieczeństwa, zalecamy skonfigurowanie podstawowego firewalla UFW. Oto jak to zrobić:
# Instalacja UFW, jeśli nie jest zainstalowany
sudo apt install -y ufw
# Konfiguracja domyślnych zasad
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Zezwolenie na SSH (aby nie stracić dostępu do serwera)
sudo ufw allow ssh
# Póki co nie włączamy firewalla, zrobimy to po konfiguracji Apache
✨ Pro Tip: Zawsze upewnij się, że reguła SSH jest aktywna przed włączeniem firewalla, aby uniknąć zablokowania dostępu do serwera.
🌐 Instalacja i konfiguracja Apache
Apache HTTP Server to jeden z najpopularniejszych serwerów WWW na świecie. Jest wydajny, niezawodny i wysoce konfigurowalny.
Instalacja Apache
Instalacja Apache w Ubuntu 20.04 jest prosta:
sudo apt install -y apache2
Po zakończeniu instalacji, Apache powinien uruchomić się automatycznie. Możesz sprawdzić jego status za pomocą:
sudo systemctl status apache2
Powinieneś zobaczyć komunikat wskazujący, że usługa jest aktywna (running).
Konfiguracja firewalla dla Apache
Teraz musimy zezwolić na ruch HTTP i HTTPS przez firewall:
# Zezwolenie na HTTP (port 80)
sudo ufw allow 'Apache'
# Zezwolenie na HTTPS (port 443)
sudo ufw allow 'Apache Full'
# Włączenie firewalla
sudo ufw enable
Po włączeniu firewalla, sprawdź jego status:
sudo ufw status
Powinieneś zobaczyć, że reguły dla HTTP, HTTPS i SSH są aktywne.
Sprawdzenie działania Apache
Aby sprawdzić, czy Apache działa poprawnie, otwórz przeglądarkę i przejdź do adresu IP swojego serwera:
http://twój_adres_ip
Powinieneś zobaczyć domyślną stronę Apache.
Jeśli nie znasz swojego adresu IP, możesz go sprawdzić używając:
ip addr show
lub
curl -4 icanhazip.com
Podstawowa konfiguracja Apache
Teraz skonfigurujmy kilka podstawowych ustawień Apache dla lepszej wydajności i bezpieczeństwa:
1. Ustawienie ServerName
Aby uniknąć ostrzeżeń podczas restartu Apache, dodaj dyrektywę ServerName do pliku konfiguracyjnego:
sudo nano /etc/apache2/apache2.conf
Na końcu pliku dodaj:
ServerName twój_serwer.domena.pl
lub, jeśli nie masz domeny:
ServerName localhost
2. Dostosowanie wydajności Apache
Edytuj plik mpm_prefork.conf, aby dostosować liczbę procesów Apache do zasobów serwera:
sudo nano /etc/apache2/mods-available/mpm_prefork.conf
Dostosuj następujące wartości w zależności od dostępnej pamięci RAM:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
3. Włączenie przydatnych modułów
Włączmy kilka przydatnych modułów Apache:
# Moduł do kompresji - zmniejsza ilość przesyłanych danych
sudo a2enmod deflate
# Moduł pamięci podręcznej - poprawia wydajność
sudo a2enmod expires
# Moduł do przepisywania URL-i - niezbędny dla wielu aplikacji
sudo a2enmod rewrite
# Moduł bezpieczeństwa - chroni przed pewnymi typami ataków
sudo a2enmod headers
Po włączeniu modułów, zrestartuj Apache:
sudo systemctl restart apache2
Uwaga: Po każdej zmianie konfiguracji Apache, warto sprawdzić, czy nie zawiera ona błędów, używając polecenia
sudo apache2ctl configtest
przed restartem serwera.
🗄️ Instalacja i zabezpieczenie MySQL
MySQL to popularny system zarządzania relacyjnymi bazami danych, który będzie przechowywać dane dla aplikacji webowych.
Instalacja MySQL
Zainstaluj serwer MySQL:
sudo apt install -y mysql-server
Po zakończeniu instalacji, sprawdź czy MySQL działa:
sudo systemctl status mysql
Zabezpieczenie instalacji MySQL
MySQL w Ubuntu 20.04 domyślnie jest skonfigurowany z polityką uwierzytelniania auth_socket
, która nie wymaga hasła dla użytkownika root podczas łączenia się z konsoli systemowej. Jest to bezpieczne dla środowiska deweloperskiego, ale zalecamy uruchomienie skryptu zabezpieczającego, aby wzmocnić ogólne bezpieczeństwo:
sudo mysql_secure_installation
Skrypt przeprowadzi Cię przez kilka pytań:
- Validate Password Component (Komponent Walidacji Haseł): zalecamy włączenie (Y) dla środowisk produkcyjnych i wybór przynajmniej średniego poziomu bezpieczeństwa (1).
- Ustaw hasło dla użytkownika root: wybierz silne hasło.
- Usuń anonimowych użytkowników: zalecamy usunięcie (Y).
- Wyłącz zdalny dostęp root: zalecamy wyłączenie (Y).
- Usuń testową bazę danych: zalecamy usunięcie (Y).
- Przeładuj tabele uprawnień: zalecamy przeładowanie (Y).
Zmiana metody uwierzytelniania dla użytkownika root (opcjonalnie)
Jeśli chcesz używać hasła zamiast uwierzytelniania socket, możesz zmienić metodę uwierzytelniania:
sudo mysql
W konsoli MySQL, wykonaj:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'twoje_silne_hasło';
FLUSH PRIVILEGES;
EXIT;
Tworzenie nowego użytkownika i bazy danych
Dobrą praktyką jest utworzenie dedykowanego użytkownika i bazy danych dla każdej aplikacji, zamiast używania konta root:
sudo mysql
W konsoli MySQL, wykonaj:
CREATE DATABASE nazwa_bazy_danych;
CREATE USER 'nazwa_użytkownika'@'localhost' IDENTIFIED BY 'silne_hasło';
GRANT ALL PRIVILEGES ON nazwa_bazy_danych.* TO 'nazwa_użytkownika'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Dostrajanie wydajności MySQL
Dla lepszej wydajności, możemy zoptymalizować konfigurację MySQL. Utwórz plik konfiguracyjny:
sudo nano /etc/mysql/conf.d/mysql-custom.cnf
Dodaj następujące ustawienia (dostosuj je do ilości pamięci RAM na serwerze):
[mysqld]
# Bufor dla indeksów i danych
innodb_buffer_pool_size = 256M
# Bufor zapytań
query_cache_size = 64M
query_cache_limit = 2M
# Maksymalna liczba jednoczesnych połączeń
max_connections = 100
# Timeout dla nieaktywnych połączeń
wait_timeout = 600
interactive_timeout = 600
# Rozmiar logu binlogu
max_binlog_size = 100M
# Character set
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Po zapisaniu pliku, zrestartuj MySQL:
sudo systemctl restart mysql
🐘 Instalacja i konfiguracja PHP
PHP to język skryptowy po stronie serwera, który będzie przetwarzać dynamiczną zawartość dla aplikacji webowych.
Instalacja PHP i podstawowych modułów
Zainstaluj PHP wraz z najczęściej używanymi modułami:
sudo apt install -y php libapache2-mod-php php-mysql php-common php-cli php-json php-curl php-mbstring php-xml php-zip php-gd php-intl
Po instalacji, sprawdź zainstalowaną wersję PHP:
php -v
Konfiguracja PHP dla lepszej wydajności i bezpieczeństwa
Edytuj główny plik konfiguracyjny PHP:
sudo nano /etc/php/7.4/apache2/php.ini
Znajdź i zmień następujące wartości (możesz użyć CTRL+W, aby wyszukać):
; Maksymalny rozmiar przesyłanych plików
upload_max_filesize = 32M
post_max_size = 48M
; Maksymalny czas wykonania skryptu
max_execution_time = 60
max_input_time = 60
; Pamięć przydzielana dla skryptów PHP
memory_limit = 256M
; Ukryj wersję PHP dla bezpieczeństwa
expose_php = Off
; Włącz mechanizm OPcache dla lepszej wydajności
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
Po zapisaniu zmian, zrestartuj Apache:
sudo systemctl restart apache2
Instalacja dodatkowych modułów PHP (opcjonalnie)
W zależności od aplikacji, które będziesz używać, możesz potrzebować dodatkowych modułów PHP:
# Dla CMS-ów jak WordPress
sudo apt install -y php-imagick
# Dla aplikacji używających bazy danych SQLite
sudo apt install -y php-sqlite3
# Dla aplikacji używających Redis jako pamięć podręczną
sudo apt install -y php-redis
# Dla aplikacji wymagających wysyłania e-maili
sudo apt install -y php-imap
Priorytetyzacja plików PHP w Apache
Domyślnie, Apache najpierw szuka pliku index.html, a następnie index.php. Aby zmienić tę kolejność, edytuj plik:
sudo nano /etc/apache2/mods-enabled/dir.conf
Zmień dyrektywę DirectoryIndex tak, aby index.php był na pierwszym miejscu:
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
Zapisz zmiany i zrestartuj Apache:
sudo systemctl restart apache2
🔧 Testowanie i weryfikacja instalacji LAMP
Po zakończeniu instalacji wszystkich komponentów, warto przeprowadzić testy, aby upewnić się, że wszystko działa poprawnie.
Testowanie PHP
Utwórz prosty plik PHP, aby sprawdzić, czy Apache poprawnie przetwarza skrypty PHP:
sudo nano /var/www/html/info.php
Dodaj następujący kod:
<?php
phpinfo();
?>
Teraz otwórz przeglądarkę i przejdź do:
http://twój_adres_ip/info.php
Powinieneś zobaczyć stronę z informacjami o konfiguracji PHP. Ta strona zawiera szczegółowe informacje o PHP i jego modułach.
Uwaga: Plik info.php zawiera wrażliwe informacje o twojej konfiguracji. Po zakończeniu testowania, zalecamy jego usunięcie:
sudo rm /var/www/html/info.php
Testowanie MySQL z PHP
Utwórz prosty skrypt PHP, który łączy się z bazą danych MySQL:
sudo nano /var/www/html/mysql_test.php
Dodaj następujący kod (zastąp dane dostępowe własnymi):
<?php
$host = 'localhost';
$user = 'nazwa_użytkownika';
$password = 'silne_hasło';
$database = 'nazwa_bazy_danych';
$conn = new mysqli($host, $user, $password, $database);
if ($conn->connect_error) {
die("Błąd połączenia: " . $conn->connect_error);
}
echo "Połączenie z MySQL działa prawidłowo!";
$conn->close();
?>
Teraz otwórz przeglądarkę i przejdź do:
http://twój_adres_ip/mysql_test.php
Powinieneś zobaczyć komunikat "Połączenie z MySQL działa prawidłowo!".
Uwaga: Podobnie jak w przypadku pliku info.php, zalecamy usunięcie pliku mysql_test.php po zakończeniu testowania:
sudo rm /var/www/html/mysql_test.php
📂 Konfiguracja wirtualnych hostów Apache
Wirtualne hosty (Virtual Hosts) pozwalają na hostowanie wielu stron na jednym serwerze Apache. To przydatna funkcja, jeśli planujesz uruchomić kilka aplikacji webowych.
Tworzenie struktury katalogów
Zacznijmy od utworzenia struktury katalogów dla nowej strony:
sudo mkdir -p /var/www/twoja_domena.pl/public_html
Następnie zmieńmy uprawnienia, aby Twój użytkownik mógł modyfikować pliki:
sudo chown -R $USER:$USER /var/www/twoja_domena.pl
sudo chmod -R 755 /var/www/twoja_domena.pl
Tworzenie przykładowej strony
Utwórz prostą stronę HTML w nowym katalogu:
nano /var/www/twoja_domena.pl/public_html/index.html
Dodaj przykładową zawartość:
<!DOCTYPE html>
<html>
<head>
<title>Witaj na twoja_domena.pl!</title>
</head>
<body>
<h1>Sukces! Wirtualny host działa!</h1>
<p>Ta strona jest hostowana na serwerze LAMP zainstalowanym na Ubuntu 20.04.</p>
</body>
</html>
Konfiguracja pliku wirtualnego hosta
Teraz utwórzmy plik konfiguracyjny dla wirtualnego hosta:
sudo nano /etc/apache2/sites-available/twoja_domena.pl.conf
Dodaj następującą konfigurację:
<VirtualHost *:80>
ServerAdmin webmaster@twoja_domena.pl
ServerName twoja_domena.pl
ServerAlias www.twoja_domena.pl
DocumentRoot /var/www/twoja_domena.pl/public_html
<Directory /var/www/twoja_domena.pl/public_html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/twoja_domena.pl_error.log
CustomLog ${APACHE_LOG_DIR}/twoja_domena.pl_access.log combined
</VirtualHost>
Włączenie wirtualnego hosta
Włącz nowy wirtualny host i wyłącz domyślną konfigurację:
sudo a2ensite twoja_domena.pl.conf
sudo a2dissite 000-default.conf
Sprawdź, czy konfiguracja Apache nie zawiera błędów:
sudo apache2ctl configtest
Jeśli zobaczysz "Syntax OK", zrestartuj Apache:
sudo systemctl restart apache2
Teraz możesz przetestować nowy wirtualny host, odwiedzając twoja_domena.pl w przeglądarce (upewnij się, że domena wskazuje na Twój serwer lub dodaj ją do pliku hosts w celach testowych).
🛡️ Zabezpieczenie stosu LAMP
Bezpieczeństwo jest kluczowym aspektem każdego serwera webowego. Oto kilka kroków, które możesz podjąć, aby zabezpieczyć swój stos LAMP.
Aktualizacja automatyczna (Unattended Upgrades)
Skonfiguruj automatyczne aktualizacje zabezpieczeń:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Instalacja i konfiguracja Fail2Ban
Fail2Ban to narzędzie, które pomaga chronić serwer przed atakami brute force:
sudo apt install -y fail2ban
Utwórz niestandardową konfigurację:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Dostosuj sekcję [sshd]
i dodaj sekcję dla Apache:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/*error.log
maxretry = 3
bantime = 3600
Zrestartuj Fail2Ban:
sudo systemctl restart fail2ban
Zabezpieczenie Apache
1. Wyłącz wyświetlanie informacji o serwerze
Edytuj plik konfiguracyjny Apache:
sudo nano /etc/apache2/conf-enabled/security.conf
Znajdź i zmień następujące dyrektywy:
ServerTokens Prod
ServerSignature Off
2. Dodaj nagłówki bezpieczeństwa
Utwórz plik konfiguracyjny dla nagłówków bezpieczeństwa:
sudo nano /etc/apache2/conf-available/security-headers.conf
Dodaj następujące nagłówki:
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
</IfModule>
Włącz tę konfigurację i zrestartuj Apache:
sudo a2enconf security-headers
sudo systemctl restart apache2
Konfiguracja SSL/TLS z Let's Encrypt
Aby zabezpieczyć komunikację przez HTTPS, zainstaluj Certbot i uzyskaj certyfikat Let's Encrypt:
sudo apt install -y certbot python3-certbot-apache
Uzyskaj certyfikat i skonfiguruj HTTPS:
sudo certbot --apache -d twoja_domena.pl -d www.twoja_domena.pl
Certbot przeprowadzi Cię przez proces konfiguracji. Po zakończeniu, Twoja strona będzie dostępna przez HTTPS.
🚧 Rozwiązywanie typowych problemów
Podczas instalacji i konfiguracji stosu LAMP mogą wystąpić pewne problemy. Oto kilka typowych problemów i ich rozwiązania.
Problem: Apache nie uruchamia się
Rozwiązanie:
-
Sprawdź logi błędów:
sudo tail -f /var/log/apache2/error.log
-
Sprawdź, czy nie ma konfliktów portów:
sudo netstat -tuln | grep -E '80|443'
-
Sprawdź konfigurację Apache pod kątem błędów:
sudo apache2ctl configtest
Problem: MySQL nie uruchamia się
Rozwiązanie:
-
Sprawdź logi błędów:
sudo tail -f /var/log/mysql/error.log
-
Sprawdź, czy MySQL ma wystarczające uprawnienia do katalogu danych:
sudo chown -R mysql:mysql /var/lib/mysql sudo systemctl restart mysql
Problem: Błędy PHP lub brak przetwarzania plików PHP
Rozwiązanie:
-
Upewnij się, że moduł PHP dla Apache jest zainstalowany i włączony:
sudo apt install -y libapache2-mod-php sudo a2enmod php7.4 sudo systemctl restart apache2
-
Sprawdź, czy pliki PHP mają odpowiednie uprawnienia:
sudo chmod 644 /var/www/html/*.php
-
Sprawdź logi błędów Apache:
sudo tail -f /var/log/apache2/error.log
✅ Twoja Checklista:
- 🔍 Regularnie monitoruj logi serwera:
/var/log/apache2/error.log
,/var/log/mysql/error.log
- 🔄 Utrzymuj system i pakiety zaktualizowane:
sudo apt update && sudo apt upgrade
- 🔒 Twórz kopie zapasowe baz danych:
mysqldump -u root -p --all-databases > backup.sql
- 📋 Wykonuj regularne audyty bezpieczeństwa i sprawdzaj uprawnienia plików
- 🔐 Regularnie zmieniaj hasła MySQL i innych kont
- 📊 Monitoruj wykorzystanie zasobów (CPU, RAM, dysk) za pomocą narzędzi jak
htop
idf -h
- 🛠️ Testuj aplikacje webowe w bezpiecznym środowisku przed wdrożeniem na produkcję
🏁 Podsumowanie - Gotowy na Sukces?
Gratulacje! Pomyślnie zainstalowałeś i skonfigurowałeś kompletny stos LAMP na Ubuntu 20.04. Twój serwer jest teraz gotowy do hostowania aplikacji webowych opartych na PHP i MySQL.
W tym przewodniku nauczyłeś się:
- Jak zainstalować i skonfigurować serwer Apache
- Jak zabezpieczyć bazę danych MySQL i zoptymalizować jej wydajność
- Jak zainstalować i dostosować PHP dla różnych aplikacji
- Jak skonfigurować wirtualne hosty dla wielu stron
- Jak zabezpieczyć swój serwer przed różnymi zagrożeniami
Pamiętaj, że regularna konserwacja i aktualizacje są kluczowe dla utrzymania bezpiecznego i wydajnego serwera LAMP. Kontynuuj rozwijanie swoich umiejętności administracyjnych i badaj zaawansowane techniki hostingu, aby Twoje aplikacje webowe mogły się rozwijać.
🚀 Potrzebujesz profesjonalnego hostingu LAMP bez kłopotów z konfiguracją?
Oferujemy zoptymalizowane środowisko LAMP, regularne kopie zapasowe i wsparcie techniczne 24/7, dzięki czemu możesz skupić się na rozwoju swoich aplikacji.
❓ FAQ - Odpowiedzi na Twoje Pytania
Czy mogę zainstalować inne wersje PHP obok PHP 7.4?
Tak, Ubuntu 20.04 umożliwia instalację wielu wersji PHP jednocześnie. Możesz zainstalować dodatkowe wersje używając repozytoriów PPA, a następnie przełączać się między nimi za pomocą narzędzia update-alternatives
.
Jak mogę ograniczyć zużycie zasobów przez PHP?
Możesz dostosować parametry takie jak memory_limit
, max_execution_time
i max_input_time
w pliku php.ini, aby kontrolować zużycie zasobów przez skrypty PHP.
Czy mogę używać PostgreSQL zamiast MySQL?
Tak, PostgreSQL jest doskonałą alternatywą dla MySQL. Możesz zainstalować go za pomocą sudo apt install postgresql
i skonfigurować podobnie jak MySQL.
Jak mogę monitorować wydajność mojego stosu LAMP?
Istnieje wiele narzędzi do monitorowania, takich jak Munin, Nagios, lub Prometheus z Grafana. Dla prostego monitorowania możesz użyć narzędzi wiersza poleceń takich jak htop
, mytop
(dla MySQL) i Apache mod_status.
Czy mogę używać NGINX zamiast Apache?
Tak, NGINX jest popularną alternatywą dla Apache, szczególnie w przypadku obsługi dużej liczby jednoczesnych połączeń. Aby zainstalować NGINX zamiast Apache, użyj sudo apt install nginx php-fpm
.
Jak skonfigurować wiele stron PHP z różnymi wersjami PHP?
Możesz skonfigurować Apache do używania różnych wersji PHP dla różnych wirtualnych hostów, używając modułu mpm_event
i php-fpm
. Każdy wirtualny host może mieć swoją własną konfigurację PHP-FPM.
Czy mogę zautomatyzować instalację stosu LAMP?
Tak, możesz użyć narzędzi automatyzacji takich jak Ansible, Puppet lub skryptów bash, aby zautomatyzować proces instalacji. Dostępne są również gotowe szablony Ansible dla stosu LAMP.
Czy ten artykuł był pomocny?
Twoja strona WordPress działa wolno?
Sprawdź nasz hosting WordPress z ultraszybkimi dyskami NVMe i konfiguracją serwera zoptymalizowaną pod kątem wydajności. Doświadcz różnicy już dziś!
Sprawdź ofertę hostingu