35 min de lecture · 7 499 mots

Parcours d’Apprentissage : Développeur WordPress sur VPS (Débutant)

Parcours d’Apprentissage : Développeur WordPress sur VPS (Débutant)
Article · 2025.12.19
⏱️ Durée estimée: 8-12 semaines

Durée : 8-12 semaines Niveau : Débutant Objectif : Maîtriser l’installation, la configuration et la gestion d’un site WordPress haute performance sur un serveur VPS Debian avec WordOps


Table des Matières

  1. Vue d’ensemble
  2. Prérequis
  3. Programme détaillé semaine par semaine
  4. Ressources officielles
  5. Critères de réussite
  6. Certification finale

Vue d’ensemble

Ce parcours d’apprentissage vous guidera de débutant à développeur WordPress autonome capable de :

  • Gérer un serveur VPS Debian en ligne de commande
  • Installer et configurer WordPress avec WordOps
  • Optimiser les performances (Nginx, PHP-FPM, cache)
  • Sécuriser votre installation (SSL, headers, hardening)
  • Utiliser Git et GitHub pour le versioning
  • Automatiser vos workflows avec l’IA (Claude, ChatGPT)
  • Déployer et maintenir un site WordPress en production

Stack technologique :

  • OS : Debian 12 (Bookworm)
  • Serveur Web : Nginx + FastCGI Cache
  • PHP : 8.2 + PHP-FPM + Opcache
  • Base de données : MariaDB 10.11
  • CMS : WordPress 6.9+
  • Gestionnaire de stack : WordOps 3.22.0
  • Versioning : Git + GitHub
  • IA : Claude.ai + ChatGPT

Prérequis

Avant de commencer

  • [ ] Accès à un VPS Debian 12 (recommandé : 2GB RAM minimum)
  • [ ] Connexion SSH fonctionnelle
  • [ ] Nom de domaine avec accès DNS
  • [ ] Compte GitHub (gratuit)
  • [ ] Connaissance basique de l’anglais technique (documentation)
  • [ ] Motivation et 8-15h/semaine disponibles

Matériel requis

  • Ordinateur avec terminal SSH (Windows : WSL2, PuTTY / Mac, Linux : terminal natif)
  • Éditeur de code (VS Code recommandé)
  • Navigateur moderne (Chrome, Firefox)

Programme détaillé semaine par semaine

Semaine 1 : Fondations Linux & SSH

Objectif : Maîtriser les bases de la ligne de commande Linux et sécuriser l’accès SSH

Compétences à acquérir

  • [ ] Connexion SSH au VPS
  • [ ] Navigation dans le système de fichiers (cd, ls, pwd, tree)
  • [ ] Gestion des fichiers et dossiers (mkdir, touch, cp, mv, rm)
  • [ ] Permissions Linux (chmod, chown, ls -la)
  • [ ] Éditeur de texte en ligne de commande (nano ou vim basique)
  • [ ] Gestion des utilisateurs et sudo
  • [ ] Configuration sécurisée SSH (clés publiques/privées)

Projet pratique #1

« Sécuriser mon VPS »

Tâches :

  1. Créer un utilisateur non-root avec privilèges sudo
  2. Désactiver l’authentification root par SSH
  3. Générer une paire de clés SSH (ed25519)
  4. Configurer l’authentification par clé uniquement
  5. Changer le port SSH par défaut (optionnel)
  6. Installer et configurer fail2ban

Temps estimé : 8-10h

Commandes clés à maîtriser

# Connexion SSH
ssh user@votredomaine.com

# Navigation
ls -lah
cd /var/www
pwd

# Création utilisateur
sudo adduser deployer
sudo usermod -aG sudo deployer

# Clés SSH
ssh-keygen -t ed25519 -C "votre@email.com"
ssh-copy-id deployer@votredomaine.com

# Permissions
sudo chown -R www-data:www-data /var/www/html
sudo chmod 755 /var/www/html

# Édition configuration SSH
sudo nano /etc/ssh/sshd_config
sudo systemctl restart ssh

Ressources semaine 1

Critères de réussite

  • [ ] Connexion SSH uniquement par clé (pas de mot de passe)
  • [ ] Utilisateur non-root fonctionnel avec sudo
  • [ ] fail2ban actif et protégeant SSH
  • [ ] Logs SSH accessibles et compréhensibles (/var/log/auth.log)

Semaine 2 : Installation de la Stack (Nginx, PHP, MariaDB)

Objectif : Comprendre et installer manuellement les composants de la stack LEMP avant d’utiliser WordOps

Compétences à acquérir

  • [ ] Mise à jour du système Debian (apt update, apt upgrade)
  • [ ] Installation Nginx et compréhension des virtual hosts
  • [ ] Installation PHP-FPM et gestion des pools
  • [ ] Installation MariaDB et sécurisation
  • [ ] Configuration firewall UFW
  • [ ] Compréhension architecture LEMP

Projet pratique #2

« Installer LEMP manuellement »

Tâches :

  1. Installer Nginx et créer un virtual host de test
  2. Installer PHP 8.2 et PHP-FPM
  3. Installer MariaDB et exécuter mysql_secure_installation
  4. Créer une base de données et un utilisateur
  5. Configurer UFW (ports 22, 80, 443)
  6. Tester PHP avec info.php

Temps estimé : 8-10h

Commandes clés à maîtriser

# Mise à jour système
sudo apt update && sudo apt upgrade -y

# Installation Nginx
sudo apt install nginx -y
sudo systemctl status nginx
sudo systemctl enable nginx

# Installation PHP 8.2
sudo apt install php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd \
  php8.2-mbstring php8.2-xml php8.2-xmlrpc php8.2-zip -y

# Installation MariaDB
sudo apt install mariadb-server mariadb-client -y
sudo mysql_secure_installation

# Gestion base de données
sudo mysql
CREATE DATABASE test_db;
CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'mot_de_passe_fort';
GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

# Configuration firewall
sudo apt install ufw -y
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status

Configuration Nginx basique

Créer /etc/nginx/sites-available/test.conf :

server {
    listen 80;
    server_name test.votredomaine.com;
    root /var/www/test;
    index index.php index.html;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }
}

Activer le site :

sudo ln -s /etc/nginx/sites-available/test.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Ressources semaine 2

Critères de réussite

  • [ ] Nginx répond sur le port 80
  • [ ] PHP-FPM fonctionne (vérification via phpinfo())
  • [ ] MariaDB sécurisée et accessible
  • [ ] Base de données de test créée
  • [ ] UFW actif et configuré correctement

Semaine 3 : WordOps & Premier Site WordPress

Objectif : Installer WordOps et déployer votre premier site WordPress automatisé

Compétences à acquérir

  • [ ] Installation de WordOps 3.22.0
  • [ ] Commandes WordOps essentielles
  • [ ] Création site WordPress avec SSL Let’s Encrypt
  • [ ] Compréhension du cache FastCGI
  • [ ] Gestion des sites WordOps
  • [ ] Logs et debugging

Projet pratique #3

« Déployer WordPress avec WordOps »

Tâches :

  1. Installer WordOps sur Debian 12
  2. Créer un site WordPress avec cache et SSL
  3. Configurer wp-admin et base de données
  4. Activer Redis pour le cache objet (optionnel)
  5. Tester la performance avec GTmetrix
  6. Explorer la structure des fichiers générés

Temps estimé : 6-8h

Commandes clés à maîtriser

# Installation WordOps
wget -qO wo wops.cc && sudo bash wo

# Vérification installation
sudo wo --version
# Devrait afficher : WordOps 3.22.0

# Stack complète
sudo wo stack install
sudo wo stack install --php82

# Création site WordPress avec toutes options
sudo wo site create votredomaine.com --wp \
  --php82 --mysql8 \
  --letsencrypt \
  --wpfc --wpredis

# Obtenir les informations du site
sudo wo site info votredomaine.com

# Gestion des sites
sudo wo site list
sudo wo site show votredomaine.com

# Mise à jour WordPress
sudo wo site update votredomaine.com --wp

# Logs en temps réel
sudo wo log show votredomaine.com --nginx
sudo wo log show votredomaine.com --php

# Debug
sudo wo stack status
sudo wo debug votredomaine.com

Structure fichiers générés par WordOps

/var/www/votredomaine.com/
├── htdocs/               # Racine WordPress
│   ├── wp-admin/
│   ├── wp-content/
│   │   ├── plugins/
│   │   ├── themes/
│   │   └── uploads/
│   ├── wp-config.php
│   └── index.php
├── conf/
│   └── nginx/           # Config Nginx spécifique
├── logs/                # Logs Nginx/PHP
└── backup/              # Backups automatiques

Configuration WordPress post-installation

  1. Accéder à https://votredomaine.com/wp-admin
  2. Compléter l’installation WordPress
  3. Installer un thème (GeneratePress recommandé)
  4. Sécuriser wp-config.php avec clés de sécurité
  5. Désactiver l’édition fichiers dans wp-admin

Ajouter dans wp-config.php :

// Désactiver éditeur de fichiers
define('DISALLOW_FILE_EDIT', true);

// Forcer HTTPS
define('FORCE_SSL_ADMIN', true);

// Augmenter memory limit
define('WP_MEMORY_LIMIT', '256M');

// Activer debug (développement seulement)
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', false);

Ressources semaine 3

Critères de réussite

  • [ ] WordOps 3.22.0 installé et fonctionnel
  • [ ] Site WordPress accessible en HTTPS
  • [ ] Cache FastCGI actif (vérification headers HTTP)
  • [ ] Score GTmetrix > 85% (A/B)
  • [ ] Logs accessibles et compréhensibles
  • [ ] Backup automatique configuré

Semaine 4 : Sécurité WordPress & Hardening

Objectif : Sécuriser WordPress contre les menaces courantes et mettre en place les bonnes pratiques

Compétences à acquérir

  • [ ] Configuration headers sécurité HTTP
  • [ ] Installation et configuration Wordfence
  • [ ] Hardening wp-config.php
  • [ ] Protection contre brute-force
  • [ ] Désactivation XML-RPC et user enumeration
  • [ ] Configuration SSL/TLS optimale
  • [ ] Mise en place backups automatiques

Projet pratique #4

« Forteresse WordPress »

Tâches :

  1. Ajouter headers sécurité dans Nginx (HSTS, CSP, X-Frame-Options)
  2. Installer et configurer Wordfence Security
  3. Hardening wp-config.php (clés secrètes, permissions)
  4. Désactiver XML-RPC
  5. Configurer UpdraftPlus avec backup cloud
  6. Tester sécurité avec Mozilla Observatory
  7. Obtenir note A+ sur SSL Labs

Temps estimé : 8-10h

Headers sécurité Nginx

Éditer /etc/nginx/common/wpcommon-php82.conf ou le fichier de conf du site :

# Headers sécurité HTTP
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
add_header Content-Security-Policy "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: https:; font-src 'self' data: https:; connect-src 'self' https:; frame-ancestors 'self';" always;

Tester et recharger :

sudo nginx -t
sudo systemctl reload nginx

Hardening wp-config.php

<?php
// === Clés de sécurité ===
// Générer avec : https://api.wordpress.org/secret-key/1.1/salt/
define('AUTH_KEY',         'votre-clé-unique-ici');
define('SECURE_AUTH_KEY',  'votre-clé-unique-ici');
define('LOGGED_IN_KEY',    'votre-clé-unique-ici');
define('NONCE_KEY',        'votre-clé-unique-ici');
define('AUTH_SALT',        'votre-clé-unique-ici');
define('SECURE_AUTH_SALT', 'votre-clé-unique-ici');
define('LOGGED_IN_SALT',   'votre-clé-unique-ici');
define('NONCE_SALT',       'votre-clé-unique-ici');

// === Sécurité ===
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', false); // true = bloquer installation plugins/thèmes
define('FORCE_SSL_ADMIN', true);
define('WP_AUTO_UPDATE_CORE', 'minor'); // Updates sécurité auto

// === Performance ===
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
define('WP_POST_REVISIONS', 5);
define('AUTOSAVE_INTERVAL', 300);
define('EMPTY_TRASH_DAYS', 7);

// === Cache ===
define('WP_CACHE', true);

// === Debugging (DÉSACTIVER EN PRODUCTION) ===
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', false);
define('WP_DEBUG_DISPLAY', false);
define('SCRIPT_DEBUG', false);

Permissions correctes :

sudo chown www-data:www-data /var/www/votredomaine.com/htdocs/wp-config.php
sudo chmod 640 /var/www/votredomaine.com/htdocs/wp-config.php

Plugins sécurité recommandés

  1. Wordfence Security (gratuit)

    • Firewall applicatif
    • Scan malware
    • Protection brute-force
    • 2FA (authentification à deux facteurs)
  2. UpdraftPlus (gratuit)

    • Backups automatiques
    • Stockage cloud (Google Drive, Dropbox, S3)
    • Restauration en un clic
  3. Limit Login Attempts Reloaded (gratuit)

    • Protection brute-force additionnelle
    • Logs tentatives de connexion

Désactiver XML-RPC

Ajouter dans wp-config.php :

// Désactiver XML-RPC
add_filter('xmlrpc_enabled', '__return_false');

Ou bloquer dans Nginx (déjà inclus dans WordOps) :

location = /xmlrpc.php {
    deny all;
    access_log off;
    log_not_found off;
    return 444;
}

Tests sécurité

# Test SSL Labs (note A+ attendue)
# Aller sur : https://www.ssllabs.com/ssltest/

# Test headers sécurité (note A attendue)
# Aller sur : https://observatory.mozilla.org/

# Vérifier headers en ligne de commande
curl -I https://votredomaine.com | grep -i "strict-transport"
curl -I https://votredomaine.com | grep -i "x-frame"

Ressources semaine 4

Critères de réussite

  • [ ] Note A+ sur SSL Labs
  • [ ] Note A ou B sur Mozilla Observatory
  • [ ] Wordfence installé et configuré (scan initial OK)
  • [ ] XML-RPC désactivé
  • [ ] Backups automatiques fonctionnels (test restauration)
  • [ ] Headers sécurité présents (vérification curl)
  • [ ] wp-config.php hardenisé avec permissions 640

Semaine 5 : Git, GitHub & Versioning

Objectif : Maîtriser Git pour versionner votre code et collaborer via GitHub

Compétences à acquérir

  • [ ] Installation et configuration Git
  • [ ] Commandes Git essentielles (add, commit, push, pull)
  • [ ] Création et gestion de repository GitHub
  • [ ] Branches et merging
  • [ ] .gitignore pour WordPress
  • [ ] Déploiement via Git (optionnel)
  • [ ] GitHub Actions basiques (optionnel)

Projet pratique #5

« Versionner mon thème WordPress »

Tâches :

  1. Installer Git sur le VPS
  2. Créer un repository GitHub pour votre thème
  3. Initialiser Git dans wp-content/themes/votre-theme/
  4. Créer un .gitignore adapté WordPress
  5. Premier commit et push vers GitHub
  6. Créer une branche feature et merger
  7. Ajouter un README.md professionnel

Temps estimé : 6-8h

Installation et configuration Git

# Installation
sudo apt install git -y

# Configuration globale
git config --global user.name "Votre Nom"
git config --global user.email "votre@email.com"
git config --global init.defaultBranch main

# Vérification
git config --list

# Générer clé SSH pour GitHub (si pas déjà fait)
ssh-keygen -t ed25519 -C "votre@email.com"
cat ~/.ssh/id_ed25519.pub
# Copier la clé et l'ajouter sur GitHub : Settings → SSH Keys

Workflow Git basique

