En tidligere version af denne vejledning blev skrevet af Brennan Bearnes.

Indledning

En “LAMP” stack er en gruppe af open source-software, der typisk installeres sammen for at gøre det muligt for en server at være vært for dynamiske websteder og webapplikationer. Udtrykket er faktisk et akronym, som repræsenterer Linux-operativsystemet med Apache-webserveren. Webstedets data gemmes i en MySQL-database, og dynamisk indhold behandles af PHP.

I denne vejledning installerer vi en LAMP-stack på en Ubuntu 18.04-server.

Forudsætninger

For at kunne gennemføre denne vejledning skal du have en Ubuntu 18.04-server med en ikke-root sudo-aktiveret brugerkonto og en grundlæggende firewall. Dette kan konfigureres ved hjælp af vores vejledning til første serveropsætning for Ubuntu 18.04.

Stræk 1 – Installation af Apache og opdatering af firewall

Apache-webserveren er blandt de mest populære webservere i verden. Den er veldokumenteret og har været i udbredt brug i en stor del af internettets historie, hvilket gør den til et godt standardvalg til hosting af et websted.

Installer Apache ved hjælp af Ubuntus pakkehåndtering, apt:

  • sudo apt update
  • sudo apt install apache2

Da dette er en sudo-kommando, udføres disse handlinger med root-privilegier. Den vil bede dig om din almindelige brugers adgangskode for at bekræfte dine hensigter.

Når du har indtastet din adgangskode, vil apt fortælle dig, hvilke pakker den planlægger at installere, og hvor meget ekstra diskplads de vil optage. Tryk på Y og tryk på ENTER for at fortsætte, hvorefter installationen fortsætter.

Justér firewallen til at tillade webtrafik

Næst skal du, hvis du har fulgt instruktionerne for den indledende serveropsætning og aktiveret UFW-firewallen, sørge for, at din firewall tillader HTTP- og HTTPS-trafik

Næst skal du sørge for, at din firewall tillader HTTP- og HTTPS-trafik. Du kan kontrollere, at UFW har en programprofil for Apache på følgende måde:

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

Hvis du kigger på Apache Full-profilen, bør den vise, at den tillader trafik til port 80 og 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

Godkend indgående HTTP- og HTTPS-trafik for denne profil:

  • sudo ufw allow in "Apache Full"

Du kan lave en stikprøvekontrol med det samme for at kontrollere, at alt gik som planlagt, ved at besøge din servers offentlige IP-adresse i din webbrowser (se noten under næste overskrift for at finde ud af, hvad din offentlige IP-adresse er, hvis du ikke allerede har disse oplysninger):

http://your_server_ip

Du vil se standard Ubuntu 18.04 Apache-webside, som er der til informations- og testformål. Den skal se nogenlunde sådan ud:

Ubuntu 18.04 Apache standard

Hvis du ser denne side, er din webserver nu korrekt installeret og tilgængelig gennem din firewall.

Sådan finder du din servers offentlige IP-adresse

Hvis du ikke ved, hvad din servers offentlige IP-adresse er, er der en række måder, du kan finde den på. Normalt er det den adresse, du bruger til at oprette forbindelse til din server via SSH.

Der er et par forskellige måder at gøre dette på fra kommandolinjen. For det første kan du bruge iproute2-værktøjerne til at få din IP-adresse ved at skrive dette:

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

Dette vil give dig to eller tre linjer tilbage. De er alle korrekte adresser, men din computer kan muligvis kun bruge en af dem, så du er velkommen til at prøve hver enkelt.

En alternativ metode er at bruge værktøjet curl til at kontakte en ekstern part, så den kan fortælle dig, hvordan den ser din server. Dette gøres ved at spørge en bestemt server, hvad din IP-adresse er:

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

Uanset hvilken metode du bruger til at få din IP-adresse, skal du skrive den i din webbrowsers adresselinje for at få vist standard Apache-siden.

Stræk 2 – Installation af MySQL

Nu, hvor du har din webserver oppe og køre, er det tid til at installere MySQL. MySQL er et databaseadministrationssystem. Grundlæggende vil det organisere og give adgang til databaser, hvor dit websted kan lagre oplysninger.

Vis skal igen bruge apt til at erhverve og installere denne software:

  • sudo apt install mysql-server

Bemærk: I dette tilfælde behøver du ikke at køre sudo apt update forud for kommandoen. Det skyldes, at du for nylig kørte den i ovenstående kommandoer for at installere Apache. Pakkeindekset på din computer bør allerede være opdateret.

