Decydujesz, które usługi możemy włączyć do analizy, personalizacji i wyświetlania treści zewnętrznych.
Na naszej stronie używamy plików cookie i podobnych technologii, aby personalizować treści, osadzać materiały zewnętrzne i lepiej rozumieć sposób korzystania z poszczególnych sekcji.
Niezbędne pliki cookie
Te wpisy zapewniają podstawowe funkcje, takie jak bezpieczeństwo, stabilność i obsługa formularzy.
Opcjonalne sekcje
AnalitykaMarketingPersonalizacjaMedia zewnętrzne
Dane mogą być przetwarzane za twoją zgodą lub na podstawie prawnie uzasadnionych interesów. W ustawieniach plików cookie możesz odrzucić każdą opcjonalną kategorię lub wyrazić na nią zgodę.
Niektóre usługi przetwarzają dane osobowe w państwach trzecich. Wyrażając zgodę, akceptujesz również przekazywanie tych danych. Więcej informacji znajdziesz w naszej polityce prywatności.
Możesz później w każdej chwili wrócić do swojego wyboru i go zmienić. · 1.0.2
Konfiguracja stosu LEMP na serwerze Linux – wdrażanie wydajnych aplikacji internetowych
Dowiedz się, jak skonfigurować stos LEMP do hostowania dynamicznych witryn PHP na serwerach VPS z systemem Linux → Sprawdź
10 listopada 20268 min czytania1 Wyświetlenia0 pomocne
Wprowadzenie
Stos LEMP to popularny zestaw oprogramowania open source, które wspólnie konfiguruje się w celu łatwego hostowania dynamicznych witryn internetowych – szczególnie tych opartych na PHP. Akronim oznacza: Linux jako system operacyjny, „Engine x” (nginx) jako serwer WWW, MySQL jako bazę danych oraz PHP do przetwarzania. W tym poradniku pokażemy, jak skonfigurować stos LEMP na serwerze VPS z systemem Linux. Znajdziesz tu szczegółową instrukcję krok po kroku oraz przykład witryny z listą zadań.
FAQ
Często zadawane pytania
Linux jako system operacyjny, Engine x (nginx) jako serwer WWW, MySQL jako baza danych i PHP do przetwarzania. To popularny zestaw oprogramowania do hostowania dynamicznych witryn PHP.
Ubuntu. Polecenia są takie same w Debianie i powinny działać podobnie w innych dystrybucjach, choć składnia może się nieznacznie różnić.
Połącz się z serwerem przez SSH i zaktualizuj wszystkie pakiety odpowiednim poleceniem, np. 'sudo apt update' w Ubuntu lub Debianie.
Użyj polecenia 'sudo apt install nginx'. Następnie skonfiguruj odpowiednie reguły zapory, aby serwer WWW był dostępny z internetu.
Opinia
Czy ten artykuł był pomocny?
Twoja opinia pomaga nam lepiej ustalać priorytety i aktualizować treści.
0 od 0 Osoby oceniające uznały ten artykuł za pomocny.
Indywidualna pomoc
Instrukcja nie wystarcza?
Nasz zespół wsparcia ZAP zna twój produkt — opisz krótko problem, a pomożemy ci osobiście.
Zappy zna tę instrukcję i odpowie ci bezpośrednio na czacie.
Nawigacja
VPS
Przygotowanie
Najpierw połącz się z serwerem przez SSH. Jeśli nie wiesz, jak to zrobić, zapoznaj się z naszym poradnikiem Pierwsze logowanie (SSH).
W tym poradniku używamy Ubuntu jako dystrybucji Linuksa. Polecenia są takie same w Debianie i powinny działać podobnie w innych dystrybucjach, choć składnia może się nieznacznie różnić. Upewnij się, że system operacyjny jest zainstalowany i masz połączenie z serwerem przez SSH.
Jak zawsze, przed instalacją zaktualizuj wszystkie pakiety za pomocą odpowiedniego polecenia:
Gratulacje! Stos LEMP został pomyślnie zainstalowany i skonfigurowany. W kolejnym kroku zdecydowanie zalecamy skonfigurowanie domeny i certyfikatu SSL, aby bezpiecznie przesyłać dane. Zapoznaj się z naszym poradnikiem Certbot, który koncentruje się na wtyczce Nginx, i postępuj zgodnie z interaktywną konfiguracją, aby szybko i łatwo uzyskać certyfikat dla swojej domeny.
Nasz zespół pomocy technicznej jest dostępny każdego dnia, aby odpowiedzieć na pytania i pomóc w razie problemów – skontaktuj się z nami! 🙂
Hosting serwerów od 2,49 € / miesiąc, natychmiastowa dostępność, ochrona DDoS w cenie.
Instalację można podzielić na poszczególne główne komponenty stosu LEMP. Zaczniemy od serwera WWW Nginx, następnie zainstalujemy bazę danych MySQL, a na końcu PHP. Podczas instalacji skonfigurujemy testową witrynę napisaną w PHP, która będzie korzystać z bazy danych MySQL. Każde żądanie internetowe będzie następnie obsługiwane i dostarczane przez serwer WWW Nginx.
Konfiguracja Nginx
Nginx to serwer WWW, który obsługuje przychodzące żądania i wysyła odpowiedzi. Zainstaluj go za pomocą polecenia:
Code
sudo apt install nginx
Po instalacji upewnij się, że utworzono odpowiednie reguły zapory, aby serwer WWW był dostępny z internetu. W tym przykładzie używamy zapory UFW, ponieważ Nginx ma w niej zarejestrowany profil aplikacji.
Jeśli korzystasz z innej zapory, upewnij się, że port 80 (HTTP) jest otwarty. Więcej informacji na temat zapór w systemie Linux znajdziesz w naszym poradniku Zarządzanie zaporą.
Włącz zaporę UFW i dodaj regułę dla SSH:
Code
# Regel für SSH erstellen
sudo ufw allow OpenSSH
# UFW Firewall aktivieren
sudo ufw enable
Uwaga
Jeśli korzystasz z UFW, pamiętaj o dodaniu reguły dla SSH! Bez niej, jeśli bieżąca sesja zostanie przerwana, nie będzie można ponownie połączyć się z serwerem przez SSH!
Teraz dodaj regułę dla Nginx, a następnie sprawdź, czy reguły zostały utworzone:
Code
# Regel für Nginx erstellen
sudo ufw allow in "Nginx Full"
# UFW Firewall Regeln anzeigen
sudo ufw status
Wskazówka
Za pomocą polecenia ufw app list możesz wyświetlić dostępne profile. W powyższym przykładzie profil Nginx Full otwiera zarówno HTTP (port 80), jak i HTTPS (port 443).
Powinny być widoczne reguły Nginx i Nginx (v6) ze statusem ALLOW, co potwierdza prawidłową konfigurację zapory. Zobaczysz również inne reguły, które mogły zostać już wcześniej skonfigurowane, w tym regułę SSH.
Po otwarciu portów dla Nginx sprawdź, czy serwer działa. Otwórz przeglądarkę i wpisz adres IP serwera, na przykład: http://[twoj_adres_ip]
Jeśli wszystko działa poprawnie, zobaczysz domyślną stronę powitalną. Jeśli nie, sprawdź status usługi za pomocą polecenia: systemctl status nginx
Konfiguracja MySQL
Teraz zainstalujesz i skonfigurujesz serwer MySQL, który będzie służyć jako baza danych do trwałego przechowywania danych w modelu relacyjnym. Zainstaluj go za pomocą polecenia:
Code
sudo apt install mysql-server
Po instalacji zalecamy uruchomienie skryptu zabezpieczającego serwer MySQL. Jest to opcjonalne, ale zdecydowanie warto to zrobić. Uruchom skrypt poleceniem:
Code
sudo mysql_secure_installation
Skrypt przeprowadzi Cię przez konfigurację. Najpierw pojawi się pytanie o weryfikację haseł. Zalecamy wybranie Y, aby od tej pory dozwolone były tylko bezpieczne hasła, a następnie wybranie poziomu MEDIUM za pomocą 1 lub STRONG za pomocą 2.
Następnie pojawią się pytania o usunięcie użytkownika anonymous i wyłączenie zdalnego logowania na konto root. Ze względów bezpieczeństwa zalecamy potwierdzenie obu opcji, wybierając Y. Usunie to użytkownika testowego, a dostęp do konta root będzie możliwy tylko lokalnie przez SSH, co ograniczy ryzyko.
Na koniec pojawią się pytania o usunięcie bazy danych test i ponowne załadowanie tabel uprawnień. Tutaj również zalecamy wybranie Y, ponieważ baza testowa nie jest potrzebna, a tabele uprawnień muszą zostać ponownie załadowane, aby zastosować zmiany.
Sprawdź teraz, czy baza danych MySQL działa, logując się za pomocą polecenia: sudo mysql -u root. Jeśli wszystko się powiedzie, pojawi się komunikat powitalny. Wpisz quit, aby wyjść z powłoki MySQL.
Konfiguracja PHP
Ostatnim komponentem stosu LEMP jest PHP. W przypadku Nginx korzysta się z zewnętrznego programu php-fpm (PHP FastCGI Process Manager). Nginx zostanie skonfigurowany tak, aby przekazywać żądania do php-fpm, zanim zostaną przetworzone i obsłużone.
Zainstaluj najnowszą wersję php-fpm oraz wtyczkę PHP-MySQL za pomocą polecenia:
Code
sudo apt install php-fpm php-mysql
Sprawdź, czy instalacja zakończyła się pomyślnie, wyświetlając wersję PHP. Jeśli pojawi się numer wersji, PHP działa poprawnie:
Code
php -v
Wskazówka
Rozszerzenia PHP
W bardziej zaawansowanych zastosowaniach mogą być potrzebne dodatkowe rozszerzenia PHP. Ich listę możesz wyświetlić za pomocą polecenia apt search php- | less.
Do przewijania użyj klawiszy strzałek, a aby zakończyć, naciśnij Q. Aby zainstalować rozszerzenie, użyj polecenia:
Code
sudo apt install [php_erweiterung] [...]
Możesz zainstalować kilka rozszerzeń jednocześnie, oddzielając je spacjami.
Tworzenie testowej witryny
Po zainstalowaniu wszystkich komponentów stosu LEMP utworzymy testową witrynę, aby pokazać, jak współpracują ze sobą poszczególne elementy i jak umożliwiają obsługę dynamicznej strony internetowej. Jest to opcjonalne, ale pomoże Ci zrozumieć, jak skonfigurować własne witryny.
W tym przykładzie stworzymy prostą listę zadań w PHP, która pobiera wpisy z bazy danych MySQL i wyświetla je na stronie. Witryna będzie udostępniana przez Nginx.
Jako przykładowej domeny użyjemy zapdocs.example.com, ponieważ w praktyce prawdopodobnie również będziesz korzystać z domeny. Musisz utworzyć rekord DNS A dla tej domeny i skierować go na adres IP serwera. Pomoc znajdziesz w naszym poradniku Rekordy domeny.
Informacje
Możesz też pracować bez domeny i zastąpić [your_domain] dowolną nazwą. Wtedy uzyskasz dostęp do witryny za pomocą adresu IP. Pamiętaj jednak, aby później usunąć wiersz server_name z pliku bloku serwera.
Konfiguracja Nginx
Serwery WWW zazwyczaj przechowują pliki witryn w katalogu /var/www. Domyślnie Nginx ma tam folder html ze stroną startową. Aby zachować porządek, szczególnie w przypadku hostowania kilku witryn, zalecamy utworzenie osobnego folderu dla każdej z nich.
Utwórz więc nowy folder w lokalizacji /var/www/[your_domain]. W naszym przykładzie będzie to /var/www/zapdocs.example.com.
Code
sudo mkdir /var/www/[your_domain]
Utwórz nowy plik konfiguracyjny bloku serwera Nginx dla tej domeny w katalogu sites-available:
Wersja PHP
Ważne: zastąp [your_phpversion] aktualnie zainstalowaną wersją PHP. Sprawdź ją za pomocą php -v, na przykład PHP 8.3.6 (cli) (built: Mar 19 2025 10:08:38) (NTS).
W tym przykładzie będzie to 8.3, więc wiersz powinien wyglądać tak: fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
Ten plik bloku serwera obsługuje żądania na porcie 80 (HTTP) i sprawdza, czy żądanie pasuje do podanej wartości server_name, czyli Twojej domeny. Wskazuje również folder /var/www/[your_domain], który został wcześniej utworzony do przechowywania plików witryny.
Zapisz plik i zamknij edytor Nano, naciskając CTRL + X, następnie Y, aby potwierdzić, i ENTER.
Aktywuj konfigurację, tworząc dowiązanie symboliczne w katalogu sites-enabled:
Konfiguracja bez domeny
Jeśli nie używasz domeny, usuń lub zakomentuj wiersz server_name (dodając przed nim #). Wyłącz również domyślny blok serwera za pomocą polecenia:
Code
sudo unlink /etc/nginx/sites-enabled/default
Zalecamy sprawdzenie składni za pomocą polecenia:
Code
sudo nginx -t
Uruchom ponownie Nginx, aby zastosować zmiany:
Code
sudo systemctl reload nginx
Tworzenie witryny
Po skonfigurowaniu Nginx utworzymy właściwą witrynę, która będzie udostępniana. Folder jest obecnie pusty, więc nic jeszcze się nie wyświetla. Zgodnie z wcześniejszym opisem stworzymy prostą listę zadań.
Przygotowanie bazy danych
Zaloguj się do serwera MySQL:
Code
sudo mysql -u root
Utwórz nową bazę danych todowebsite i tabelę todoitems:
Code
# Datenbank erstellen
CREATE DATABASE todowebsite;
# Datenbank auswählen
USE todowebsite;
# Tabelle erstellen
CREATE TABLE todoitems (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
is_completed BOOLEAN DEFAULT FALSE,
creation_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Dodaj kilka przykładowych wpisów:
Code
INSERT INTO todoitems (name, is_completed) VALUES ('Create ZAP-Docs Guide', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Buy a ZAP-Hosting Server', 1);
INSERT INTO todoitems (name, is_completed) VALUES ('Join ZAP-Hosting Discord', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Have a great day!', 0);
Utwórz dedykowanego użytkownika todo dla witryny:
Code
# Benutzer erstellen
# Ersetze [your_password] durch dein eigenes Passwort
CREATE USER todo@localhost IDENTIFIED BY '[your_password]';
# Rechte vergeben (alles in einer Zeile kopieren)
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER
ON todowebsite.*
TO todo@localhost;
# Rechte neu laden
FLUSH PRIVILEGES;
Wpisz quit, aby wyjść z powłoki MySQL.
Pliki witryny PHP
Teraz utworzymy właściwy plik PHP dla strony z listą zadań. Otwórz edytor Nano:
Code
sudo nano /var/www/[your_domain]/index.php
Wstaw poniższy kod. Pierwszy blok PHP nawiązuje połączenie z MySQL.
Ważne
Zastąp [your_password] hasłem ustawionym dla użytkownika todo.
Część HTML wyświetla listę zadań, pobierając dane z bazy danych.
Code
<?php
// MySQL-Verbindung vorbereiten
$servername = "localhost";
$username = "todo";
$password = "[your_password]";
$dbname = "todowebsite";
// Verbindung erstellen
$conn = new mysqli($servername, $username, $password, $dbname);
// Verbindung prüfen, bei Fehler abbrechen
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL-Abfrage ausführen und Ergebnis speichern
$sql = "SELECT id, name, is_completed, creation_date FROM todoitems ORDER BY creation_date DESC";
$result = $conn->query($sql);
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>To-Do Liste</title>
</head>
<body>
<h1>Coole To-Do Liste :D</h1>
<p>Für unseren tollen ZAP-Hosting Guide: <a href="https://zap-hosting.com/guides/docs/vserver-linux-lemp-stack">https://zap-hosting.com/guides/docs/vserver-linux-lemp-stack</a></p>
<ul>
<?php
// Prüfen, ob Ergebnisse vorhanden sind
if ($result->num_rows > 0) {
// Durch alle Einträge iterieren
foreach ($result as $entry) {
echo "<li>";
// Name anzeigen, htmlspecialchars schützt vor XSS
echo htmlspecialchars($entry["name"]);
// Status anzeigen
if ($entry["is_completed"]) {
echo " <strong>(Abgeschlossen)</strong>";
} else {
echo " <strong>(Offen)</strong>";
}
// Erstellungsdatum anzeigen
echo " - Erstellungsdatum: " . htmlspecialchars($entry['creation_date']);
echo "</li>";
}
} else {
// Falls keine Einträge vorhanden sind
echo "<li>Keine To-Do Einträge gefunden.</li>";
}
?>
</ul>
</body>
</html>
<?php
// Verbindung schließen
$conn->close();
?>
Zapisz plik i zamknij edytor Nano, naciskając CTRL + X, następnie Y i ENTER.
Testowanie witryny
Udało Ci się skonfigurować testową witrynę z listą zadań, która korzysta ze wszystkich komponentów stosu LEMP!
Teraz witryna powinna być dostępna pod domeną (port 80 / http) określoną w bloku serwera. W naszym przykładzie jest to zapdocs.example.com. Wynik powinien wyglądać następująco: