Parcours Intermediaire : Ingenieur WordPress Production
Niveau: Intermediaire
Duree estimee: 12-16 semaines
Prerequis: Maitrise de WordPress, bases Linux/VPS, connaissance Git
Vue d’ensemble
Ce parcours vous transformera en ingenieur WordPress Production capable de gerer des infrastructures haute performance, implementer des pipelines CI/CD avec GitHub Actions, securiser des environnements critiques et optimiser des sites a grande echelle. Vous apprendrez a integrer des workflows assistes par IA (Claude.ai, ChatGPT) pour accelerer votre productivite.
—
Phase 1 : Infrastructure VPS & Stack Haute Performance
Objectifs
- Maitriser le deploiement d’un stack WordPress optimise sur VPS Debian
- Configurer WordOps pour une gestion simplifiee
- Implementer un systeme de cache multi-couches
- Optimiser les performances au niveau noyau Linux
Competences techniques
1.1 Preparation VPS Debian
Technologies: Debian 11/12, SSH, UFW, Fail2Ban
Configuration initiale securisee:
Mise a jour systeme
apt update && apt upgrade -y
Configuration utilisateur non-root
adduser deployuser
usermod -aG sudo deployuser
Securisation SSH
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshdconfig
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshdconfig
systemctl restart sshd
Firewall UFW
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
Ressources:
1.2 Installation et configuration WordOps
Technologies: WordOps 3.x, Nginx, PHP 8.2/8.3, MariaDB 10.11, Redis 7.x
Installation WordOps (2025):
Installation
wget -qO wo wops.cc && sudo bash wo
Verification
wo --version
WordOps 3.x.x
Stack complet
wo stack install
wo stack install --php82 --php83
wo stack install --redis
Note importante: Des problemes d’installation ont ete reportes sur Debian 12.10 debut 2025. Verifiez le forum communautaire WordOps pour les dernieres mises a jour de compatibilite.
Creation de site optimise:
Site WordPress avec cache Redis et Let's Encrypt
wo site create example.com --wp
--php83
--redis
--letsencrypt
Verification configuration Nginx
wo site info example.com
Caracteristiques WordOps:
Ressources:
1.3 Cache multi-couches : Nginx FastCGI + Redis Object Cache
A. Nginx FastCGI Cache
Le cache FastCGI permet a Nginx de servir directement le HTML genere par PHP-FPM sans solliciter WordPress, PHP ou MySQL pour les requetes suivantes.
Configuration Nginx (/etc/nginx/conf.d/fastcgi-cache.conf):
Zone de cache
fastcgicachepath /var/run/nginx-cache levels=1:2
keyszone=WORDPRESS:100m
inactive=60m
maxsize=500m;
fastcgicachekey "$scheme$requestmethod$host$requesturi";
fastcgicacheusestale error timeout invalidheader http500;
fastcgiignoreheaders Cache-Control Expires Set-Cookie;
Dans votre configuration de site:
Conditions de bypass
set $skipcache 0;
if ($requestmethod = POST) {
set $skipcache 1;
}
if ($querystring != "") {
set $skipcache 1;
}
if ($requesturi ~ "/wp-admin/|/xmlrpc.php|wp-..php|/feed/|sitemap(index)?.xml") {
set $skipcache 1;
}
if ($httpcookie ~ "commentauthor|wordpress[a-f0-9]+|wp-postpass|wordpressloggedin") {
set $skipcache 1;
}
Application du cache
fastcgicachebypass $skipcache;
fastcginocache $skipcache;
fastcgicache WORDPRESS;
fastcgicachevalid 200 60m;
fastcgicachevalid 404 10m;
addheader X-FastCGI-Cache $upstreamcachestatus;
Plugin WordPress recommande:
B. Redis Object Cache
Redis reduit de jusqu’a 80% les requetes base de donnees en stockant en memoire les resultats frequemment demandes.
Configuration Redis (/etc/redis/redis.conf):
Memoire allouee (minimum 256MB production)
maxmemory 512mb
maxmemory-policy allkeys-lru
Persistence
save 900 1
save 300 10
save 60 10000
Performance
tcp-backlog 511
timeout 0
tcp-keepalive 300
Configuration WordPress (wp-config.php):
define('WPREDISHOST', '127.0.0.1');
define('WPREDISPORT', 6379);
define('WPREDISDATABASE', 0);
define('WPREDISMAXTTL', 86400); // 24 heures
// Options recommandees
define('WPREDISTIMEOUT', 1);
define('WPREDISREADTIMEOUT', 1);
Plugins recommandes:
TTL recommandes (2025):
Verification performances:
Stats Redis
redis-cli INFO stats
Monitoring en temps reel
redis-cli MONITOR
Via WP-CLI
wp redis status
wp redis info
Cas d’usage optimaux:
Attention: Pour les petits blogs avec cache page-level efficace et trafic faible, Redis peut compliquer inutilement votre stack.
Ressources:
1.4 Optimisations serveur avancees
PHP 8.3 OPcache configuration (/etc/php/8.3/fpm/conf.d/10-opcache.ini):
opcache.enable=1
opcache.memoryconsumption=256
opcache.internedstringsbuffer=16
opcache.maxacceleratedfiles=10000
opcache.revalidatefreq=2
opcache.fastshutdown=1
opcache.enablecli=0
Performance optimale (maintenir proche de 100%)
opcache.validatetimestamps=0
Monitoring OPcache:
Via WP-CLI
wp opcache status
Configuration PHP-FPM (/etc/php/8.3/fpm/pool.d/www.conf):
; Process manager
pm = dynamic
pm.maxchildren = 50
pm.startservers = 10
pm.minspareservers = 5
pm.maxspareservers = 20
pm.maxrequests = 500
; Monitoring
pm.statuspath = /status
ping.path = /ping
Calcul memoire par worker:
Memoire moyenne par process PHP-FPM
ps --no-headers -o "rss,cmd" -C php-fpm8.3 | awk '{ sum+=$1 } END { printf ("%d%sn", sum/NR/1024,"M") }'
Formule: RAMdisponible / Memoireparprocess = pm.maxchildren
Optimisations noyau Linux (/etc/sysctl.conf):
Network performance
net.core.somaxconn = 65535
net.ipv4.tcpmaxsynbacklog = 8192
net.ipv4.tcpfintimeout = 30
net.ipv4.tcpkeepalivetime = 300
net.ipv4.tcpkeepaliveintvl = 30
net.ipv4.tcpkeepaliveprobes = 3
File descriptors
fs.file-max = 100000
Application
sysctl -p
Requis materiels production (2025):
Objectifs performance:
Projet pratique Phase 1
Deploiement infrastructure complete:
Benchmark attendus:
—
Phase 2 : Securite Production & Hardening
Objectifs
Contexte menaces 2025
Statistiques critiques:
Source: Patchstack Q3 2025 Report
Competences techniques
2.1 Hardening wp-config.php
Configuration securisee complete:
WordPress Configuration securisee - Production 2025
/
// === CLES DE SECURITE ===
// Generees via https://api.wordpress.org/secret-key/1.1/salt/
define('AUTHKEY', 'votre-cle-unique-generee');
define('SECUREAUTHKEY', 'votre-cle-unique-generee');
define('LOGGEDINKEY', 'votre-cle-unique-generee');
define('NONCEKEY', 'votre-cle-unique-generee');
define('AUTHSALT', 'votre-cle-unique-generee');
define('SECUREAUTHSALT', 'votre-cle-unique-generee');
define('LOGGEDINSALT', 'votre-cle-unique-generee');
define('NONCESALT', 'votre-cle-unique-generee');
// === SECURITE PRODUCTION ===
// Desactiver editeur de fichiers
define('DISALLOWFILEEDIT', true);
define('DISALLOWFILEMODS', true);
// Limiter revisions
define('WPPOSTREVISIONS', 5);
define('AUTOSAVEINTERVAL', 300);
// Vider corbeille automatiquement
define('EMPTYTRASHDAYS', 7);
// Forcer SSL admin
define('FORCESSLADMIN', true);
// Bloquer requetes externes (sauf services approuves)
define('WPHTTPBLOCKEXTERNAL', true);
define('WPACCESSIBLEHOSTS', 'api.wordpress.org,.github.com,.cloudflare.com');
// === PERFORMANCE ===
define('WPMEMORYLIMIT', '256M');
define('WPMAXMEMORYLIMIT', '512M');
define('WPCACHE', true);
// === MODE DEBUG (DESACTIVE EN PRODUCTION) ===
define('WPDEBUG', false);
define('WPDEBUGLOG', false);
define('WPDEBUGDISPLAY', false);
define('SCRIPTDEBUG', false);
@iniset('displayerrors', 0);
// === BASE DE DONNEES ===
define('DBNAME', 'databasename');
define('DBUSER', 'databaseuser');
define('DBPASSWORD', 'strongpasswordhere');
define('DBHOST', 'localhost');
define('DBCHARSET', 'utf8mb4');
define('DBCOLLATE', '');
$tableprefix = 'wp'; // Changer pour prefixe unique en production
// === SECURITE COOKIES ===
define('COOKIEDOMAIN', 'example.com');
define('COOKIEPATH', '/');
define('SITECOOKIEPATH', '/');
define('ADMINCOOKIEPATH', SITECOOKIEPATH . 'wp-admin');
// === PARAMETRES AVANCES ===
define('CONCATENATESCRIPTS', false); // Desactive si HTTP/2 actif
define('COMPRESSSCRIPTS', true);
define('COMPRESSCSS', true);
/ C'est tout, ne modifiez pas ce qui suit ! Bonne publication. /
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', DIR . '/' );
}
requireonce ABSPATH . 'wp-settings.php';
Rotation cles de securite (recommande tous les 3-6 mois):
Generer nouvelles cles
curl -s https://api.wordpress.org/secret-key/1.1/salt/
2.2 Permissions fichiers et verrouillage systeme
Permissions optimales:
Repertoires
find /var/www/example.com/htdocs -type d -exec chmod 755 {} ;
Fichiers
find /var/www/example.com/htdocs -type f -exec chmod 644 {} ;
wp-config.php ultra-securise
chmod 440 /var/www/example.com/htdocs/wp-config.php
chown www-data:www-data /var/www/example.com/htdocs/wp-config.php
.htaccess
chmod 444 /var/www/example.com/htdocs/.htaccess
Verrouillage immutabilite (fichiers critiques):
Rendre wp-config.php immuable
chattr +i /var/www/example.com/htdocs/wp-config.php
Verification
lsattr /var/www/example.com/htdocs/wp-config.php
Retirer l'immutabilite (pour modification)
chattr -i /var/www/example.com/htdocs/wp-config.php
Protection repertoires sensibles (Nginx):
Bloquer acces wp-config.php
location ~ wp-config.php {
deny all;
}
Bloquer fichiers sensibles
location ~ .(log|sql|conf|bak|old|git)$ {
deny all;
}
Limiter acces wp-login.php par IP (optionnel)
location = /wp-login.php {
allow 203.0.113.0/24; # Votre IP
deny all;
include fastcgiparams;
fastcgipass php;
}
2.3 Protection authentification avancee
A. Authentification a deux facteurs (2FA)
Plugins recommandes:
Configuration via WP-CLI:
Installer plugin 2FA
wp plugin install two-factor --activate
Forcer 2FA pour tous les administrateurs
wp user meta update USERID twofactorrequired 1
B. Limitation tentatives connexion
Plugin: Limit Login Attempts Reloaded
Configuration Nginx (alternative):
Rate limiting connexions
limitreqzone $binaryremoteaddr zone=login:10m rate=5r/m;
location = /wp-login.php {
limitreq zone=login burst=2 nodelay;
include fastcgiparams;
fastcgipass php;
}
C. Renommer URL admin
Plugin: WPS Hide Login
Avantages:
/wp-admin et /wp-login.php2.4 Web Application Firewall (WAF) niveau application
Solutions 2025:
1. Patchstack (Recommande)
2. Wordfence
3. Cloudflare WAF (Niveau edge)
Configuration Cloudflare Rules (exemples):
Bloquer scanners connus
(http.useragent contains "nikto") or
(http.useragent contains "sqlmap") or
(http.useragent contains "masscan")
Action: Block
Rate limiting aggressif wp-login
(http.request.uri.path eq "/wp-login.php")
Action: Rate Limit (5 requests / 5 minutes)
Bloquer acces xmlrpc.php
(http.request.uri.path eq "/xmlrpc.php")
Action: Block
Configuration Wordfence recommandee:
// wp-config.php
define('WFWAFENABLED', true);
define('WFWAFLOGATTACKS', true);
define('WFWAFSTORAGEENGINE', 'mysqli');
2.5 Discipline mises a jour et gestion vulnerabilites
Strategie mise a jour 2025:
1. Surveillance vulnerabilites
WP-CLI - Verifier vulnerabilites connues
wp plugin list --field=name | xargs -I {} wp plugin verify-checksums {}
Vulnerabilite scan automatise
wp vuln check
2. Automatisation mises a jour mineures
// wp-config.php - Activer mises a jour auto securite
define('WPAUTOUPDATECORE', 'minor');
// Auto-update plugins de securite
addfilter('autoupdateplugin', 'returntrue');
3. Workflow mise a jour production
Processus recommande:
Script backup pre-update:
#!/bin/bash
SITE="example.com"
DATE=$(date +%Y%m%d%H%M%S)
BACKUPDIR="/backups/$SITE"
Backup base de donnees
wp db export "$BACKUPDIR/db$DATE.sql" --path=/var/www/$SITE/htdocs
Backup fichiers
tar -czf "$BACKUPDIR/files$DATE.tar.gz" -C /var/www/$SITE htdocs
Garder 7 derniers backups
find "$BACKUPDIR" -name ".sql" -mtime +7 -delete
find "$BACKUPDIR" -name ".tar.gz" -mtime +7 -delete
echo "Backup complete: $DATE"
4. Monitoring post-update
Verifier erreurs PHP
tail -f /var/log/php8.3-fpm.log
Verifier erreurs Nginx
tail -f /var/log/nginx/error.log
Monitoring WordPress
wp core verify-checksums
2.6 Headers de securite HTTP
Configuration Nginx (/etc/nginx/common/wpcommon.conf):
Security headers
addheader X-Frame-Options "SAMEORIGIN" always;
addheader X-Content-Type-Options "nosniff" always;
addheader X-XSS-Protection "1; mode=block" always;
addheader Referrer-Policy "strict-origin-when-cross-origin" always;
CSP (Content Security Policy) - Adapter a votre site
addheader Content-Security-Policy "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.example.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self'; frame-ancestors 'self';" always;
HSTS (HTTP Strict Transport Security) - Attention: preload permanent
addheader Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Permissions Policy
addheader Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
Verification headers:
curl -I https://example.com | grep -E "(X-Frame|X-Content|Strict-Transport)"
Outils audit:
Projet pratique Phase 2
Audit et hardening securite complet:
Livrable: Documentation securite complete + rapport audit avant/apres
Ressources:
—
Phase 3 : CI/CD avec GitHub Actions
Objectifs
Competences techniques
3.1 Structure repository Git pour WordPress
Architecture recommandee:
mon-site-wordpress/
├── .github/
│ ├── workflows/
│ │ ├── deploy-production.yml
│ │ ├── deploy-staging.yml
│ │ └── code-quality.yml
├── wp-content/
│ ├── themes/
│ │ └── mon-theme/
│ ├── plugins/
│ │ └── mon-plugin/
│ └── mu-plugins/
├── config/
│ ├── wp-config-production.php
│ ├── wp-config-staging.php
│ └── nginx/
│ └── site.conf
├── scripts/
│ ├── deploy.sh
│ └── backup.sh
├── tests/
│ ├── phpunit/
│ └── e2e/
├── .gitignore
├── composer.json
├── package.json
└── README.md
.gitignore optimise WordPress:
WordPress core
/wp-admin/
/wp-includes/
wp-.php
xmlrpc.php
readme.html
license.txt
Configuration
wp-config.php
.htaccess
Uploads et cache
wp-content/uploads/
wp-content/cache/
wp-content/upgrade/
Plugins et themes tiers (geres via composer)
wp-content/plugins/
!wp-content/plugins/mon-plugin/
wp-content/themes/
!wp-content/themes/mon-theme/
Dependencies
/vendor/
/nodemodules/
OS et IDE
.DSStore
Thumbs.db
.idea/
.vscode/
.swp
Backups
.sql
.sql.gz
.tar.gz
composer.json pour dependencies:
{
"name": "example/mon-site",
"description": "Site WordPress production",
"type": "project",
"require": {
"php": ">=8.2",
"composer/installers": "^2.0",
"wpackagist-plugin/redis-cache": "^2.5",
"wpackagist-plugin/wordfence": "^7.11"
},
"require-dev": {
"phpunit/phpunit": "^10.0",
"squizlabs/phpcodesniffer": "^3.7",
"phpstan/phpstan": "^1.10"
},
"repositories": [
{
"type": "composer",
"url": "https://wpackagist.org"
}
],
"extra": {
"installer-paths": {
"wp-content/plugins/{$name}/": ["type:wordpress-plugin"],
"wp-content/themes/{$name}/": ["type:wordpress-theme"]
}
}
}
3.2 GitHub Actions workflow – Deploiement Staging
.github/workflows/deploy-staging.yml:
name: Deploy to Staging
on:
push:
branches:
- develop
env:
SSHHOST: ${{ secrets.STAGINGSSHHOST }}
SSHUSER: ${{ secrets.STAGINGSSHUSER }}
SSHPORT: ${{ secrets.STAGINGSSHPORT }}
DEPLOYPATH: /var/www/staging.example.com/htdocs
jobs:
deploy:
name: Deploy to Staging Server
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
extensions: mbstring, xml, zip
tools: composer:v2
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install Composer dependencies
run: |
composer install --no-dev --optimize-autoloader --no-interaction
- name: Install NPM dependencies and build
run: |
npm ci
npm run build
- name: Run PHP CodeSniffer
run: |
vendor/bin/phpcs --standard=PSR12 wp-content/themes/mon-theme
vendor/bin/phpcs --standard=WordPress wp-content/plugins/mon-plugin
- name: Run PHPStan
run: vendor/bin/phpstan analyse wp-content/themes/mon-theme wp-content/plugins/mon-plugin
- name: Setup SSH key
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.STAGINGSSHPRIVATEKEY }}
- name: Add server to known hosts
run: |
mkdir -p ~/.ssh
ssh-keyscan -p $SSHPORT -H $SSHHOST >> ~/.ssh/knownhosts
- name: Deploy via rsync
run: |
rsync -avz
--delete
--exclude='.git'
--exclude='.github'
--exclude='nodemodules'
--exclude='tests'
--exclude='wp-config.php'
--exclude='wp-content/uploads'
--exclude='wp-content/cache'
-e "ssh -p $SSHPORT"
./ $SSHUSER@$SSHHOST:$DEPLOYPATH/
- name: Run post-deployment commands
run: |
ssh -p $SSHPORT $SSHUSER@$SSHHOST << 'ENDSSH'
cd ${{ env.DEPLOYPATH }}
# Composer autoload
composer dump-autoload --optimize --no-dev
# WP-CLI operations
wp cache flush --allow-root
wp rewrite flush --allow-root
# Permissions
find . -type f -exec chmod 644 {} ;
find . -type d -exec chmod 755 {} ;
# Redis cache clear
wp redis cli FLUSHDB --allow-root
echo "Deployment complete!"
ENDSSH
- name: Notify deployment
if: always()
run: |
echo "Staging deployment finished: ${{ job.status }}"
# Integration Slack/Discord possible ici
3.3 GitHub Actions workflow – Deploiement Production
.github/workflows/deploy-production.yml:
name: Deploy to Production
on:
push:
branches:
- main
workflowdispatch: # Permet declenchement manuel
env:
SSHHOST: ${{ secrets.PRODSSHHOST }}
SSHUSER: ${{ secrets.PRODSSHUSER }}
SSHPORT: ${{ secrets.PRODSSHPORT }}
DEPLOYPATH: /var/www/example.com/htdocs
jobs:
test:
name: Run Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
extensions: mbstring, xml, zip, mysql
- name: Install dependencies
run: composer install --no-interaction
- name: Run PHPUnit tests
run: vendor/bin/phpunit tests/
- name: Run PHP CodeSniffer
run: vendor/bin/phpcs --standard=WordPress wp-content/themes/ wp-content/plugins/
- name: Run PHPStan
run: vendor/bin/phpstan analyse --level=5 wp-content/themes/ wp-content/plugins/
backup:
name: Backup Production
runs-on: ubuntu-latest
needs: test
steps:
- name: Setup SSH key
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.PRODSSHPRIVATEKEY }}
- name: Create backup
run: |
ssh -p $SSHPORT $SSHUSER@$SSHHOST << 'ENDSSH'
BACKUPDIR="/backups/example.com"
DATE=$(date +%Y%m%d%H%M%S)
# Database backup
wp db export "$BACKUPDIR/pre-deploy$DATE.sql"
--path=${{ env.DEPLOYPATH }}
--allow-root
# Files backup
tar -czf "$BACKUPDIR/files$DATE.tar.gz"
-C ${{ env.DEPLOYPATH }}
wp-content/themes/mon-theme
wp-content/plugins/mon-plugin
echo "Backup created: $DATE"
ENDSSH
deploy:
name: Deploy to Production
runs-on: ubuntu-latest
needs: backup
environment:
name: production
url: https://example.com
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Build assets
run: |
composer install --no-dev --optimize-autoloader
npm ci
npm run build:production
- name: Setup SSH key
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.PRODSSHPRIVATEKEY }}
- name: Enable maintenance mode
run: |
ssh -p $SSHPORT $SSHUSER@$SSHHOST << 'ENDSSH'
wp maintenance-mode activate --allow-root
--path=${{ env.DEPLOYPATH }}
ENDSSH
- name: Deploy files
run: |
rsync -avz
--delete
--exclude='.git'
--exclude='nodemodules'
--exclude='wp-config.php'
--exclude='wp-content/uploads'
-e "ssh -p $SSHPORT"
./ $SSHUSER@$SSHHOST:$DEPLOYPATH/
- name: Post-deployment tasks
run: |
ssh -p $SSHPORT $SSHUSER@$SSHHOST << 'ENDSSH'
cd ${{ env.DEPLOYPATH }}
# Database migration (si necessaire)
# wp migrate --allow-root
# Clear all caches
wp cache flush --allow-root
wp rewrite flush --allow-root
# Redis flush
wp redis cli FLUSHDB --allow-root
# Nginx cache purge
rm -rf /var/run/nginx-cache/
# OPcache reset
wp opcache reset --allow-root
# Permissions
find wp-content/themes/mon-theme -type f -exec chmod 644 {} ;
find wp-content/plugins/mon-plugin -type f -exec chmod 644 {} ;
echo "Post-deployment complete"
ENDSSH
- name: Disable maintenance mode
if: always()
run: |
ssh -p $SSHPORT $SSHUSER@$SSHHOST << 'ENDSSH'
wp maintenance-mode deactivate --allow-root
--path=${{ env.DEPLOYPATH }}
ENDSSH
- name: Health check
run: |
RESPONSE=$(curl -s -o /dev/null -w "%{httpcode}" https://example.com)
if [ $RESPONSE -ne 200 ]; then
echo "Health check failed! HTTP $RESPONSE"
exit 1
fi
echo "Health check passed: HTTP $RESPONSE"
- name: Notify deployment success
if: success()
run: echo "Production deployment successful!"
- name: Notify deployment failure
if: failure()
run: echo "Production deployment failed! Rolling back..."
3.4 Workflow qualite code
.github/workflows/code-quality.yml:
name: Code Quality Checks
on:
pullrequest:
branches:
- develop
- main
jobs:
code-quality:
name: Code Quality
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
coverage: xdebug
- name: Install dependencies
run: composer install --no-interaction
- name: PHP CodeSniffer
run: |
vendor/bin/phpcs
--standard=WordPress
--extensions=php
--ignore=vendor
wp-content/
- name: PHPStan Static Analysis
run: vendor/bin/phpstan analyse --level=6 wp-content/
- name: PHPUnit with Coverage
run: vendor/bin/phpunit --coverage-text tests/
- name: Check WordPress Coding Standards
run: |
composer require --dev wp-coding-standards/wpcs
vendor/bin/phpcs --config-set installedpaths vendor/wp-coding-standards/wpcs
vendor/bin/phpcs --standard=WordPress-Core wp-content/themes/
vendor/bin/phpcs --standard=WordPress-Extra wp-content/plugins/
3.5 Configuration secrets GitHub
Secrets a configurer dans GitHub (Settings > Secrets and variables > Actions):
Staging:
STAGINGSSHHOST: staging.example.comSTAGINGSSHUSER: deployuserSTAGINGSSHPORT: 22STAGINGSSHPRIVATEKEY: Cle SSH privee (format PEM)Production:
PRODSSHHOST: example.comPRODSSHUSER: deployuserPRODSSHPORT: 22PRODSSHPRIVATEKEY: Cle SSH privee (format PEM)Generation paire cles SSH pour deploiement:
Sur votre machine locale
ssh-keygen -t ed25519 -C "github-actions-deploy" -f ~/.ssh/githubdeploykey
Copier cle publique sur serveur
ssh-copy-id -i ~/.ssh/githubdeploykey.pub deployuser@example.com
Copier cle privee dans GitHub Secrets
cat ~/.ssh/githubdeploykey
3.6 Deploiement avec Deployer.org (alternative)
Installation Deployer:
composer require --dev deployer/deployer
deploy.php configuration:
releases', 3);
set('writablemode', 'chmod');
set('writablechmodmode', '0755');
// Serveurs
host('production')
->setHostname('example.com')
->setRemoteUser('deployuser')
->setDeployPath('/var/www/example.com')
->set('branch', 'main')
->set('httpuser', 'www-data');
host('staging')
->setHostname('staging.example.com')
->setRemoteUser('deployuser')
->setDeployPath('/var/www/staging.example.com')
->set('branch', 'develop')
->set('httpuser', 'www-data');
// Fichiers partages entre deploiements
set('sharedfiles', [
'wp-config.php',
'.htaccess'
]);
set('shareddirs', [
'wp-content/uploads',
'wp-content/cache'
]);
// Fichiers a exclure
set('writabledirs', [
'wp-content/uploads',
'wp-content/cache'
]);
// Tasks personnalisees
desc('Clear WordPress cache');
task('wp:cache:clear', function () {
run('cd {{releasepath}} && wp cache flush --allow-root');
run('cd {{releasepath}} && wp redis cli FLUSHDB --allow-root');
});
desc('Clear Nginx FastCGI cache');
task('nginx:cache:clear', function () {
run('rm -rf /var/run/nginx-cache/');
});
desc('Backup database before deploy');
task('wp:db:backup', function () {
$date = date('YmdHis');
run("wp db export /backups/{{application}}/db$date.sql --path={{deploypath}}/current --allow-root");
});
// Workflow deploiement
desc('Deploy WordPress');
task('deploy', [
'deploy:prepare',
'wp:db:backup',
'deploy:vendors',
'deploy:publish',
'wp:cache:clear',
'nginx:cache:clear',
'deploy:cleanup'
]);
after('deploy:failed', 'deploy:unlock');
GitHub Actions avec Deployer:
- name: Deploy with Deployer
run: |
vendor/bin/dep deploy production
--branch=main
-vvv
Projet pratique Phase 3
Mise en place CI/CD complete:
Livrable: Repository Git fonctionnel + documentation CI/CD + captures deploys reussis
Ressources:
—
Phase 4 : Performance a Grande Echelle
Objectifs
Competences techniques
4.1 Core Web Vitals et optimisation 2025
Metriques critiques Google (impact SEO):
Impact business:
Source: 15 WordPress Performance Tips 2025 – Odd Jar
4.2 Optimisation images moderne
A. Formats modernes (2025)
AVIF (recommande):
WebP (fallback):
Configuration serveur Nginx:
Servir AVIF si supporte
location ~ .(jpg|jpeg|png)$ {
set $avifsuffix "";
if ($httpaccept ~ "image/avif") {
set $avifsuffix ".avif";
}
addheader Vary Accept;
tryfiles $uri$avifsuffix $uri.webp $uri =404;
}
B. Plugins optimisation images
Recommandes 2025:
Configuration via WP-CLI:
Installer Imagify
wp plugin install imagify --activate
Configuration API
wp option update imagifysettings '{"apikey":"YOURKEY","optimizationlevel":1,"autooptimize":1,"resizelarger":1,"resizelargerw":1920}'
Optimiser bibliotheque existante (batch)
wp imagify optimize --path=/var/www/example.com/htdocs
C. Lazy loading natif WordPress
// Actif par defaut depuis WP 5.5
// Desactiver si conflit avec plugin tiers
addfilter('wplazyloadingenabled', 'returnfalse');
D. Responsive images (srcset)
WordPress genere automatiquement srcset. Verification:
// functions.php - Ajouter tailles personnalisees
addimagesize('hero-desktop', 1920, 1080, true);
addimagesize('hero-tablet', 1024, 768, true);
addimagesize('hero-mobile', 640, 480, true);
// Regenerer vignettes existantes (WP-CLI)
wp media regenerate --yes
4.3 Optimisation frontend avancee
A. Minification et concatenation
Plugin recommande: Autoptimize
Configuration optimale:
// wp-config.php
define('AUTOPTIMIZEENABLED', true);
// Via filtre
addfilter('autoptimizefilterjsexclude', function($exclude) {
return $exclude . ', jquery.js, analytics.js';
});
Alternative: Asset CleanUp (controle granulaire par page)
B. Eliminer render-blocking
Defer JavaScript:
// functions.php
function deferparsingjs($url) {
if (isadmin()) return $url;
if (strpos($url, '.js') === false) return $url;
if (strpos($url, 'jquery.js')) return $url; // Exclure jQuery
return strreplace(' src', ' defer src', $url);
}
addfilter('scriptloadertag', 'deferparsingjs', 10);
Preload critical resources:
// functions.php
function preloadcriticalassets() {
echo '';
echo '';
echo '';
}
addaction('wphead', 'preloadcriticalassets', 1);
C. Critical CSS
Plugin: WP Rocket (premium) – Generation automatique
Manuel (technique avancee):
Installer criticalcss
npm install -g criticalcss
Generer CSS critique
criticalcss https://example.com > critical.css
Inline critical CSS:
// functions.php
function inlinecriticalcss() {
echo '';
}
addaction('wphead', 'inlinecriticalcss', 1);
// Charger CSS complet async
function asyncloadcss() {
echo '';
}
addaction('wphead', 'asyncloadcss', 2);
D. Speculation Rules API (2025)
WordPress Core supporte desormais Speculation Rules pour pre-chargement instantane:
// functions.php - Activer prefetch liens
function addspeculationrules() {
?>
action('wpfooter', 'addspeculationrules');
Resultat: Chargement quasi-instantane pages suivantes
4.4 CDN et optimisations edge
A. Configuration Cloudflare (recommande)
Plan Pro minimum pour:
Settings optimaux Cloudflare:
Speed > Optimization:
Auto Minify: ON (HTML, CSS, JS)
Brotli: ON
Early Hints: ON
Rocket Loader: OFF (conflit WordPress)
HTTP/3 (with QUIC): ON
Caching:
Caching Level: Standard
Browser Cache TTL: Respect Existing Headers
Always Online: ON
Page Rules (example.com/):
Cache Level: Cache Everything
Edge Cache TTL: 1 month
Browser Cache TTL: 4 hours
Plugin WordPress: Cloudflare (officiel) – Purge cache automatique
B. Cloudflare Workers pour optimisations edge
Worker HTML minification:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const response = await fetch(request)
const contentType = response.headers.get('content-type')
if (contentType && contentType.includes('text/html')) {
let html = await response.text()
// Minification basique
html = html.replace(/s+/g, ' ')
.replace(/>s+<')
return new Response(html, {
headers: response.headers,
status: response.status
})
}
return response
}
C. Configuration headers cache
Nginx configuration:
Cache statique agressif
location ~ .(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
expires 1y;
addheader Cache-Control "public, immutable";
accesslog off;
}
HTML - cache court avec revalidation
location ~ .html$ {
expires 1h;
addheader Cache-Control "public, must-revalidate";
}
WordPress headers cache:
// functions.php
function setcacheheaders() {
if (!isuserloggedin() && !isadmin()) {
header('Cache-Control: public, max-age=3600, must-revalidate');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');
}
}
addaction('sendheaders', 'setcacheheaders');
4.5 Base de donnees haute performance
A. Configuration MariaDB 10.11 optimisee
my.cnf pour serveur 8GB RAM:
[mysqld]
Performance schema
performanceschema = ON
InnoDB settings
innodbbufferpoolsize = 4G # 50% RAM disponible
innodblogfilesize = 512M
innodbflushlogattrxcommit = 2 # Performance (risque perte 1s data)
innodbflushmethod = ODIRECT
innodbfilepertable = 1
Query cache (deprecated MySQL 8+, ok MariaDB)
querycachetype = 1
querycachesize = 256M
querycachelimit = 2M
Connections
maxconnections = 200
threadcachesize = 50
Temp tables
tmptablesize = 256M
maxheaptablesize = 256M
Logs
slowquerylog = 1
slowquerylogfile = /var/log/mysql/slow-query.log
longquerytime = 2
logqueriesnotusingindexes = 1
Character set
charactersetserver = utf8mb4
collationserver = utf8mb4unicodeci
B. Optimisation tables WordPress
Nettoyage regulier:
-- Supprimer revisions anciennes (garder 5 dernieres)
DELETE FROM wpposts
WHERE posttype = 'revision'
AND ID NOT IN (
SELECT ID FROM (
SELECT ID FROM wpposts
WHERE posttype = 'revision'
ORDER BY postmodified DESC
LIMIT 5
) tmp
);
-- Vider corbeille
DELETE FROM wpposts WHERE poststatus = 'trash';
-- Supprimer transients expires
DELETE FROM wpoptions WHERE optionname LIKE 'transient%';
-- Optimiser tables
OPTIMIZE TABLE wpposts, wppostmeta, wpoptions, wpcomments, wpcommentmeta;
Automatisation via WP-CLI:
Script cron hebdomadaire
#!/bin/bash
wp transient delete --all --path=/var/www/example.com/htdocs --allow-root
wp post delete $(wp post list --poststatus=trash --format=ids --path=/var/www/example.com/htdocs --allow-root) --force --allow-root
wp db optimize --path=/var/www/example.com/htdocs --allow-root
C. Index personalises haute performance
Requetes lentes communes WordPress:
-- Trouver requetes lentes
SELECT FROM mysql.slowlog ORDER BY querytime DESC LIMIT 10;
-- Index metakey pour postmeta (requetes custom fields)
CREATE INDEX metakeyvalue ON wppostmeta(metakey, metavalue(20));
-- Index recherche commentaires
CREATE INDEX commentapprovedpostid ON wpcomments(commentapproved, commentpostID);
Plugin recommande: Query Monitor - Identification requetes lentes temps reel
D. Read replicas et load balancing (tres haute volumetrie)
Configuration HyperDB (multi-DB):
// db-config.php
$wpdb->adddatabase(array(
'host' => '192.168.1.10', // Master
'user' => 'wpuser',
'password' => 'password',
'name' => 'wordpressdb',
'write' => 1,
'read' => 1,
));
$wpdb->adddatabase(array(
'host' => '192.168.1.11', // Replica 1 (read-only)
'user' => 'wpuser',
'password' => 'password',
'name' => 'wordpressdb',
'write' => 0,
'read' => 1,
));
$wpdb->adddatabase(array(
'host' => '192.168.1.12', // Replica 2 (read-only)
'user' => 'wpuser',
'password' => 'password',
'name' => 'wordpressdb',
'write' => 0,
'read' => 1,
));
4.6 Monitoring et observabilite
A. Monitoring serveur avec Netdata
Installation:
Installation one-liner
bash <(curl -Ss https://get.netdata.cloud/kickstart.sh)
Acces: http://votre-ip:19999
Metriques surveillees:
B. Application Performance Monitoring (APM)
New Relic (recommande):
Installer agent PHP
wget -O - https://download.newrelic.com/548C16BF.gpg | apt-key add -
echo 'deb http://apt.newrelic.com/debian/ newrelic non-free' > /etc/apt/sources.list.d/newrelic.list
apt update
apt install newrelic-php5
Configuration
newrelic-install install
Redemarrer PHP-FPM
systemctl restart php8.3-fpm
Plugin WordPress: New Relic Reporting
C. Monitoring WordPress avec Query Monitor
Installation
wp plugin install query-monitor --activate --allow-root
Fonctionnalites:
D. Uptime monitoring externe
Services recommandes:
Configuration webhook alertes:
Script alerte Slack
#!/bin/bash
SLACKWEBHOOK="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
MESSAGE="ALERT: Site example.com DOWN!"
curl -X POST -H 'Content-type: application/json'
--data "{"text":"$MESSAGE"}"
$SLACKWEBHOOK
E. Logs centralises
Configuration rsyslog vers service central:
/etc/rsyslog.d/50-wordpress.conf
Envoyer logs Nginx/PHP vers serveur centralise
. @logs.example.com:514
Alternative cloud: Logtail, Papertrail, Datadog Logs
Projet pratique Phase 4
Optimisation site haute performance complete:
Objectifs mesurables:
Ressources:
---
Phase 5 : Workflows Assistes par IA
Objectifs
Competences techniques
5.1 Claude Code pour developpement WordPress
A. Configuration environnement local + Claude Code
Contexte 2025: Claude Code est devenu l'outil de reference pour le developpement WordPress assiste par IA grace a son contexte 200K tokens permettant d'analyser des codebases completes.
Setup recommande:
Workflow "Vibe Coding" (methode 2025):
Exemple session Claude Code:
/wordpress-local
[Claude analyse automatiquement votre environnement WordPress local]
Vous: Je veux creer un plugin de gestion d'inventaire pour WooCommerce
avec les fonctionnalites suivantes:
Alertes stock bas
Import CSV produits
Dashboard avec graphiques
API REST pour integration tierce
Utilise:
WordPress Coding Standards
React pour dashboard
Chart.js pour graphiques
WP-CLI pour commandes
Claude: [Genere architecture complete + code en 15-20 minutes]
Source: How I Vibe Code WordPress Plugin in 50min - Nathan Onn
B. Custom instructions pour Claude (contexte WordPress)
Fichier .claude-instructions (racine projet):
WordPress Development Context
Environment
WordPress Version: 6.7+
PHP Version: 8.3
Database: MariaDB 10.11
Server: Nginx + PHP-FPM
Coding Standards
Follow WordPress Coding Standards (WPCS)
Use WordPress functions over native PHP when possible
Sanitize inputs, escape outputs
Use prepared statements for database queries
Add nonce verification for forms
Use wpenqueuescript/style for assets
Naming Conventions
Plugin prefix: yawc
Text domain: your-awesome-wordpress-course
Hook prefix: yawc
Security Requirements
Validate and sanitize all inputs
Escape all outputs
Use nonces for form submissions
Check user capabilities
Prepare database queries
Performance
Minimize database queries
Use transients for caching
Enqueue scripts in footer when possible
Conditional loading (only load when needed)
Preferred Patterns
Object-oriented for plugins
Singleton pattern for main plugin class
Action/Filter hooks over direct function calls
WP-CLI commands for admin tasks
C. Prompts efficaces pour developpement WordPress
Generation plugin complet:
Cree un plugin WordPress "Advanced Contact Form" avec:
Architecture:
Namespace: AdvancedContactForm
Classe principale singleton
Separation concerns (Admin, Frontend, API)
Fonctionnalites:
Shortcode [acfform]
Gutenberg block
Validation AJAX
Stockage submissions en CPT
Export CSV admin
API REST endpoint
Hooks pour extensions
Requirements techniques:
WordPress 6.4+
PHP 8.2+
Coding Standards WordPress
Inline documentation PHPDoc
Internationalisation complete
Uninstall cleanup
Genere structure complete avec tous fichiers.
Debugging assistance:
J'ai cette erreur WordPress:
[Error log content]
Context:
Plugin: [nom]
Fonction: [fonction]
Action declenchante: [action]
Analyse l'erreur, identifie la cause racine et propose solution + code corrige.
Optimisation performance:
Analyse cette fonction WordPress et optimise-la pour performance:
[Code a optimiser]
Focus sur:
Reduction requetes DB
Utilisation caching
Optimisation boucles
N+1 queries
Fournis version optimisee + explication changements.
5.2 ChatGPT pour taches rapides et repetitives
Comparaison ChatGPT vs Claude (WordPress 2025):
Claude Pro:
ChatGPT Pro:
Source: ChatGPT Pro vs Claude Pro WordPress Development - Varun Dubey
Approche hybride recommandee (2025):
Planning/Architecture → Claude Pro
Implementation rapide → ChatGPT Pro + GitHub Copilot
Debugging complexe → Claude Code
Documentation → ChatGPT
B. ChatGPT pour generation code snippets
Prompt template efficace:
Cree un snippet WordPress pour [fonctionnalite]
Contraintes:
Compatible WordPress 6.4+
Suit WordPress Coding Standards
Inclut sanitization/validation
Ajoute comments inline
Gere erreurs
Format: Code pret a copier-coller dans functions.php ou plugin
Exemples use cases:
Custom post type:
Cree un CPT "Portfolio" avec:
Taxonomies: Type (hierarchique), Tags (non-hierarchique)
Supports: title, editor, thumbnail, excerpt
Archive publique
REST API enabled
Icone dashicons-portfolio
Rewrite slug: /projets/
Custom REST endpoint:
Cree endpoint REST WordPress:
GET /wp-json/myapi/v1/stats
Response:
{
"totalposts": int,
"totalusers": int,
"populartags": array
}
Securite: Accessible seulement admin
Cache: 1 heure via transients
C. GitHub Copilot integration
Installation VS Code:
Extension GitHub Copilot
code --install-extension GitHub.copilot
Settings optimaux WordPress (settings.json):
{
"github.copilot.enable": {
"": true,
"yaml": true,
"plaintext": false,
"markdown": true,
"php": true
},
"github.copilot.advanced": {
"language": {
"php": {
"completions": {
"wordpress": true
}
}
}
}
}
Workflow recommande:
Developpement general → GitHub Copilot (inline suggestions)
Questions complexes → Claude Code (browser tab ouvert)
Snippets rapides → ChatGPT (second ecran)
Source: 7 Smart Ways to Use AI in WordPress - Kinsta
5.3 Automatisation workflows avec IA
A. Uncanny Automator + OpenAI/Claude
Plugin: Uncanny Automator Pro (integration OpenAI et Anthropic Claude)
Use cases automatisation:
1. Moderation commentaires intelligente:
Trigger: Nouveau commentaire soumis
Action: Envoyer a Claude API
Prompt: "Analyse ce commentaire et determine s'il est:
Spam
Inapproprie
Legitime
Commentaire: {{commentcontent}}
Auteur: {{commentauthor}}"
Condition:
Si "spam" ou "inapproprie" → Marquer spam
Si "legitime" → Approuver
2. Generation descriptions produits WooCommerce:
Trigger: Nouveau produit publie sans description
Action: Envoyer a ChatGPT API
Prompt: "Genere description produit SEO-optimisee (150-200 mots) pour:
Nom: {{productname}}
Categorie: {{productcategory}}
Attributs: {{productattributes}}
Ton: Professionnel, persuasif
Focus: Benefices client"
Action: Mettre a jour postcontent du produit
3. Reponses emails personnalisees:
Trigger: Soumission formulaire contact
Action: Envoyer a Claude API avec historique client
Prompt: "Genere reponse personnalisee basee sur:
Message client: {{formmessage}}
Historique: {{userpurchasehistory}}
Categorie question: {{formcategory}}
Ton: Amical, professionnel
Longueur: 100-150 mots"
Action: Envoyer email + ajouter tag CRM
B. WP-CLI + IA pour maintenance automatisee
Script analyse securite avec Claude API:
#!/bin/bash
audit-security-ai.sh
SITEPATH="/var/www/example.com/htdocs"
CLAUDEAPIKEY="your-api-key"
Generer rapport WPScan
wpscan --url https://example.com --format json > /tmp/wpscan-report.json
Envoyer a Claude pour analyse
REPORT=$(cat /tmp/wpscan-report.json)
RESPONSE=$(curl -s https://api.anthropic.com/v1/messages
-H "x-api-key: $CLAUDEAPIKEY"
-H "anthropic-version: 2023-06-01"
-H "content-type: application/json"
-d "{
"model": "claude-3-5-sonnet-20241022",
"maxtokens": 2048,
"messages": [{
"role": "user",
"content": "Analyse ce rapport WPScan et fournis recommandations priorisees pour securiser le site. Focus sur vulnerabilites critiques et actions immediates.nnRapport:n$REPORT"
}]
}")
Extraire recommandations et envoyer par email
echo "$RESPONSE" | jq -r '.content[0].text' | mail -s "Audit Securite IA - $(date)" admin@example.com
C. Generation contenu avec IA + publication automatique
Plugin: AI Engine + WP Cron
Workflow blog automatise:
// functions.php - Generer article hebdomadaire
addaction('aiweeklypostgeneration', 'generateaiweeklypost');
function generateaiweeklypost() {
// Topics pre-definis
$topics = getoption('aiblogtopics', [
'WordPress performance optimization',
'Security best practices',
'Plugin development tutorials'
]);
$randomtopic = $topics[arrayrand($topics)];
// API OpenAI
$prompt = "Ecris article blog 800-1000 mots sur: $randomtopic
Structure:
- Introduction accrocheuse
- 3-4 sections avec sous-titres H2
- Exemples concrets
- Conclusion avec CTA
Ton: Expert mais accessible
SEO: Inclure mot-cle naturellement 5-7 fois";
$response = openaicompletion([
'model' => 'gpt-4-turbo',
'messages' => [
['role' => 'system', 'content' => 'Tu es expert WordPress et redacteur technique.'],
['role' => 'user', 'content' => $prompt]
],
'maxtokens' => 2000
]);
$content = $response['choices'][0]['message']['content'];
// Creer brouillon
$postid = wpinsertpost([
'posttitle' => "AI Generated: $randomtopic",
'postcontent' => $content,
'poststatus' => 'draft',
'postauthor' => 1,
'postcategory'=> [getcatID('AI Content')]
]);
// Notifier admin pour review
wpmail(
getoption('adminemail'),
'Nouveau brouillon IA genere',
"Article genere sur: $randomtopicnReview: " . geteditpostlink($postid)
);
}
// Scheduler hebdomadaire
if (!wpnextscheduled('aiweeklypostgeneration')) {
wpscheduleevent(time(), 'weekly', 'aiweeklypostgeneration');
}
5.4 Cas d'usage avances IA WordPress
A. Refactoring legacy code avec Claude
Prompt structure:
Refactore ce code WordPress legacy vers modern standards:
[Ancien code]
Requirements:
PHP 8.3 compatible
Object-oriented
WordPress Coding Standards
Type hints strict
Error handling robuste
PHPDoc complete
Backward compatibility optionnelle
Explique changements majeurs et rationale.
B. Generation tests unitaires automatique
Prompt ChatGPT:
Genere tests PHPUnit pour cette classe WordPress:
[Code classe]
Coverage requise:
Tous methodes publiques
Edge cases
Error handling
WordPress integration (use BrainMonkey)
Format: PHPUnit 10+ compatible
C. Optimisation requetes base de donnees
Prompt Claude:
Analyse ces logs Query Monitor et optimise les requetes problematiques:
[Query logs]
Focus:
Eliminer N+1 queries
Ajouter index appropries
Utiliser WPQuery efficacement
Implementer object caching
Fournis:
SQL index a creer
Code optimise
Impact performance estime
D. Creation documentation automatique
Script avec ChatGPT API:
#!/bin/bash
generate-docs.sh
Extraire tous fichiers PHP plugin
PLUGINDIR="/var/www/example.com/htdocs/wp-content/plugins/mon-plugin"
PHPFILES=$(find "$PLUGINDIR" -name ".php")
Concatener code source
CODE=""
for file in $PHPFILES; do
CODE+="=== $file ===n"
CODE+=$(cat "$file")
CODE+="nn"
done
Generer documentation via ChatGPT
curl -s https://api.openai.com/v1/chat/completions
-H "Authorization: Bearer $OPENAIAPIKEY"
-H "Content-Type: application/json"
-d "{
"model": "gpt-4-turbo",
"messages": [{
"role": "user",
"content": "Genere documentation technique complete pour ce plugin WordPress. Inclus: architecture, hooks disponibles, exemples utilisation, API reference.nnCode:n$CODE"
}],
"maxtokens": 4000
}" | jq -r '.choices[0].message.content' > "$PLUGINDIR/DOCUMENTATION.md"
echo "Documentation generee: $PLUGINDIR/DOCUMENTATION.md"
Projet pratique Phase 5
Integration IA complete dans workflow:
Livrable:
Ressources:
---
Projet Final : Deploiement Infrastructure Production Complete
Objectif
Deployer une infrastructure WordPress production complete integrant toutes competences acquises.
Specifications techniques
Infrastructure:
Performance:
Securite:
CI/CD:
Monitoring:
IA Integration:
Livrables
- Architecture infrastructure
- Procedures deploiement
- Runbooks incidents
- Guide maintenance
- Code source organise
- Workflows CI/CD fonctionnels
- Tests automatises
- Documentation inline
- Screenshots Netdata
- Rapports New Relic
- Audits performance (GTmetrix, PageSpeed)
- Benchmarks charge (k6, Apache Bench)
- Metriques Core Web Vitals
- Capacite utilisateurs concurrents
- TTFB, LCP, FID, CLS
- Rapport WPScan
- Scan headers (SecurityHeaders.com)
- SSL Labs rating
- Procedures incident response
Criteres evaluation
---
Ressources Complementaires
Documentation officielle
Outils performance
Outils securite
Communautes
Formation continue
---
Conclusion
Ce parcours intermediaire vous a equipe des competences essentielles pour gerer des infrastructures WordPress production haute performance. Vous maitrisez desormais:
Prochaines etapes: Parcours Avance - Architecture haute disponibilite, Kubernetes WordPress, scaling horizontal, disaster recovery.
Duree moyenne realisation: 12-16 semaines a raison de 15-20h/semaine.
Bon courage dans votre apprentissage!
---
Version: 1.0
Derniere mise a jour: Decembre 2025
Auteur: You Are Welcome Community
License:* CC BY-SA 4.0
Sources
Ce parcours s'appuie sur des donnees verifiees et des guides techniques publies en 2025: