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érifiez 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 jolies 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. Un autre avantage 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épendance 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) viacomposer 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 mettreprod
au lieu dedev
).
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 ou en supprimant 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.