En tidigare version av denna handledning skrevs av Brennan Bearnes.

Introduktion

En ”LAMP”-stack är en grupp programvaror med öppen källkod som vanligtvis installeras tillsammans för att göra det möjligt för en server att vara värd för dynamiska webbplatser och webbappar. Termen är egentligen en akronym som står för operativsystemet Linux med webbservern Apache. Webbplatsdata lagras i en MySQL-databas och dynamiskt innehåll behandlas av PHP.

I den här guiden installerar vi en LAMP-stack på en Ubuntu 18.04-server.

Förutsättningar

För att kunna slutföra den här handledningen behöver du en Ubuntu 18.04-server med ett icke-root sudo-aktiverat användarkonto och en grundläggande brandvägg. Detta kan konfigureras med hjälp av vår guide för inledande serverinstallation för Ubuntu 18.04.

Steg 1 – Installera Apache och uppdatera brandväggen

Apache-webbservern är en av de mest populära webbserrarna i världen. Den är väldokumenterad och har använts i stor utsträckning under en stor del av webbens historia, vilket gör den till ett utmärkt standardval för att vara värd för en webbplats.

Installera Apache med Ubuntus pakethanterare, apt:

  • sudo apt update
  • sudo apt install apache2

Då det här är ett sudo-kommando utförs dessa operationer med root-privilegier. Det kommer att be dig om ditt vanliga användarlösenord för att verifiera dina avsikter.

När du har angett ditt lösenord kommer apt att tala om för dig vilka paket som ska installeras och hur mycket extra diskutrymme de kommer att ta upp. Tryck Y och tryck ENTER för att fortsätta, så fortsätter installationen.

Justera brandväggen så att den tillåter webbtrafik

Nästan, förutsatt att du har följt instruktionerna för den första serverinstallationen och aktiverat UFW-brandväggen, ska du se till att din brandvägg tillåter HTTP- och HTTPS-trafik. Du kan kontrollera att UFW har en programprofil för Apache på följande sätt:

  • sudo ufw app list
Output
Available applications: Apache Apache Full Apache Secure OpenSSH

Om du tittar på Apache Full-profilen bör den visa att den tillåter trafik till portarna 80 och 443:

  • sudo ufw app info "Apache Full"
Output
Profile: Apache FullTitle: Web Server (HTTP,HTTPS)Description: Apache v2 is the next generation of the omnipresent Apache webserver.Ports: 80,443/tcp

Allow inkommande HTTP- och HTTPS-trafik för denna profil:

  • sudo ufw allow in "Apache Full"

Du kan göra en stickprovskontroll direkt för att kontrollera att allt gick som planerat genom att besöka serverns offentliga IP-adress i din webbläsare (se anmärkningen under nästa rubrik för att ta reda på vilken din offentliga IP-adress är om du inte redan har den informationen):

http://your_server_ip

Du kommer att se standardversionen av Ubuntu 18.04 Apache-webbplats, som finns där för informations- och teständamål. Den ska se ut ungefär så här:

Ubuntu 18.04 Apache standard

Om du ser den här sidan är din webbserver nu korrekt installerad och tillgänglig genom din brandvägg.

Hur du hittar serverns offentliga IP-adress

Om du inte vet vad serverns offentliga IP-adress är, finns det ett antal sätt att hitta den. Vanligtvis är detta den adress som du använder för att ansluta till din server via SSH.

Det finns några olika sätt att göra detta från kommandoraden. För det första kan du använda iproute2-verktygen för att få fram din IP-adress genom att skriva följande:

  • ip addr show eth0 | grep inet | awk '{ print ; }' | sed 's/\/.*$//'

Detta ger dig två eller tre rader tillbaka. De är alla korrekta adresser, men din dator kanske bara kan använda en av dem, så prova gärna var och en av dem.

En alternativ metod är att använda verktyget curl för att kontakta en utomstående part och få den att tala om för dig hur den ser din server. Detta görs genom att fråga en specifik server vad din IP-adress är:

  • sudo apt install curl
  • curl http://icanhazip.com

Oavsett vilken metod du använder för att få fram din IP-adress, skriv in den i webbläsarens adressfält för att visa Apaches standardsida.

Steg 2 – Installera MySQL

Nu när du har fått igång din webbserver är det dags att installera MySQL. MySQL är ett databashanteringssystem. I grund och botten kommer det att organisera och ge tillgång till databaser där din webbplats kan lagra information.

Nu använder du återigen apt för att skaffa och installera den här programvaran:

  • sudo apt install mysql-server

Notera: I det här fallet behöver du inte köra sudo apt update före kommandot. Detta beror på att du nyligen körde det i kommandona ovan för att installera Apache. Paketindexet på din dator bör redan vara uppdaterat.

Det här kommandot visar dig också en lista över de paket som kommer att installeras, tillsammans med hur mycket diskutrymme de kommer att ta upp. Skriv Y för att fortsätta.

När installationen är klar kör du ett enkelt säkerhetsskript som är förinstallerat med MySQL och som tar bort några farliga standardinställningar och låser åtkomsten till ditt databassystem. Starta det interaktiva skriptet genom att köra:

  • sudo mysql_secure_installation

Detta kommer att fråga om du vill konfigurera VALIDATE PASSWORD PLUGIN.

Anmärkning: Att aktivera den här funktionen är något av en bedömning. Om den är aktiverad kommer lösenord som inte matchar de angivna kriterierna att avvisas av MySQL med ett fel. Detta kommer att orsaka problem om du använder ett svagt lösenord tillsammans med programvara som automatiskt konfigurerar MySQL-användaruppgifter, t.ex. Ubuntu-paketen för phpMyAdmin. Det är säkert att låta valideringen vara inaktiverad, men du bör alltid använda starka, unika lösenord för databasreferenser.

Svar Y för ja, eller något annat för att fortsätta utan att aktivera.

VALIDATE PASSWORD PLUGIN can be used to test passwordsand improve security. It checks the strength of passwordand allows the users to set only those passwords which aresecure enough. Would you like to setup VALIDATE PASSWORD plugin?Press y|Y for Yes, any other key for No:

Om du svarar ”ja” blir du ombedd att välja en nivå av lösenordskontroll. Tänk på att om du anger 2 för den starkaste nivån kommer du att få fel när du försöker ange ett lösenord som inte innehåller siffror, stora och små bokstäver och specialtecken, eller som är baserat på vanliga ordboksord.

There are three levels of password validation policy:LOW Length >= 8MEDIUM Length >= 8, numeric, mixed case, and special charactersSTRONG Length >= 8, numeric, mixed case, special characters and dictionary filePlease enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Oavsett om du valde att ställa in VALIDATE PASSWORD PLUGIN eller inte kommer servern nästa gång att be dig att välja och bekräfta ett lösenord för MySQL-rotanvändaren. Detta är ett administrativt konto i MySQL som har ökade privilegier. Tänk på att det liknar rotkontot för själva servern (även om det du konfigurerar nu är ett MySQL-specifikt konto). Se till att det är ett starkt och unikt lösenord och lämna det inte tomt.

Om du har aktiverat lösenordskontroll visas lösenordsstyrkan för root-lösenordet som du just har angett och servern frågar om du vill ändra det lösenordet. Om du är nöjd med ditt nuvarande lösenord anger du N för ”nej” vid uppmaningen:

Using existing password for root.Estimated strength of the password: 100Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

För resten av frågorna trycker du på Y och trycker på ENTER vid varje uppmaning. Detta kommer att ta bort några anonyma användare och testdatabasen, inaktivera fjärrrotsinloggningar och ladda dessa nya regler så att MySQL omedelbart respekterar de ändringar du har gjort.

Bemärk att i Ubuntusystem som kör MySQL 5.7 (och senare versioner) är root MySQL-användaren inställd på att autentisera sig med hjälp av insticksmodulen auth_socket som standard i stället för med ett lösenord. Detta ger en viss ökad säkerhet och användbarhet i många fall, men det kan också komplicera saker och ting när du behöver tillåta ett externt program (t.ex. phpMyAdmin) att få tillgång till användaren.

Om du föredrar att använda ett lösenord när du ansluter till MySQL som root, måste du byta autentiseringsmetod från auth_socket till mysql_native_password. För att göra detta öppnar du MySQL-prompten från terminalen:

  • sudo mysql

Nästan kontrollerar du vilken autentiseringsmetod varje MySQL-användarkonto använder med följande kommando:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | | auth_socket | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

I det här exemplet kan du se att root-användaren faktiskt autentiserar sig med insticksmodulen auth_socket. Om du vill konfigurera rotkontot så att det autentiseras med ett lösenord kör du följande ALTER USER-kommando. Se till att ändra password till ett starkt lösenord som du väljer:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Kör sedan FLUSH PRIVILEGES som talar om för servern att ladda om grant-tabellerna och sätta dina nya ändringar i kraft:

  • FLUSH PRIVILEGES;

Kontrollera autentiseringsmetoderna som används av var och en av dina användare igen för att bekräfta att root inte längre autentiserar sig med hjälp av insticksmodulen auth_socket:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

Du kan se i den här exempelutgåvan att root MySQL-användaren nu autentiserar sig med ett lösenord. När du har bekräftat detta på din egen server kan du avsluta MySQL-skalet:

  • exit

Ditt databassystem är nu konfigurerat och du kan gå vidare till att installera PHP, den sista komponenten i LAMP-stacken.

Steg 3 – Installera PHP

PPHP är den komponent i din installation som kommer att bearbeta kod för att visa dynamiskt innehåll. Den kan köra skript, ansluta till dina MySQL-databaser för att hämta information och överlämna det bearbetade innehållet till din webbserver för visning.

Nyligen använder du apt-systemet för att installera PHP. Lägg dessutom in några hjälppaket den här gången så att PHP-koden kan köras under Apache-servern och prata med din MySQL-databas:

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

Detta borde installera PHP utan problem. Vi ska testa detta om en stund.

I de flesta fall vill du ändra det sätt på vilket Apache serverar filer när en katalog begärs. För närvarande, om en användare begär en katalog från servern, letar Apache först efter en fil som heter index.html. Vi vill tala om för webbservern att föredra PHP-filer framför andra, så låt Apache leta efter en index.php-fil först.

För att göra detta skriver du det här kommandot för att öppna dir.conf-filen i en textredigerare med root-privilegier:

  • sudo nano /etc/apache2/mods-enabled/dir.conf

Den kommer att se ut så här:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c> DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm</IfModule>

Förflytta PHP-indexfilen (markerad ovan) till den första positionen efter DirectoryIndex-specifikationen, så här:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm</IfModule>

När du är klar sparar och stänger du filen genom att trycka CTRL+X. Bekräfta sparandet genom att skriva Y och tryck sedan ENTER för att verifiera filens sparplats.

Efter detta startar du om Apache-webbservern för att dina ändringar ska kännas igen. Gör detta genom att skriva så här:

  • sudo systemctl restart apache2

Du kan också kontrollera statusen för tjänsten apache2 med hjälp av systemctl:

  • sudo systemctl status apache2
Sample Output
● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-04-23 14:28:43 EDT; 45s ago Docs: man:systemd-sysv-generator(8) Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) Tasks: 6 (limit: 512) CGroup: /system.slice/apache2.service ├─13623 /usr/sbin/apache2 -k start ├─13626 /usr/sbin/apache2 -k start ├─13627 /usr/sbin/apache2 -k start ├─13628 /usr/sbin/apache2 -k start ├─13629 /usr/sbin/apache2 -k start └─13630 /usr/sbin/apache2 -k start

Tryck Q för att avsluta denna statusutgång.

För att förbättra funktionaliteten hos PHP har du möjlighet att installera några ytterligare moduler. Om du vill se de tillgängliga alternativen för PHP-moduler och bibliotek kan du pipa resultatet av apt search till less, en sökare som låter dig bläddra genom utdata från andra kommandon:

  • apt search php- | less

Använd piltangenterna för att bläddra uppåt och nedåt och tryck på Q för att avsluta.

