Comment déployer Symfony sur un serveur dédié ou un VPS ?
Le
Toutes les étapes pour déployer Symfony sur votre serveur en utilisant Git.
Ce tutoriel part du principe que votre serveur dédié ou votre VPS est installé et configuré avec PHP, MySql, Apache...
Attention, les commandes sur le serveur sont à préfixer avec « sudo » si vous n’êtes pas administrateur.
Initilisation de Git :
- [local] Initialisez Git dans votre projet local
git init - [local] Ajoutez le contenu à l’index git
git add . - [local] Faites votre commit
git commit -m « messageducommit »
Création du dépot distant :
- [VPS] Connectez vous en SSH à votre VPS
ssh user@server.com - [VPS] Installez git sur votre VPS
apt-get install git - [VPS] Créez dans votre VPS dans votre répertoire home de votre utilisateur un dossier qui sert de dépôt distant à votre projet et que vous allez pouvoir ensuite utiliser pour cloner votre application
cd ~
cd home/nomdevotreutilisateur
mkdir hub-nomduprojet.git - [VPS] Initialisez un dépôt git vide à l’intérieur de ce dossier
cd hub-nomduprojet.git
git —bare init
Push des données sur le dépot distant :
- [local] Dans le projet en local, ajoutez le dépôt distant
git remote add origin votreutilisateur@votreserveur.com:/home/votreutilisateur/hub-nomduprojet.git - Vérifiez votre branche origin
git remote show origin
ou alors
git remote -v - [local] Faites votre premier push de la branche master local vers le dépôt distant
git push origin master - Si vous vous êtes trompés d’url pour votre dépôt distant (et que vous avez une erreur lors du push), vous pouvez modifier l’url
git remote set-url origin votreutilisateur@votreserveur.com:/home/votreutilisateur/hub-nomduprojet.git - [VPS] Sur le VPS, depuis la racine, clonez le dépôt distant dans le dossier configuré avec Apache
git clone home/votreutilisateur/hub-nomduprojet.git /var/www/votredossierhost
A cette étape là, votre dossier host doit contenir votre structure Symfony.
- [VPS] Vérifiez que le serveur est bien configuré par rapport aux attentes de Symfony (version de php etc)
php bin/console symfony_requirements
Création de la base de données :
- [VPS] Créez une base de données vierge (l'autre possibilités est d'importer la base de données local)
mysql -u user -p
CREATE DATABASE nomdelabasededonnées; - Pour vérifier que la base de données a bien été créée
SHOW DATABASES; - Pour sortir de mysql
exit puis appuyez sur « entrée »
Installation de composer :
- [VPS] (optionnel) Mettez à jour le cache du package manager :
apt-get update - [VPS] Installez Curl (pour pouvoir installer Composer), PHP CLI, et unzip (pour pouvoir extraire les packages zippés)
En une seule ligne :
apt install curl php-cli unzip
En plusieurs fois (si erreur sur un des paquets) :
apt install curl php-cli unzip
apt install php-cli
apt install unzip - [VPS] Placez vous dans la home
cd ~ - [VPS] Installation de composer
curl -sS https://getcomposer.org/installer | php - [VPS] Installez composer de manière globale
mv composer.phar /usr/local/bin/composer - [VPS] Rendez Composer exécutable
chmod +x /usr/local/bin/composer
Téléchargement des dépendances composer :
- [VPS] Dans le dossier du projet (var/www/nomdudossier), installez vos dépendances
composer install --no-dev —optimize-autoloader
Après le téléchargement des dépendances, les différents identifiants de base de données, mails etc vous seront demandés. Remplissez tout ceux qui sont utilisés : base de données (avec localhost en host par exemple). Notez que les identifiants mail doivent être remplis si FOSUser est installé par exemple. - Si vous avez une erreur liée à la classe SensioGeneratorBundle, mettez à jour les dépendances composer
composer update - [VPS] Si vous avez une erreur liée à la mémoire, activez l'espace Swap
/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1
Puis relancez composer install
Mise à jour des permissions :
- [VPS] Activez ACL
apt-get install acl - [VPS] Utilisez setfacl pour modifier les droits
Récupérez l’user actuel
HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)
Si la commande pose un soucis de copié-collé, elle est disponible ici : https://symfony.com/doc/3.4/setup/file_permissions.html - [VPS] Placez vous dans le dossier de Symfony et définissez les permissions (la première ligne pour les futures fichiers / dossiers, la seconde pour les actuels)
setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
Finalisation :
- [VPS] Mettez à jour le schéma de base de données
(optionnel) : php bin/console doctrine:schema:validate - (optionnel) : php bin/console doctrine:schema:update —dump-sql
php bin/console doctrine:schema:update —force - Si vous avez une erreur liée à la classe "SensioGeneratorBundle", mettez à jour les dépendances composer
composer Update - [VPS] Videz les caches pour la prod
php bin/console cache:clear --env=prod --no-debug
David Robert