Denne kommando vil også vise dig en liste over de pakker, der skal installeres, sammen med den mængde diskplads, de vil optage. Indtast Y for at fortsætte.

Når installationen er færdig, skal du køre et simpelt sikkerhedsscript, der er præinstalleret med MySQL, og som fjerner nogle farlige standardindstillinger og låser adgangen til dit databasesystem. Start det interaktive script ved at køre:

  • sudo mysql_secure_installation

Dette vil spørge, om du vil konfigurere VALIDATE PASSWORD PLUGIN.

Bemærk: Aktivering af denne funktion er noget af en vurderingssag. Hvis den er aktiveret, vil adgangskoder, der ikke passer til de angivne kriterier, blive afvist af MySQL med en fejl. Dette vil give problemer, hvis du bruger en svag adgangskode i forbindelse med software, som automatisk konfigurerer MySQL-brugeroplysninger, såsom Ubuntu-pakkerne til phpMyAdmin. Det er sikkert at lade valideringen være deaktiveret, men du bør altid bruge stærke, unikke adgangskoder til databaseoplysninger.

Svar Y for ja, eller noget andet for at fortsætte uden aktivering.

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:

Hvis du svarer “ja”, bliver du bedt om at vælge et niveau af adgangskodevalidering. Husk, at hvis du indtaster 2 for det stærkeste niveau, vil du modtage fejl, når du forsøger at indstille en adgangskode, som ikke indeholder tal, store og små bogstaver og specialtegn, eller som er baseret på almindelige ord fra ordbøger.

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

Uanset om du vælger at indstille VALIDATE PASSWORD PLUGIN, vil din server næste gang bede dig om at vælge og bekræfte en adgangskode til MySQL-rodbrugeren. Dette er en administrativ konto i MySQL, der har øgede privilegier. Tænk på den som svarende til selve serverens root-konto (selv om den, du konfigurerer nu, er en MySQL-specifik konto). Sørg for, at det er en stærk, unik adgangskode, og lad den ikke være tom.

Hvis du har aktiveret adgangskodevalidering, vises adgangskodestyrken for den rootadgangskode, du lige har indtastet, og din server spørger, om du vil ændre denne adgangskode. Hvis du er tilfreds med din nuværende adgangskode, skal du indtaste N for “nej” ved prompten:

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

For resten af spørgsmålene skal du trykke på Y og trykke på tasten ENTER ved hver prompt. Dette vil fjerne nogle anonyme brugere og testdatabasen, deaktivere eksterne root-logins og indlæse disse nye regler, så MySQL straks respekterer de ændringer, du har foretaget.

Bemærk, at i Ubuntu-systemer, der kører MySQL 5.7 (og nyere versioner), er root MySQL-brugeren som standard indstillet til at autentificere ved hjælp af auth_socket-pluginet i stedet for med en adgangskode. Dette giver en vis større sikkerhed og brugervenlighed i mange tilfælde, men det kan også komplicere tingene, når du skal tillade et eksternt program (f.eks. phpMyAdmin) at få adgang til brugeren.

Hvis du foretrækker at bruge en adgangskode, når du opretter forbindelse til MySQL som root, skal du skifte godkendelsesmetoden fra auth_socket til mysql_native_password. For at gøre dette skal du åbne MySQL-prompten fra din terminal:

  • sudo mysql

Næst skal du kontrollere, hvilken godkendelsesmetode hver af dine MySQL-brugerkonti bruger med følgende 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 dette eksempel kan du se, at root-brugeren rent faktisk godkendes ved hjælp af auth_socket-plugin. Hvis du vil konfigurere root-kontoen til at autentificere med en adgangskode, skal du køre følgende ALTER USER-kommando. Sørg for at ændre password til en stærk adgangskode efter eget valg:

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

Kør derefter FLUSH PRIVILEGES, som fortæller serveren, at den skal genindlæse grant-tabellerne og sætte dine nye ændringer i kraft:

  • FLUSH PRIVILEGES;

Kontroller igen de godkendelsesmetoder, der anvendes af hver af dine brugere, for at bekræfte, at root ikke længere godkender sig ved hjælp af auth_socket-plugin’et:

  • 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 dette eksempels output, at root MySQL-brugeren nu godkender sig ved hjælp af en adgangskode. Når du bekræfter dette på din egen server, kan du afslutte MySQL-shellen:

  • exit

På dette tidspunkt er dit databasesystem nu opsat, og du kan gå videre til at installere PHP, den sidste komponent i LAMP-stakken.

Stræk 3 – Installation af PHP

