# PHP lokāla izstrāde: Docker, DDEV un citi

> PHP lokāla izstrāde ar iebūvēto serveri, Docker vai DDEV: stiprās puses, robežas, piemēri un kā izstrāde un produkcija saglabā vienādu ielāpu stāvokli.

Avots: https://phpsos.de/lv/php/php-lokal-entwickeln/  
Aktuāls uz: 25.10.2026  
Pakalpojuma sniedzējs: PHP SOS, PHP ārkārtas palīdzība un serveru drošība. Tūlītēja palīdzība pa WhatsApp: https://wa.me/491736494914?text=Sveiki%2C%20PHP%20SOS%2C%20mums%20nepiecie%C5%A1ama%20pal%C4%ABdz%C4%ABba%20ar%20m%C5%ABsu%20PHP%20serveri.%20Uz%C5%86%C4%93mums%3A%20%E2%80%A6%20Vietne%3A%20%E2%80%A6

**Īsi:** PHP lokālai izstrādei ir trīs izplatīti ceļi: iebūvētais tīmekļa serveris (`php -S`) ātriem mēģinājumiem, oficiālie PHP Docker attēli atkārtoti izveidojamām vidēm un rīki, piemēram, DDEV, kas izveido gatavas projektu vides WordPress, TYPO3, Shopware vai Laravel. Izšķirošs ir ne tik daudz rīks, cik atbilstība: lokāli jādarbojas tai pašai PHP versijai ar tiem pašiem paplašinājumiem kā produkcijā. Drošībai gan galu galā vienmēr svarīga ir izpildes vide serverī.

## Kāpēc atsevišķa izstrādes vide?

Izmaiņas veikt tieši produkcijas serverī ir riskanti: katra drukas kļūda uzreiz ir redzama klientiem, un testa faili labprāt paliek. Lokālā vide nošķir izmēģināšanu no ekspluatācijas. Tā vienlaikus ir vieta, kur vispirms tiek testētas jaunas PHP versijas un drošības atjauninājumi.

Uzņēmuma vadībai un IT vadītājam jautājums tāpēc nav par to, vai izstrādes vide ir, bet par to, vai tā atbilst produkcijas sistēmai. Lokālā vide ar PHP 8.4, kamēr produkcijā vēl darbojas 8.1, problēmas aizsedz, nevis parāda. Tas pats attiecas uz datubāzes versiju, tīmekļa serveri un paplašinājumiem, piemēram, `intl`, `gd` vai `pdo_mysql`: jau viens trūkstošs paplašinājums var novest pie tā, ka kļūda tiek pamanīta tikai produkcijā.

## Iespēju pārskats

| Iespēja | Piemērota | Stiprās puses | Robežas |
|---|---|---|---|
| Iebūvētais serveris `php -S` | īsiem mēģinājumiem, maziem skriptiem | bez papildu programmatūras instalēšanas | nav Nginx vai Apache aizstājējs, nav paredzēts publiskiem tīkliem |
| Oficiālais Docker attēls | komandām, atkārtoti izveidojamām vidēm | versiju var noteikt ar tagu, tuvs konteineru darbībai | konfigurācija un vairāku konteineru sadarbība jāveido pašam |
| DDEV | CMS un ietvaru projektiem | gatavi projektu tipi, datubāze un tīmekļa serveris iekļauti | prasa Docker, savas konvencijas |
| Lokāli instalēts PHP | atsevišķiem izstrādātājiem | ātri, tieši | vairāku projektu versijas grūti uzturēt paralēli |

## Iebūvētais tīmekļa serveris

Kopš PHP 5.4 komandrindā ir ietverts mazs tīmekļa serveris. Tas startē pašreizējā direktorijā vai ar `-t` citā dokumentu direktorijā:

```bash
php -S localhost:8000 -t public/
```

