Processus de rachat
Le processus de prise de contrôle migre atomiquement le trafic de nginx vers bext. Il arrête nginx, lie bext aux ports 80/443 et fournit une restauration automatique en cas d'échec.
Machine à états#
La reprise suit une machine à états stricte :
Preflight ──→ TakingOver ──→ Active
│ │
▼ ▼
Failed ←── RollingBack ──→ RolledBack
| Phase | Description |
|---|---|
| Contrôle en amont | Vérifications en cours, aucune modification apportée. Bouton Prendre le relais activé. |
| Prise de contrôle | Arrêt de nginx, liaison des ports. Superposition de chargement affichée. |
| Actif | bext servant le 80/443. Bouton de restauration visible. |
| Retour en arrière | Arrêt des écouteurs bext, restauration de nginx. Chargement de la superposition. |
| Roulé | nginx restauré. Tableau de bord toujours accessible sur le port de vol en amont. |
| Échec de | Une erreur s'est produite. Bouton de restauration toujours disponible. |
Séquence de reprise#
Lorsque vous cliquez sur « Reprendre » (ou POST sur /api/takeover ):
- Vérifier les conditions préalables — la phase doit être un contrôle en amont, aucun échec de vérification critique
- Phase de réglage = TakingOver — L'interface utilisateur affiche la superposition de chargement
- Enregistrer l'état de nginx — indique si nginx a été activé pour le démarrage
- Arrêt nginx —
systemctl stop nginx - Attendre les ports — interroger les ports 80/443 pendant 3 secondes maximum
- Si les ports sont toujours occupés → restauration automatique, phase = Échec
- Désactiver nginx —
systemctl disable nginx(non fatal en cas d'échec) - Lier bext — commencer à servir sur les ports 80/443 avec la configuration nginx
- Phase de réglage = Actif
Séquence de restauration#
Lorsque vous cliquez sur "Rollback" (ou POST sur /api/rollback ) :
- Vérifier la phase — doit être actif ou en échec
- Phase de réglage = RollingBack
- Réactiver nginx —
systemctl enable nginx(s'il a été activé auparavant) - Démarrage nginx —
systemctl start nginx - Vérifiez — attendez 500 ms et vérifiez que nginx est en cours d'exécution
- Si nginx ne démarre pas → phase = Échec avec message d'erreur
- Phase de réglage = RolledBack
Restauration automatique#
Si la reprise échoue après l'arrêt de nginx (par exemple, ports toujours occupés par un autre processus), bext exécute immédiatement :
systemctl start nginx
Cela garantit que le trafic n’est jamais laissé sans serveur. La phase est définie sur Échec et l'erreur est affichée dans le tableau de bord.
Conditions préalables#
- Accès root — nécessaire pour arrêter/démarrer les services et se lier aux ports < 1024
- systemd — le rachat utilise
systemctlpour toute la gestion des services - nginx.service — l'unité systemd nginx doit être nommée « nginx »
Garanties de sécurité#
- Lecture seule pendant le contrôle en amont — aucune modification du système jusqu'à ce que vous déclenchiez explicitement la prise de contrôle
- Confirmation requise — la reprise et la restauration nécessitent une confirmation de l'utilisateur
- Transitions atomiques — si une étape échoue, la restauration automatique restaure immédiatement nginx
- Démarrage préservé — L'état activé/désactivé de nginx est enregistré et restauré lors de la restauration
- Le tableau de bord reste actif. — le serveur de contrôle en amont reste accessible sur son port pour un accès en cas de restauration, même après la reprise.
- Aucune perte de données — la reprise gère uniquement le cycle de vie des processus, pas les fichiers de configuration
Utilisation via CLI#
# Launch with auto-detected config
sudo bext nginx-takeover
# Specify config and port
sudo bext nginx-takeover --nginx-config /etc/nginx/nginx.conf --port 9999
Référence des vérifications préalables au vol#
| # | Vérifier | Critique | Ce qu'il vérifie |
|---|---|---|---|
| 1 | Configuration analysée | Oui | nginx.conf analyse sans erreurs |
| 2 | Certificats SSL accessibles | Oui | Tous les fichiers de certificat/clé sont lisibles |
| 3 | nginx En cours d'exécution | Non | Indique si nginx est actuellement diffusé |
| 4 | Disponibilité des ports | Oui | 80/443 sera gratuit après l'arrêt de nginx |
| 5 | Répertoires racine | Non | Les chemins racine du document existent |
| 6 | Backends en amont | Non | Les serveurs backend sont accessibles |
| 7 | Autorisations de processus | Oui | S'exécute en tant que root ou possède CAP_NET_BIND_SERVICE |
| 8 | système disponible | Oui | systemctl est présent et fonctionnel |
Toutes les vérifications critiques doivent être réussies avant que la prise de contrôle ne soit autorisée. Les avertissements non critiques sont informatifs : ils mettent en évidence les problèmes potentiels mais ne bloquent pas la migration.
La prise de contrôle appelle systemctl stop nginx, qui supprime immédiatement toutes les connexions nginx en vol. Si vous disposez de connexions de longue durée ( WebSockets, flux SSE) vers nginx en amont, planifiez le basculement pendant une fenêtre à faible trafic ou drainez-les d'abord.
En rapport#
- Tableau de bord de contrôle en amont — l'interface utilisateur qui pilote les boutons Take Over et Rollback
- Mode mascarade — le chemin alternatif qui évite du tout d'arrêter nginx
- Guide de migration — procédure pas à pas complète de migration ; le rachat est l’option B
- Aperçu de la compatibilité nginx — ce que bext analyse avant l'exécution de la prise de contrôle
- Opérations : invalidation et redémarrages — cycle de vie du service après le basculement