Een eerdere versie van deze tutorial is geschreven door Brennan Bearnes.

Inleiding

Een “LAMP”-stapel is een groep open-sourcesoftware die doorgaans samen wordt geïnstalleerd om een server in staat te stellen dynamische websites en webapps te hosten. Deze term is eigenlijk een acroniem dat staat voor het Linux-besturingssysteem, met de Apache-webserver. De site gegevens worden opgeslagen in een MySQL database, en dynamische inhoud wordt verwerkt door PHP.

In deze gids, zullen we een LAMP stack installeren op een Ubuntu 18.04 server.

Voorvereisten

Om deze tutorial te voltooien, moet u een Ubuntu 18.04 server hebben met een niet-root sudo-geschikte gebruikersaccount en een basis firewall. Dit kan worden geconfigureerd met behulp van onze initiële server setup gids voor Ubuntu 18.04.

Stap 1 – Apache installeren en de firewall updaten

De Apache webserver is een van de meest populaire webservers ter wereld. Hij is goed gedocumenteerd en wordt al een groot deel van de geschiedenis van het web gebruikt, waardoor het een goede standaard keuze is voor het hosten van een website.

Installeer Apache met Ubuntu’s package manager, apt:

  • sudo apt update
  • sudo apt install apache2

Omdat dit een sudo commando is, worden deze operaties uitgevoerd met root privileges. Het zal u vragen om het wachtwoord van uw gewone gebruiker om uw bedoelingen te verifiëren.

Als u uw wachtwoord heeft ingevoerd, zal apt u vertellen welke pakketten het van plan is te installeren en hoeveel extra schijfruimte ze in beslag zullen nemen. Druk op Y en druk op ENTER om door te gaan, en de installatie zal doorgaan.

Stel de firewall in om webverkeer toe te staan

Volgende, ervan uitgaande dat u de initiële server setup instructies heeft opgevolgd en de UFW firewall heeft ingeschakeld, zorg ervoor dat uw firewall HTTP en HTTPS verkeer toestaat. U kunt controleren of UFW een applicatie profiel heeft voor Apache zoals dit:

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

Als u kijkt naar het Apache Full profiel, zou het moeten laten zien dat het verkeer naar poorten 80 en 443 toestaat:

  • 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

Toelaat inkomend HTTP en HTTPS verkeer voor dit profiel:

  • sudo ufw allow in "Apache Full"

U kunt meteen een steekproef doen om te controleren of alles volgens plan is verlopen door het openbare IP-adres van uw server in uw webbrowser te bezoeken (zie de opmerking onder het volgende kopje om uit te vinden wat uw openbare IP-adres is als u deze informatie nog niet hebt):

http://your_server_ip

U zult de standaard Ubuntu 18.04 Apache webpagina, die er is voor informatieve en testdoeleinden. Het zou er ongeveer zo uit moeten zien:

Ubuntu 18.04 Apache standaard

Als u deze pagina ziet, dan is uw webserver nu correct geïnstalleerd en toegankelijk via uw firewall.

Hoe vindt u het openbare IP-adres van uw server

Als u niet weet wat het openbare IP-adres van uw server is, zijn er een aantal manieren waarop u dit kunt vinden. Gewoonlijk is dit het adres dat u gebruikt om via SSH verbinding te maken met uw server.

Er zijn een paar verschillende manieren om dit vanaf de commandoregel te doen. Ten eerste kunt u de iproute2 tools gebruiken om uw IP adres te achterhalen door het volgende te typen:

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

Dit zal u twee of drie regels teruggeven. Het zijn allemaal correcte adressen, maar uw computer kan er misschien maar één van gebruiken, dus probeer ze gerust allemaal uit.

Een alternatieve methode is om met het hulpprogramma curl contact op te nemen met een externe partij om u te vertellen hoe deze uw server ziet. Dit wordt gedaan door een specifieke server te vragen wat uw IP-adres is:

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

Of u uw IP-adres ook verkrijgt, typ het in de adresbalk van uw webbrowser om de standaard Apache-pagina te bekijken.

Stap 2 – MySQL installeren

Nu u uw webserver aan de praat hebt, is het tijd om MySQL te installeren. MySQL is een database management systeem. In principe zal het databases organiseren en toegankelijk maken waarin uw site informatie kan opslaan.

Gebruik opnieuw apt om deze software te verkrijgen en te installeren:

  • sudo apt install mysql-server

Note: In dit geval hoeft u sudo apt update niet uit te voeren voorafgaand aan het commando. Dit is omdat u het onlangs in de bovenstaande commando’s hebt uitgevoerd om Apache te installeren. De pakketindex op uw computer zou al up-to-date moeten zijn.

Ook deze opdracht toont u een lijst met de pakketten die zullen worden geïnstalleerd, samen met de hoeveelheid schijfruimte die ze in beslag zullen nemen. Voer Y in om door te gaan.

Wanneer de installatie is voltooid, voert u een eenvoudig beveiligingsscript uit dat vooraf met MySQL is geïnstalleerd en dat een aantal gevaarlijke standaardinstellingen zal verwijderen en de toegang tot uw databasesysteem zal vergrendelen. Start het interactieve script door te draaien:

  • sudo mysql_secure_installation

Dit zal vragen of u de VALIDATE PASSWORD PLUGIN wilt configureren.

Note: Het inschakelen van deze eigenschap is iets van een oordeel. Indien ingeschakeld, zullen wachtwoorden die niet voldoen aan de opgegeven criteria door MySQL worden afgewezen met een foutmelding. Dit zal problemen veroorzaken als u een zwak wachtwoord gebruikt in combinatie met software die automatisch MySQL gebruikersgegevens configureert, zoals de Ubuntu pakketten voor phpMyAdmin. Het is veilig om de validatie uitgeschakeld te laten, maar u moet altijd sterke, unieke wachtwoorden gebruiken voor databasereferenties.

Antwoord Y voor ja, of iets anders om door te gaan zonder de validatie in te schakelen.

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:

Als u “ja” antwoordt, wordt u gevraagd om een niveau van wachtwoordvalidatie te selecteren. Houd in gedachten dat als u 2 voor het sterkste niveau invoert, u fouten zult krijgen bij pogingen om een wachtwoord in te stellen dat geen cijfers, hoofdletters en kleine letters, en speciale tekens bevat, of dat is gebaseerd op veelvoorkomende woorden uit het woordenboek.

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

Of u er nu voor kiest om de VALIDATE PASSWORD PLUGIN in te stellen, uw server zal u vervolgens vragen om een wachtwoord voor de MySQL root-gebruiker te selecteren en te bevestigen. Dit is een administratieve account in MySQL die verhoogde rechten heeft. Zie het als vergelijkbaar met het root-account voor de server zelf (hoewel degene die je nu configureert een MySQL-specifiek account is). Zorg ervoor dat dit een sterk, uniek wachtwoord is, en laat het niet leeg.

Als u wachtwoordvalidatie heeft ingeschakeld, dan wordt de wachtwoordsterkte getoond voor het root-wachtwoord dat u zojuist heeft ingevoerd en uw server zal vragen of u dat wachtwoord wilt wijzigen. Als u tevreden bent met uw huidige wachtwoord, voert u N in voor “nee” op de prompt:

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

Voor de rest van de vragen, drukt u op Y en drukt u op de ENTER toets bij elke prompt. Dit zal sommige anonieme gebruikers en de test database verwijderen, remote root logins uitschakelen, en deze nieuwe regels laden zodat MySQL onmiddellijk de wijzigingen respecteert die u hebt gemaakt.

Noteer dat in Ubuntu systemen die MySQL 5.7 (en latere versies) draaien, de root MySQL gebruiker standaard is ingesteld om te authenticeren met de auth_socket plugin in plaats van met een wachtwoord. Dit zorgt voor wat meer veiligheid en bruikbaarheid in veel gevallen, maar het kan ook dingen compliceren wanneer u een extern programma (bijv. phpMyAdmin) toegang moet geven tot de gebruiker.

Als u liever een wachtwoord gebruikt wanneer u verbinding maakt met MySQL als root, moet u de authenticatie methode veranderen van auth_socket naar mysql_native_password. Om dit te doen, opent u de MySQL prompt vanaf uw terminal:

  • sudo mysql

Volgende, controleer welke authenticatie methode elk van uw MySQL gebruikersaccounts gebruikt met het volgende commando:

  • 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)

In dit voorbeeld kunt u zien dat de root-gebruiker in feite authenticeert met de auth_socket plugin. Om de root-account in te stellen om te authenticeren met een wachtwoord, voert u het volgende ALTER USER commando uit. Zorg ervoor dat u password verandert in een sterk wachtwoord naar keuze:

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

Draai vervolgens FLUSH PRIVILEGES dat de server vertelt om de toekennings tabellen opnieuw te laden en uw nieuwe veranderingen in werking te stellen:

  • FLUSH PRIVILEGES;

Controleer de authenticatie methoden van alle gebruikers om te bevestigen dat root niet langer de auth_socket plugin gebruikt:

  • 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)

U kunt in dit voorbeeld zien dat de root MySQL gebruiker zich nu authentiseert met een wachtwoord. Zodra u dit op uw eigen server heeft bevestigd, kunt u de MySQL shell afsluiten:

  • exit

Op dit punt is uw database systeem nu opgezet en kunt u verder gaan met het installeren van PHP, het laatste onderdeel van de LAMP stack.

Stap 3 – PHP installeren