# Se positionner dans le dossier du thème
cd /var/www/votredomaine.com/htdocs/wp-content/themes/votre-theme/

# Initialiser repository
git init

# Créer .gitignore
nano .gitignore

# Premier commit
git add .
git commit -m "Initial commit: Mon thème WordPress"

# Lier au repository GitHub (créé au préalable sur github.com)
git remote add origin git@github.com:votre-username/votre-theme.git

# Pousser vers GitHub
git push -u origin main

# Workflow quotidien
git status                    # Voir les modifications
git add fichier.php          # Ajouter un fichier modifié
git add .                    # Ajouter tous les fichiers modifiés
git commit -m "Description"  # Créer un commit
git push                     # Envoyer vers GitHub
git pull                     # Récupérer les modifications

.gitignore pour WordPress

Créer .gitignore :

# WordPress Core
/wp-admin/
/wp-includes/
/wp-*.php
/xmlrpc.php
/readme.html
/license.txt

# Configuration
wp-config.php
.htaccess

# Contenu utilisateur (ne pas versionner)
/wp-content/uploads/
/wp-content/backup*/
/wp-content/upgrade/
/wp-content/cache/

# Plugins (sauf si vous développez des plugins custom)
/wp-content/plugins/
!/wp-content/plugins/votre-plugin-custom/

# Thèmes (sauf votre thème)
/wp-content/themes/
!/wp-content/themes/votre-theme/

# Logs et temporaires
*.log
*.sql
*.sqlite
.DS_Store
Thumbs.db
*.swp
*.bak
*~

# Environnements
.env
.env.local

# IDE
.vscode/
.idea/
*.sublime-project
*.sublime-workspace

# Dépendances
node_modules/
vendor/
composer.phar
package-lock.json

Branches Git

# Créer une nouvelle branche
git checkout -b feature-nouvelle-fonctionnalite

# Lister les branches
git branch

# Changer de branche
git checkout main

# Merger une branche
git checkout main
git merge feature-nouvelle-fonctionnalite

# Supprimer une branche
git branch -d feature-nouvelle-fonctionnalite

# Pousser une branche vers GitHub
git push -u origin feature-nouvelle-fonctionnalite

README.md professionnel

Créer README.md dans votre thème :

# Mon Thème WordPress