PHP er den komponent i din opsætning, der vil behandle kode til at vise dynamisk indhold. Den kan køre scripts, oprette forbindelse til dine MySQL-databaser for at få oplysninger og overdrage det behandlede indhold til din webserver til visning.

Nu skal du igen udnytte apt-systemet til at installere PHP. Medtag desuden nogle hjælpepakker denne gang, så PHP-koden kan køre under Apache-serveren og tale med din MySQL-database:

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

Dette burde installere PHP uden problemer. Vi tester dette om et øjeblik.

I de fleste tilfælde vil du ændre den måde, Apache serverer filer på, når der anmodes om en mappe. I øjeblikket vil Apache, hvis en bruger anmoder om en mappe fra serveren, først søge efter en fil, der hedder index.html. Vi ønsker at fortælle webserveren, at den skal foretrække PHP-filer frem for andre, så få Apache til at lede efter en index.php-fil først.

For at gøre dette skal du skrive denne kommando for at åbne dir.conf-filen i en teksteditor med root-rettigheder:

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

Den kommer til at se således ud:

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

Flyt PHP-indeksfilen (fremhævet ovenfor) til den første position efter DirectoryIndex-specifikationen, som følger:

/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 er færdig, skal du gemme og lukke filen ved at trykke på CTRL+X. Bekræft gemmer du ved at skrive Y og derefter trykke på ENTER for at bekræfte filens gemmeplacering.

Derpå skal du genstarte Apache-webserveren, for at dine ændringer kan blive genkendt. Gør dette ved at skrive dette:

  • sudo systemctl restart apache2

Du kan også kontrollere status for apache2-tjenesten ved hjælp af 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

Tryk på Q for at afslutte dette statusoutput.

For at forbedre funktionaliteten af PHP har du mulighed for at installere nogle ekstra moduler. Hvis du vil se de tilgængelige muligheder for PHP-moduler og -biblioteker, skal du pipe resultaterne af apt search ind i less, en personsøger, som giver dig mulighed for at rulle gennem output fra andre kommandoer:

  • apt search php- | less

Brug piletasterne til at rulle op og ned, og tryk på Q for at afslutte.

Resultaterne er alle valgfrie komponenter, som du kan installere. Du får en kort beskrivelse for hver enkelt:

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…:

For at få mere at vide om, hvad hvert modul gør, kan du søge på internettet efter flere oplysninger om dem. Alternativt kan du se den lange beskrivelse af pakken ved at skrive:

  • apt show package_name

Der vil være en masse output, med et felt kaldet Description, som vil have en længere forklaring af den funktionalitet, som modulet giver.

For eksempel, for at finde ud af hvad modulet php-cli gør, kan du skrive dette:

  • apt show php-cli

Sammen med en stor mængde andre oplysninger vil du finde noget, der ligner dette:

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).…

Hvis du efter at have undersøgt, beslutter dig for at du gerne vil installere en pakke, kan du gøre det ved at bruge kommandoen apt install, ligesom du har gjort for den anden software.

Hvis du beslutter dig for, at php-cli er noget, du har brug for, kan du skrive:

  • sudo apt install php-cli

Hvis du ønsker at installere mere end ét modul, kan du gøre det ved at opregne hvert enkelt modul, adskilt af et mellemrum, efter kommandoen apt install, som her:

  • sudo apt install package1 package2 ...

På dette tidspunkt er din LAMP-stack installeret og konfigureret. Før du gør noget andet, anbefaler vi, at du opretter en virtuel Apache-vært, hvor du kan gemme din servers konfigurationsoplysninger.

Stræk 4 – Opsætning af virtuelle værter (anbefalet)

Når du bruger Apache-webserveren, kan du bruge virtuelle værter (svarende til serverblokke i Nginx) til at indkapsle konfigurationsdetaljer og hoste mere end ét domæne fra en enkelt server. Vi vil oprette et domæne kaldet your_domain, men du bør erstatte dette med dit eget domænenavn. Hvis du vil vide mere om opsætning af et domænenavn med DigitalOcean, kan du se vores Introduktion til DigitalOcean DNS.

Apache på Ubuntu 18.04 har én serverblok aktiveret som standard, som er konfigureret til at servere dokumenter fra mappen /var/www/html. Mens dette fungerer godt for et enkelt websted, kan det blive uoverskueligt, hvis du er vært for flere websteder. I stedet for at ændre /var/www/html kan vi oprette en mappestruktur inden for /var/www for vores dit_domæne-websted og lade /var/www/html forblive på plads som standardmappe, der skal serveres, hvis en klientforespørgsel ikke matcher andre websteder.

Opret mappen til dit_domæne på følgende måde:

sudo mkdir /var/www/your_domain