PHP is het onderdeel van uw installatie dat code zal verwerken om dynamische inhoud weer te geven. Het kan scripts uitvoeren, verbinding maken met uw MySQL databases om informatie te krijgen, en de verwerkte inhoud overdragen aan uw webserver om weer te geven.

Nogmaals, maak gebruik van het apt systeem om PHP te installeren. Voeg deze keer enkele helper packages toe zodat de PHP code onder de Apache server kan draaien en met uw MySQL database kan praten:

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

Dit zou PHP zonder problemen moeten installeren. We zullen dit zo meteen testen.

In de meeste gevallen zult u de manier waarop Apache bestanden serveert als een directory wordt opgevraagd, willen wijzigen. Momenteel, als een gebruiker een directory aanvraagt van de server, zal Apache eerst zoeken naar een bestand met de naam index.html. We willen de webserver vertellen dat hij de voorkeur geeft aan PHP-bestanden boven andere, dus laten we Apache eerst naar een index.php-bestand zoeken.

Om dit te doen, typt u dit commando om het dir.conf-bestand te openen in een teksteditor met root-privileges:

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

Het zal er als volgt uitzien:

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

Verplaats het PHP index bestand (hierboven gemarkeerd) naar de eerste positie na de DirectoryIndex specificatie, als volgt:

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

Wanneer u klaar bent, slaat u het bestand op en sluit u het door op CTRL+X te drukken. Bevestig het opslaan door Y te typen en druk dan op ENTER om de opslaglocatie van het bestand te verifiëren.

Na dit, herstart u de Apache webserver om uw wijzigingen te laten herkennen. Doe dit door dit te typen:

  • sudo systemctl restart apache2

U kunt ook de status van de apache2 service controleren met 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

Druk op Q om deze status output af te sluiten.

Om de functionaliteit van PHP te verbeteren, heeft u de mogelijkheid om een aantal extra modules te installeren. Om de beschikbare opties voor PHP modules en bibliotheken te zien, stuurt u de resultaten van apt search naar less, een pager waarmee u door de uitvoer van andere commando’s kunt bladeren:

  • apt search php- | less

Gebruik de pijltjestoetsen om op en neer te scrollen, en druk op Q om te stoppen.

De resultaten zijn alle optionele componenten die u kunt installeren. Het geeft u een korte beschrijving voor elk:

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

Om meer te weten te komen over wat elke module doet, zou u op het internet kunnen zoeken naar meer informatie over hen. U kunt ook naar de lange beschrijving van het pakket kijken door te typen:

  • apt show package_name

Er zal veel uitvoer zijn, met één veld genaamd Description dat een langere uitleg zal hebben over de functionaliteit die de module biedt.

Om bijvoorbeeld te weten te komen wat de module php-cli doet, zou u het volgende kunnen typen:

  • apt show php-cli

Met een grote hoeveelheid andere informatie, zult u iets vinden dat er als volgt uitziet:

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

Als u na onderzoek besluit dat u een package wilt installeren, kunt u dat doen door het commando apt install te gebruiken, zoals u dat ook voor de andere software hebt gedaan.

Als u hebt besloten dat php-cli iets is dat u nodig hebt, kunt u typen:

  • sudo apt install php-cli

Als u meer dan één module wilt installeren, kunt u dat doen door ze allemaal op te sommen, gescheiden door een spatie, na het apt install commando, zoals dit:

  • sudo apt install package1 package2 ...

Op dit punt is uw LAMP stack geïnstalleerd en geconfigureerd. Voordat u iets anders doet, raden wij u aan een Apache virtuele host op te zetten waar u de configuratiedetails van uw server kunt opslaan.

Stap 4 – Virtuele hosts instellen (aanbevolen)

Wanneer u de Apache webserver gebruikt, kunt u virtuele hosts gebruiken (vergelijkbaar met serverblokken in Nginx) om configuratiedetails in te kapselen en meer dan één domein vanaf een enkele server te hosten. We zullen een domein opzetten met de naam uw_domein, maar u zou dit moeten vervangen door uw eigen domeinnaam. Voor meer informatie over het instellen van een domeinnaam bij DigitalOcean, zie onze Inleiding tot DigitalOcean DNS.

Apache op Ubuntu 18.04 heeft standaard één serverblok ingeschakeld dat is geconfigureerd om documenten uit de /var/www/html-directory te serveren. Hoewel dit goed werkt voor een enkele site, kan het onhandelbaar worden als je meerdere sites host. In plaats van /var/www/html aan te passen, maken we een directory-structuur binnen /var/www voor onze your_domain site, en laten we /var/www/html op zijn plaats als de standaard directory die wordt geserveerd als een client-aanvraag niet overeenkomt met andere sites.

Maak de directory voor uw_domein als volgt aan:

sudo mkdir /var/www/your_domain

