Revisert guide for Debian 13. Bruk av nativ APT-stakk uten XAMPP eller tredjepartsdepot for PHP 8.4.
Målversjoner (offisielle Debian 13-repositorier) :
| Komponent | Versjon |
|---|---|
| Apache | 2.4.x |
| PHP | 8.4.x |
| MariaDB | 11.8.x |
| phpMyAdmin | 5.2.x |
1. Introduksjon
1.1. Målsetting
Sette opp en lokal utviklingsmiljø med:
- Apache2
- PHP 8.4
- MariaDB
- phpMyAdmin
Hvert komponent installeres og sjekkes før vi går videre til neste.
1.2. Hvorfor unngå XAMPP
XAMPP er praktisk for å starte med, men lite fleksibel under Linux: å bytte ut PHP-versjon, koble tjenestene til systemd, eller følge Debiens måte å håndtere pakker på blir snart frustrerende.
På Debian 13 er PHP 8.4, MariaDB 11.8 og Apache allerede i offisielle repositorier. Det er ingen behov for Sury-repositoriet for denne stakken.
2. Forberedelse av miljøet
2.1. Verifisere Debian-versjonen
cat /etc/os-release |
Du skal se VERSION_CODENAME=trixie (Debian 13).
2.2. Oppdatering av pakker
sudo apt update && sudo apt upgrade -y |
3. Installasjon av hovedtjenester
3.1. Apache
Apache serverer dine HTTP-sider på standardporten 80.
Installer først pakken, hvis ikke vil systemctl gi feilmeldingen Unit apache2.service does not exist:
sudo apt install apache2 -y |
sudo systemctl enable --now apache2 |
sudo systemctl status apache2 --no-pager |
Statusen skal vise active (running).
Verifisering i nettleser (standardport 80): http://localhost/
Hvis Apache-side ikke vises:
sudo systemctl start apache2 |
sudo systemctl status apache2 --no-pager |
Bruksområder:
sudo systemctl stop apache2 |
sudo systemctl restart apache2 |
sudo systemctl reload apache2 |
3.1.1. Bytte HTTP-port til 90
På Debian konfigureres porten i to steder: den globale lytting (ports.conf) og hver egen Virtual Host. Endre ikke bare ett av de to.
A. Globale lytting:
sudo nano /etc/apache2/ports.conf |
Erstatt:
Listen 80 |
med:
Listen 90 |
La Listen 443 være som den er hvis SSL-seksjonen er tilstede (ikke nødvendig for dette lokale HTTP-guiden).
B. Standard Virtual Host:
sudo nano /etc/apache2/sites-available/000-default.conf |
Erstatt:
<VirtualHost *:80> |
med:
<VirtualHost *:90> |
C. Test konfigurasjonen, deretter last opp igjen:
sudo apache2ctl configtest |
sudo systemctl reload apache2 |
configtest skal vise Syntax OK.
D. Kontroller at port 90 lytter:
ss -tlnp | grep ':90' |
E. Tilgang via nettleser: http://localhost:90/
Bruk
http://, ikkehttps://.
Apache lytter på plain HTTP på port 90. Hvis nettleseren automatisk konverterer til HTTPS (som i Firefox med HTTPS-Only-modus, HSTS osv.), får du feilmeldingenSSL_ERROR_RX_RECORD_TOO_LONG. I så fall: skriv eksplisitthttp://localhost:90/eller deaktiver midlertidig HTTPS-Only for localhost.
Fra nå av brukes alle lokale URLer på port 90
(http://localhost:90/,http://localhost:90/info.php,http://localhost:90/phpmyadmin).
Hvis du lager flere vhosts senere, legg også <VirtualHost *:90> (eller den valgte porten) i hvert side-fil.
3.2. MariaDB
MariaDB erstatter MySQL i Debian-arkivene. API-en er for de fleste PHP-prosjektet kompatibel.
sudo apt install mariadb-server -y |
sudo systemctl enable --now mariadb |
sudo systemctl status mariadb --no-pager |
Sikre installasjonen:
På Debian er MariaDB allerede sikret som standard. Skriptet viser faktisk:
MariaDB is secure by default in Debian. Running this script is useless at best...
Vi kjører det likevel for å velge klart hvilken autentiseringstypen root skal bruke:
sudo mariadb-secure-installation |
To muligheter eksisterer. Velg en av de to, noter valget, og følg instruksjonene for hvis valg A / hvis valg B i resten av veiledningen.
| Valg A — enkelt | Valg B — sikrere | |
|---|---|---|
root-autentisering |
Passord for SQL | unix_socket |
| Brukernavn for phpMyAdmin / applikasjoner | root + passord (ingen bruker dev) |
dev + passord (opprettet etter skript) |
| Admin i terminalen | mariadb -u root -p |
sudo mariadb |
Opprette en bruker dev? |
Nei | Ja (obligatorisk) |
Advarsel — valg A.
Å logge deg på phpMyAdmin (og muligens applikasjoner) medrooter den enkleste veien.
Det er også den usikreste: et utslitt passord forroot= alle databaser.
OK for en privat PC lokalt.
Valg B eksisterer nettopp for de som aldri vil setterootut til internett.
Valg A — root + passord (enkelt)
Svar i mariadb-secure-installation:
| Spørsmål | Svar |
|---|---|
| Gjeldende passord for root | Enter (tomt) |
Bytt til autentisering med unix_socket |
n |
| Skal du endre passordet for root? | Y → velg et passord og noter det |
| Fjerne anonyme brukere? | Y |
Tillate root-logginn fra fjernanslått? |
Y |
| Fjerne testdatabasen? | Y |
| Laste om privilegertabellene? | J |
Sjekk:
mariadb -u root -p |
Hvis valg A for resten av denne turen: bruk bare root + dette passordet (phpMyAdmin, eksempler på PDO osv.).
Lag ikke en bruger dev.
Valg B — unix_socket + bruger dev (mer sikker)
Svar i mariadb-secure-installation:
| Spørsmål | Svar |
|---|---|
| Gjeldende passord for root | Enter (tomt) |
| Bytt til unix_socket-autentisering | J |
| Skal du endre passordet for root? | n |
| Fjerne anonyme brukere? | J |
Tillate root-logginn fra fjernanslått? |
J |
| Fjerne testdatabasen? | J |
| Laste om privilegertabellene? | J |
Admin-terminal (ingen SQL-passord for root) :
sudo mariadb |
Hvorfor en bruger dev i valg B?
phpMyAdmin kan logge seg på som root når root har et SQL-passord — det er valg A.
I valg B, er root i unix_socket: MariaDB aksepterer kun root hvis prosessen i Linux allerede er root (sudo mariadb). Apache / phpMyAdmin kjører som www-data, så en weblogginn som root mislykkes. Det trengs en SQL-bruker med passord (dev).
Lag umiddelbart dev (webbruker / app for resten av turen hvis valg B) :
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'change_me_strong_password'; |
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'localhost' WITH GRANT OPTION; |
FLUSH PRIVILEGES; |
EXIT; |
Erstatt change_me_strong_password med et virkelig passord og noter det.
Sjekk:
mariadb -u dev -p |
Hvis valg B for resten av turen: phpMyAdmin, PDO osv. → dev + dette passordet. Bruk aldri root fra webben.
Mer restriktiv variant (bare én database) :
CREATE DATABASE mon_projet; |
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'change_me_strong_password'; |
GRANT ALL PRIVILEGES ON mon_projet.* TO 'dev'@'localhost'; |
FLUSH PRIVILEGES; |
EXIT; |
Detaljer om skriptspørsmålene (gemensam for begge)
Enter current password for root
Gjeldende passord for root for å tillate skriptet. På ny installert Debian : ofte tomt → Entret.
Switch to unix_socket authentication
- n → valg A (SQL-passord).
- Y → valg B (Linux socket /
sudo).
Change the root password?**
- Valg A : Y + angi passord.
- Valg B : n (ikke nødvendig i dagligbruk med socket).
Remove anonymous users? → Y (ugjørlige brukere uten navn, uansett valg).
Disallow root login remotely? → Y (bare lokal root ; « disallow » = forbudt fra eksternt).
Remove test database? → Y
Reload privilege tables? → Y
På maskinen hvor denne veiledningen ble følget live : valg A (
rootenkelt, utendev). Valg B er dokumentert for de som velger det.
3.4. PHP 8.4
På Debian 13 er PHP 8.4 tilgjengelig naturligvis. Ingen Sury-repositorie trengs.
sudo apt install \ |
php8.4 \ |
php8.4-cli \ |
libapache2-mod-php8.4 \ |
php8.4-mysql \ |
php8.4-xml \ |
php8.4-mbstring \ |
php8.4-curl \ |
php8.4-zip \ |
php8.4-sqlite3 \ |
php8.4-gd \ |
php8.4-intl \ |
-y |
Last opp Apache for å støtte PHP-modulen :
sudo systemctl restart apache2 |
Sjekk CLI :
php -v |
Du skal se en linje av typen PHP 8.4.x.
Lag et testfil :
echo '<?php phpinfo();' | sudo tee /var/www/html/info.php |
Åpne http://localhost:90/info.php, sjekk PHP 8.4, og slett filen derefter:
sudo rm /var/www/html/info.php |
La ikke
info.phpstå kvar utenfor et av sikre miljø : det eksponerer serverkonfigurasjon.
3.5. phpMyAdmin
obligatorisk rekkefølge : installere pakken (§3.4.1) → sjekk at filene finnes → bare sånn aktivere Apache (§3.4.2).
Uten pakken, /etc/phpmyadmin/apache.conf eksisterer ikke: en ln oppretter et brett link og a2enconf feiler med Conf phpmyadmin does not exist!.
3.4.1. Installasjon
sudo apt update |
sudo apt install phpmyadmin -y |
Under installasjon (debconf-skriner) :
-
Velg webserver : apache2 (Rett for å merke av, Tab, Enter).
-
Skal databasen til phpmyadmin konfigureres med dbconfig-common? → Ja. MariaDB er allerede installert ;
dbconfig-commonoppretter automatisk den interne database og brukeren som phpMyAdmin trenger. Svar Nei bare hvis du vil gjøre alt manuelt (utenkelig for et enkelt utviklingsmiljø). -
Angi et passord for MySQL/MariaDB-bruker
phpmyadmin(noter det ; dette er ikke samme konto somrootellerdevfor å logge deg inn på nettlesergranseringen).
Kontrollpunkt — fortsett til 3.4.2 bare hvis dette er OK :
dpkg -l phpmyadmin | grep '^ii' |
ls -la /etc/phpmyadmin/apache.conf |
- den 1. kommandoen skal vise
ii phpmyadmin - den 2. skal liste filen (ikke « Ingen fil »)
Hvis phpmyadmin ikke er ii, stop : reinstallér (sudo apt install phpmyadmin -y) før du konfigurerer Apache.
3.4.2. Aktiver Apache-konfigurasjonen
Gjør dette bare etter kontrollpunkt §3.4.1.
Pakken leverer /etc/phpmyadmin/apache.conf. Apache må laste den via conf-available → a2enconf.
Oftest har installeringsprogrammet allerede opprettet linket. Sjekk:
ls -la /etc/apache2/conf-available/phpmyadmin.conf |
- Hvis fila/lenken eksisterer og peker mot
/etc/phpmyadmin/apache.conf→ aktiver og last inn på nytt bare:
sudo a2enconf phpmyadmin |
sudo systemctl reload apache2 |
- Ellers, opprett lenken (med backup hvis en fil allerede besitter navnet) :
# Abort if the package config is missing (do not create a broken symlink) |
test -f /etc/phpmyadmin/apache.conf || { |
echo "ERROR: /etc/phpmyadmin/apache.conf missing — finish §3.4.1 first" |
exit 1 |
} |
|
# Keep a copy if a file already occupies that name |
if [ -e /etc/apache2/conf-available/phpmyadmin.conf ]; then |
sudo cp -a /etc/apache2/conf-available/phpmyadmin.conf \ |
/etc/apache2/conf-available/phpmyadmin.conf.bak |
fi |
|
sudo ln -sf /etc/phpmyadmin/apache.conf \ |
/etc/apache2/conf-available/phpmyadmin.conf |
|
sudo a2enconf phpmyadmin |
sudo systemctl reload apache2 |
test -f: stopper hvis pakken ikke er installert (unngår brukt symlink).cp -a: virkelig backup før utbytte.ln -sf: lenke til konfigurasjonen fra pakken.
3.4.3. Tilgang
URL: http://localhost:90/phpmyadmin
- Hvis valg A : innlogging
root+ passord framariadb-secure-installation. Ingendev. - Hvis valg B : innlogging
dev+ passord laget i §3.2. En web-innlogging medrootmislykkes her på grunn avunix_socket(i valg A,root+ passord fungerer).
3.4.4. Bruker dev – gjenopplighting / reparasjon (valg B bare)
Hvis valg A : ignorér denne seksjonen. Du holder deg på root.
Hvis valg B : dev er allerede opprettet i §3.2. Her kun hvis du har glemt eller må resette.
sudo mariadb |
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'change_me_strong_password'; |
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'localhost' WITH GRANT OPTION; |
FLUSH PRIVILEGES; |
EXIT; |
Endre passord for dev:
ALTER USER 'dev'@'localhost' IDENTIFIED BY 'new_password'; |
FLUSH PRIVILEGES; |
EXIT; |
En dedikert database (rekommenderes for et prosjekt, alltid i valg B) :
CREATE DATABASE mon_projet; |
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'change_me_strong_password'; |
GRANT ALL PRIVILEGES ON mon_projet.* TO 'dev'@'localhost'; |
FLUSH PRIVILEGES; |
EXIT; |
3.4.5. Feilsøking tilkobling
Logg inn som admin:
# Si option A : |
mariadb -u root -p |
|
# Si option B : |
sudo mariadb |
Liste brukere:
SELECT User, Host, plugin FROM mysql.user; |
- Hvis valg A :
roothar et passord-plugin → phpMyAdmin =root. - Hvis valg B :
roothar vanligvis plugin =unix_socket→ phpMyAdmin =dev.
Endre et passord:
-- Si option A : |
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; |
|
-- Si option B : |
ALTER USER 'dev'@'localhost' IDENTIFIED BY 'new_password'; |
FLUSH PRIVILEGES; |
Avslutte:
EXIT; |
3.4.6. Snar sekurisering (lokalt)
For et lokal utviklingsmiljø er tilgangen localhost ofte tilstrekkelig. For å begrense det ytterligere, rediger konfigurasjonen for Apache phpMyAdmin og begrens tilgangene, for eksempel:
Require local |
Deretter:
sudo systemctl reload apache2 |
4. Konfigurering av PHP
4.1. Sjekk den aktive versjonen
php -v |
php -m |
4.2. Flere PHP-versjoner (valgfritt)
Hvis du senere installerer flere grenser (f.eks via Sury for PHP 8.5), bytt CLI med:
sudo update-alternatives --display php |
sudo update-alternatives --config php |
For Apache mod_php, aktiver kun en PHP-modul om gangen:
# Example: switch from php8.4 to another installed version |
sudo a2dismod php8.4 |
sudo a2enmod phpX.Y |
sudo systemctl restart apache2 |
Erstatt phpX.Y med den virkelige installerte versjonen.
4.3. Fil php.ini for Apache
sudo nano /etc/php/8.4/apache2/php.ini |
Etter endringene:
sudo systemctl restart apache2 |
Vanlige innstillinger lokalt:
display_errors = On |
error_reporting = E_ALL |
upload_max_filesize = 64M |
post_max_size = 64M |
memory_limit = 256M |
5. Viktig filer
5.1. Apache
| Rolle | Sti |
|---|---|
| Hovedkonfigurasjon | /etc/apache2/apache2.conf |
| Lyttoppgaver | /etc/apache2/ports.conf |
| Dokumentrot | /var/www/html/ |
| Tilgjengelige nettsteder | /etc/apache2/sites-available/ |
| Aktiverte nettsteder | /etc/apache2/sites-enabled/ |
| Standard vhost | /etc/apache2/sites-available/000-default.conf |
| Logg tilgang | /var/log/apache2/access.log |
| Feillogg | /var/log/apache2/error.log |
Aktiver / deaktiver en vhost:
sudo a2ensite nom-du-site.conf |
sudo a2dissite nom-du-site.conf |
sudo systemctl reload apache2 |
5.2.PHP
| Rolle | Sti |
|---|---|
php.ini (Apache) |
/etc/php/8.4/apache2/php.ini |
php.ini (CLI) |
/etc/php/8.4/cli/php.ini |
| Ekstensjoner | se php -i | grep extension_dir |
5.3. MariaDB
| Rolle | Sti |
|---|---|
| Serverkonfigurasjon | /etc/mysql/mariadb.conf.d/50-server.cnf |
| Datafiler | /var/lib/mysql/ |
| Feillogg | /var/log/mysql/error.log |
5.4. phpMyAdmin
| Rolle | Sti |
|---|---|
| App-konfigurasjon | /etc/phpmyadmin/config.inc.php |
| Apache-konfigurasjon | /etc/phpmyadmin/apache.conf |
| Loggfilene | /var/log/apache2/error.log og access.log |
6. Valideringscheckliste
# Services |
systemctl is-active apache2 |
systemctl is-active mariadb |
|
# Versions |
apache2 -v |
php -v |
mariadb --version |
|
# Ports |
ss -tlnp | grep -E ':90|:3306' |
- http://localhost:90/ svarer
- Apache lytter på porten 90 (ikke 80)
-
php -vviser 8.4.x - http://localhost:90/phpmyadmin åpner seg
- Hvis valg A : phpMyAdmin fungerer med
root+ passord (ingendev) - Hvis valg B : brukeren
dever opprettet (§3.2) og phpMyAdmin funker meddev+ passord -
info.phper slettet
7. Spesielle egenskaper for Debian 13
- PHP 8.4 er innbygget : ingen behov for Sury-leverandør eller
apt-key(avviklet). - MariaDB er på versjon 11.8 ; sikkerhetsinstallasjonsskriptet heter
mariadb-secure-installation. - Apache holder seg på versjon 2.4, med de samme verktøyene
a2enmod/a2ensite/systemctl. - Denne veiledningen bruker HTTP-port 90 (
ports.conf+ Virtual Host). - MariaDB : valg A = enkelt
root(ingendev) ; valg B =unix_socket+dev. Valget B eksisterer for de som blir overbevist av varsel A.
8. Mulige videre trinn
For lokale prosjekter med et tilpasset domenenavn (minprosjekt.local), kan du konfigurere en Apache Virtual Host som peker mot en dedikert mappe (utenfor /var/www/html hvis du ønsker det). Legg også innenheten i /etc/hosts.
Artikkel med detaljer: Hvordan sette opp en VirtualHost for Apache på Debian 13 for et lokalt PHP-prosjekt
Kommentarer
Ingen godkjente kommentarer ennå.
Logg inn med en kommentatorkonto for å publisere en kommentar. Logg inn.