Français

Blog · Guides de déploiement

Comment déployer une application PHP en 2026 : Laravel, Symfony ou pages PHP simples en une commande

Par l’équipe Pethost · · Mis à jour le · 11 min de lecture

Vous avez une application PHP qui tourne sur votre ordinateur : un projet Laravel, un projet Symfony, ou un dossier de pages .php. Vous voulez la mettre en ligne en HTTPS, sans configurer de serveur. Sur Pethost, c’est une seule commande, pethost deploy, lancée dans le dossier de l’application : elle écrit le Dockerfile, construit l’application sur votre machine Pethost et affiche son adresse. Un projet tout juste sorti de laravel new a été construit et démarré en 1 minute 29 secondes, et un dossier de deux pages en 12 secondes.

En bref
  • Une commande : pethost deploy dans le dossier qui contient composer.json, ou index.php pour des pages simples. Aucun fichier de configuration à écrire.
  • Laravel et Symfony tournent sur FrankenPHP avec PHP 8.4. pethost lance composer install, construit les assets Vite et démarre l’application en mode production.
  • Les pages PHP simples tournent sur Apache, avec vos fichiers .htaccess et mod_rewrite.
  • La base de données SQLite de Laravel est gardée dans un volume et migrée à chaque démarrage : un nouveau déploiement garde donc les données.
  • Le prix : 9,99 € par mois pour 2 vCPU, 3 GB et 30 GB, pour tous vos projets. Il n’y a pas d’offre gratuite.

Ce qu’il faut pour déployer une application PHP en 2026

Trois choses : l’application, la commande pethost et un compte Pethost.

L’application est un dossier sur votre ordinateur : ici un projet créé par laravel new, un squelette Symfony avec une page, et deux pages de PHP simple. Docker n’est pas nécessaire sur votre ordinateur : l’image est construite sur votre machine Pethost.

La commande est un seul programme, installé par une ligne. Toutes ses commandes sont dans la référence de la CLI.

curl -fsSL https://pethost.dev/install.sh | sh      # macOS, Linux
irm https://pethost.dev/install.ps1 | iex           # Windows, in PowerShell

Le compte a besoin d’une offre. Si vous n’êtes pas connecté, pethost deploy ouvre votre navigateur et vous connecte. Si vous n’avez pas encore d’offre, il vous montre où en choisir une, et attend.

Déployer une application Laravel

L’application est celle que laisse l’installeur de Laravel : laravel new example-app, sans starter kit, avec SQLite comme base de données, Pest, et le npm install et le build que lance l’installeur. Allez dans son dossier et lancez pethost deploy. Voici l’écran entier :

$ 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
  1. Une seule question Le nom du projet, le premier mot de son adresse. Entrée prend le nom du dossier.
  2. La machine ne trouve rien à lancer La ligne avec la croix est sa réponse : un projet tourne à partir d’un Dockerfile ou d’un fichier Compose, et le dossier n’a encore ni l’un ni l’autre.
  3. pethost écrit le Dockerfile composer.json requiert laravel/framework : pethost écrit donc celui de Laravel et envoie de nouveau le dossier.
  4. La machine le construit et le démarre Puis pethost interroge l’adresse et affiche la réponse : 200, la page d’accueil de Laravel.

Votre .env, APP_KEY compris, est devenu celui du projet sur la machine. .pethost indique à quel projet correspond ce dossier : committez-le avec le Dockerfile, et le déploiement suivant ne demande plus rien.

Le Dockerfile que pethost écrit pour Laravel

Voici les lignes qui comptent dans le fichier écrit dans le dossier. Ses 54 lignes disent en commentaire pourquoi chaque étape est là :

# 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

Lancer des commandes artisan sur la machine

pethost run lance une commande dans le conteneur de l’application. Ici, les migrations de Laravel lui-même, après trois déploiements :

$ 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

Les trois sont dans le batch 1 : elles ont tourné au premier démarrage, et la base de données a traversé les deux déploiements suivants. pethost run -- php artisan db:seed --force la remplit à partir de vos seeders, comme le disait la ligne au tilde, et pethost shell ouvre un shell pour php artisan tinker.

Un projet Laravel dont le .env nomme MySQL ou Postgres n’obtient pas de Dockerfile, puisque la base de données doit tourner à côté de l’application. pethost le dit :

✗ /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.

Un compose.yaml avec l’application et sa base de données tourne tel qu’il est écrit. Vous pouvez aussi créer une base de données en un clic, sans supplément, et la connecter à l’application : une base MariaDB pour une application faite pour MySQL, ou une base Postgres (Postgres à prix fixe).

Déployer une application Symfony

L’application est le squelette de Symfony, composer create-project symfony/skeleton my-project (l’équivalent de symfony new my-project), avec le contrôleur du guide « Créer votre première page » de Symfony : src/Controller/LuckyController.php, dont la route /lucky/number répond un nombre au hasard. La même commande la déploie :

$ 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

La réponse est 404 parce que l’application n’a pas de route sur /, et qu’en production Symfony n’affiche pas de page d’accueil. Interrogez la route qui existe :

$ curl https://my-project.sam.pethost.app/lucky/number
<html><body>Lucky number: 27</body></html>

Le Dockerfile de Symfony est celui de Laravel, sans Node ni base de données. APP_ENV=prod est fixé pour composer install, qui préchauffe le cache, et au démarrage, par-dessus le .env que Symfony committe avec APP_ENV=dev. Les assets d’AssetMapper sont compilés pendant le build. Un projet avec des entités Doctrine dans src/Entity n’obtient pas de Dockerfile : il lui faut un compose.yaml avec sa base de données.

Déployer des pages PHP simples

Ni framework, ni Composer : un dossier avec index.php, qui affiche un formulaire, et hello.php, qui lit $_POST['name'] et dit bonjour.

$ 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>

Le Dockerfile prend l’image officielle de PHP, php:8.4-apache, qui sert le dossier avec les réglages de production de PHP. Les fichiers .htaccess fonctionnent, avec mod_rewrite activé. Lisez la ligne au tilde : chaque fichier du dossier est public, un secret va donc dans les variables du projet. Les pages qui ouvrent une base de données avec mysqli ou PDO ont besoin d’un compose.yaml qui la contient, et pethost le dit.

Modifier le code et redéployer

Ajoutez une route dans routes/web.php et lancez la même commande :

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

Notez la deuxième ligne : après le premier déploiement, la machine garde le .env du projet, pas celui de votre ordinateur. pethost env set change une variable et déploie aussitôt :

$ pethost env set APP_URL=https://example-app.sam.pethost.app
example-app (.pethost)
✓ /.env has APP_URL now. Deployed in 48 s.

Un nom seul demande un secret sans l’afficher : pethost env set MAIL_PASSWORD. pethost github sam/example-app déploie ensuite chaque push, et pethost rollback remet en place la version précédente. Un agent IA peut faire tout cela par le serveur MCP de Pethost : comment un agent déploie un projet et s’en occupe.

Utiliser votre propre domaine pour l’application PHP

Chaque nom sous le domaine de votre compte fonctionne aussitôt, en HTTPS. Un domaine à vous demande une commande et un enregistrement DNS :

pethost domain add www.example.com

Elle affiche l’enregistrement : un CNAME vers le nom de votre machine. Le certificat arrive dès que le nom pointe vers la machine, et se renouvelle tout seul.

Ce que vous obtenez pour ce prix

Pethost coûte 9,99 € par mois pour tout ce que vous hébergez, sur 2 vCPU, 3 GB de mémoire et 30 GB de disque. C’est de la place pour l’application Laravel, son worker de file d’attente, une base de données et votre prochain projet, sans frais par projet et sans rien de facturé à l’usage. La machine est toujours allumée : un visiteur n’attend jamais un démarrage à froid.

Ce qui est déjà fait pour vous : HTTPS avec des certificats qui se renouvellent seuls, déploiements depuis GitHub, sauvegardes chaque nuit conservées 14 jours, SSH dans n’importe quel conteneur, et chaque requête comptée, sans script dans vos pages. Les offres sont dans la partie tarifs de la page d’accueil.

Chaque projet, bien identifié. Sept projets sur une seule machine Starter : les applications avec leurs adresses et leurs requêtes du dernier jour, les bases de données avec les applications qui les utilisent.
La première page de la console Pethost : le CPU, la mémoire et le disque de la machine, et ses projets sous forme de cartes.

Pethost est le meilleur choix pour

  • Les développeurs PHP avec une application Laravel ou Symfony qui veulent la mettre en ligne sans gérer de serveur
  • Ceux qui quittent un hébergement mutualisé avec un dossier de pages PHP et quelques projets de plus à venir
  • Ceux dont l’agent déploie à leur place : Claude Code ou Codex met l’application en ligne et lit ses logs
  • Les jeunes startups qui veulent un coût mensuel fixe tant que le produit est petit

Cherchez ailleurs si

  • Votre application a besoin de plusieurs régions ou d’autoscaling

Questions

Comment déployer une application PHP sans écrire de Dockerfile ?

Lancez pethost deploy dans le dossier de l’application. Pour un projet Laravel ou Symfony, ou un dossier avec index.php, la commande écrit le Dockerfile et le déploie. Le fichier reste dans votre dossier, et vous pouvez le modifier.

Quelle version de PHP tourne sur Pethost ?

Les Dockerfiles qu’écrit pethost font tourner PHP 8.4 : sur FrankenPHP pour Laravel et Symfony, sur Apache pour les pages simples. La version est dans la ligne FROM du Dockerfile, qui est à vous.

La base SQLite de Laravel survit-elle à un redéploiement ?

Oui. Le fichier est dans storage/app, que la machine garde dans un volume, et chaque démarrage lance php artisan migrate --force. Deux déploiements plus tard, les migrations étaient toujours dans le batch 1.

Peut-on déployer une application Laravel avec MySQL ou Postgres ?

Oui, avec un compose.yaml qui fait tourner l’application à côté de sa base de données : pethost n’écrit pas de Dockerfile pour elle, et le dit. Vous pouvez aussi connecter l’application à une base de données créée en un clic, sans supplément : une base MariaDB pour une application faite pour MySQL, ou une base Postgres.

Combien coûte l’hébergement d’une application PHP sur Pethost ?

9,99 € par mois pour Starter, avec 2 vCPU, 3 GB et 30 GB, sans frais par projet : vos autres applications et bases de données y tournent aussi. Il n’y a pas d’offre gratuite. Les prix sont hors TVA.

Les écrans sont des déploiements sur une de nos machines de test, avec pethost 0.2.4 : un projet créé par l’installeur de Laravel 5.32.0 (Laravel 13.38.0), le squelette de Symfony 8.1.9 et deux pages de PHP simple, le tout sur PHP 8.4.27. Le déploiement Laravel est venu en premier ; celui de Symfony a utilisé l’image FrankenPHP qu’il avait récupérée. Le compte qu’on y voit est celui de l’exemple, sam.

  1. Laravel : installation
  2. Laravel : déploiement
  3. Symfony : installer et configurer le framework
  4. Symfony : créer votre première page
  5. FrankenPHP : documentation
  6. PHP : l’image Docker officielle
  7. pethost, la ligne de commande de Pethost

Mettez vos projets en ligne dès aujourd’hui

Déployez applications, bots et bases de données depuis votre agent, GitHub ou le navigateur, autant qu’il en tient, à un prix fixe. Rien au compteur, rien facturé en plus.

Tout héberger pour 9,99 €/mois