Tutoriel Vidéo Symfony Publication du site

Télécharger la vidéo

Maintenant que nous avons créé notre application Symfony on souhaite la mettre en ligne. Pour cette mise en ligne il n'est pas nécessaire d'aller vers une solution complexe vu que l'on utilise des technologies assez répandues : PHP et MySQL et on peut se contenter d’un hébergement mutualisé.

Prérequis

Tout d'abord, assurez-vous que la version de PHP proposée par votre hébergeur corresponde à celle qui est nécessaire pour que votre application fonctionne. Vous pouvez vérifier la version, ainsi que les extensions requises en éditant votre fichier composeur.

   "require": {
       "php": "^7.1.3",
       "ext-ctype": "*",
       "ext-iconv": "*",

Vérifier ensuite que votre hébergeur vous laisse la possibilité de changer le répertoire racine du serveur web. En effet dans le cas de Symfony c'est le dossier public qui doit servir de racine et non pas la racine de votre projet. De la même manière, assurez-vous que votre hébergeur supporte la réécriture d'url qui sera nécessaire pour avoir de jolis URL.

Enfin, le support d'un accès SSH peut être un plus. SSH vous permettra d'interagir avec votre application directement sur le serveur pour effectuer certaines opérations comme la migration de la base de données ou encore le nettoyage du cache. L'autre avantage c'est que vous allez pouvoir utiliser des outils pour synchroniser automatiquement Les fichiers et dossiers de votre application.

Préparer la mise en ligne

Avant de mettre en ligne notre projet nous allons devoir effectuer quelques modifications afin de l'adapter à notre environnement distant.
La première étape sera la création d'un fichier .htaccess qui servira à la réécriture d'url. Ce fichier n'est plus présent par défaut dans les installations de Symfony et il faut donc l'installer en utilisant la recette apache-pack

composer require symfony/apache-pack

Un autre point à vérifier est la dépendances symfony/dotenv. Si votre hébergeur ne vous laisse pas définir des variables d'environnement pour votre application PHP (ce qui est souvent le cas) vous devrez déplacer cette dépendance dans la partie require.

composer remove symfony/dotenv
composer require symfony/dotenv

La mise en ligne

Pour mettre en ligne notre application il va falloir commencer par déplacer les fichiers et dossiers nécessaires à Symfony pour fonctionner. Nous allons donc déplacer l'ensemble des dossiers qui composent notre application à l'exception de quelques dossiers particuliers :

  • Le dossier var contient les logs et le cache, il n’est pas nécessaire de l’envoyer
  • Le dossier node_modules est utilisé pour la génération d’assets CSS / JS et ne sert donc qu’en local. Il est inutile de l’envoyer sur le serveur
  • Le dossier vendor peut être envoyé en ligne mais si vous avez un accès SSH il peut être plus intéréssant d'installer les dépendances directement sur le serveur (afin de retirer les dépendances de développement) via composer install --no-dev --optimize-autoloader.
  • Le fichier .env ne sera pas envoyé en ligne, mais il faudra en créer une copie que vous remplirez avec vos informations (vous pouvez changer APP_ENV pour mettre prod au lieu de dev).

Vous pouvez utiliser rsync pour filtrer automatiquement les dossiers :

rsync -av ./ monutilisateur@monserver:~/dossier --include=public/build --include=public/.htaccess --exclude-from=.gitignore --exclude=".*"

Si vous utiliser un logiciel FTP classique, pensez à vérifier les permissions des dossiers afin que PHP puisse écrire dans les dossiers comme le cache ou le dossier d'upload de fichiers.

Il faudra ensuite vider le cache si nécessaire afin que toutes les modifications soit prises en compte. Vous pouvez le faire en ligne de commande via la commande cache:clear ou supprimer le dossier cache si vous n'avez pas accès à la console.

Pour la base de données les choses se passent comme pendant le développement. Si vous avez accès à l'invite de commande vous pouvez vous contenter de lancer un :

php bin/console doctrine:migrations:migrate

Sinon il vous faudra importer la structure via un dump sql.