Utiliser GitHub Actions Pour Déployer Automatiquement Un Blog Hugo Sur Un Serveur Distant

Une fois que tout le contenu du blog Hugo est prêt, vous pouvez déployer le blog sur un serveur distant. Cet article explique comment utiliser GitHub Actions pour automatiser le déploiement d’un blog Hugo sur un serveur distant.

Pour des raisons de sécurité, il n’est pas recommandé d’utiliser un mot de passe pour se connecter à un serveur distant. Au lieu de cela, vous pouvez utiliser des clés SSH. Créez un nouvel utilisateur sur le serveur distant, générez une clé SSH pour cet utilisateur, et configurez GitHub Actions pour utiliser cette clé pour se connecter au serveur distant et déployer le blog Hugo.

Générer une paire de clés SSH localement

La paire de clés SSH générée localement est utilisée pour que le nouvel utilisateur se connecte au serveur distant. Pour générer une paire de clés SSH localement :

1
ssh-keygen -t rsa -b 4096 -C "blog@zair.top"

Suivez les instructions, définissez le chemin de sauvegarde du fichier (définissez-le sur ~/.ssh/github-blog-deploy) et la phrase secrète (qui peut être vide).

Les fichiers générés incluent :

  • Fichier de clé publique : github-blog-deploy.pub
  • Fichier de clé privée : github-blog-deploy

Configurer la clé publique SSH du nouvel utilisateur sur le serveur distant

  1. Connectez-vous au serveur distant :

    1
    
    ssh root@SSH_IP -p SSH_PORT 
  2. Créer un nouvel utilisateur :

    1
    
    sudo adduser deployuser
  3. Configurer la connexion SSH pour le nouvel utilisateur :

    1
    2
    3
    4
    5
    
    sudo mkdir /home/deployuser/.ssh
    sudo chmod 700 /home/deployuser/.ssh
    sudo touch /home/deployuser/.ssh/authorized_keys
    sudo chmod 600 /home/deployuser/.ssh/authorized_keys
    sudo chown -R deployuser:deployuser /home/deployuser/.ssh
  4. Copier la clé publique générée localement sur le serveur distant :

    Ajoutez le contenu du fichier github-blog-deploy.pub au fichier /home/deployuser/.ssh/authorized_keys :

    1
    
    cat ~/.ssh/github-blog-deploy.pub | ssh root@SSH_IP -p SSH_PORT  'cat >> /home/deployuser/.ssh/authorized_keys'

    Ou copiez manuellement le contenu de la clé publique et collez-le dans le fichier authorized_keys :

    1
    
    sudo nano /home/deployuser/.ssh/authorized_keys

    Collez le contenu du fichier github-blog-deploy.pub et sauvegardez.

  5. Définir les permissions du répertoire pour le nouvel utilisateur : Créez le répertoire de déploiement du site et définissez les permissions :

    1
    
    sudo chown -R deployuser:deployuser /var/www/public

Mettre à jour le fichier de configuration de GitHub Actions

  1. Ajouter la clé privée aux Secrets de GitHub :

    • Connectez-vous à GitHub, accédez au dépôt contenant le blog Hugo.
    • Cliquez successivement sur Settings -> Secrets and variables -> Actions -> New repository secret.
    • Ajoutez un nouveau Secret, SSH_PRIVATE_KEY, avec pour valeur le contenu du fichier github-blog-deploy (clé privée). Ajoutez également les Secrets SSH_PRIVATE_KEY, SSH_IP et SSH_PORT selon la situation réelle.
  2. Mettre à jour le fichier de configuration de GitHub Actions :

Ajoutez le contenu du fichier comme suit :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
name: Deploy Hugo Site

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          submodules: true  # This ensures submodules are cloned

      - name: Set up Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: 'latest'
          extended: true  # Ensure the extended version is used

      - name: Build Hugo site
        run: hugo --minify

      - name: Deploy to remote server
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
          SSH_IP: ${{ secrets.SSH_IP }}
          SSH_PORT: ${{ secrets.SSH_PORT }}
        run: |
          set -x  # Enable debugging
          mkdir -p ~/.ssh
          echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          # Add debugging information to help diagnose ssh-keyscan issues
          ssh-keyscan -p $SSH_PORT $SSH_IP || true  # Continue even if ssh-keyscan fails
          ssh-keyscan -p $SSH_PORT $SSH_IP >> ~/.ssh/known_hosts
          ssh -o StrictHostKeyChecking=no -p $SSH_PORT deployuser@$SSH_IP "mkdir -p /var/www/public"
          rsync -avz -e "ssh -p $SSH_PORT" ./public/ deployuser@$SSH_IP:/var/www/public          
Buy me a coffee~
Tim AlipayAlipay
Tim PayPalPayPal
Tim WeChat PayWeChat Pay
0%