Mise en production

Mise en production

1 mai 2021

La mise en production est la dernière étape afin de faire profiter au monde entier de votre dur labeur. Néanmoins, cette étape s'avère aussi très importante.

Nous y voilà, notre projet est enfin terminé, prêt à être déployé sur notre serveur en ligne ! Du stress, de la joie et de l'inquiétude se mêlent à l'espérance de ne pas voir notre projet subir des avaries une fois en ligne. ?

Je vais donc vous détailler les différentes étapes pour la mise en production de votre projet Symfony.

Étape 0 ?‍♂️

Vérifiez si le serveur distant est prêt à recevoir votre projet Symfony !
Ceci peut paraître idiot, mais il pourrait ne pas pouvoir le recevoir et donc ne pas l'exécuter proprement. Si vous avez la possibilité d'avoir un accès SSH sur votre serveur, testez celui-ci avec la commande suivante :

symfony check:requirements

Cette étape n'est pas obligatoire. Normalement, la plupart des serveurs d'aujourd'hui devraient pouvoir faire tourner Symfony, dans le doute, renseignez-vous !

Étape 1

Tant que vous êtes en local pour développer, toutes vos routes fonctionneront. Par contre, une fois en ligne, il y a de fortes chances que plus rien ne marche. Pour régler cela, nous avons besoin d'un fichier nommé ".htaccess", contenant des directives, qui permettra la redirection des routes. Ce fichier est interprété par le serveur Apache.

Symfony nous propose une commande afin de le générer facilement :

composer require symfony/apache-pack

Hop ! Dans le dossier "public", votre fichier ".htaccess" est maintenant présent.
Direction l'étape 2 !

Étape 2

Il va maintenant falloir vérifier la sécurité des différentes dépendances de votre projet. Entre celles que vous avez installées et celles préexistantes, certaines peuvent posséder des vulnérabilités déjà connues. Vérifions que tout est conforme avec la commande suivante :

symfony security:check

# Sinon installez le package correspondant et exécutez la vérification
# composer require sensiolabs/security-checker
# php bin/console security:check

Si tout s'est bien passé, vous devez avoir en retour :
En cas d'erreur, faites une mise à jour de vos dépendances avec la commande suivante :

composer update

Vous pouvez aussi retirer les dépendances dont vous ne vous servez pas avec la commande suivante :

composer remove nom_du_package_a_retirer

Étape 3

Modifiez votre fichier d'environnement ".env". Nous devons préciser que notre projet est en mode production et non plus en développement.

Pour cela, modifiez la variable APP_ENV pour la passer en production :

APP_ENV=prod

Je vous conseille d'ajouter une seconde variable, qui n'est pas présente, afin de ne pas afficher d'erreur PHP :

APP_DEBUG=false

N'oubliez pas non plus de modifier la variable DATABASE_URL avec les identifiants de connexions à MySQL de votre serveur ainsi que MAILER_DSN pour vos envois d'e-mails.

Note : Il est possible que vous ne souhaitiez pas que votre application traite les fichier ".env". Il est possible de générer un "env.local.php" optimisé qui remplace tous les autres fichier de configuration. Pour cela, utilisez cette commande :

composer dump-env prod

Étape 4

Videz le cache : nul besoin de garder le cache qui s'est généré pendant le développement de votre application. Deux méthodes sont possibles pour faire cela. La première utilisera une ligne de commande :

symfony console cache:clear

# Vous pouvez aussi utiliser une autre commande
# php bin/console cache:clear

Cette commande videra le cache en se basant sur la variable d'environnement APP_ENV. Donc si cette variable est sur "prod", il videra le cache de production, si elle est sur "dev", ce sera le cache de développement.

Vous avez aussi la possibilité de choisir le cache à vider en ajoutant un drapeau à la commande :

symfony console cache:clear --env=prod
symfony console cache:clear --env=dev

# Vous pouvez aussi utiliser une autre commande
# php bin/console cache:clear --env=prod
# php bin/console cache:clear --env=dev

Il est aussi possible de simplement supprimer manuellement le dossier "cache" se situant dans le dossier "var" de votre projet. Simple et efficace. ?

Étape 5

Il faut maintenant tout envoyer sur votre serveur distant ! Il existe une multitude de manières de le faire. Cela peut être à l'ancienne, avec un logiciel FTP, ou de façon plus moderne en utilisant un package comme : EasyDeployBundle, Deployer, Capistrano... Là, je vous laisse le choix.

Si votre serveur vous propose un accès SSH, voire un terminal en ligne, n'envoyez pas le dossier "vendor", car il est extrêmement lourd. Vous avez la possibilité de le recréer en utilisant la commande :

composer install

Étape 6

Il ne vous reste plus qu'à construire votre base de données. Si vous avez accès à un terminal en ligne ou un accès SSH sur votre serveur, il suffit de relancer les commandes suivantes :

Créez la base de données

symfony console doctrine:database:create

# Vous pouvez aussi utiliser une autre commande
# php bin/console doctrine:database:create

Créez une migration

symfony console make:migration

# Vous pouvez aussi utiliser une autre commande
# php bin/console make:migration

Exécutez la migration

symfony console doctrine:migrations:migrate

# Vous pouvez aussi utiliser une autre commande
# php bin/console doctrine:migrations:migrate

Si au contraire, vous n'avez aucun accès SSH ou autre, exportez la base de données locale puis importez-la sur le serveur distant.