LAMP-stack installeren op Debian 13 en Debian 12: Apache2, PHP 8, MariaDB en phpMyAdmin

Gepubliceerd op Bijgewerkt op 7 min leestijd

Apache2, PHP 8, MariaDB en phpMyAdmin op Debian 13 of Debian 12: de volledige installatie stap voor stap, inclusief beveiliging en foutoplossing.

Wilt u Apache2, PHP 8, een MySQL-database en phpMyAdmin, oftewel een complete LAMP-stack, op uw Debian 13 (Trixie) of Debian 12 (Bookworm) server installeren? Deze handleiding neemt u stap voor stap mee door de volledige installatie, van de webserver tot een beveiligde databasetoegang.

Belangrijk over de databaseserver: Debian bevat geen pakket mysql-server, in geen enkele actuele versie. Op Debian installeert u altijd MariaDB. MariaDB is voortgekomen uit MySQL, spreekt hetzelfde protocol en dezelfde querytaal, en tools zoals phpMyAdmin of de PHP-extensie php-mysql werken er ongewijzigd mee. Waar deze handleiding over MySQL-databases spreekt, draait er dus MariaDB onder.

Vereisten

U hebt SSH-toegang met rootrechten nodig (of een gebruiker met sudo-rechten) op een actuele Debian. Aanbevolen worden Debian 13 "Trixie" en Debian 12 "Bookworm". Debian 10 heeft in juni 2024 het einde van de ondersteuning bereikt en krijgt geen reguliere beveiligingsupdates meer, waardoor het niet langer geschikt is voor productiegebruik.

Werk eerst de pakketlijst bij en installeer de beschikbare updates:

apt update

apt upgrade -y

Apache2 en de basispakketten installeren

Installeer de webserver samen met de hulppakketten die u in de volgende stappen nodig hebt:

apt install -y nano curl wget unzip ca-certificates apt-transport-https lsb-release gnupg apache2

Open daarna in de browser http://<uw-server-IP>/. Verschijnt de standaardpagina van Apache2, dan draait de webserver al.

PHP 8 installeren

Welke PHP-versie u uit de pakketbronnen krijgt, hangt af van uw distributie. Daarom mislukt een commando met een vast versienummer zoals apt install php8.4 op Debian 12, want daar is alleen PHP 8.2 beschikbaar. Dit overzicht toont de versie die per uitgave wordt meegeleverd (stand juli 2026):

DistributiePHP-versie uit de pakketbronnen
Debian 13PHP 8.4
Debian 12PHP 8.2
Debian 11PHP 7.4

Gebruik daarom de metapakketten zonder versienummer. Die halen automatisch de passende versie voor uw distributie binnen en werken op elke Debian hetzelfde:

apt install -y php php-cli php-common php-curl php-gd php-intl php-mbstring php-mysql php-opcache php-readline php-xml php-zip php-bz2 libapache2-mod-php

Wilt u PHP via FPM draaien in plaats van via de Apache-module, dan geldt hetzelfde principe. Ook hier brengt het metapakket u betrouwbaar op de plaats van bestemming, terwijl versiegebonden namen zoals php8.4-fpm alleen op Debian 13 bestaan:

apt install -y php-fpm

Welke versie daadwerkelijk is geïnstalleerd, ziet u met:

php -v

Hebt u een versie nodig die uw Debian-uitgave niet meelevert (bijvoorbeeld PHP 8.4 op Debian 12), voeg dan de PHP-repository van Ondřej Surý toe. De ondertekeningssleutel wordt daarbij via een eigen keyring-pakket geïnstalleerd en in de sources-regel met signed-by= precies aan deze repository gekoppeld:

curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb

dpkg -i /tmp/debsuryorg-archive-keyring.deb

echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list

apt update

De vroeger gangbare route via apt-key add is sinds Debian 11 afgeschaft en kunt u beter niet meer gebruiken, omdat een zo opgeslagen sleutel voor alle pakketbronnen van het systeem geldig zou zijn.

Pas via deze pakketbron zijn de versiegebonden pakketnamen voor alle Debian-uitgaven beschikbaar. Daarna installeert u de gewenste PHP-versie samen met de gebruikelijke extensies:

