
Blog avec hébergement VPS : guide pratique
Pour commencer
Tout d’abord, vous aurez besoin d’un dépôt GitHub pour héberger votre code source. Installez ensuite astrojs ou tout autre framework de site statique de votre choix. J’utilise personnellement GitHub Actions pour construire et déployer automatiquement à chaque push sur la branche principale. Pour mettre en place ces actions, créez un dossier .github/workflows
à la racine de votre projet puis créez le fichier build-and-deploy.yml
et ajoutez le code suivant :
name: Build and Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Add robots.txt
run: echo 'User-agent:*' > ./dist/robots.txt && echo 'Disallow:' > ./dist/robots.txt
- name: Copy files via SCP
uses: appleboy/scp-action@v0.1.4
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSHKEY }}
port: ${{ secrets.PORT }}
source: ./dist/*
target: ${{ secrets.SERVER_FOLDER }}
strip_components: 1
rm: true
La syntaxe de GitHub Actions est assez simple. Cette action se déclenche lors d’un push sur la branche main. Le job deploy
s’exécute sur Ubuntu. Chaque étape comporte un name, uses ou run, et parfois with :
- name : l’identifiant de l’étape dans les logs
- uses : appelle une action existante
- run : exécute une commande en ligne de commande
- with : définit les paramètres de l’étape
Par exemple, l’étape “Checkout code” récupère le dépôt sur le runner. L’étape “Install Node.js” installe Node.js en spécifiant la version 20.
L’étape “Copy files via SCP” est particulièrement intéressante. SCP (Secure Copy Protocol) permet de transférer des fichiers de manière sécurisée entre un hôte local et un hôte distant. Ici, nous utilisons les secrets du dépôt pour transférer les fichiers générés vers le serveur. L’action appleboy/scp-action@v0.1.4
simplifie ce processus.