Dans ce nouveau chapitre nous allons voir comment héberger notre application Laravel sur un hébergement mutualisé via SSH en utilisant O2Switch. L'hébergeur utilise l'interface d'administration CPanel (si vous êtes sur un hébergeur avec la même interface vous pouvez suivre le même procédé).
00:00 Introduction
01:21 Configuration SSH
04:10 Mise en place du dépôt git
06:34 Clonage des sources
07:35 Configuration de l'hébergement
09:00 Automatiser avec Make
Création de la clef SSH
La première étape va se dérouler sur notre machine et nous allons générer une clef spécifique à cet hébergeur.
ssh-keygen -t ed25519 -f ~/.ssh/o2switch
Pour des raisons de sécurité O2Switch bloque l'accès SSH et il faudra sélectionner les IPs qui sont autorisées à accéder au serveur. Pour cela, sur votre interface CPanel il faudra vous rendre sur Autorisation SSH et ajouter votre IP.
Une fois votre IP autorisée vous pourrez vous connecter à la machine. Mais afin de se simplifier la vie nous allons créer un alias en modifiant le fichier de configuration ~/.ssh/config
Host o2switch
HostName monsite.fr
User XXX
IdentityFile ~/.ssh/o2switch
IdentitiesOnly yes
Cela nous permettra de nous connecter plus facilement à ce serveur en tapant simplement la commande
ssh o2switch
Afin de ne pas avoir à rentrer le mot de passe de l'hébergeur à chaque connexion nous allons copier la clef publique générée au début à l'aide de la commande ssh-copy-id
.
ssh-copy-id -i ~/.ssh/o2switch.pub o2switch
Je peux maintenant me connecter au serveur sans avoir besoin de taper le mot de passe de mon hébergeur.
Modification du .bashrc
Lors de ma première connexion j'ai remarqué un problème avec mon terminal (non prise en compte des retours en arrière). Si vous avez le même problème vous devrez éditer le fichier .bashrc
pour y ajouter
export TERM=xterm
Vous pouvez aussi modifier le fichier .bashrc
pour ajouter le support de NodeJS
export PATH="$PATH:/opt/alt/alt-nodejs16/root/usr/bin/"
Pensez à utiliser source ~/.bashrc
après avoir modifier le fichier pour que votre nouvelle configuration soit prise en compte
Création du dépôt git
Cette étape est facultative et vous pouvez héberger le dépôt git de votre projet sur des plateformes externes mais il peut être intéressant de le faire soi-même pour garder un contrôle sur le projet. Dans ce cas là, sur le serveur, nous allons créer un dossier et initialiser le dépôt.
mkdir -p ~/git/monsite.fr
cd ~/git/monsite.fr
git init --bare --initial-branch=main
Sur notre projet, en local, nous allons ajouter ce nouveau dépôt en utilisant l'alias SSH créé à l'étape précédente.
git remote add origin ssh://o2switch:/home/XXXXX/git/monsite.fr
git push -u origin main
Vous pouvez maintenant pousser vos changement fait avec git sur le serveur afin de ne pas perdre vos modification. Ce dépôt va aussi nous permettre de synchroniser le déploiement.
Clonage du projet en ligne
Maintenant que notre dépôt est configuré nous allons pouvoir créer un clone de notre projet en ligne. Pour m'organiser je met les sites dans un dossier sites mais vous êtes libre de suivre la convention que vous préférez.
cd ~/sites
git clone ../git/monsite.fr
Si vous avez choisis d'héberger votre dépôt git sur un service tiers vous devrez adapter la commande git clone
.
Ensuite vous pouvez générer un fichier .env
en copiant le fichier d'exemple.
cp .env.example .env
composer install
php artisan key:generate
Vous pouvez aussi en profiter pour modifier un peu le fichier d'environnement.
APP_NAME=MonSite
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=https://monsite.fr
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database
SESSION_DRIVER=file
SESSION_LIFETIME=120
MAIL_MAILER=sendmail
Pour l'envoi des emails on peut utiliser sendmail
qui permet une configuration simple mais vous pouvez aussi créer un compte email depuis CPanel et utiliser une configuration SMTP.
Vous pouvez aussi modifier le fichier public/.htaccess
pour forcer la redirection vers https
et sans www
.
# Force https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Force no www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Configuration de l'hébergement
Maintenant que les sources sont prêtes sur le serveur on peut passer à la configuration côté O2Switch.
Configuration du domaine
Côté Cpanel on va maintenant se rendre dans la partie Domaines configurés pour modifier le dossier racine associé à notre nom de domaine.
/sites/monsite.fr/public
Une fois cette association faite on va activer le certificat SSL afin que le site soit accessible en https
en utilisant l'option Let's encrypt SSL de l'espace d'administration.
Création d'une base de données MySQL
O2Switch supporte des bases de données MySQL et PostgreSQL et dans les 2 cas un assistant permet de créer facilement la base et l'utilisateur associé. Vous avez aussi accès depuis CPanel à PHPMyAdmin et PHPPgAdmin pour gérer les données de votre base à distance.
Configuration de PHP
Depuis l'interface d'administration vous pouvez modifier la configuration PHP du serveur pour mettre une version suffisante pour une application Laravel (dans notre cas la version 8.1). On peut aussi en profiter pour activer des extensions PHP supplémentaires si c'est nécessaire (les extensions cochées par défaut suffisent).
Automatiser avec Make
Nous allons maintenant attaquer la partie automatisation car notre objectif est de pouvoir déployer une nouvelle version du site en une simple commande. Nous allons ici opter pour une solution facile à mettre en place à l'aide de Make mais il est possible de faire plus propre (mais aussi plus complexe) avec Ansistrano par exemple.
.PHONY: deploy install
deploy:
ssh o2switch 'cd ~/sites/monsite.fr && git pull origin main && make install'
install: vendor/autoload.php .env public/storage public/build/manifest.json
php artisan cache:clear
php artisan migrate
.env:
cp .env.example .env
php artisan key:generate
public/storage:
php artisan storage:link
vendor/autoload.php: composer.lock
composer install
touch vendor/autoload.php
public/build/manifest.json: package.json
npm i
npm run build
Maintenant, lorsque vous souhaitez pousser une nouvelle version du site il vous suffit d'utiliser la commande make deploy
après avoir versionnés vos changements.
Il est possible d'approchez le problème différemment en utilisant les hooks de git mais de mon côté je préfère avoir la main sur le déploiement pour choisir spécifiquement quand je veux déployer. Je vous laisse adapter la technique en fonction de vos besoins.
Files d'attente
Si vous utilisez les files d'attentes il n'est pas possible de laisser une tâche tourner en fond et il faudra plutôt se reposer sur une tâche récurrente que vous pourrez programmer toutes les minutes.
/usr/local/bin/php /home/XXXXX/sites/monsite.fr/artisan queue:work --stop-when-empty
Conclusion
Et voila ! Votre site et maintenant en ligne !) mais vous pouvez reproduire ce que l'on va faire sur n'importe quel hébergeur qui vous laisse un accès ssh sur le serveur.