apt install -y php8.4 php8.4-cli php8.4-common php8.4-curl php8.4-gd php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline php8.4-xml php8.4-zip php8.4-bz2 libapache2-mod-php8.4

Draaien er daarna meerdere PHP-versies naast elkaar, leg dan vast welke Apache2 moet gebruiken:

a2dismod php8.2

a2enmod php8.4

systemctl restart apache2

Met php -v controleert u welke versie op de commandoregel actief is.

MariaDB als databaseserver installeren en beveiligen

Zoals aan het begin al genoemd, bestaat er onder Debian geen mysql-server-pakket. De databaseserver heet hier MariaDB, en welke uitgave u krijgt, hangt af van uw Debian-versie:

DistributieDatabaseserver uit de pakketbronnen
Debian 13MariaDB 11.8
Debian 12MariaDB 10.11
Debian 11MariaDB 10.5

Installeer de server en start direct daarna de beveiliging:

apt install -y mariadb-server mariadb-client

mysql_secure_installation

Het script stelt meerdere vragen. Actuele MariaDB-versies vragen eerst of er op unix_socket-authenticatie moet worden overgeschakeld. Die optie is zinvol, omdat de databasegebruiker root zich dan alleen nog als systeemgebruiker root kan aanmelden. Alle overige vragen (anonieme gebruikers verwijderen, remote login voor root verbieden, testdatabase verwijderen, rechten opnieuw laden) beantwoordt u telkens met y. Stel bovendien een sterk databasewachtwoord in.

Controleer daarna of de service draait:

systemctl status mariadb

phpMyAdmin installeren

Voor phpMyAdmin hebt u twee mogelijkheden. Het pakket phpmyadmin zit in alle actuele Debian-versies in de pakketbronnen en laat zich in één stap installeren:

apt install phpmyadmin -y

Handig, maar de versie loopt vaak achter op de stand van de ontwikkelaars. Wie de meest actuele uitgave wil, downloadt phpMyAdmin in plaats daarvan rechtstreeks. Precies die route beschrijven de volgende stappen:

cd /usr/share && wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip && unzip phpmyadmin.zip && rm phpmyadmin.zip && mv phpMyAdmin-*-all-languages phpmyadmin && chmod -R 0755 phpmyadmin

Maak vervolgens het configuratiebestand aan:

cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

phpMyAdmin heeft een willekeurige waarde als blowfish_secret nodig, waarmee de sessiegegevens in de cookie worden versleuteld. Genereer zo'n waarde:

openssl rand -base64 32

Voer die daarna in het configuratiebestand in:

nano /usr/share/phpmyadmin/config.inc.php

De betreffende regel luidt:

$cfg['blowfish_secret'] = 'VUL_HIER_DE_GEGENEREERDE_WAARDE_IN';

phpMyAdmin aan Apache2 koppelen

Maak een eigen Apache2-configuratiebestand voor phpMyAdmin aan:

nano /etc/apache2/conf-available/phpmyadmin.conf

De inhoud voor phpmyadmin.conf:

#PHPMyAdmin-Apache2-configuratie

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
</Directory>

<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>

Activeer de configuratie, laad Apache2 opnieuw en maak de tijdelijke map met de juiste rechten aan:

a2enconf phpmyadmin && systemctl reload apache2 && mkdir -p /usr/share/phpmyadmin/tmp/ && chown -R www-data:www-data /usr/share/phpmyadmin/tmp/

Databasegebruiker aanmaken

Meld u als systeemgebruiker root aan bij de database:

mysql -u root

Maak nu een eigen databasegebruiker aan. Gebruik daarbij niet "root", "admin", "user" of "username" als naam, maar een eigen gebruikersnaam en een lang, willekeurig wachtwoord:

#BELANGRIJK! VERVANG USER EN PASSWORD DOOR UW EIGEN INLOGGEGEVENS.

CREATE USER 'USER'@'localhost' IDENTIFIED BY 'PASSWORD';

GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Voor afzonderlijke applicaties kunt u daarnaast beter gebruikers met beperkte rechten aanmaken, die alleen toegang hebben tot hun eigen database:

CREATE DATABASE mijnapp;

CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'PASSWORD';

GRANT ALL PRIVILEGES ON mijnapp.* TO 'appuser'@'localhost';

FLUSH PRIVILEGES;

