Builders Academy
Linux — Maîtriser la Ligne de Commande
4 of 4

Chapitre 2 · Leçon 2

Scripts Bash

Automatiser les déploiements et tâches système

Un script Bash est un fichier texte exécutable qui contient une suite de commandes shell. Indispensable pour automatiser les déploiements, les backups et les tâches de maintenance.

Script de déploiement complet

deploy.sh

bash
1#!/bin/bash
2# deploy.sh — Script de déploiement pour une app Node.js
3# Usage: ./deploy.sh [production|staging]
4
5set -euo pipefail  # Arrêter sur erreur, variable indéfinie, pipe fail
6
7# ─── Variables ────────────────────────────────────────────
8APP_DIR="/app/usher-api"
9GIT_BRANCH="${1:-main}"
10LOG_FILE="/var/log/deploy.log"
11TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
12
13# ─── Fonctions ────────────────────────────────────────────
14log() {
15  echo "[$TIMESTAMP] $1" | tee -a "$LOG_FILE"
16}
17
18error() {
19  echo "[$TIMESTAMP] ERROR: $1" | tee -a "$LOG_FILE" >&2
20  exit 1
21}
22
23check_prerequisites() {
24  command -v node >/dev/null || error "Node.js non installé"
25  command -v pnpm >/dev/null || error "pnpm non installé"
26  [ -d "$APP_DIR" ] || error "Dossier $APP_DIR introuvable"
27}
28
29# ─── Script principal ─────────────────────────────────────
30log "=== Déploiement démarré (branche: $GIT_BRANCH) ==="
31
32check_prerequisites
33
34cd "$APP_DIR" || error "Impossible d'accéder à $APP_DIR"
35
36# Pull du code
37log "Récupération du code..."
38git fetch origin
39git checkout "$GIT_BRANCH"
40git pull origin "$GIT_BRANCH"
41
42# Installation des dépendances
43log "Installation des dépendances..."
44pnpm install --frozen-lockfile
45
46# Build
47log "Build de l'application..."
48pnpm build
49
50# Migrations base de données
51log "Application des migrations..."
52pnpm prisma migrate deploy
53
54# Redémarrage du service
55log "Redémarrage du service..."
56sudo systemctl restart usher-api
57
58# Vérification santé (attendre 5s puis vérifier)
59sleep 5
60if curl -sf http://localhost:3000/health > /dev/null; then
61  log "✅ Déploiement réussi — application en bonne santé"
62else
63  error "❌ Health check échoué après déploiement"
64fi
65
66log "=== Déploiement terminé ==="
set -euo pipefail — toujours en premier

set -e arrête le script à la première erreur. set -u génère une erreur pour les variables non définies. set -o pipefail propage les erreurs dans les pipes. Ces 3 options ensemble évitent les scripts qui continuent silencieusement après une erreur.

Cron — planifier des tâches

snippet.bash

bash
1# Éditer le crontab de l'utilisateur courant
2crontab -e
3
4# Format : minute  heure  jour-mois  mois  jour-semaine  commande
5# *        *       *         *         *
6
7# Exemples
80 2 * * *     /app/scripts/backup.sh          # Backup tous les jours à 2h
9*/15 * * * *  /app/scripts/health-check.sh    # Health check toutes les 15 min
100 0 * * 0     /app/scripts/weekly-report.sh   # Rapport tous les dimanches à minuit
1130 3 1 * *    /app/scripts/cleanup-logs.sh    # Nettoyage le 1er de chaque mois à 3h30
12
13# Voir les crons actifs
14crontab -l
15
16# Logs des crons
17grep CRON /var/log/syslog

Linux — la fondation de tout

Un développeur qui maîtrise Linux peut gérer ses propres serveurs, diagnostiquer des problèmes de production et automatiser son infrastructure. Ces compétences valent autant que n'importe quel framework.

Topics and skills covered

  • Bash
  • Scripts
  • Automation
  • Cron