# PHP kohalik arendus: Docker, DDEV jt

> PHP kohalik arendus sisseehitatud serveri, Dockeri või DDEV-ga: tugevused, piirid, näited ning kuidas arendus ja tootmine paigaseisu osas kokku sobivad.

Allikas: https://phpsos.de/et/php/php-lokal-entwickeln/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**Lühidalt:** PHP kohalikuks arenduseks on kolm levinud teed: sisseehitatud veebiserver (`php -S`) kiireteks katsetusteks, ametlikud PHP Dockeri kujutised järgi ehitatavate keskkondade jaoks ja vahendid nagu DDEV, mis loovad valmis projektikeskkondi WordPressi, TYPO3, Shopware või Laraveli jaoks. Otsustavam kui vahend on vastavus: kohapeal peaks töötama sama PHP versioon samade laiendustega nagu live'is. Turvalisuse jaoks loeb lõpuks siiski alati serveri käitusaeg.

## Miks oma arenduskeskkond?

Muudatusi otse live-serveris teha on riskantne: iga trükiviga on kohe klientidele nähtav ja testifailid jäävad meelsasti maha. Kohalik keskkond eraldab katsetamise tööst. Samal ajal on see koht, kus uusi PHP versioone ja turvauuendusi esmalt testitakse.

Juhatuse ja IT-juhtide jaoks ei ole küsimus seetõttu selles, kas arenduskeskkond on olemas, vaid kas see vastab live-süsteemile. Kohalik keskkond PHP 8.4-ga, samal ajal kui live'is töötab veel 8.1, varjab probleeme, selle asemel et neid näidata. Sama kehtib andmebaasi versiooni, veebiserveri ja laiendite kohta nagu `intl`, `gd` või `pdo_mysql`: juba üks puuduv laiendus võib viia selleni, et viga tuleb välja alles live'is.

## Võimalused ülevaatlikult

| Võimalus | Sobib | Tugevused | Piirid |
|---|---|---|---|
| Sisseehitatud server `php -S` | lühikesed katsetused, väikesed skriptid | ilma täiendava tarkvara paigaldamiseta | ei asenda Nginxi ega Apache'i, ei sobi avalikesse võrkudesse |
| Ametlik Dockeri kujutis | tiimid, järgi ehitatavad keskkonnad | versioon määratav sildiga, lähedal konteinertööle | seadistus ja mitme konteineri koostöö tuleb ise ehitada |
| DDEV | CMS- ja raamistikuprojektid | valmis projektitüübid, andmebaas ja veebiserver kaasas | eeldab Dockerit, omad konventsioonid |
| Kohalikult paigaldatud PHP | üksikarendaja | kiire, otsene | mitme projekti versioone on raske paralleelselt hoida |

## Sisseehitatud veebiserver

Alates PHP 5.4-st sisaldab käsurida väikest veebiserverit. See käivitub praeguses kataloogis või valikuga `-t` teises dokumendikataloogis:

```bash
php -S localhost:8000 -t public/
```

Valikuliselt annate edasi ruuteri skripti, mis käivitub iga päringu korral esimesena. Käsiraamat on liigitamisel üheselt selge: server peaks arendust toetama, ei ole täisväärtuslik veebiserver ega tohi olla kasutusel avalikus võrgus. Siduge see seetõttu aadressiga `localhost`, mitte `0.0.0.0`, muidu on see teatud tingimustel ettevõtte või hotelli WLAN-is kättesaadav. Lähemalt käsurea kohta lehel [PHP käsureal](https://phpsos.de/et/php/php-cli/).

## Docker: ametlikud PHP kujutised

Ametlikke kujutisi on mitmes variandis: `cli` käsurea jaoks, `apache` Apache'i ja mod_php-ga, `fpm` tööks Nginxi või muu puhverserveri taga, lisaks Alpine'i variandid väikeste kujutiste jaoks. Kiire start Apache'iga:

```bash
docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache
```

Kujutised sisaldavad mallid `php.ini-development` ja `php.ini-production` kataloogis `$PHP_INI_DIR`. Kohapeal on arendusmall mõistlik, sest see kuvab vead. Tootmise jaoks soovitab kujutise dokumentatsioon selgesõnaliselt tootmismalli. Laiendeid paigaldate kaasasolevate abiskriptidega `docker-php-ext-configure`, `docker-php-ext-install` ja `docker-php-ext-enable`. Kuidas sildid ja digestid töötavad, selgitab [Ametlikud PHP Dockeri kujutised](https://phpsos.de/et/blog/offizielle-php-docker-images/).

## DDEV: valmis keskkonnad CMS-idele ja raamistikele

DDEV ehitub Dockerile ja seadistab projekti jaoks veebiserveri, PHP, andmebaasi ja abiteenused. Kiirstardijuhendid järgivad peaaegu alati sama mustrit:

```bash
ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch
```

Projektitüüpidena tunneb DDEV muu hulgas `wordpress`, `typo3`, `shopware6`, `laravel`, `symfony`, `drupal11`, `magento2` ja üldist tüüpi `php`. PHP versiooni määrate failis `.ddev/config.yaml`; dokumentatsiooni järgi on võimalikud versioonid 5.6 kuni 8.5, vaikimisi 8.4:

```yaml
# .ddev/config.yaml (väljavõte)
php_version: "8.3"
webserver_type: nginx-fpm   # alternatiivina apache-fpm
```

Nii vastab kohalik keskkond live'i versioonile, ka siis, kui see ei ole veel uusim.

## Kohalik arendus, paigaseis ja PHP2Shell

Pärast PHP2Shelli on mitu platvormipakkujat juhtinud tähelepanu tüüpilisele mõttevigale. Vercel rõhutab bülletääni järgi, et kohaliku arenduskeskkonna, rakenduse koodi või pluginate uuendamisest ei piisa; otsustav on PHP käitusaeg, mis tegelikult sisu edastab. Kohapeal PHP 8.4.27 omamine ei kaitse serverit, kus on 8.4.26.

Vastupidi toob arenduskeskkond kaasa oma riskid, mis võivad jõuda tootmisse:

1. **Arendus-ini tootmises:** `display_errors` on failis `php.ini-development` sisse lülitatud. Kui see fail jõuab serverisse, näevad külastajad teekondi ja veateateid. Vt [Veateadete väljalülitamine tootmises](https://phpsos.de/et/blog/display-errors-produktion/).
2. **Unustatud testifailid:** `phpinfo()`-failid, andmebaasi tõmmised või `.env`-failid ligipääsuandmetega ei kuulu väljaveeretusse.
3. **Avatud arendusserverid:** `php -S` või konteinerid avaldatud portidega võrgus olevatel arvutitel.
4. **Vananenud kujutised:** Kohalikke kujutisi ei uuendata ise; pärast PHP turvaväljalaset tuleb ka arenduskeskkond uuesti ehitada, et testid jookseksid parandatud versiooniga.

> **Näpunäide:**
> Määrake PHP versioon ühes kohas, näiteks Dockerfile'is või failis `.ddev/config.yaml`, ja muutke seda uuenduste puhul koos serveri seadistusega.

## Kuidas PHP SOS konkreetselt aitab?

[Turvahoolduslepingu](https://phpsos.de/et/leistungen/security-wartungsvertrag/) raames hoolitseme selle eest, et arendus ja töö sobivad kokku:

- **Võrdlus:** Võrdleme arendus-, test- ja live-keskkonna PHP versiooni ja laiendeid.
- **Uuenduste kulg:** Uued PHP väljalasked paigaldatakse esmalt testkeskkonda, seejärel live'i, kumbki taaskäivitusega.
- **Väljaveeretamise kontroll:** Jälgime, et arendus-ini, testifailid ega ligipääsuandmed serverisse ei jõuaks.
- **Dokumentatsioon:** Te teate igal ajal, milline versioon kus töötab.


## Korduma kippuvad küsimused

**Kas ma tohin PHP sisseehitatud veebiserverit avalikult kasutada?**  
Ei. PHP käsiraamat ütleb selgesõnaliselt, et käsuga php -S käivitatud server on mõeldud arenduseks ja seda ei tohi kasutada avalikus võrgus. Tööks kuuluvad PHP-FPM koos Nginxi või Apache'iga.

**Mis on DDEV?**  
DDEV on Dockerile ehituv vahend, mis loob PHP projektidele valmis arenduskeskkondi. See tunneb projektitüüpe WordPressi, TYPO3, Shopware 6, Laraveli, Drupali ja muude süsteemide jaoks.

**Kas piisab kohaliku PHP versiooni uuendamisest?**  
Ei. Turvaaukude nagu PHP2Shell vastu loeb PHP käitusaeg, mis tegelikult sisu edastab, ehk serveri oma. Kohalikul keskkonnal peaks siiski olema sama versioon, et testid oleksid tõenduslikud.

**Millist php.ini ma kohapeal kasutan?**  
Kohapeal on mõistlik php.ini-development, sest see kuvab vead. Tootmises tuleb kasutada php.ini-production. Ametlikud Dockeri kujutised toovad mõlemad mallid kaasa.

## Allikad

- [PHP käsiraamat: sisseehitatud veebiserver](https://www.php.net/manual/en/features.commandline.webserver.php)
- [Docker Official Image: PHP](https://hub.docker.com/_/php)
- [DDEV](https://ddev.com/)