De databaseconsole verlaat u op elk moment met:

exit

De LAMP-stack testen

Open phpMyAdmin via http://<uw-server-IP>/phpmyadmin en meld u aan met de zojuist aangemaakte gebruiker. Lukt het inloggen, dan werken Apache2, PHP en MariaDB correct samen.

De PHP-koppeling controleert u aanvullend met een kort testbestand:

echo "<?php phpinfo();" > /var/www/html/info.php

Verwijder het bestand na het openen van http://<uw-server-IP>/info.php beslist weer, want het verraadt details over uw serverconfiguratie:

rm /var/www/html/info.php

Beveiligingstips voor productiegebruik

Een net geïnstalleerde LAMP-stack is nog niet beveiligd. Deze punten zou u moeten aanvullen:

  • phpMyAdmin is een geliefd aanvalsdoel. Beperk de toegang tot uw eigen IP-adres door in het Directory-blok Require ip 203.0.113.10 te gebruiken in plaats van de open vrijgave.
  • Richt HTTPS in, zodat wachtwoorden niet in platte tekst worden verstuurd. Zonder versleuteling zijn uw inloggegevens onderweg naar de server mee te lezen.
  • Houd phpMyAdmin actueel. Omdat u het handmatig hebt geïnstalleerd, werkt apt upgrade het niet automatisch bij.
  • Maak regelmatig back-ups van uw databases en bewaar die buiten de server.

Veelvoorkomende fouten en oplossingen

De browser downloadt het PHP-bestand in plaats van het uit te voeren: De PHP-module is niet actief in Apache2. Activeer die met a2enmod php8.4 en herstart de webserver met systemctl restart apache2.

phpMyAdmin meldt "The configuration file now needs a secret passphrase": In config.inc.php ontbreekt de waarde voor blowfish_secret. Genereer die met openssl rand -base64 32 en vul die in.

"Access denied for user" bij het inloggen in phpMyAdmin: De databasegebruiker root gebruikt na mysql_secure_installation in de regel de unix_socket-authenticatie en kan zich daarom niet via de webinterface aanmelden. Gebruik de aanvullend aangemaakte gebruiker.

Apache2 start na een configuratiewijziging niet meer: Controleer de configuratie met apachectl configtest, de uitvoer noemt bestand en regel van de fout.

Veelgestelde vragen

Waarom installeert Debian MariaDB in plaats van MySQL?
Debian bevat in geen enkele actuele versie een pakket met de naam mysql-server. De meegeleverde databaseserver is MariaDB, een uit MySQL voortgekomen server met hetzelfde protocol en dezelfde querytaal. Debian 13 levert MariaDB 11.8, Debian 12 versie 10.11 en Debian 11 versie 10.5.
Welke PHP-versie levert Debian mee?
Debian 13 brengt PHP 8.4 mee, Debian 12 PHP 8.2 en Debian 11 nog PHP 7.4. Gebruik daarom de metapakketten zonder versienummer, dus php respectievelijk php-fpm. Een commando met een vast nummer zoals apt install php8.4 mislukt op Debian 12, want daar bestaat dat pakket niet.
Hoe krijg ik een nieuwere PHP-versie dan die van Debian?
Via de PHP-repository van Ondřej Surý. De ondertekeningssleutel komt daarbij als eigen keyring-pakket in het systeem en wordt met signed-by precies aan die pakketbron gekoppeld. Pas daarna zijn versiegebonden pakketnamen zoals php8.4-fpm op elke Debian-uitgave beschikbaar.
Waarom downloadt de browser het PHP-bestand in plaats van het uit te voeren?
In dat geval is de PHP-module niet actief in Apache2. Activeer die met a2enmod en de naam van uw PHP-versie, bijvoorbeeld a2enmod php8.4, en herstart Apache2 daarna met systemctl restart apache2.
Waarom kan ik mij in phpMyAdmin niet als root aanmelden?
Na het uitvoeren van mysql_secure_installation gebruikt de databasegebruiker root in de regel de unix_socket-authenticatie en kan hij zich daarom niet via de webinterface aanmelden. Maak daarvoor een eigen databasegebruiker aan.

LAMP Apache2 PHP MariaDB MySQL phpMyAdmin Debian 13 Debian