Szybki start
Oficjalny obraz OxPHP zawiera serwer, PHP, rozszerzenie OxPHP oraz wszystkie zależności środowiska uruchomieniowego, dzięki czemu od pustego katalogu do działającej aplikacji dzieli Cię zaledwie kilka poleceń.
Jedno polecenie
Jeśli masz już projekt PHP z katalogiem public/:
docker run -p 80:80 -v .:/var/www/html ghcr.io/oxphp/oxphp:0.13.0Otwórz http://localhost/. Twoja aplikacja działa.
Aby włączyć serwer wewnętrzny (stan, metryki, konfiguracja):
docker run -p 80:80 -p 9090:9090 -e INTERNAL_ADDR=0.0.0.0:9090 -v .:/var/www/html ghcr.io/oxphp/oxphp:0.13.0Konfiguracja krok po kroku z Docker Compose
Bardziej szczegółowy przewodnik — od pustego katalogu do działającej aplikacji PHP z kontrolami stanu i strukturalnym logowaniem.
-
Utwórz katalog projektu.
mkdir my-oxphp-app && cd my-oxphp-app -
Utwórz plik Dockerfile.
FROM ghcr.io/oxphp/oxphp:0.13.0 COPY --chown=www-data:www-data . /var/www/htmlOficjalny obraz zawiera binarny plik serwera, PHP 8.4 lub 8.5 ZTS (domyślnie 8.5; wersję 8.4 pobierzesz za pomocą tagu
:0.13.0-php8.4lub dowolnego tagu*-php8.4*), rozszerzenie PHP OxPHP oraz wszystkie zależności środowiska uruchomieniowego. -
Dodaj plik compose.yaml.
services: oxphp: build: . ports: - "80:80" - "9090:9090" environment: - LISTEN_ADDR=0.0.0.0:80 - DOCUMENT_ROOT=/var/www/html/public - INTERNAL_ADDR=0.0.0.0:9090 - LOG_LEVEL=info - ACCESS_LOG=allPort
80obsługuje Twoją aplikację. Port9090udostępnia serwer wewnętrzny na potrzeby kontroli stanu, metryk Prometheusa oraz migawki aktywnej konfiguracji. -
Utwórz aplikację PHP.
mkdir -p publicUtwórz plik
public/index.php:<?php $requestId = oxphp_request_id(); $info = oxphp_server_info(); echo "<h1>OxPHP</h1>\n"; echo "<p>Request ID: {$requestId}</p>\n"; echo "<p>Worker: {$info['worker_id']}</p>\n"; echo "<p>SAPI: " . php_sapi_name() . "</p>\n"; echo "<p>Version: {$info['version']}</p>\n"; echo "<p>Time: " . date('c') . "</p>\n";oxphp_request_id()zwraca unikatowy identyfikator przypisany do każdego żądania.oxphp_server_info()zwraca szczegóły dotyczące działającego serwera, w tymversion,worker_id,request_time,worker_modeorazruntime_hooks. -
Zbuduj i uruchom.
docker compose up -d --build -
Przetestuj aplikację.
curl http://localhost/Oczekiwany wynik:
<h1>OxPHP</h1> <p>Request ID: 67a4b3c11a2b00000001</p> <p>Worker: 0</p> <p>SAPI: cli-server</p> <p>Version: 0.13.0</p> <p>Time: 2026-03-23T12:00:00+00:00</p>Każde żądanie otrzymuje unikatowy identyfikator. ID workera wskazuje, który wątek workera PHP je obsłużył.
-
Sprawdź endpointy wewnętrzne.
# Health check — 200 when healthy, 503 when degraded curl http://localhost:9090/health # Prometheus-compatible metrics curl http://localhost:9090/metrics # Active configuration (TLS paths redacted) curl http://localhost:9090/config -
Wyświetl logi.
docker compose logs -f oxphpPonieważ ustawiono
ACCESS_LOG=all, każde żądanie pojawia się jako strukturalna linia logu w formacie JSON zawierająca metodę, ścieżkę, status, czas odpowiedzi oraz ID żądania.
Jeśli Twoja aplikacja wymaga niestandardowych rozszerzeń PHP (pdo_pgsql, intl, xdebug itp.), zobacz
examples/dockerfile/Dockerfile
w repozytorium. To gotowy do użycia wieloetapowy plik Dockerfile z osobnymi celami dev i prod.
OxPHP celowo rejestruje się pod jedną z nazw SAPI rozpoznawanych przez OPcache. OPcache wyłącza się
dla nieznanych SAPI; bez tej zmiany nazwy wykonywanie PHP całkowicie pomijałoby warstwę OPcache i działałoby
kilkukrotnie wolniej. Kompromis polega na tym, że php_sapi_name() nie może służyć do wykrywania OxPHP — zamiast tego użyj
function_exists('oxphp_request_id') lub OxPHP\Http\Request::current().
Prompty dla Twojego agenta
Te prompty zakładają agenta z podłączonym serwerem MCP dokumentacji OxPHP — sam przeczyta strony, których potrzebuje.
Uruchom moją aplikację PHP na OxPHP. Przeczytaj stronę `getting-started/quick-start` przez serwer MCP dokumentacji OxPHP.
Ustal na podstawie tego repozytorium, jakiego trybu routingu potrzebuje i jaki jest jej katalog główny dokumentów, a potem podaj mi najmniejszą konfigurację, która ją obsłuży.Co dalej
- Przewodnik po Dockerze — deweloperskie i produkcyjne pliki Dockerfile, konfiguracja Compose, montowanie plików ini PHP oraz konfiguracja kontroli stanu
- Konfiguracja — pełna dokumentacja zmiennych środowiskowych
- Routing — tryby routingu Traditional, Framework, SPA i Worker
- Tryb worker — trwałe workery PHP, które inicjalizują się raz i obsługują wiele żądań
- Funkcje PHP — wszystkie wbudowane funkcje PHP w OxPHP