W02

GitHub Pages

Hébergement statique gratuit depuis un dépÎt GitHub avec déploiement automatique via Actions.

🐙 1. PrĂ©sentation de GitHub Pages

GitHub Pages est un service d'hébergement gratuit intégré à GitHub. Il sert des fichiers statiques (HTML, CSS, JS) directement depuis un dépÎt Git.

  • Gratuit pour les dĂ©pĂŽts publics et privĂ©s
  • URL automatique : username.github.io/repo
  • SSL/HTTPS automatique
  • Support des domaines personnalisĂ©s
  • IntĂ©gration native avec GitHub Actions
GitHub Pages est idéal pour : portfolios, documentation, sites de projets open source, blogs statiques (Jekyll, Hugo).

📄 2. Types de sites

TypeURLDépÎt
Site utilisateurusername.github.iousername/username.github.io
Site organisationorgname.github.ioorgname/orgname.github.io
Site de projetusername.github.io/repon'importe quel dépÎt
Pour les sites de projet, configurez "homepage": "https://username.github.io/repo" dans package.json pour que les assets se chargent correctement.

🌿 3. DĂ©ploiement depuis une branche

GitHub Pages peut servir depuis :

  • La branche gh-pages (racine)
  • La branche main, dossier /docs
  • La branche main, racine (pour les sites statiques simples)
# Installer gh-pages localement
npm install -D gh-pages

# package.json
{
  "homepage": "https://username.github.io/mon-app",
  "scripts": {
    "predeploy": "npm run build",
    "deploy": "gh-pages -d dist"
  }
}

# Déployer
npm run deploy

⚡ 4. GitHub Actions pour dĂ©ploiement automatique

Créez .github/workflows/deploy.yml pour déployer automatiquement à chaque push.

name: Deploy to GitHub Pages

on:
  push:
    branches: [main]

permissions:
  contents: read
  pages: write
  id-token: write

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - run: npm ci
      - run: npm run build
      - uses: actions/upload-pages-artifact@v3
        with:
          path: dist/

  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    steps:
      - uses: actions/deploy-pages@v4
        id: deployment
actions/setup-node@v4 avec cache: npm met automatiquement en cache ~/.npm entre les runs. Les builds suivants sont bien plus rapides.

🌐 5. Domaine personnalisĂ©

Pour utiliser monsite.fr au lieu de username.github.io/repo :

  1. Créez un fichier CNAME à la racine du site avec votre domaine
  2. Configurez les enregistrements DNS chez votre registrar
  3. Activez HTTPS dans Settings → Pages
# Fichier CNAME (Ă  la racine du dossier dist/)
monsite.fr

# DNS Ă  configurer chez Hostinger/OVH/Namecheap
# Enregistrements A (4 IPs GitHub Pages)
A  @  185.199.108.153
A  @  185.199.109.153
A  @  185.199.110.153
A  @  185.199.111.153

# Enregistrement CNAME pour www
CNAME  www  username.github.io

⚠ 6. Limitations

  • Sites statiques uniquement — pas de backend Node.js
  • Taille du dĂ©pĂŽt : 1 GB max
  • Bande passante : 100 GB/mois
  • Builds : 10 builds/heure
  • Pas de traitement cĂŽtĂ© serveur, pas de base de donnĂ©es
Pour une app avec backend, combinez GitHub Pages (frontend) + Railway/Render (API Node.js) ou utilisez Vercel/Netlify qui supportent les serverless functions.
→ Exercices W02 🔧 Mini-projet W03 : Netlify →