# Déployer Laravel

> Une application Laravel avec sa base, son cache, ses files d'attente, son planificateur et ses migrations, sur Fransys.

Source : https://docs.fransys.cloud/guides/laravel/ Vérifié sur la console le 2026-10-23.

## Ce qu'il vous faut

- Un projet rattaché à un cluster ([Premier déploiement](https://docs.fransys.cloud/demarrer/premier-deploiement/)).
- Votre application dans un dépôt GitHub ou GitLab, ou une image Docker déjà construite.

## Le service de l'application

Ajoutez une **Application**. Dans **Général**, la **Plateforme** dépend de votre compte : choisissez Laravel si elle est proposée, sinon l'image Docker, construite par votre Dockerfile. Branchez le dépôt et la CI : voir [Depuis GitHub ou GitLab](https://docs.fransys.cloud/projets/github-gitlab/).

Avec votre propre Dockerfile, réglez le **Port du conteneur** sur celui où répond votre serveur web (par exemple `8080` avec les images `serversideup/php`, `80` avec un nginx classique).

## La base de données

Ajoutez une base PostgreSQL ou MariaDB **reliée** à l'application. L'application reçoit ses variables de connexion : ouvrez l'onglet **Variables** pour voir leurs noms.

Laravel attend `DB_HOST`, `DB_PORT`, `DB_DATABASE`, `DB_USERNAME` et `DB_PASSWORD`. Deux façons de faire correspondre :
- **renommer** chaque variable reçue dans ce service (**Nom dans ce service**) ;
- ou **ajouter** `DB_HOST=${…}` en citant la variable reçue, avec **Autoriser les références**.

Ajoutez `DB_CONNECTION=pgsql` (ou `mariadb`).

## Les variables de l'application

Importez votre `.env.example` (mode **Plusieurs variables (.env)**), puis complétez :
- `APP_KEY` : générez-la sur votre poste avec `php artisan key:generate --show`, et ajoutez-la **protégée** ;
- `APP_ENV=production`, `APP_DEBUG=false` ;
- `APP_URL` : l'adresse du service, en `fransysapp.com` ou votre domaine.

Gardez les secrets (clés d'API, mots de passe SMTP) en variables protégées.

## Redis pour le cache, les sessions et les files

Ajoutez un Redis relié à l'application : elle reçoit `REDIS_HOST`, `REDIS_PORT` et `REDIS_PASSWORD`, les noms qu'attend Laravel. Puis `CACHE_STORE=redis`, `SESSION_DRIVER=redis`, `QUEUE_CONNECTION=redis`.

## Les migrations

Dans **Commandes de déploiement**, ajoutez `php artisan migrate --force` à **Après la première installation** et à **Après une mise à jour**. Ajoutez au même endroit `php artisan optimize` si vous mettez la configuration en cache.

## Le planificateur

Activez **Lancer le planificateur Laravel** si votre plateforme le propose. Sinon, ajoutez une [tâche planifiée](https://docs.fransys.cloud/projets/taches-planifiees/) `php artisan schedule:run` chaque minute (`* * * * *`).

## Les workers de files d'attente

Fransys ne change pas la commande du conteneur. Faites lire un rôle à votre point d'entrée :

```sh
#!/bin/sh
# entrypoint.sh
if [ "$CONTAINER_ROLE" = "worker" ]; then
  exec php artisan queue:work --tries=3
fi
exec "$@"
```

Puis copiez le service de l'application et ajoutez `CONTAINER_ROLE=worker` à la copie. Votre agent sait préparer cette copie dans un plan.

## Les fichiers envoyés par vos utilisateurs

Un conteneur redémarre sans ses fichiers. Pour `storage/app`, ajoutez un volume dans **Stockage** (point de montage `/var/www/html/storage/app`, selon votre image), ou utilisez un stockage objet compatible S3.

## Le temps réel

Pour le broadcasting, ajoutez un service WebSocket relié à l'application et le pilote Pusher. Voir [Autres services](https://docs.fransys.cloud/projets/autres-services/#websocket).

## Le faire faire par votre agent

Ouvrez l'agent dans le dossier du dépôt et donnez-lui la consigne du guide de lancement : il lit le Dockerfile, le `docker-compose` et le `.env.example`, puis prépare le port, les variables, les bases, le planificateur et les workers dans un plan, que vous relisez. Voir [Déployer votre code](https://docs.fransys.cloud/demarrer/deployer-votre-code/#le-faire-préparer-par-votre-agent).
