Blog · Poradniki wdrożeń
Jak wdrożyć aplikację PHP w 2026: Laravel, Symfony albo zwykłe strony PHP jednym poleceniem
Masz aplikację PHP, która działa na twoim laptopie: projekt Laravel, projekt Symfony albo katalog stron .php. Chcesz ją mieć w sieci z HTTPS, bez stawiania serwera. Na Pethost to jedno polecenie, pethost deploy, uruchomione w katalogu aplikacji: samo pisze Dockerfile, buduje aplikację na twojej maszynie Pethost i wypisuje jej adres. Świeży projekt z laravel new zbudował się i uruchomił w 1 minutę 29 sekund, a katalog z dwiema stronami w 12 sekund.
- Jedno polecenie:
pethost deployw katalogu zcomposer.jsonalbo, dla zwykłych stron, zindex.php. Nie trzeba pisać pliku konfiguracyjnego. - Laravel i Symfony działają na FrankenPHP z PHP 8.4. pethost uruchamia
composer install, buduje assety Vite i uruchamia aplikację w trybie produkcyjnym. - Zwykłe strony PHP działają na Apache, z twoimi plikami
.htaccessimod_rewrite. - Baza SQLite Laravela jest trzymana w wolumenie i migrowana przy każdym starcie, więc nowe wdrożenie zachowuje dane.
- Cena: 9,99 € miesięcznie za 2 vCPU, 3 GB i 30 GB, na każdy twój projekt. Nie ma darmowego planu.
Czego potrzebujesz, żeby wdrożyć aplikację PHP w 2026
Trzech rzeczy: aplikacji, polecenia pethost i konta Pethost.
Aplikacja to katalog na twoim komputerze: tutaj projekt utworzony przez laravel new, szkielet Symfony z jedną stroną i dwie strony w czystym PHP. Docker na twoim komputerze nie jest potrzebny: obraz buduje się na twojej maszynie Pethost.
Polecenie to jeden program, instalowany jedną linią. Wszystkie jego polecenia są w dokumentacji CLI.
curl -fsSL https://pethost.dev/install.sh | sh # macOS, Linux
irm https://pethost.dev/install.ps1 | iex # Windows, in PowerShell
Konto potrzebuje planu. Jeśli nie jesteś zalogowany, pethost deploy otwiera przeglądarkę i cię loguje. Jeśli nie masz jeszcze planu, pokazuje, gdzie go wybrać, i czeka.
Wdróż aplikację Laravel
Aplikacja to ta, którą zostawia instalator Laravela: laravel new example-app, bez starter kitu, z SQLite jako bazą danych, z Pestem oraz z npm install i buildem, które robi instalator. Przejdź do jej katalogu i uruchom pethost deploy. Oto cały ekran:
$ cd example-app
$ pethost deploy
Name it [example-app]: it will live at https://example-app.sam.pethost.app
✓ Packed 10.4k files, 51 MB (left out node_modules · took .env from this folder)
✓ Uploaded straight to your machine
✗ /compose.yaml: the project directory has no compose.yaml at its root: add one
✓ Laravel project detected, wrote Dockerfile and .dockerignore.
~ The database starts empty on the machine and is migrated at each start: pethost run -- php artisan db:seed --force fills it from the project's seeders.
✓ Packed 10.4k files, 51 MB (left out node_modules · took .env from this folder)
✓ Uploaded straight to your machine
✓ Built and started in 1 min 29 s
· wrote compose.yaml for the Dockerfile: the service app, reading .env, port 80, a named volume at /app/storage/app
✓ app listens on 80 → https://example-app.sam.pethost.app
It answers 200.
https://example-app.sam.pethost.app
Wrote .pethost (commit it). Next: pethost logs -f · pethost open
- Pyta o jedno O nazwę projektu, która jest pierwszym słowem jego adresu. Enter bierze nazwę katalogu.
- Maszyna nie znajduje nic do uruchomienia Linia z krzyżykiem to jej odpowiedź: projekt działa z Dockerfile albo z pliku Compose, a w katalogu nie ma jeszcze żadnego z nich.
- pethost pisze Dockerfile
composer.jsonwymagalaravel/framework, więc pisze Dockerfile dla Laravela i wgrywa katalog jeszcze raz. - Maszyna buduje i uruchamia aplikację Potem pethost odpytuje adres i wypisuje odpowiedź: 200, stronę powitalną Laravela.
Twój .env, razem z APP_KEY, stał się plikiem projektu na maszynie. .pethost mówi, którym projektem jest ten katalog: zrób jego commit razem z Dockerfile, a następne wdrożenie o nic nie zapyta.
Dockerfile, który pethost pisze dla Laravela
Oto linie pliku zapisanego w katalogu, które mają znaczenie. Jego 54 linie mówią w komentarzach, po co jest każdy krok:
# check=skip=JSONArgsRecommended
# Written by pethost deploy for this Laravel project: composer.json requires
# laravel/framework, package.json builds the assets with "vite build", npm installs it
# (package-lock.json), its SQLite database is kept in storage/app, with the files the
# site is given, it runs in production mode, set over the folder's .env.
# It is yours now: change it as you like. pethost does not write it again.
FROM dunglas/frankenphp:1-php8.4
…
COPY . .
RUN composer install
…
RUN npm run build
ENV DB_DATABASE=/app/storage/app/database.sqlite
# The machine keeps this directory across deploys.
VOLUME /app/storage/app
EXPOSE 80
…
CMD export APP_ENV=production APP_DEBUG=false LOG_CHANNEL=stderr DB_DATABASE=/app/storage/app/database.sqlite && \
php artisan migrate --force && \
exec frankenphp run --config /etc/frankenphp/Caddyfile
- Serwer to FrankenPHP, zbudowany na Caddy, z PHP 8.4. Aplikacja wie, że działa za HTTPS, więc adresy URL, które pisze Laravel, zaczynają się od
https://. Rozszerzenia, którychcomposer.jsonwymaga jakoext-…, są instalowane. - Tryb produkcyjny jest ustawiany przy starcie, ponad
.envz twojego laptopa, a logi idą na wyjście kontenera, skąd czyta jepethost logs. - Plik SQLite leży w
storage/app, który maszyna trzyma w wolumenie między wdrożeniami, a migracje uruchamiają się przed startem serwera.
Uruchamiaj polecenia artisan na maszynie
pethost run uruchamia jedno polecenie w kontenerze aplikacji. Tutaj własne migracje Laravela, po trzech wdrożeniach:
$ pethost run -- php artisan migrate:status
example-app (.pethost)
Migration name .............................................. Batch / Status
0001_01_01_000000_create_users_table ............................... [1] Ran
0001_01_01_000001_create_cache_table ............................... [1] Ran
0001_01_01_000002_create_jobs_table ................................ [1] Ran
Wszystkie trzy są w batchu 1: uruchomiły się przy pierwszym starcie, a baza przetrwała dwa kolejne wdrożenia. pethost run -- php artisan db:seed --force wypełnia ją z twoich seederów, tak jak mówiła linia z tyldą, a pethost shell otwiera powłokę dla php artisan tinker.
Projekt Laravel, którego .env wskazuje MySQL albo Postgres, nie dostaje Dockerfile, bo baza danych musi działać obok niego. pethost to mówi:
✗ /compose.yaml: the project directory has no compose.yaml at its root: add one
.env names a database other than SQLite (DB_CONNECTION=pgsql), and the machine runs none beside a Dockerfile: the project needs a compose.yaml with the site and its database.
compose.yaml z aplikacją i jej bazą danych działa tak, jak go napisano. Możesz też jednym kliknięciem utworzyć bazę danych, bez dodatkowych kosztów, i podłączyć do niej aplikację: MariaDB dla aplikacji pisanej pod MySQL albo Postgres (Postgres w stałej cenie).
Wdróż aplikację Symfony
Aplikacja to szkielet Symfony, composer create-project symfony/skeleton my-project (to samo co symfony new my-project), z kontrolerem z przewodnika Symfony „Create your First Page”: src/Controller/LuckyController.php, którego trasa /lucky/number odpowiada losową liczbą. To samo polecenie ją wdraża:
$ cd my-project
$ pethost deploy
Name it [my-project]: it will live at https://my-project.sam.pethost.app
✓ Packed 1.7k files, 7.9 MB (took .env from this folder)
✓ Uploaded straight to your machine
✗ /compose.yaml: the project directory has no compose.yaml at its root: add one
✓ Symfony project detected, wrote Dockerfile and .dockerignore.
✓ Packed 1.7k files, 7.9 MB (took .env from this folder)
✓ Uploaded straight to your machine
✓ Built and started in 57 s
· wrote compose.yaml for the Dockerfile: the service app, reading .env, port 80
✓ app listens on 80 → https://my-project.sam.pethost.app
It answers 404.
https://my-project.sam.pethost.app
Wrote .pethost (commit it). Next: pethost logs -f · pethost open
Odpowiedź to 404, bo aplikacja nie ma trasy pod /, a na produkcji Symfony nie pokazuje strony powitalnej. Odpytaj trasę, która istnieje:
$ curl https://my-project.sam.pethost.app/lucky/number
<html><body>Lucky number: 27</body></html>
Dockerfile dla Symfony to ten dla Laravela bez Node'a i bazy danych. APP_ENV=prod jest ustawiany dla composer install, który rozgrzewa cache, i przy starcie, ponad .env, który Symfony commituje z APP_ENV=dev. Assety AssetMappera są kompilowane w buildzie. Projekt z encjami Doctrine w src/Entity nie dostaje Dockerfile: potrzebuje compose.yaml ze swoją bazą danych.
Wdróż zwykłe strony PHP
Bez frameworka, bez Composera: katalog z index.php, który pokazuje formularz, i hello.php, który czyta $_POST['name'] i się wita.
$ cd my-site
$ pethost deploy
Name it [my-site]: it will live at https://my-site.sam.pethost.app
✓ Packed 2 files, 604 B
✓ Uploaded straight to your machine
✗ /compose.yaml: the project directory has no compose.yaml at its root: add one
✓ PHP site detected, wrote Dockerfile.
~ Every file of the folder is public at its address, but for the Dockerfile and names that begin with a dot.
✓ Packed 3 files, 1 KB
✓ Uploaded straight to your machine
✓ Built and started in 12 s
· wrote compose.yaml for the Dockerfile: the service app, reading .env, port 80
✓ app listens on 80 → https://my-site.sam.pethost.app
It answers 200.
https://my-site.sam.pethost.app
Wrote .pethost (commit it). Next: pethost logs -f · pethost open
$ curl -d name=Sam https://my-site.sam.pethost.app/hello.php
…
<p>Hello, Sam!</p>
Dockerfile to oficjalny obraz PHP php:8.4-apache, który serwuje katalog, z produkcyjnymi ustawieniami PHP. Pliki .htaccess działają, a mod_rewrite jest włączony. Przeczytaj linię z tyldą: każdy plik w katalogu jest publiczny, więc sekret trafia do zmiennych projektu. Strony, które otwierają bazę danych przez mysqli albo PDO, potrzebują compose.yaml z tą bazą, i pethost to mówi.
Zmień kod i wdróż ponownie
Dodaj trasę do routes/web.php i uruchom to samo polecenie:
Route::get('/hello', function () {
return 'Hello from Laravel!';
});
$ pethost deploy
example-app (.pethost)
✓ Packed 10.4k files · uploaded · built and started in 48 s
· kept the project's .env in place of the version's own: after the first deploy the project's is kept
· wrote compose.yaml for the Dockerfile: the service app, reading .env, port 80, a named volume at /app/storage/app
· kept the project's x-pethost
It answers 200.
https://example-app.sam.pethost.app
To send this folder's .env: pethost env push
Zwróć uwagę na drugą linię: po pierwszym wdrożeniu maszyna trzyma .env projektu, a nie ten z twojego laptopa. pethost env set zmienia zmienną i od razu wdraża:
$ pethost env set APP_URL=https://example-app.sam.pethost.app
example-app (.pethost)
✓ /.env has APP_URL now. Deployed in 48 s.
Sama nazwa pyta o sekret, nie pokazując go: pethost env set MAIL_PASSWORD. pethost github sam/example-app od tej chwili wdraża każdy push, a pethost rollback przywraca poprzednią wersję. Agent AI może zrobić to wszystko przez serwer MCP Pethost: jak agent wdraża projekt i o niego dba.
Użyj własnej domeny dla aplikacji PHP
Każda nazwa pod domeną twojego konta działa od razu, z HTTPS. Domena, którą masz, to jedno polecenie i jeden rekord DNS:
pethost domain add www.example.com
Polecenie wypisuje rekord: CNAME na nazwę twojej maszyny. Certyfikat pojawia się, gdy tylko nazwa zacznie się rozwiązywać, i sam się odnawia.
Co dostajesz za tę cenę
Pethost kosztuje 9,99 € miesięcznie za wszystko, co hostujesz, na 2 vCPU, 3 GB pamięci i 30 GB dysku. To miejsce na aplikację Laravel, jej workera kolejki, bazę danych i twój następny projekt, bez opłaty za projekt i bez żadnych liczników. Maszyna działa cały czas, więc odwiedzający nigdy nie czeka na zimny start.
- 9,99 € miesięcznie za wszystkie twoje projekty, bez liczników
- 1 min 29 s na zbudowanie i uruchomienie nowej aplikacji Laravel za pierwszym razem
- 12 s dla katalogu stron PHP
Co jest już zrobione za ciebie: HTTPS z certyfikatami, które same się odnawiają, wdrożenia z GitHuba, nocne backupy trzymane przez 14 dni, SSH do każdego kontenera i każde żądanie policzone, bez żadnego skryptu na twoich stronach. Plany są w cenniku na stronie głównej.
Pethost to najlepszy wybór dla
- Programistów PHP z aplikacją Laravel albo Symfony, którzy chcą ją mieć w sieci bez utrzymywania serwera
- Osób, które odchodzą od hostingu współdzielonego z katalogiem stron PHP i kilkoma kolejnymi projektami w planach
- Osób, za które wdraża agent: Claude Code albo Codex wystawia aplikację do sieci i czyta jej logi
- Wczesnych startupów, które chcą stałego miesięcznego kosztu, póki produkt jest mały
Poszukaj gdzie indziej, jeśli
- Twoja aplikacja potrzebuje kilku regionów albo autoskalowania
Pytania
Jak wdrożyć aplikację PHP bez pisania Dockerfile?
Uruchom pethost deploy w katalogu aplikacji. Dla projektu Laravel albo Symfony, albo dla katalogu z index.php, pisze Dockerfile i go wdraża. Plik zostaje w twoim katalogu i możesz go zmieniać.
Jakiej wersji PHP używa Pethost?
Dockerfile, które pisze pethost, uruchamiają PHP 8.4: na FrankenPHP dla Laravela i Symfony, na Apache dla zwykłych stron. Wersja jest w linii FROM Dockerfile, a ten plik jest twój.
Czy baza SQLite w Laravelu przetrwa ponowne wdrożenie?
Tak. Plik leży w storage/app, który maszyna trzyma w wolumenie, a każdy start uruchamia php artisan migrate --force. Dwa wdrożenia później migracje wciąż pokazywały batch 1.
Czy mogę wdrożyć aplikację Laravel z MySQL albo Postgres?
Tak, z compose.yaml, który uruchamia aplikację obok jej bazy danych: pethost nie pisze dla niej Dockerfile i to mówi. Możesz też podłączyć aplikację do bazy danych utworzonej jednym kliknięciem, bez dodatkowych kosztów: MariaDB dla aplikacji pisanej pod MySQL albo Postgres.
Ile kosztuje hosting aplikacji PHP na Pethost?
9,99 € miesięcznie za plan Starter, z 2 vCPU, 3 GB i 30 GB, bez opłaty za projekt: twoje inne aplikacje i bazy danych też tam działają. Nie ma darmowego planu. Ceny są bez VAT.
Ekrany to wdrożenia na naszej maszynie testowej, z pethost 0.2.4: projekt utworzony przez instalator Laravela 5.32.0 (Laravel 13.38.0), szkielet Symfony 8.1.9 i dwie strony w czystym PHP, wszystko na PHP 8.4.27. Wdrożenie Laravela poszło pierwsze; to dla Symfony użyło obrazu FrankenPHP, który tamto już pobrało. Konto na nich to przykładowe sam.
- Laravel: instalacja
- Laravel: wdrażanie
- Symfony: instalacja i konfiguracja frameworka
- Symfony: tworzenie pierwszej strony
- FrankenPHP: dokumentacja
- PHP: oficjalny obraz Dockera
- pethost, narzędzie wiersza poleceń Pethost
Opublikuj swoje projekty jeszcze dziś
Wdrażaj aplikacje, boty i bazy danych ze swojego agenta, z GitHuba lub w przeglądarce, tyle, ile się zmieści, w jednej stałej cenie. Nic liczonego za zużycie, nic doliczanego.