Resultaten är alla valfria komponenter som du kan installera. Du får en kort beskrivning av var och en:

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64 Tracks usage of TCP/IP and builds html files with graphsbluefish/bionic 2.2.10-1 amd64 advanced Gtk+ text editor for web and software developmentcacti/bionic 1.1.38+ds1-1 all web interface for graphing of monitoring systemsganglia-webfrontend/bionic 3.6.1-3 all cluster monitoring toolkit - web front-endgolang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all PHP-like Compression and Archive Extensions in Gohaserl/bionic 0.9.35-2 amd64 CGI scripting program for embedded environmentskdevelop-php-docs/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-phpkdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-php-l10n…:

För att få veta mer om vad varje modul gör kan du söka på Internet efter mer information om dem. Alternativt kan du titta på den långa beskrivningen av paketet genom att skriva:

  • apt show package_name

Det kommer att finnas en hel del utdata, med ett fält som heter Description som kommer att ha en längre förklaring av den funktionalitet som modulen tillhandahåller.

För att ta reda på vad modulen php-cli gör kan du till exempel skriva så här:

  • apt show php-cli

Länge med en stor mängd annan information kommer du att hitta något som ser ut så här:

Output
…Description: command-line interpreter for the PHP scripting language (default) This package provides the /usr/bin/php command interpreter, useful for testing PHP scripts from a shell or performing general shell scripting tasks. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. . This package is a dependency package, which depends on Ubuntu's default PHP version (currently 7.2).…

Om du efter att ha forskat bestämmer dig för att du vill installera ett paket kan du göra det genom att använda kommandot apt install på samma sätt som du har gjort för den andra programvaran.

Om du bestämt dig för att php-cli är något du behöver kan du skriva:

  • sudo apt install php-cli

Om du vill installera mer än en modul kan du göra det genom att räkna upp varje modul, åtskilda av ett mellanslag, efter apt install-kommandot, så här:

  • sudo apt install package1 package2 ...

I det här läget är din LAMP-stapel installerad och konfigurerad. Innan du gör något annat rekommenderar vi att du konfigurerar en virtuell Apache-värd där du kan lagra konfigurationsdetaljerna för din server.

Steg 4 – Konfigurera virtuella värdar (rekommenderas)

När du använder Apache-webbservern kan du använda virtuella värdar (liknande serverblock i Nginx) för att kapsla in konfigurationsdetaljer och vara värd för mer än en domän från en enda server. Vi kommer att konfigurera en domän som heter your_domain, men du bör ersätta detta med ditt eget domännamn. Om du vill veta mer om hur du konfigurerar ett domännamn med DigitalOcean kan du läsa vår Introduktion till DigitalOcean DNS.

Apache på Ubuntu 18.04 har ett serverblock aktiverat som standard som är konfigurerat för att servera dokument från katalogen /var/www/html. Även om detta fungerar bra för en enda webbplats kan det bli otympligt om du är värd för flera webbplatser. Istället för att ändra /var/www/html skapar vi en katalogstruktur inom /var/www för vår webbplats your_domain och lämnar /var/www/html på plats som standardkatalog som serveras om en klientförfrågan inte matchar någon annan webbplats.

Skapa katalogen för din_domän enligt följande:

sudo mkdir /var/www/your_domain

Nästan tilldelar du äganderätten till katalogen med miljövariabeln $USER:

  • sudo chown -R $USER:$USER /var/www/your_domain

Handlingsrättigheterna för dina webbrötter bör vara korrekta om du inte har ändrat ditt unmask-värde, men du kan försäkra dig om det genom att skriva:

  • sudo chmod -R 755 /var/www/your_domain

Nästan skapar du en exempel index.html-sida med nano eller din favoritredigerare:

  • nano /var/www/your_domain/index.html

Inuti lägger du till följande exempel-HTML:

/var/www/your_domain/index.html
<html> <head> <title>Welcome to Your_domain!</title> </head> <body> <h1>Success! The your_domain server block is working!</h1> </body></html>

Spara och stäng filen när du är klar.

