Héberger sur un mutualisé CPanel via SSH (O2Switch)

Voir la vidéo
Description Sommaire

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.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager