Lokal webudvikling på Windows
Native Webstack med Apache, PHP 8.4, MariaDB og Python
En praktisk guide til en ren og modulær webstack, hvor hver komponent installeres, konfigureres og opdateres separat.
1. Hvad en Native Webstack består af
Komponenterne har hvert sit ansvar og kan udskiftes eller opdateres uden at vente på en samlet programpakke:
- Apache
- Webserveren, som modtager browserens forespørgsel og leverer siden.
- PHP 8.4
- Servermiljøet, som udfører PHP-programmets logik.
- MariaDB
- Databaseserveren, som opbevarer programmets strukturerede data.
- SQL
- Sproget, som bruges til at oprette, læse og ændre data i databasen.
- Python
- Et selvstændigt runtime-miljø til scripts, automatisering og lokale backend-tjenester.
Browseren bruger normalt adressen http://localhost/. localhost betyder denne computer.
2. Opret en tydelig mappestruktur
En kort sti uden mellemrum gør konfiguration og fejlfinding lettere. Denne struktur holder programmer, konfiguration, hemmeligheder og backup adskilt:
C:\native_webstack\
├── apache\
├── php84\
├── www\
├── secrets\
└── backups\
Kun C:\native_webstack\www skal være Apache-webroot. MariaDB og Python kan installeres i deres normale Windows-placeringer, mens projektfiler og virtuelle Python-miljøer placeres under den relevante projektmappe.
Mappen secrets må aldrig ligge under www eller tilføjes til Git.
3. Installer og konfigurer Apache
Apache-projektet udgiver kildekode, men ikke officielle færdige Windows-binærfiler. Projektets Windows-dokumentation og PHPs Windows-side henviser til eksterne distributører som Apache Lounge.
- Hent en aktuel 64-bit Apache 2.4-build fra den distributør, der henvises til af Apache og PHP.
- Installer den Microsoft Visual C++ Runtime, som den valgte build kræver.
- Pak Apache ud i
C:\native_webstack\apache. - Tilpas
conf\httpd.conf, og kontrollér konfigurationen før start.
En lokal grundkonfiguration kan tage udgangspunkt i:
ServerRoot "C:/native_webstack/apache"
Listen 127.0.0.1:80
ServerName localhost:80
DocumentRoot "C:/native_webstack/www"
<Directory "C:/native_webstack/www">
Options -Indexes
AllowOverride All
Require local
</Directory>
DirectoryIndex index.php index.html
Kontrollér syntaksen fra en kommandoprompt med administratorrettigheder:
C:\native_webstack\apache\bin\httpd.exe -t
Apache kan afprøves i konsollen eller installeres som en navngiven Windows-tjeneste:
C:\native_webstack\apache\bin\httpd.exe -k install -n NativeWebstackApache
C:\native_webstack\apache\bin\httpd.exe -k start -n NativeWebstackApache
Begræns Windows Firewall til lokal adgang. Listen 127.0.0.1:80 sikrer samtidig, at Apache kun lytter på denne computer.
4. Installer PHP 8.4
Ved brug af PHP som Apache-modul skal PHPs officielle Thread Safe-build anvendes. Vælg samme processorarkitektur og kompatible Visual Studio-runtime som Apache-builden.
- Hent PHP 8.4 Thread Safe til 64-bit Windows fra PHPs officielle Windows-side.
- Pak filerne ud i
C:\native_webstack\php84. - Kopiér
php.ini-developmenttilphp.ini. - Aktivér kun de udvidelser, programmerne faktisk bruger, eksempelvis
curl,gd,mbstringogpdo_mysql.
Tilføj PHP-modulet i Apache-filen conf\httpd.conf:
LoadModule php_module "C:/native_webstack/php84/php8apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/native_webstack/php84"
Kontrollér PHP og Apache, før tjenesten genstartes:
C:\native_webstack\php84\php.exe --version
C:\native_webstack\php84\php.exe --ini
C:\native_webstack\php84\php.exe -m
C:\native_webstack\apache\bin\httpd.exe -t
Brug php.ini-development som udgangspunkt lokalt. En offentligt tilgængelig server kræver en separat produktionskonfiguration og yderligere hardening.
5. Opret dit første PHP-program
Opret projektmappen C:\native_webstack\www\mit-program og filen index.php:
<?php
declare(strict_types=1);
$navn = 'Morten';
?>
<!doctype html>
<html lang="da">
<head>
<meta charset="utf-8">
<title>Mit lokale program</title>
</head>
<body>
<h1>Hej <?= htmlspecialchars($navn, ENT_QUOTES, 'UTF-8') ?></h1>
</body>
</html>
Programmet åbnes på http://localhost/mit-program/. PHP-koden udføres af Apache; browseren modtager kun det færdige HTML-resultat.
Kontrollér filen for syntaksfejl:
C:\native_webstack\php84\php.exe -l C:\native_webstack\www\mit-program\index.php
6. Installer MariaDB og opret en database med SQL
- Hent MariaDB Servers officielle 64-bit MSI-installationspakke.
- Installer databaseinstansen som en Windows-tjeneste.
- Angiv et stærkt root-password, og tillad ikke ekstern root-adgang eller anonyme brugere.
- Bevar standardporten
3306, medmindre en anden lokal tjeneste allerede bruger den. - Begræns om muligt MariaDB til
127.0.0.1imy.ini, når databasen kun skal bruges lokalt.
Åbn MariaDB-klienten, og log ind som administrator:
mariadb -u root -p
Opret derefter en database og en begrænset programbruger. Udskift dummy-passwordet med et stærkt password:
CREATE DATABASE mit_program
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
CREATE USER 'mit_program_user'@'localhost'
IDENTIFIED BY 'CHANGE_ME_STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON mit_program.*
TO 'mit_program_user'@'localhost';
Brug ikke root fra selve programmet. En enkel tabel kan oprettes sådan:
USE mit_program;
CREATE TABLE kunder (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
navn VARCHAR(150) NOT NULL,
oprettet_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
7. Forbind PHP til MariaDB
PHPs PDO-udvidelse understøtter forberedte SQL-forespørgsler og en kontrolleret fejlhåndtering:
<?php
declare(strict_types=1);
$dsn = 'mysql:host=127.0.0.1;dbname=mit_program;charset=utf8mb4';
$bruger = 'mit_program_user';
$password = 'CHANGE_ME_STRONG_PASSWORD';
try {
$database = new PDO($dsn, $bruger, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
} catch (PDOException $exception) {
error_log($exception->getMessage());
exit('Databasen kunne ikke åbnes.');
}
Eksemplet bruger bevidst en dummyværdi. Rigtige passwords og andre secrets skal ligge uden for C:\native_webstack\www og må ikke gemmes i Git.
8. Installer og isoler Python
Installer Python med Python Install Manager fra Python-projektets officielle Windows-vejledning. Kontrollér derefter installationen:
python --version
python -c "print('Python er klar')"
Opret et virtuelt miljø i hvert Python-projekt, så pakker og versioner ikke blandes mellem programmer:
cd C:\native_webstack\www\mit-python-program
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
Apache udfører ikke automatisk Python-filer. Python kan bruges direkte til lokale scripts og automatisering. Et egentligt Python-webprogram bør køre som en separat lokal tjeneste, som Apache eventuelt viderestiller til via en projektspecifik reverse proxy-konfiguration.
Installér kun de Python-pakker, det konkrete projekt kræver, og gem dem i en versionsfastlåst kravfil.
9. Backup og kontrollerede opdateringer
Tag backup af projektfiler, konfiguration og database hver for sig. Denne kommando spørger efter databasebrugerens password:
mariadb-dump -u mit_program_user -p mit_program > C:\native_webstack\backups\mit_program.sql
Gendan til en allerede oprettet, tom database med:
mariadb -u mit_program_user -p mit_program < C:\native_webstack\backups\mit_program.sql
Opdater én komponent ad gangen. Gem de eksisterende konfigurationsfiler, læs versionsnoterne, kontrollér kompatibilitet og test programmerne, før den gamle installation fjernes.
Kontrollér de aktive versioner efter en opdatering:
C:\native_webstack\apache\bin\httpd.exe -V
C:\native_webstack\php84\php.exe --version
mariadb --version
python --version
Gem backup på et andet drev eller et andet sikkert medie, og afprøv jævnligt, at den kan gendannes.
10. Fejlfinding og sikker lokal drift
| Problem | Kontrol |
|---|---|
| Apache starter ikke | Kør httpd.exe -t, kontrollér port 80 og 443, og læs Apache-fejlloggen. |
| PHP-koden vises som tekst | Kontrollér LoadModule, AddHandler og PHPIniDir, og genstart Apache. |
| En PHP-udvidelse mangler | Kontrollér den aktive php.ini med php.exe --ini og den indlæste modulliste med php.exe -m. |
| MariaDB starter ikke | Kontrollér Windows-tjenesten, port 3306 og MariaDB-fejlloggen. Tag backup, før datafiler repareres. |
| Databaseforbindelsen fejler | Verificér host, databasenavn, bruger, password, rettigheder og at pdo_mysql er aktiv. |
| Python findes ikke | Genåbn terminalen, kontrollér Python Install Manager, og kør python --version. |
| Siden findes ikke | Kontrollér Apache DocumentRoot, projektmappen og at URL'en svarer til mappenavnet. |
- Hold Apache, PHP, MariaDB, Python og anvendte biblioteker opdateret.
- Bind lokale tjenester til
127.0.0.1, når andre computere ikke skal have adgang. - Brug separate databasebrugere med mindst mulige rettigheder.
- Hold secrets, backup og rigtige konfigurationsfiler uden for webroot og Git.
- Brug forberedte SQL-forespørgsler, og valider alt brugerinput.
- Deaktivér katalogvisning, og vis ikke detaljerede fejl eller lokale filstier til besøgende.
- Brug en egentlig produktionsopsætning med HTTPS og hardening, hvis et program senere skal være offentligt tilgængeligt.
Kilder og officielle vejledninger
- Apache HTTP Server: brug på Windows
- Apache Lounge: Windows-builds, som Apache og PHP henviser til
- PHP til Windows: downloads og valg af build
- PHP-manualen: Apache 2.x på Windows
- MariaDB: installation med MSI på Windows
- Python: brug og installation på Windows
- Microsoft: understøttede Visual C++ Redistributable-versioner