![Version](https://img.shields.io/badge/version-1.0.0-blue)
![WordPress](https://img.shields.io/badge/WordPress-6.9+-green)
![PHP](https://img.shields.io/badge/PHP-8.2+-purple)

## Description

Thème WordPress moderne et performant pour [décrire l'usage].

## Fonctionnalités

- Responsive design
- SEO optimisé
- Performance optimisée (lazy loading, WebP)
- Compatible Gutenberg
- Accessible (WCAG 2.1)

## Installation

1. Télécharger le thème
2. Uploader via WordPress Admin → Apparence → Thèmes
3. Activer le thème
4. Configurer via Apparence → Personnaliser

## Prérequis

- WordPress 6.9+
- PHP 8.2+
- Nginx ou Apache

## Configuration

### Widgets

Le thème propose 3 zones de widgets :
- Sidebar
- Footer 1
- Footer 2

## Développement

### Structure

votre-theme/ ├── style.css ├── functions.php ├── header.php ├── footer.php ├── index.php ├── single.php ├── archive.php └── template-parts/


### Commandes

```bash
# Installation dépendances
npm install

# Compilation SASS (si utilisé)
npm run build

Support

Pour toute question : contact@votredomaine.com

Changelog

Version 1.0.0 – 2025-01-15

  • Release initiale
  • Design responsive
  • SEO optimisé

Licence

GPLv2 or later


#### Ressources semaine 5

- [Pro Git Book (français)](https://git-scm.com/book/fr/v2)
- [GitHub Docs](https://docs.github.com/fr)
- [Learn Git Branching (interactif)](https://learngitbranching.js.org/?locale=fr_BE)

#### Critères de réussite

- [ ] Git installé et configuré
- [ ] Repository GitHub créé et lié
- [ ] .gitignore correct (ne pas tracker wp-config.php, uploads/)
- [ ] Au moins 5 commits significatifs
- [ ] Une branche feature créée et mergée
- [ ] README.md professionnel
- [ ] Clé SSH GitHub fonctionnelle

---

### Semaine 6 : Performance & Optimisation

**Objectif :** Optimiser WordPress pour des temps de chargement ultra-rapides

#### Compétences à acquérir

- [ ] Configuration cache Nginx FastCGI
- [ ] Optimisation PHP-FPM (workers, memory)
- [ ] Configuration Opcache
- [ ] Optimisation MariaDB (InnoDB)
- [ ] Conversion images WebP
- [ ] Lazy loading
- [ ] CDN (Cloudflare)
- [ ] Analyse performance (GTmetrix, PageSpeed)

#### Projet pratique #6

**"Site WordPress ultra-rapide"**

Tâches :
1. Configurer cache FastCGI avec purge automatique
2. Optimiser PHP-FPM (pm.max_children, etc.)
3. Activer et tuner Opcache
4. Optimiser MariaDB (innodb_buffer_pool_size)
5. Convertir images en WebP
6. Activer lazy loading natif WordPress
7. Configurer Cloudflare CDN
8. Atteindre score 95+ sur PageSpeed Insights

Temps estimé : 10-12h

#### Configuration cache FastCGI

WordOps active déjà le cache, mais vérifier la configuration :

```bash
# Vérifier config cache
sudo cat /var/www/votredomaine.com/conf/nginx/redis.conf

# Purger cache manuellement
sudo wo clean votredomaine.com --fastcgi

# Purger tout
sudo wo clean votredomaine.com --all

Plugin recommandé : Nginx Helper pour purge automatique.

Configuration Nginx Helper :

  • Activer « Enable Purge »
  • Cache Method: FastCGI Cache
  • Purge on: Post/Page publish, update, delete

Optimisation PHP-FPM

Éditer /etc/php/8.2/fpm/pool.d/www.conf :

[www]
user = www-data
group = www-data

listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

; Process manager (dynamic recommandé)
pm = dynamic

; Calcul basé sur RAM disponible
; Formule : pm.max_children = RAM_libre / 50MB
pm.max_children = 20        ; Pour 2GB RAM
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 500

; Limites mémoire
php_admin_value[memory_limit] = 256M

Appliquer :

sudo systemctl restart php8.2-fpm

Configuration Opcache

Éditer /etc/php/8.2/fpm/conf.d/10-opcache.ini :

; Active Opcache
opcache.enable=1
opcache.enable_cli=0

; Mémoire allouée (128MB recommandé)
opcache.memory_consumption=128

; Nombre de scripts à cacher (10000+ pour WordPress)
opcache.max_accelerated_files=10000

; Validation timestamp (60s en développement, 300s+ en production)
opcache.revalidate_freq=60

; Interned strings buffer
opcache.interned_strings_buffer=16

; Fast shutdown
opcache.fast_shutdown=1

Redémarrer PHP-FPM :

sudo systemctl restart php8.2-fpm

Vérifier Opcache actif via phpinfo() ou plugin.

Optimisation MariaDB

Éditer /etc/mysql/mariadb.conf.d/50-server.cnf :

[mysqld]
# Mémoire InnoDB (50-70% de RAM totale recommandé)
innodb_buffer_pool_size = 1G          # Pour 2GB RAM

# Instances buffer pool (1 par GB recommandé)
innodb_buffer_pool_instances = 1

# Log file size
innodb_log_file_size = 256M

# Flush method
innodb_flush_method = O_DIRECT

# Thread cache
thread_cache_size = 8

# Table cache
table_open_cache = 2000

# Query cache (désactivé par défaut sur MariaDB 10.11+)
# query_cache_size = 0
# query_cache_type = 0

# Max connections
max_connections = 50

Redémarrer MariaDB :

sudo systemctl restart mariadb

Conversion images WebP

Installation outils :

sudo apt install webp -y

Script conversion batch :

#!/bin/bash
# Script : convert-to-webp.sh

UPLOADS_DIR="/var/www/votredomaine.com/htdocs/wp-content/uploads"

find "$UPLOADS_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | while read IMG; do
    WEBP="${IMG%.*}.webp"

    if [ ! -f "$WEBP" ]; then
        echo "Converting: $IMG"
        cwebp -q 85 "$IMG" -o "$WEBP"
    fi
done

echo "Conversion terminée!"

Ou utiliser plugin : ShortPixel Image Optimizer ou Imagify.

Lazy loading

WordPress 5.5+ intègre lazy loading natif pour images.

Vérifier présence attribut loading="lazy" dans HTML :

<img src="image.jpg" alt="Description" loading="lazy">

Plugin optionnel : Lazy Load by WP Rocket pour iframes et vidéos.

Configuration Cloudflare CDN

  1. Créer compte gratuit sur Cloudflare
  2. Ajouter votre domaine
  3. Changer nameservers chez votre registrar
  4. Attendre propagation DNS (24-48h)
  5. Activer options :
    • SSL/TLS: Full (Strict)
    • Auto Minify: JS, CSS, HTML
    • Brotli: ON
    • HTTP/2: ON
    • HTTP/3 (QUIC): ON

Configuration Cloudflare optimale :

Speed → Optimization :

  • Auto Minify: Tout cocher
  • Brotli: ON
  • Early Hints: ON
  • Rocket Loader: OFF (peut casser scripts)

Caching :

  • Caching Level: Standard
  • Browser Cache TTL: 4 hours
  • Always Online: ON

Rules → Page Rules (gratuit : 3 règles) :

Règle 1 : Cache everything

  • URL: votredomaine.com/*
  • Cache Level: Cache Everything
  • Edge Cache TTL: 1 month

Règle 2 : Bypass wp-admin

  • URL: votredomaine.com/wp-admin/*
  • Cache Level: Bypass

Règle 3 : Bypass wp-login

  • URL: votredomaine.com/wp-login.php
  • Security Level: High

Tests performance

# Test PageSpeed Insights
# Aller sur : https://pagespeed.web.dev/
# Objectif : Score 90+ mobile et desktop

# Test GTmetrix
# Aller sur : https://gtmetrix.com/
# Objectif : Grade A, Performance 90+

# Test temps de chargement (ligne de commande)
curl -o /dev/null -s -w "Time Total: %{time_total}s\n" https://votredomaine.com
# Objectif : < 1s

Checklist optimisation

# Vérifier cache FastCGI actif
curl -I https://votredomaine.com | grep -i "x-fastcgi-cache"
# Devrait afficher : X-FastCGI-Cache: HIT

# Vérifier Opcache
php -i | grep opcache.enable
# Devrait afficher : opcache.enable => On => On

# Vérifier Brotli/Gzip
curl -H "Accept-Encoding: br,gzip" -I https://votredomaine.com | grep -i "content-encoding"
# Devrait afficher : content-encoding: br ou gzip

Ressources semaine 6

Critères de réussite

  • [ ] Cache FastCGI actif (vérification headers)
  • [ ] PHP-FPM optimisé (pm.max_children adapté)
  • [ ] Opcache actif et configuré
  • [ ] MariaDB innodb_buffer_pool_size optimisé
  • [ ] Images converties en WebP
  • [ ] Cloudflare configuré et actif
  • [ ] Score PageSpeed Insights 90+ (mobile + desktop)
  • [ ] Score GTmetrix A (90+)
  • [ ] Temps de chargement < 1s

Semaine 7 : SEO & Rank Math

Objectif : Optimiser le référencement naturel avec Rank Math SEO

Compétences à acquérir

  • [ ] Installation et configuration Rank Math
  • [ ] Optimisation on-page (titres, meta descriptions, H1-H6)
  • [ ] Schema.org markup
  • [ ] Sitemap XML
  • [ ] Breadcrumbs
  • [ ] Open Graph et Twitter Cards
  • [ ] Google Search Console
  • [ ] Google Analytics 4

Projet pratique #7

« SEO WordPress parfait »

Tâches :

  1. Installer et configurer Rank Math SEO
  2. Optimiser 5 articles existants (score 90+)
  3. Configurer Schema.org (Organization, Article)
  4. Générer et soumettre sitemap XML
  5. Configurer Open Graph pour partage social
  6. Lier Google Search Console
  7. Installer Google Analytics 4
  8. Analyser mots-clés avec Ubersuggest

Temps estimé : 8-10h

Installation Rank Math

# Via wp-cli (si installé)
sudo -u www-data wp plugin install seo-by-rank-math --activate \
  --path=/var/www/votredomaine.com/htdocs

# Ou via WordPress Admin → Extensions → Ajouter

Configuration Setup Wizard :

  1. Account: Créer compte Rank Math (optionnel)
  2. Site Type: Blog / Portfolio / Business
  3. Business Info: Nom, logo, social links
  4. Google Services: Search Console + Analytics
  5. Sitemap: Activer (désactiver taxonomies inutiles)
  6. Schema: Organization + Website
  7. Finir et accéder au tableau de bord

Configuration Rank Math avancée

Rank Math → General Settings → Breadcrumbs :

  • Enable Breadcrumbs: ON
  • Separator: / ou →
  • Hide on Homepage: ON

Ajouter au thème (avant le titre) :

<?php
if ( function_exists('rank_math_the_breadcrumbs') ) {
    rank_math_the_breadcrumbs();
}
?>

Rank Math → Titles & Meta :

Configuration par type :

  • Posts: %title% %sep% %sitename%
  • Pages: %title% %sep% %sitename%
  • Archives: %term% Archives %sep% %sitename%
  • Meta description: Auto-generated or custom

Rank Math → Sitemap Settings :

  • Include Posts: ON
  • Include Pages: ON
  • Include Media: OFF (optionnel)
  • Include Categories: ON
  • Include Tags: OFF (sauf si très utilisés)
  • Images in Sitemap: ON

Sitemap URL : https://votredomaine.com/sitemap_index.xml

Optimisation article (on-page SEO)

Checklist par article :

  1. Focus Keyword : Choisir 1 mot-clé principal
  2. Titre (H1) : Inclure mot-clé, < 60 caractères
  3. URL : Courte, mot-clé inclus, pas de stopwords
  4. Meta description : 150-160 caractères, mot-clé, CTA
  5. Premier paragraphe : Mot-clé dans les 100 premiers mots
  6. Headings (H2-H6) : Structure logique, mots-clés secondaires
  7. Images : Alt text descriptif avec mot-clé
  8. Liens internes : 2-3 liens vers articles connexes
  9. Liens externes : 1-2 liens vers sources qualité
  10. Longueur : 1500+ mots pour articles piliers

Objectif : Score Rank Math 90+/100

Schema.org markup

Rank Math ajoute automatiquement Schema.org.

Vérifier types activés :

  • Organization (site entier)
  • Website (site entier)
  • Article (posts)
  • Breadcrumbs (navigation)

Tester Schema : Google Rich Results Test

Open Graph et Twitter Cards

Rank Math → Titles & Meta → Social Meta :

  • Enable Open Graph: ON
  • Facebook App ID: (optionnel)
  • Enable Twitter Card: ON
  • Twitter Username: @votre_compte

Par article, Rank Math génère automatiquement :

  • og:title
  • og:description
  • og:image
  • og:url
  • twitter:card

Vérifier : Facebook Sharing Debugger

Google Search Console

  1. Aller sur Google Search Console
  2. Ajouter propriété (votredomaine.com)
  3. Vérification : Méthode DNS (TXT record) ou HTML file
  4. Soumettre sitemap : https://votredomaine.com/sitemap_index.xml

Métriques à suivre :

  • Impressions
  • Clics
  • CTR moyen
  • Position moyenne
  • Pages indexées

Google Analytics 4

  1. Créer compte Google Analytics
  2. Créer propriété (GA4)
  3. Créer flux de données (Web)
  4. Copier Measurement ID (G-XXXXXXXXXX)

Installation via plugin Site Kit by Google ou code manuel.

Code tracking (dans <head>) :

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXXXXX');
</script>

Recherche de mots-clés

Outils gratuits :

  • Ubersuggest (3 recherches/jour gratuit)
  • Google Keyword Planner
  • AnswerThePublic
  • Google Trends

Critères mot-clé :

  • Volume : 100-1000/mois (niche) ou 1000-10000/mois (large)
  • Difficulté : < 40 (facile) pour débuter
  • Intention : Informationnelle pour blog
  • Langue : Français (Belgique)

Ressources semaine 7

Critères de réussite

  • [ ] Rank Math installé et configuré
  • [ ] 5 articles optimisés (score 90+)
  • [ ] Sitemap XML généré et soumis
  • [ ] Schema.org validé (Google Rich Results Test)
  • [ ] Open Graph fonctionnel (test Facebook)
  • [ ] Google Search Console lié et sitemap soumis
  • [ ] Google Analytics 4 installé et tracking actif
  • [ ] Liste 10 mots-clés cibles identifiés

Semaine 8 : IA & Automatisation (Claude, ChatGPT)

Objectif : Utiliser l’IA pour accélérer la création de contenu et automatiser les tâches répétitives

Compétences à acquérir

  • [ ] Rédaction assistée par IA (Claude, ChatGPT)
  • [ ] Génération de prompts efficaces
  • [ ] Optimisation SEO avec IA
  • [ ] Génération d’images (Midjourney, DALL-E)
  • [ ] Automatisation avec Make.com ou Zapier (optionnel)
  • [ ] Code WordPress avec assistance IA
  • [ ] Documentation automatique

Projet pratique #8

« Blog WordPress alimenté par IA »

Tâches :

  1. Créer 3 articles complets avec Claude.ai
  2. Optimiser pour SEO avec ChatGPT
  3. Générer featured images avec DALL-E
  4. Créer un prompt template réutilisable
  5. Coder un shortcode WordPress avec assistance Claude
  6. Générer documentation README.md
  7. Automatiser publication (optionnel)

Temps estimé : 8-10h

Workflow rédaction article avec Claude.ai

Étape 1 : Recherche sujet

Prompt Claude :

Je gère un blog DevOps/SRE en français ciblant la Belgique.

Public : Administrateurs systèmes, DevOps, SRE, développeurs backend.

Propose-moi 5 idées d'articles sur le thème "Docker" qui sont :
1. Recherchés (mots-clés volume > 500/mois)
2. Peu concurrentiels (difficulty < 40)
3. Pratiques (tutoriels ou guides)
4. Pertinents pour mon audience

Format :
- Titre SEO-optimisé
- Mot-clé principal
- Volume de recherche estimé
- Angle unique

Étape 2 : Plan détaillé

Prompt Claude (après avoir choisi un sujet) :

Crée un plan détaillé pour l'article suivant :

Titre : "Docker Compose : Guide complet pour débutants"
Mot-clé principal : docker compose tutoriel
Longueur cible : 2000 mots
Public : Débutants en Docker

Le plan doit inclure :
1. Introduction accrocheuse (problème + solution)
2. 5-7 sections H2 logiques
3. Sous-sections H3 si nécessaire
4. Exemples de code concrets
5. Section FAQ (3-5 questions)
6. Conclusion avec CTA

Optimise pour SEO (mots-clés secondaires, LSI).

Étape 3 : Rédaction sections

Prompt Claude (par section) :

Rédige la section suivante de l'article en français professionnel :

## Installation de Docker Compose

Consignes :
- 300-400 mots
- Inclure commandes bash avec explications
- Ton : pédagogue mais technique
- Inclure tips et warnings
- Optimisé SEO (mots-clés : docker compose install, installer docker compose)

Public : Administrateurs Linux débutants en Docker

Étape 4 : Optimisation SEO

Prompt ChatGPT :

Optimise ce paragraphe pour le SEO :

[Coller paragraphe]

Mot-clé principal : docker compose tutoriel
Mots-clés secondaires : docker compose install, docker compose file, docker compose up

Consignes :
- Inclure mots-clés naturellement
- Améliorer lisibilité (phrases courtes)
- Ajouter transition entre idées
- Garder ton professionnel

Prompt templates réutilisables

Template article tutoriel :

Rédige un article de blog technique complet en français.

Titre : [TITRE]
Mot-clé principal : [MOT-CLÉ]
Longueur : [NOMBRE] mots
Public : [DESCRIPTION PUBLIC]

Structure :
1. Introduction (150 mots)
   - Problème concret
   - Impact sur le lecteur
   - Promesse de solution

2. Prérequis (50 mots)
   - Liste à puces
   - Connaissances requises
   - Outils nécessaires

3. Corps de l'article (1500 mots)
   - 5 sections H2
   - Exemples de code commentés
   - Captures d'écran décrites
   - Tips et warnings

4. FAQ (200 mots)
   - 5 questions courantes
   - Réponses concises

5. Conclusion (100 mots)
   - Résumé bénéfices
   - CTA vers article connexe

Ton : Professionnel, pédagogue, accessible
SEO : Densité mot-clé 1-2%, mots-clés secondaires naturels
Format : Markdown avec code blocks

Template meta description :

Crée une meta description SEO pour cet article :

Titre : [TITRE]
Mot-clé : [MOT-CLÉ]

Consignes :
- 150-160 caractères exactement
- Inclure mot-clé principal
- Call-to-action clair
- Bénéfice lecteur explicite
- Ton engageant

Fournis 3 variantes.

Génération code WordPress avec Claude

Prompt exemple :

Crée un shortcode WordPress qui affiche une boîte d'alerte personnalisable.

Fonctionnalités :
- Attributs : type (info, warning, error, success), titre, contenu
- Design : Bootstrap 5 style
- Responsive
- Accessible (ARIA labels)
- Sécurisé (échapper output)

Code :
- Fonction avec prefix yawc_
- Commentaires détaillés
- Bonnes pratiques WordPress
- Exemple d'utilisation

Format : PHP avec syntaxe WordPress

Claude génèrera un code production-ready que vous pouvez ajouter à functions.php.

Génération images avec DALL-E

Prompt exemple (ChatGPT Plus) :

Crée une image featured pour article de blog tech.

Sujet : Docker Compose pour débutants
Style : Flat design, couleurs modernes (bleu, orange)
Éléments : Logo Docker, containers stylisés, flèches workflow
Format : 1200x630px (Open Graph)
Ton : Professionnel mais accessible

Alternatives gratuites :

  • Canva (templates personnalisables)
  • Unsplash (photos libres)
  • Excalidraw (diagrammes techniques)

Automatisation Make.com (optionnel)

Exemple workflow :

  1. Trigger : Nouveau fichier Markdown dans Google Drive
  2. Action 1 : Parser contenu Markdown
  3. Action 2 : Convertir en HTML
  4. Action 3 : Créer post WordPress via API
  5. Action 4 : Notification Slack

Nécessite : API WordPress REST activée, Make.com (gratuit limité).

Best practices IA

À FAIRE :

  • Relire et éditer le contenu généré (l’IA fait des erreurs)
  • Vérifier les faits et chiffres
  • Ajouter expérience personnelle
  • Adapter ton à votre audience
  • Tester le code généré

À NE PAS FAIRE :

  • Publier sans relecture
  • Copier-coller aveuglément
  • Utiliser pour spam de contenu
  • Ignorer les hallucinations IA
  • Remplacer totalement l’humain

Ressources semaine 8

Critères de réussite

  • [ ] 3 articles rédigés avec Claude (2000+ mots chacun)
  • [ ] Articles optimisés SEO (score Rank Math 85+)
  • [ ] Featured images générées ou créées
  • [ ] Prompt templates documentés et réutilisables
  • [ ] 1 shortcode WordPress fonctionnel créé avec Claude
  • [ ] Contenu relu et édité (pas de hallucinations)
  • [ ] Articles publiés et performants (vérification Analytics)

Semaine 9-10 : Projet Fil Rouge – Site WordPress Complet

Objectif : Synthétiser toutes les compétences en créant un site WordPress professionnel de A à Z

Spécifications projet

Thématique : Au choix (DevOps, SRE, Tech, ou autre)

Livrables :

  1. Site WordPress fonctionnel en HTTPS
  2. Thème custom ou child theme
  3. 10 articles optimisés SEO (1500+ mots)
  4. Plugin custom avec 1 fonctionnalité
  5. Repository GitHub avec documentation
  6. Performance optimale (PageSpeed 90+)
  7. Sécurité renforcée (note A SSL Labs)

Phase 1 : Infrastructure (Jour 1-2)

Tâches :

  • [ ] Provisionner VPS Debian 12
  • [ ] Configurer utilisateur et SSH
  • [ ] Installer WordOps 3.22.0
  • [ ] Créer site WordPress avec SSL
  • [ ] Configurer DNS et Cloudflare

Commandes :

# Connexion et setup initial
ssh root@votre-vps-ip
adduser deployer
usermod -aG sudo deployer
su - deployer

# Installation WordOps
wget -qO wo wops.cc && sudo bash wo
sudo wo stack install --php82

# Création site
sudo wo site create votreprojet.com --wp \
  --php82 --mysql8 \
  --letsencrypt=wildcard \
  --wpfc --wpredis

# Vérification
sudo wo site info votreprojet.com

Phase 2 : Sécurité (Jour 3)

Tâches :

  • [ ] Headers sécurité Nginx (HSTS, CSP)
  • [ ] Wordfence installé et configuré
  • [ ] fail2ban actif
  • [ ] Backups UpdraftPlus
  • [ ] wp-config.php hardenisé
  • [ ] UFW configuré

Tests :

# Test SSL
curl https://www.ssllabs.com/ssltest/analyze.html?d=votreprojet.com

# Test headers
curl -I https://votreprojet.com | grep -i strict-transport

Phase 3 : Thème & Design (Jour 4-5)

Tâches :

  • [ ] Installer GeneratePress (ou créer child theme)
  • [ ] Personnaliser design (couleurs, typo, logo)
  • [ ] Créer pages statiques (Accueil, À propos, Contact)
  • [ ] Configurer menu navigation
  • [ ] Ajouter footer avec social links
  • [ ] Responsive design vérifié

Phase 4 : Plugin Custom (Jour 6-7)

Créer un plugin avec 1 fonctionnalité au choix :

Idées :

  • Reading time calculator
  • Table of contents automatique
  • Related posts avec IA
  • Social share buttons
  • Custom shortcodes

Structure plugin :

mon-plugin/
├── mon-plugin.php
├── includes/
│   ├── class-core.php
│   └── class-shortcodes.php
├── admin/
│   └── settings-page.php
├── assets/
│   ├── css/
│   └── js/
└── README.md

Versioner sur GitHub.

Phase 5 : Contenu (Jour 8-12)

Tâches :

  • [ ] Planifier calendrier éditorial (10 articles)
  • [ ] Recherche mots-clés (Ubersuggest)
  • [ ] Rédaction 10 articles avec Claude
  • [ ] Optimisation SEO (Rank Math 90+)
  • [ ] Featured images
  • [ ] Liens internes stratégiques

Structure article type :

  1. Introduction (150 mots)
  2. 5-7 sections H2 (1500 mots total)
  3. Code examples (si technique)
  4. FAQ (3-5 questions)
  5. Conclusion + CTA

Phase 6 : Performance (Jour 13-14)

Tâches :

  • [ ] Cache FastCGI vérifié
  • [ ] Opcache optimisé
  • [ ] PHP-FPM tunné
  • [ ] Images converties WebP
  • [ ] Cloudflare CDN actif
  • [ ] Tests PageSpeed 90+

Phase 7 : SEO (Jour 15-16)

Tâches :

  • [ ] Sitemap XML généré et soumis
  • [ ] Google Search Console lié
  • [ ] Google Analytics installé
  • [ ] Schema.org validé
  • [ ] Open Graph configuré
  • [ ] Tous articles score 85+

Phase 8 : Git & Documentation (Jour 17-18)

Tâches :

  • [ ] Repository GitHub créé
  • [ ] Thème versionné
  • [ ] Plugin versionné
  • [ ] README.md professionnel
  • [ ] CHANGELOG.md
  • [ ] Documentation technique

Structure README :

# Mon Projet WordPress

## Description
[Description concise]

## Stack Technique
- Debian 12
- Nginx + PHP 8.2 + MariaDB
- WordPress 6.9
- WordOps 3.22.0

## Installation
[Instructions step-by-step]

## Fonctionnalités
- [Liste]

## Performance
- PageSpeed Score : 95/100
- GTmetrix Grade : A

## Sécurité
- SSL Labs : A+
- Headers sécurité : A

## Screenshots
[Captures d'écran]

## Licence
GPL v2

Phase 9 : Tests & Debug (Jour 19)

Checklist finale :

  • [ ] Tous liens fonctionnels (no 404)
  • [ ] Formulaire contact opérationnel
  • [ ] Responsive mobile/tablet vérifié
  • [ ] Tests navigateurs (Chrome, Firefox, Safari)
  • [ ] Vitesse chargement < 2s
  • [ ] Pas d’erreurs JS console
  • [ ] Pas d’erreurs PHP logs

Phase 10 : Présentation (Jour 20)

Créer une présentation du projet incluant :

  1. Slides (Google Slides ou PowerPoint) :

    • Slide 1 : Titre + URL
    • Slide 2 : Objectifs projet
    • Slide 3 : Stack technique
    • Slide 4 : Fonctionnalités clés
    • Slide 5 : Screenshots
    • Slide 6 : Metrics (PageSpeed, SEO)
    • Slide 7 : Défis rencontrés
    • Slide 8 : Apprentissages
    • Slide 9 : Prochaines étapes
  2. Vidéo démo (2-3 minutes) :

    • Tour du site
    • Fonctionnalité plugin custom
    • Backend WordPress
    • Performance tests

Évaluation projet

Grille notation (100 points) :

Critère Points
Infrastructure fonctionnelle 10
Sécurité (A+ SSL Labs) 10
Performance (90+ PageSpeed) 15
SEO (85+ Rank Math) 15
Design professionnel 10
10 articles qualité 15
Plugin custom fonctionnel 10
GitHub documentation 10
Présentation 5

Seuil de réussite : 70/100

Ressources projet

Toutes ressources des semaines 1-8 applicables.

Critères de réussite

  • [ ] Site accessible en HTTPS
  • [ ] 10 articles publiés et optimisés
  • [ ] Score PageSpeed 90+
  • [ ] Note SSL Labs A+
  • [ ] Plugin custom fonctionnel
  • [ ] Repository GitHub documenté
  • [ ] Présentation complète
  • [ ] Note finale 70+/100

Semaine 11-12 : Maintenance & Évolution

Objectif : Maintenir le site en production et planifier son évolution

Compétences à acquérir

  • [ ] Monitoring proactif (Uptime, erreurs)
  • [ ] Mises à jour sécurité WordPress/plugins
  • [ ] Analyse analytics et ajustements
  • [ ] Backups et restauration
  • [ ] Scaling (si trafic augmente)
  • [ ] Gestion incidents
  • [ ] Planification contenu long terme

Projet pratique #9

« Plan de maintenance 6 mois »

Tâches :

  1. Configurer monitoring Uptime Robot
  2. Calendrier mises à jour (hebdo/mensuel)
  3. Automatiser backups (quotidien)
  4. Tester restauration backup
  5. Analyser Search Console (erreurs, opportunités)
  6. Créer calendrier éditorial 6 mois
  7. Planifier évolutions (features, refonte)

Temps estimé : 6-8h

Monitoring Uptime

Uptime Robot (gratuit, 50 monitors) :

  1. Créer compte : uptimerobot.com
  2. Ajouter monitor HTTP(S)
    • URL : https://votredomaine.com
    • Interval : 5 minutes
    • Alert : Email + SMS
  3. Ajouter monitor mots-clés (vérifier contenu présent)

Alternative : UptimeRobot CLI ou Netdata (self-hosted).

Mises à jour automatiques

Configuration wp-config.php :

// Updates automatiques sécurité (recommandé)
define('WP_AUTO_UPDATE_CORE', 'minor');

// OU updates automatiques tout (risqué)
// define('WP_AUTO_UPDATE_CORE', true);

// Updates plugins/thèmes auto (optionnel, peut casser)
add_filter('auto_update_plugin', '__return_true');
add_filter('auto_update_theme', '__return_true');

Processus manuel recommandé :

Hebdomadaire :

# Se connecter au VPS
ssh deployer@votredomaine.com

# Créer backup pré-update
sudo wo site update votredomaine.com --backup

# Mettre à jour WordPress core
sudo -u www-data wp core update \
  --path=/var/www/votredomaine.com/htdocs

# Mettre à jour plugins
sudo -u www-data wp plugin update --all \
  --path=/var/www/votredomaine.com/htdocs

# Mettre à jour thèmes
sudo -u www-data wp theme update --all \
  --path=/var/www/votredomaine.com/htdocs

# Vérifier site fonctionnel
curl -I https://votredomaine.com

# Si problème, restaurer backup
# sudo wo site restore votredomaine.com --backup=20250118

Mensuel :

  • Updates système : sudo apt update && sudo apt upgrade
  • Updates stack : sudo wo stack upgrade
  • Audit sécurité : Wordfence scan
  • Vérification backups : Test restauration
  • Revue analytics : GSC + GA4

Backups automatiques robustes

UpdraftPlus configuration :

  1. Fréquence :

    • Fichiers : Hebdomadaire
    • Base de données : Quotidien
  2. Rétention :

    • Garder 7 backups fichiers
    • Garder 30 backups DB
  3. Stockage :

    • Primaire : Google Drive ou Dropbox
    • Secondaire : Serveur distant (rsync)
  4. Notifications :

    • Email après chaque backup
    • Alerte si échec

Script backup système (en plus d’UpdraftPlus) :

#!/bin/bash
# Script : backup-wordpress.sh

SITE_ROOT="/var/www/votredomaine.com/htdocs"
BACKUP_DIR="/home/deployer/backups"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="votreprojet"
DB_USER="votreprojet"
DB_PASS="mot_de_passe"

# Créer dossier backup
mkdir -p "$BACKUP_DIR"

# Backup fichiers
tar -czf "$BACKUP_DIR/files_$DATE.tar.gz" "$SITE_ROOT"

# Backup base de données
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$BACKUP_DIR/db_$DATE.sql.gz"

# Garder seulement 7 derniers backups
find "$BACKUP_DIR" -name "files_*.tar.gz" -mtime +7 -delete
find "$BACKUP_DIR" -name "db_*.sql.gz" -mtime +7 -delete

# Notification
echo "Backup completed: $DATE" | mail -s "WordPress Backup" votre@email.com

Automatiser avec cron :

# Éditer crontab
crontab -e

# Ajouter ligne (backup quotidien 2h du matin)
0 2 * * * /home/deployer/scripts/backup-wordpress.sh

Test restauration backup

Important : Tester restauration tous les mois.

Procédure :

  1. Créer environnement staging
  2. Restaurer backup dans staging
  3. Vérifier site fonctionnel
  4. Noter durée restauration
  5. Documenter problèmes

Commandes :

# Créer site staging
sudo wo site create staging.votredomaine.com --wp --php82

# Restaurer backup UpdraftPlus
# Via interface WordPress Admin → UpdraftPlus → Restore

# OU restauration manuelle
cd /var/www/staging.votredomaine.com/htdocs
sudo tar -xzf /chemin/backup/files_20250118.tar.gz
sudo mysql staging_db < /chemin/backup/db_20250118.sql

# Ajuster wp-config.php (DB credentials)
sudo nano wp-config.php

# Search & Replace URLs
sudo -u www-data wp search-replace \
  'https://votredomaine.com' \
  'https://staging.votredomaine.com' \
  --path=/var/www/staging.votredomaine.com/htdocs

Analyse Google Search Console

Vérifications hebdomadaires :

  1. Performance :

    • Tendance impressions
    • Tendance clics
    • CTR moyen (> 3% bon)
    • Position moyenne (objectif top 10)
  2. Couverture :

    • Pages indexées (augmentation = bon)
    • Erreurs 404 à corriger
    • Pages exclues à investiguer
  3. Améliorations :

    • Core Web Vitals (LCP, FID, CLS)
    • Ergonomie mobile (aucune erreur)
    • HTTPS (100% des pages)
  4. Requêtes :

    • Top 10 requêtes
    • Opportunités (position 11-20 à booster)
    • Cannibalisation (2 pages même keyword)

Actions correctives :

  • Erreur 404 : Créer redirection 301
  • Baisse CTR : Améliorer meta description
  • Position 11-20 : Optimiser contenu, ajouter liens internes
  • Core Web Vitals : Optimiser images, cache

Calendrier éditorial long terme

Structure 6 mois (2 articles/semaine = 52 articles) :

Répartition thématiques :

  • 40% Tutoriels techniques
  • 30% Guides pratiques
  • 20% Actualités/tendances
  • 10% Opinion/retours d’expérience

Format Markdown :

# Calendrier Éditorial 2025 - S1

## Janvier

### Semaine 1
- [ ] **Article 1** : [Titre] - Mot-clé : [keyword] - Auteur : [nom]
- [ ] **Article 2** : [Titre] - Mot-clé : [keyword] - Auteur : [nom]

### Semaine 2
- [ ] **Article 3** : [Titre]
- [ ] **Article 4** : [Titre]

[...]

Utiliser Notion, Trello ou Google Sheets pour suivi.

Scaling (si forte croissance trafic)

Signaux scaling requis :

  • Temps réponse > 2s constant
  • CPU > 80% régulier
  • RAM saturée
  • Erreurs 502/503

Solutions :

  1. Vertical scaling (+ de RAM/CPU) :

    # Augmenter plan VPS chez hébergeur
    # Puis ajuster PHP-FPM
    sudo nano /etc/php/8.2/fpm/pool.d/www.conf
    # Augmenter pm.max_children
  2. Horizontal scaling (load balancer) :

    • Nginx reverse proxy
    • 2+ serveurs WordPress
    • DB séparé
    • Redis centralisé
  3. CDN avancé :

    • Cloudflare Pro (20$/mois)
    • BunnyCDN
    • KeyCDN
  4. Managed WordPress :

    • Kinsta
    • WP Engine
    • Cloudways

Plan de gestion incidents

Niveaux incidents :

  • P1 (Critique) : Site down, data loss

    • Réponse : < 15 min
    • Action : Restauration immédiate
  • P2 (Majeur) : Fonctionnalité cassée, lenteur extrême

    • Réponse : < 1h
    • Action : Fix + post-mortem
  • P3 (Mineur) : Bug visuel, lien cassé

    • Réponse : < 24h
    • Action : Fix planifié

Procédure incident P1 :

  1. Détection : Monitoring alerte
  2. Évaluation : Vérifier ampleur
  3. Communication : Twitter/status page
  4. Résolution :
    • Restaurer backup récent
    • OU rollback update
    • OU hotfix
  5. Vérification : Site fonctionnel
  6. Post-mortem : Analyse cause, prévention

Documentation maintenance

Créer MAINTENANCE.md dans repository :

# Plan de Maintenance - votredomaine.com

## Tâches Quotidiennes
- [ ] Vérifier uptime (automatique)
- [ ] Vérifier backup (automatique)

## Tâches Hebdomadaires
- [ ] Updates WordPress/plugins/thèmes
- [ ] Vérifier logs erreurs
- [ ] Répondre commentaires
- [ ] Publier 2 articles

## Tâches Mensuelles
- [ ] Audit sécurité Wordfence
- [ ] Test restauration backup
- [ ] Analyse Google Search Console
- [ ] Revue analytics GA4
- [ ] Updates système Debian

## Tâches Trimestrielles
- [ ] Audit SEO complet
- [ ] Refresh contenu ancien
- [ ] Analyse concurrence
- [ ] Revue stratégie contenu

## Contacts Urgence
- Hébergeur : [contact]
- DNS : [contact]
- Développeur backup : [contact]

## Procédures Incidents
Voir section [Plan gestion incidents](#plan-de-gestion-incidents)

Ressources semaine 11-12

Critères de réussite

  • [ ] Monitoring uptime actif (< 5 min check)
  • [ ] Backups automatiques quotidiens
  • [ ] Test restauration réussi
  • [ ] Procédure updates documentée
  • [ ] Calendrier éditorial 6 mois créé
  • [ ] Plan gestion incidents documenté
  • [ ] Analyse GSC hebdomadaire en place
  • [ ] Aucun incident P1 non résolu en < 1h

Ressources officielles

Documentation technique

Debian :

Nginx :

PHP :

MariaDB :

WordPress :

WordOps :

Git & GitHub :

Outils SEO & Analytics

Outils Performance

Outils Sécurité

Communautés & Forums

IA & Automatisation


Critères de réussite

Certification finale (100 points)

1. Infrastructure & Sécurité (25 points)

  • [ ] VPS Debian 12 opérationnel (5 pts)
  • [ ] SSH sécurisé (clés uniquement) (3 pts)
  • [ ] WordOps 3.22.0 installé (2 pts)
  • [ ] Site WordPress HTTPS fonctionnel (5 pts)
  • [ ] Note SSL Labs A+ (5 pts)
  • [ ] Headers sécurité (note A Mozilla Observatory) (5 pts)

2. Performance (20 points)

  • [ ] PageSpeed Insights 90+ mobile (5 pts)
  • [ ] PageSpeed Insights 90+ desktop (5 pts)
  • [ ] GTmetrix Grade A (5 pts)
  • [ ] Temps chargement < 2s (5 pts)

3. SEO (20 points)

  • [ ] Rank Math installé et configuré (3 pts)
  • [ ] 10+ articles score Rank Math 85+ (10 pts)
  • [ ] Google Search Console lié (2 pts)
  • [ ] Sitemap XML soumis (2 pts)
  • [ ] Schema.org validé (3 pts)

4. Contenu (15 points)

  • [ ] 10+ articles publiés (10 pts)
  • [ ] Longueur moyenne 1500+ mots (2 pts)
  • [ ] Featured images partout (1 pt)
  • [ ] Liens internes stratégiques (2 pts)

5. Développement (15 points)

  • [ ] Thème custom ou child (5 pts)
  • [ ] Plugin custom fonctionnel (5 pts)
  • [ ] Code bien documenté (3 pts)
  • [ ] Aucune erreur PHP logs (2 pts)

6. Git & Documentation (10 points)

  • [ ] Repository GitHub public (2 pts)
  • [ ] README.md professionnel (3 pts)
  • [ ] 20+ commits significatifs (3 pts)
  • [ ] .gitignore correct (2 pts)

7. Maintenance (5 points)

  • [ ] Backups automatiques configurés (2 pts)
  • [ ] Monitoring uptime actif (2 pts)
  • [ ] Plan maintenance documenté (1 pt)

8. Projet Fil Rouge (10 points)

  • [ ] Présentation slides (3 pts)
  • [ ] Vidéo démo (3 pts)
  • [ ] Respect cahier des charges (4 pts)

Seuils de réussite

  • 70-79 points : Acquis (débutant autonome)
  • 80-89 points : Bien (développeur junior)
  • 90-100 points : Excellent (développeur confirmé)

Certification finale

Format

Présentation orale (20 minutes) :

  • 10 min : Démo site + explications techniques
  • 5 min : Défis rencontrés et solutions
  • 5 min : Questions/réponses

Livrables :

  1. URL site WordPress fonctionnel
  2. Repository GitHub avec documentation
  3. Slides présentation (PDF)
  4. Vidéo démo (2-3 min)
  5. Rapport technique (Markdown, 5-10 pages)

Rapport technique structure

# Projet WordPress VPS - Rapport Technique

## 1. Introduction
- Objectifs projet
- Choix technologiques

## 2. Infrastructure
- Architecture système
- Stack LEMP
- Configuration serveur

## 3. Sécurité
- Mesures implémentées
- Tests sécurité
- Résultats audits

## 4. Performance
- Optimisations appliquées
- Benchmarks
- Comparaison avant/après

## 5. SEO & Contenu
- Stratégie SEO
- Recherche mots-clés
- Statistiques articles

## 6. Développement
- Thème (features)
- Plugin (fonctionnalités)
- Code highlights

## 7. Défis & Apprentissages
- Problèmes rencontrés
- Solutions trouvées
- Compétences acquises

## 8. Évolution Future
- Prochaines features
- Scalabilité
- Roadmap 6 mois

## Annexes
- Commandes utiles
- Screenshots
- Metrics complètes

Conseils de réussite

Organisation

  • Planifier : Bloquer 10-15h/semaine dans votre agenda
  • Documenter : Tenir un journal de bord (problèmes, solutions, apprentissages)
  • Pratiquer : Ne pas se contenter de lire, FAIRE les exercices
  • Persévérer : Les erreurs sont normales et formatrices

Apprentissage efficace

  • Technique Feynman : Expliquer à voix haute ce que vous apprenez
  • Pomodoro : 25 min focus + 5 min pause
  • Active recall : Tester vos connaissances sans regarder la doc
  • Spaced repetition : Revoir les concepts à intervalles croissants

Debugging

  • Lire les logs : /var/log/nginx/, /var/log/php/, wp-content/debug.log
  • Google est votre ami : Copier l’erreur exacte dans recherche
  • Stack Overflow : 90% des erreurs ont déjà été résolues
  • Documentation officielle : Toujours la source de vérité

Communauté

  • Rejoindre forums : WordPress.org, Reddit r/WordPress
  • Suivre experts : Twitter/X, YouTube, blogs
  • Participer : Répondre aux questions d’autres débutants
  • Partager : Documenter vos solutions (blog, GitHub)

Conclusion

Félicitations d’avoir entrepris ce parcours de 8-12 semaines.

À la fin, vous serez capable de :

  • Gérer un serveur VPS Debian en production
  • Déployer et maintenir WordPress avec WordOps
  • Optimiser performance et sécurité
  • Créer du contenu SEO-optimisé
  • Développer thèmes et plugins WordPress
  • Utiliser Git et GitHub professionnellement
  • Automatiser avec l’IA (Claude, ChatGPT)

Prochaines étapes :

  1. Provisionner votre VPS
  2. Commencer Semaine 1
  3. Rejoindre la communauté
  4. Documenter votre progression
  5. Profiter de l’aventure

Bon courage et bon apprentissage !


Changelog

Version 1.0.0 – 2025-12-18

  • Création parcours initial
  • 12 semaines de contenu structuré
  • 9 projets pratiques
  • Ressources officielles vérifiées
  • Critères de réussite définis

Support

Questions ? Besoin d’aide ?


Made with passion for you.arewel.com DevOps, SRE & Cloud Engineering depuis 2003

Une remarque, un retour ?

Cet article est vivant - corrections, contre-arguments et retours de production sont les bienvenus. Trois canaux, choisis celui qui te convient.