Du bestämmer vilka tjänster vi får aktivera för analys, personalisering och externt innehåll.
Vi använder cookies och liknande tekniker på vår webbplats för att anpassa innehåll, bädda in externa medier och bättre förstå hur olika delar används.
Nödvändiga cookies
Dessa poster säkerställer grundläggande funktioner som säkerhet, stabilitet och formulärhantering.
Dina uppgifter kan behandlas med ditt samtycke eller med stöd av berättigade intressen. I cookieinställningarna kan du neka eller uttryckligen tillåta varje valfri kategori.
Vissa tjänster behandlar personuppgifter i länder utanför EU/EES. Genom att samtycka godkänner du även denna överföring. Mer information finns i vår integritetspolicy.
Du kan när som helst öppna och ändra ditt val senare. · 1.0.2
Konfigurera LEMP-stack på en Linuxserver – driftsätt högpresterande webbappar
Upptäck hur du konfigurerar en LEMP-stack för att hosta dynamiska PHP-webbplatser på Linux VPS-servrar → Läs mer
10 november 20268 min läsning1 Visningar0 hjälpsam
Introduktion
LEMP-stacken är en populär kombination av programvara med öppen källkod som installeras tillsammans för att göra det enkelt att hosta dynamiska webbplatser – med särskilt fokus på PHP-webbplatser och appar. Akronymen står för: Linux som operativsystem, "Engine x" (nginx) som webbserver, MySQL som databas och slutligen PHP för bearbetning. I den här guiden visar vi hur du konfigurerar en LEMP-stack på en Linux VPS, med en detaljerad steg-för-steg-förklaring och ett exempel på en att-göra-lista.
FAQ
Vanliga frågor
Linux som operativsystem, Engine x (nginx) som webbserver, MySQL som databas och PHP för bearbetning – en populär kombination av programvara för att hosta dynamiska PHP-webbplatser.
Ubuntu. Kommandona är identiska för Debian och bör vara liknande för andra distributioner, även om syntaxen kan skilja sig något.
Anslut till servern via SSH och uppdatera alla paket med rätt kommando, till exempel 'sudo apt update' för Ubuntu/Debian.
Kör kommandot 'sudo apt install nginx'. Se sedan till att rätt brandväggsregler har skapats så att webbservern kan nås från internet.
Feedback
Var den här artikeln till hjälp?
Din feedback hjälper oss att prioritera och förbättra innehåll.
0 av 0 Personer som lämnat feedback tyckte att den här artikeln var hjälpsam.
Personlig hjälp
Räcker inte guiden till?
Vår ZAP-support känner till din produkt – beskriv kort ditt ärende så hjälper vi dig personligen.
Navigation
VPS
Förberedelser
Anslut först till din server via SSH. Om du inte vet hur du gör det kan du läsa vår guide om första åtkomst (SSH).
I den här guiden använder vi Ubuntu som Linuxdistribution. Kommandona är identiska för Debian och bör vara liknande för andra distributioner, även om kommandosyntaxen kan skilja sig något. Se till att ett operativsystem är installerat och att du är ansluten via SSH.
Som alltid bör du uppdatera alla paket innan installationen med följande kommando:
Installationen kan delas upp i LEMP-stackens olika huvudkomponenter, med början i Nginx-webbservern, följt av MySQL-databasen och slutligen PHP. Under installationen skapar vi en testwebbplats skriven i PHP som ansluter till MySQL-databasen. Därefter hanteras och levereras varje webbförfrågan via Nginx-webbservern.
Konfigurera Nginx
Nginx är webbservern som hanterar inkommande webbförfrågningar och skickar svar. Installera den med följande kommando:
Code
sudo apt install nginx
Efter installationen bör du se till att rätt brandväggsregler har skapats så att webbservern kan nås från internet. I det här exemplet använder vi UFW-brandväggen, eftersom Nginx har en registrerad applikation för den.
Om du använder en annan brandvägg ska du se till att port 80 (HTTP) är öppen. Du hittar mer information om brandväggar i Linux i vår guide om att hantera brandväggen.
Aktivera UFW-brandväggen och skapa en regel för SSH:
Code
# Regel für SSH erstellen
sudo ufw allow OpenSSH
# UFW Firewall aktivieren
sudo ufw enable
Varning
Se till att du har konfigurerat en regel för SSH om du använder UFW! Utan den kan du inte längre ansluta till servern via SSH om den aktuella sessionen avbryts!
Skapa nu regeln för Nginx och kontrollera sedan att reglerna finns:
Code
# Regel für Nginx erstellen
sudo ufw allow in "Nginx Full"
# UFW Firewall Regeln anzeigen
sudo ufw status
Tips
Med kommandot ufw app list kan du visa vilka profiler som är tillgängliga. I exemplet ovan ser Nginx Full till att både HTTP (port 80) och HTTPS (port 443) är öppna.
Du bör se reglerna Nginx och Nginx (v6) med statusen ALLOW, vilket bekräftar att brandväggen är korrekt konfigurerad. Du ser också andra regler som du kanske redan har skapat, inklusive SSH-regeln.
När du har öppnat brandväggen för Nginx bör du testa att Nginx fungerar. Öppna webbläsaren och ange din IP-adress, till exempel: http://[deine_ipadresse]
Om allt fungerar bör du se en välkomstsida som standard. Om inte, kontrollera tjänstens status med: systemctl status nginx
Konfigurera MySQL
Nu installerar och konfigurerar du en MySQL-server som databas för att lagra data permanent på ett relationellt sätt. Installera den med:
Code
sudo apt install mysql-server
Efter installationen rekommenderar vi att du kör säkerhetsskriptet för att skydda MySQL-servern. Det är valfritt, men rekommenderas starkt. Starta det med:
Code
sudo mysql_secure_installation
Skriptet guidar dig genom konfigurationen interaktivt. Först får du frågan om lösenordsvalidering. Vi rekommenderar att du väljer Y, så att endast säkra lösenord tillåts framöver, och sedan antingen MEDIUM med 1 eller STRONG med 2.
Därefter får du frågan om användaren anonymous ska tas bort och om fjärrinloggning för root ska inaktiveras. Av säkerhetsskäl rekommenderar vi att du bekräftar båda med Y. Då tas testanvändaren bort och root-åtkomst är endast möjlig lokalt via SSH, vilket minimerar risken.
Till sist får du frågan om testdatabasen test ska tas bort och om behörighetstabellerna ska läsas in på nytt. Även här rekommenderar vi Y, eftersom testdatabasen inte behövs och behörighetstabellerna måste läsas in igen för att ändringarna ska börja gälla.
Kontrollera nu att MySQL-databasen körs genom att logga in med följande kommando: sudo mysql -u root. Om allt fungerar visas ett välkomstmeddelande. Du kan avsluta MySQL-skalet med quit.
Konfigurera PHP
Den sista LEMP-komponenten är PHP. För Nginx används det externa programmet php-fpm (PHP FastCGI Process Manager). Nginx konfigureras så att förfrågningar vidarebefordras till php-fpm innan de bearbetas och levereras.
Installera den senaste versionen av php-fpm och PHP-MySQL-tillägget med:
Code
sudo apt install php-fpm php-mysql
Kontrollera att installationen lyckades genom att ta reda på PHP-versionen. Om en version visas fungerar PHP som det ska:
Code
php -v
Tips
PHP-tillägg
För mer avancerade användningsområden kan du behöva ytterligare PHP-tillägg. Du kan visa en lista med apt search php- | less.
Bläddra med piltangenterna och avsluta med Q. Installera ett tillägg med:
Code
sudo apt install [php_erweiterung] [...]
Du kan installera flera tillägg samtidigt genom att separera dem med mellanslag.
Skapa en testwebbplats
När alla LEMP-komponenter har installerats skapar vi en testwebbplats för att visa hur stacken fungerar tillsammans och möjliggör en dynamisk webbplats. Det här är valfritt, men kan vara till hjälp för att förstå hur du kan skapa dina egna webbplatser.
I det här exemplet bygger vi en liten att-göra-lista i PHP som hämtar och visar poster från en MySQL-databas. Webbplatsen levereras via Nginx.
Som exempel använder vi domänen zapdocs.example.com, eftersom du sannolikt kommer att använda en domän i praktiken. Du måste skapa en DNS-post av typen A för domänen som pekar på serverns IP-adress. Du hittar hjälp i vår guide om domänposter.
Info
Du kan även arbeta utan en domän och ersätta [your_domain] med ett valfritt namn. Då når du webbplatsen via IP-adressen. Tänk dock på att du senare bör ta bort raden server_name i serverblocksfilen.
Konfigurera Nginx
Webbservrar lagrar vanligtvis alla webbplatsfiler i katalogen /var/www. Som standard har Nginx en html-mapp där med en standardsida. För att hålla ordning, särskilt om du hostar flera webbplatser, rekommenderar vi att du skapar en separat mapp för varje webbplats.
Skapa alltså en ny mapp under /var/www/[your_domain]. I vårt exempel är sökvägen /var/www/zapdocs.example.com.
Code
sudo mkdir /var/www/[your_domain]
Skapa nu en ny konfigurationsfil för Nginx-serverblocket för den här domänen i katalogen sites-available:
PHP-version
Viktigt: Ersätt [your_phpversion] med den PHP-version du har installerat. Kontrollera den med php -v, till exempel PHP 8.3.6 (cli) (built: Mar 19 2025 10:08:38) (NTS).
I det här exemplet är versionen 8.3, så raden blir: fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
Den här serverblocksfilen hanterar förfrågningar på port 80 (HTTP) och kontrollerar om förfrågan matchar det angivna värdet för server_name, alltså din domän. Den pekar även på mappen /var/www/[your_domain], som du skapade tidigare, där filerna som ska levereras finns.
Spara filen och avsluta Nano med CTRL + X, tryck sedan på Y för att bekräfta och därefter ENTER.
Aktivera konfigurationen genom att skapa en symbolisk länk i katalogen sites-enabled:
Använder ingen domän
Om du inte använder en domän ska du ta bort eller kommentera raden server_name (genom att lägga till # framför den). Du bör också inaktivera standardserverblocket med:
Code
sudo unlink /etc/nginx/sites-enabled/default
Vi rekommenderar att du kontrollerar syntaxen med följande kommando:
Code
sudo nginx -t
Starta om Nginx så att ändringarna börjar gälla:
Code
sudo systemctl reload nginx
Skapa webbplatsen
När Nginx har konfigurerats skapar vi själva webbplatsen som ska levereras. Mappen är tom just nu, så ingenting visas ännu. Vi skapar en enkel att-göra-lista, som beskrivet ovan.
Förbered databasen
Logga in på MySQL-servern:
Code
sudo mysql -u root
Skapa en ny databas todowebsite och en tabell todoitems i den:
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
);
Lägg till några exempelposter:
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);
Skapa en separat användare todo för webbplatsen:
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;
Avsluta MySQL-skalet med quit.
PHP-filer för webbplatsen
Nu skapar vi själva PHP-filen för att-göra-sidan. Öppna Nano-redigeraren:
Code
sudo nano /var/www/[your_domain]/index.php
Klistra in följande kod. Det första PHP-blocket upprättar anslutningen till MySQL.
Viktigt
Ersätt [your_password] med lösenordet du angav för användaren todo.
HTML-delen visar att-göra-listan genom att hämta data från databasen.
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();
?>
Spara filen och avsluta Nano med CTRL + X, sedan Y och ENTER.
Testa webbplatsen
Du har nu skapat en testwebbplats med en att-göra-lista som använder alla komponenter i LEMP-stacken!
Nu bör du kunna nå webbplatsen via domänen (port 80 / http) som du angav i serverblocket, i vårt exempel zapdocs.example.com. Resultatet bör se ut så här:
Avslutning
Grattis, du har installerat och konfigurerat LEMP-stacken! Som nästa steg rekommenderar vi starkt att du konfigurerar en domän och ett SSL-certifikat, så att dina data överförs säkert. Läs vår Certbot-guide med fokus på Nginx-pluginen och följ den interaktiva konfigurationen för att snabbt och enkelt få ett certifikat för din domän.
Vårt supportteam finns tillgängligt varje dag om du har frågor eller problem – tveka inte att kontakta oss! 🙂
Serverhosting från 2,49 € / månad, online direkt, DDoS-skydd ingår.