För att Apache ska kunna servera detta innehåll är det nödvändigt att skapa en virtuell värdfil med rätt direktiv. Istället för att ändra standardkonfigurationsfilen som ligger på /etc/apache2/sites-available/000-default.conf direkt, gör vi en ny fil på /etc/apache2/sites-available/your_domain.conf:

  • sudo nano /etc/apache2/sites-available/your_domain.conf

Häll in följande konfigurationsblock, som liknar standardinställningen, men som uppdaterats för vår nya katalog och vårt nya domännamn:

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName your_domain ServerAlias www.your_domain DocumentRoot /var/www/your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>

Bemärk att vi uppdaterat DocumentRoot till vår nya katalog och ServerAdmin till ett e-postmeddelande som administratören för din_domän-webbplats kan komma åt. Vi har också lagt till två direktiv: ServerName, som fastställer den basdomän som ska matcha den här virtuella värddefinitionen, och ServerAlias, som definierar ytterligare namn som ska matcha som om de vore basnamnet.

Spara och stäng filen när du är klar.

Vi aktiverar filen med verktyget a2ensite:

  • sudo a2ensite your_domain.conf

Dekaktivera standardplatsen som definieras i 000-default.conf:

  • sudo a2dissite 000-default.conf

Nästan, låt oss testa om det finns konfigurationsfel:

  • sudo apache2ctl configtest

Du bör se följande utdata:

Output
Syntax OK

Starta om Apache för att genomföra ändringarna:

  • sudo systemctl restart apache2

Apache bör nu betjäna ditt domännamn. Du kan testa detta genom att navigera till http://your_domain, där du bör se något liknande:

Apache virtual host example

Med detta är din virtuella värd helt konfigurerad. Innan du gör fler ändringar eller distribuerar ett program kan det dock vara bra att proaktivt testa din PHP-konfiguration om det finns några problem som bör åtgärdas.

Steg 5 – Testa PHP-bearbetning på din webbserver

För att testa att ditt system är korrekt konfigurerat för PHP skapar du ett mycket enkelt PHP-skript som heter info.php. För att Apache ska kunna hitta filen och servera den korrekt måste den sparas i din webbradkatalog.

Skapa filen i webbraden som du skapade i föregående steg genom att köra:

  • sudo nano /var/www/your_domain/info.php

Detta kommer att öppna en tom fil. Lägg till följande text, som är giltig PHP-kod, i filen:

info.php
<?phpphpinfo();?>

När du är klar sparar och stänger du filen.

Nu kan du testa om webbservern kan visa det innehåll som genererats av det här PHP-skriptet korrekt. För att testa detta besöker du den här sidan i din webbläsare. Du behöver din servers offentliga IP-adress igen.

Adressen du vill besöka är:

http://your_domain/info.php

Sidan du kommer till ska se ut ungefär så här:

Ubuntu 18.04 default PHP info

Den här sidan ger dig lite grundläggande information om din server ur ett PHP-perspektiv. Den är användbar för felsökning och för att se till att dina inställningar tillämpas korrekt.

Om du kan se den här sidan i din webbläsare fungerar ditt PHP som förväntat.

Du vill förmodligen ta bort den här filen efter det här testet eftersom den faktiskt kan ge information om din server till obehöriga användare. För att göra detta kör du följande kommando:

  • sudo rm /var/www/your_domain/info.php

Du kan alltid återskapa den här sidan om du behöver komma åt informationen igen senare.

Slutsats

Nu när du har en LAMP-stack installerad har du många valmöjligheter för vad du ska göra härnäst. I princip har du installerat en plattform som gör att du kan installera de flesta typer av webbplatser och webbprogram på din server.

Som ett omedelbart nästa steg bör du se till att anslutningarna till din webbserver är säkrade, genom att servera dem via HTTPS. Det enklaste alternativet är att använda Let’s Encrypt för att säkra din webbplats med ett gratis TLS/SSL-certifikat.

Andra populära alternativ är:

  • Installera WordPress, det populäraste systemet för innehållshantering på internet.
  • Installera PHPMyAdmin så att du kan hantera dina MySQL-databaser från webbläsaren.
  • Lär dig hur du använder SFTP för att överföra filer till och från din server.