LAMP-stack installeren op Debian 13 en Debian 12: Apache2, PHP 8, MariaDB en phpMyAdmin
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):
| Distributie | PHP-versie uit de pakketbronnen |
|---|---|
| Debian 13 | PHP 8.4 |
| Debian 12 | PHP 8.2 |
| Debian 11 | PHP 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:
| Distributie | Databaseserver uit de pakketbronnen |
|---|---|
| Debian 13 | MariaDB 11.8 |
| Debian 12 | MariaDB 10.11 |
| Debian 11 | MariaDB 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.10te 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 upgradehet 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?
Welke PHP-versie levert Debian mee?
Hoe krijg ik een nieuwere PHP-versie dan die van Debian?
Waarom downloadt de browser het PHP-bestand in plaats van het uit te voeren?
Waarom kan ik mij in phpMyAdmin niet als root aanmelden?
2023-2026 KernelHost GmbH. Alle rechten voorbehouden. Deze handleiding is auteursrechtelijk beschermd. Publicatie op andere websites, geheel, gedeeltelijk of in bewerkte vorm, is zonder onze schriftelijke toestemming niet toegestaan. Citeren met bronvermelding en link is uitdrukkelijk welkom.