Naar aanleiding hiervan wijst u het eigendom van de directory toe met de omgevingsvariabele $USER:

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

De rechten van uw webwortels zouden correct moeten zijn als u uw unmask waarde niet hebt gewijzigd, maar u kunt er zeker van zijn door te typen:

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

Maak vervolgens een voorbeeld index.html pagina met nano of uw favoriete editor:

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

Binnenin, voeg de volgende voorbeeld HTML:

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

Bewaar en sluit het bestand als u klaar bent.

Om Apache deze inhoud te laten serveren, is het nodig om een virtual host bestand te maken met de juiste directives. In plaats van het standaard configuratiebestand op /etc/apache2/sites-available/000-default.conf direct aan te passen, maken we een nieuw bestand op /etc/apache2/sites-available/your_domain.conf:

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

Plak het volgende configuratieblok erin, dat lijkt op de standaard, maar dan bijgewerkt voor onze nieuwe directory en domeinnaam:

/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>

Merk op dat we de DocumentRoot hebben bijgewerkt naar onze nieuwe directory en ServerAdmin naar een e-mail die de your_domain site beheerder kan benaderen. We hebben ook twee directives toegevoegd: ServerName, die het basisdomein vastlegt dat moet overeenkomen voor deze virtuele host-definitie, en ServerAlias, die verdere namen definieert die moeten overeenkomen alsof ze de basisnaam zijn.

Bewaar en sluit het bestand als u klaar bent.

Laten we het bestand inschakelen met het a2ensite gereedschap:

  • sudo a2ensite your_domain.conf

Disable the default site defined in 000-default.conf:

  • sudo a2dissite 000-default.conf

Next, laten we testen op configuratie fouten:

  • sudo apache2ctl configtest

U zou de volgende uitvoer moeten zien:

Output
Syntax OK

Herstart Apache om uw wijzigingen door te voeren:

  • sudo systemctl restart apache2

Apache zou nu uw domeinnaam moeten serveren. U kunt dit testen door naar http://your_domain te navigeren, waar u iets als dit zou moeten zien:

Apache virtual host voorbeeld

Met dat is uw virtuele host volledig ingesteld. Voordat u echter nog meer wijzigingen aanbrengt of een toepassing implementeert, is het handig om uw PHP-configuratie proactief te testen voor het geval er problemen zijn die moeten worden aangepakt.

Stap 5 – PHP-verwerking testen op uw webserver

Om te testen of uw systeem goed is geconfigureerd voor PHP, maakt u een heel basaal PHP-script met de naam info.php. Opdat Apache dit bestand zou vinden en correct serveren, moet het worden opgeslagen in uw web root directory.

Creëer het bestand in de web root die u in de vorige stap aanmaakte door te draaien:

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

Dit zal een blanco bestand openen. Voeg de volgende tekst, die geldige PHP-code is, toe aan het bestand:

info.php
<?phpphpinfo();?>

Wanneer u klaar bent, slaat u het bestand op en sluit u het.

Nu kunt u testen of uw webserver in staat is om inhoud die door dit PHP-script is gegenereerd, correct weer te geven. Om dit uit te proberen, bezoekt u deze pagina in uw webbrowser. U hebt opnieuw het openbare IP-adres van uw server nodig.

Het adres dat u wilt bezoeken is:

http://your_domain/info.php

De pagina waarop u terechtkomt, zou er ongeveer zo uit moeten zien:

Ubuntu 18.04 default PHP info

Deze pagina biedt wat basisinformatie over uw server vanuit het perspectief van PHP. Het is handig voor debugging en om te controleren of uw instellingen correct worden toegepast.

Als u deze pagina in uw browser kunt zien, werkt uw PHP zoals verwacht.

U wilt dit bestand na deze test waarschijnlijk verwijderen, omdat het informatie over uw server aan onbevoegde gebruikers zou kunnen geven. Om dit te doen, voert u het volgende commando uit:

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

U kunt deze pagina altijd opnieuw maken als u de informatie later weer nodig hebt.

Conclusie

Nu u een LAMP stack hebt geïnstalleerd, hebt u veel keuzes voor wat u nu gaat doen. In principe hebt u een platform geïnstalleerd waarmee u de meeste soorten websites en websoftware op uw server kunt installeren.

Als een onmiddellijke volgende stap moet u ervoor zorgen dat de verbindingen naar uw webserver beveiligd zijn, door ze via HTTPS te serveren. De eenvoudigste optie hier is om Let’s Encrypt te gebruiken om uw site te beveiligen met een gratis TLS/SSL certificaat.

Enkele andere populaire opties zijn:

  • Installeer WordPress het meest populaire content management systeem op het internet.
  • Stel PHPMyAdmin in om uw MySQL databases te beheren vanuit uw web browser.
  • Leer hoe u SFTP kunt gebruiken om bestanden van en naar uw server over te brengen.