Tildel derefter ejerskab til mappen med miljøvariablen $USER:

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

Rettighederne for dine webrødder bør være korrekte, hvis du ikke har ændret din unmask-værdi, men du kan sikre dig ved at skrive:

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

Næst skal du oprette en index.html eksempelside ved hjælp af nano eller din foretrukne editor:

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

Indvendigt skal du tilføje følgende eksempel-HTML:

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

Spar og luk filen, når du er færdig.

For at Apache kan servere dette indhold, er det nødvendigt at oprette en virtual host-fil med de korrekte direktiver. I stedet for at ændre standardkonfigurationsfilen, der ligger på /etc/apache2/sites-available/000-default.conf direkte, skal vi lave en ny fil på /etc/apache2/sites-available/your_domain.conf:

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

Indsæt følgende konfigurationsblok, som ligner standardkonfigurationen, men som er opdateret til vores nye mappe og domænenavn:

/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, at vi har opdateret DocumentRoot til vores nye mappe og ServerAdmin til en e-mail, som administratoren af dit_domænes websted kan få adgang til. Vi har også tilføjet to direktiver: ServerName, som fastlægger det basisdomæne, der skal matche for denne virtuelle værtsdefinition, og ServerAlias, som definerer yderligere navne, der skal matche, som om de var basisnavnet.

Spar og luk filen, når du er færdig.

Lad os aktivere filen med værktøjet a2ensite:

  • sudo a2ensite your_domain.conf

Desaktiver det standardsted, der er defineret i 000-default.conf:

  • sudo a2dissite 000-default.conf

Næste trin: Lad os teste for konfigurationsfejl:

  • sudo apache2ctl configtest

Du bør se følgende output:

Output
Syntax OK

Start Apache igen for at implementere dine ændringer:

  • sudo systemctl restart apache2

Apache bør nu betjene dit domænenavn. Du kan teste dette ved at navigere til http://your_domain, hvor du bør se noget i stil med dette:

Apache virtual host example

Derved er din virtuelle vært fuldt konfigureret. Inden du foretager flere ændringer eller udruller et program, vil det dog være nyttigt at teste din PHP-konfiguration proaktivt, hvis der er problemer, der skal løses.

Stræk 5 – Test af PHP-behandling på din webserver

For at teste, at dit system er konfigureret korrekt til PHP, skal du oprette et meget grundlæggende PHP-script kaldet info.php. For at Apache kan finde denne fil og servere den korrekt, skal den gemmes i din webstammappe.

Opret filen i den webstammappe, du oprettede i det foregående trin, ved at køre:

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

Dette vil åbne en tom fil. Tilføj følgende tekst, som er gyldig PHP-kode, inde i filen:

info.php
<?phpphpinfo();?>

Når du er færdig, skal du gemme og lukke filen.

Nu kan du teste, om din webserver er i stand til at vise det indhold, der er genereret af dette PHP-script, korrekt. For at afprøve dette skal du besøge denne side i din webbrowser. Du skal igen bruge din servers offentlige IP-adresse.

Den adresse, du skal besøge, er:

http://your_domain/info.php

Den side, du kommer til, skal se nogenlunde sådan ud:

Ubuntu 18.04 standard PHP info

Denne side giver nogle grundlæggende oplysninger om din server set fra PHP’s synspunkt. Den er nyttig til fejlfinding og til at sikre, at dine indstillinger anvendes korrekt.

Hvis du kan se denne side i din browser, fungerer din PHP som forventet.

Du vil sandsynligvis fjerne denne fil efter denne test, da den faktisk kan give oplysninger om din server til uautoriserede brugere. Du kan gøre dette ved at køre følgende kommando:

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

Du kan altid genskabe denne side, hvis du har brug for at få adgang til oplysningerne igen senere.

Slutning

Nu har du en LAMP-stack installeret, og du har mange valgmuligheder for, hvad du skal gøre nu. Dybest set har du installeret en platform, der gør det muligt for dig at installere de fleste former for websteder og web-software på din server.

Som et umiddelbart næste skridt bør du sikre, at forbindelserne til din webserver er sikrede, ved at betjene dem via HTTPS. Den nemmeste mulighed her er at bruge Let’s Encrypt til at sikre dit websted med et gratis TLS/SSL-certifikat.

Nogle andre populære muligheder er:

  • Installer WordPress det mest populære indholdsstyringssystem på internettet.
  • Opsæt PHPMyAdmin til at hjælpe med at administrere dine MySQL-databaser fra webbrowseren.
  • Lær at bruge SFTP til at overføre filer til og fra din server.