Pēc izvēles varat norādīt maršrutētāja skriptu, kas katrā pieprasījumā darbojas pirmais. Rokasgrāmata klasifikācijā ir nepārprotama: serveris paredzēts izstrādes atbalstam, nav pilnvērtīgs tīmekļa serveris un nav lietojams publiskā tīklā. Tāpēc piesaistiet to `localhost`, nevis `0.0.0.0`, citādi tas zināmos apstākļos var būt sasniedzams uzņēmuma vai viesnīcas WLAN. Vairāk par komandrindu sadaļā [PHP komandrindā](https://phpsos.de/lv/php/php-cli/).

## Docker: oficiālie PHP attēli

Oficiālie attēli ir vairākos variantos: `cli` komandrindai, `apache` ar Apache un mod_php, `fpm` darbībai aiz Nginx vai cita starpniekservera, kā arī Alpine varianti maziem attēliem. Ātrs starts ar Apache:

```bash
docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache
```

Attēli satur veidnes `php.ini-development` un `php.ini-production` direktorijā `$PHP_INI_DIR`. Lokāli saprātīga ir izstrādes veidne, jo tā rāda kļūdas. Produkcijai attēla dokumentācija skaidri iesaka produkcijas veidni. Paplašinājumus instalējat ar komplektā iekļautajiem palīgskriptiem `docker-php-ext-configure`, `docker-php-ext-install` un `docker-php-ext-enable`. Kā darbojas tagi un digest, izskaidro [Oficiālie PHP Docker attēli](https://phpsos.de/lv/blog/offizielle-php-docker-images/).

## DDEV: gatavas vides CMS un ietvariem

DDEV balstās uz Docker un projektam iestata tīmekļa serveri, PHP, datubāzi un palīgpakalpojumus. Ātrās sākšanas pamācības gandrīz vienmēr seko vienam paraugam:

```bash
ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch
```

Kā projektu tipus DDEV pazīst, cita starpā, `wordpress`, `typo3`, `shopware6`, `laravel`, `symfony`, `drupal11`, `magento2` un vispārīgo tipu `php`. PHP versiju nosaka failā `.ddev/config.yaml`; saskaņā ar dokumentāciju iespējamas versijas no 5.6 līdz 8.5, noklusējums ir 8.4:

```yaml
# .ddev/config.yaml (izvilkums)
php_version: "8.3"
webserver_type: nginx-fpm   # alternatīva apache-fpm
```

Tā lokālā vide atbilst produkcijas versijai, pat ja tā vēl nav jaunākā.

## Lokālā izstrāde, ielāpu stāvoklis un PHP2Shell

Pēc PHP2Shell vairāki platformu sniedzēji norādīja uz tipisku domāšanas kļūdu. Vercel saskaņā ar biļetenu uzsver, ka ar lokālās izstrādes vides, lietojumprogrammas koda vai spraudņu atjaunināšanu nepietiek; izšķiroša ir PHP izpildes vide, kas patiešām apkalpo. Lokāli būt PHP 8.4.27 serveri ar 8.4.26 neaizsargā.

Savukārt izstrādes vide nes arī savus riskus, kas var nokļūt produkcijā:

1. **Izstrādes ini produkcijā:** `display_errors` failā `php.ini-development` ir ieslēgts. Ja šis fails nonāk serverī, apmeklētāji redz ceļus un kļūdu ziņojumus. Skatiet [Kļūdu izvades izslēgšana produkcijā](https://phpsos.de/lv/blog/display-errors-produktion/).
2. **Aizmirsti testa faili:** `phpinfo()` faili, datubāzes dampi vai `.env` faili ar pieejas datiem nepieder izvietošanai.
3. **Atvērti izstrādes serveri:** `php -S` vai konteineri ar publicētiem portiem datoros tīklā.
4. **Novecojuši attēli:** lokālie attēli neatjaunojas paši; pēc PHP drošības izlaiduma arī izstrādes vide jāpārbūvē, lai testi darbotos ar labojumu saturošo versiju.

> **Padoms:**
> PHP versiju nosakiet vienā vietā, piemēram, Dockerfile vai `.ddev/config.yaml`, un atjauninājumu gadījumā mainiet to kopā ar servera konfigurāciju.

## Kā PHP SOS palīdz konkrēti?

[Drošības uzturēšanas līgumā](https://phpsos.de/lv/leistungen/security-wartungsvertrag/) mēs rūpējamies, lai izstrāde un ekspluatācija saskanētu:

- **Salīdzināšana:** mēs salīdzinām izstrādes, testa un produkcijas vides PHP versiju un paplašinājumus.
- **Atjaunināšanas norise:** jaunie PHP izlaidumi vispirms tiek ieviesti testa vidē, pēc tam produkcijā, katrreiz ar pārstartēšanu.
- **Izvietošanas pārbaude:** mēs sekojam, lai serverī nenonāktu izstrādes ini, testa faili vai pieejas dati.
- **Dokumentācija:** jūs jebkurā laikā zināt, kura versija kur darbojas.


## Biežāk uzdotie jautājumi

**Vai drīkst iebūvēto PHP tīmekļa serveri lietot publiski?**  
Nē. PHP rokasgrāmata skaidri norāda, ka ar php -S startētais serveris kalpo izstrādei un nav lietojams publiskā tīklā. Darbībai paredzēts PHP-FPM ar Nginx vai Apache.

**Kas ir DDEV?**  
DDEV ir rīks, kas balstās uz Docker un izveido gatavas izstrādes vides PHP projektiem. Tas pazīst projektu tipus WordPress, TYPO3, Shopware 6, Laravel, Drupal un citām sistēmām.

**Vai pietiek atjaunināt lokālo PHP versiju?**  
Nē. Pret ievainojamībām, piemēram, PHP2Shell, svarīga ir PHP izpildes vide, kas patiešām apkalpo, tātad tā, kas atrodas serverī. Taču lokālajai videi vajadzētu būt tai pašai versijai, lai testi būtu ticami.

**Kādu php.ini lietot lokāli?**  
Lokāli saprātīgs ir php.ini-development, jo tas rāda kļūdas. Produkcijā jālieto php.ini-production. Oficiālie Docker attēli satur abas veidnes.

## Avoti

- [PHP rokasgrāmata: iebūvētais tīmekļa serveris](https://www.php.net/manual/en/features.commandline.webserver.php)
- [Docker Official Image: PHP](https://hub.docker.com/_/php)
- [DDEV](https://ddev.com/)
