Modernisierung der Webserver-Infrastruktur #8

Open
opened 2025-12-01 15:10:55 +01:00 by mrouissi · 2 comments
Owner

Phase 1: Konzeption & Automatisierung (Ansible)

Ziel: Erstellung eines wiederverwendbaren Ansible Playbooks zur Automatisierung der Serverkonfiguration.

  • Basis-Rolle entwickeln (System-Vorbereitung):

    • Ziel: Debian 10/11
    • Umfang: Paketquellen, Abhängigkeiten, System-Grundlagen.
  • PHP-Rolle programmieren:

    • Installation von PHP-CLI und PHP-FPM.
    • Benötigte Versionen: 7.4, 8.3, 8.4.
    • Einbindung aller notwendigen Extensions.
  • Nginx-Rolle erstellen:

    • Logik zur Analyse bestehender Apache-Konfigurationen.
    • Auto-Generierung von Nginx Server Blocks basierend auf der Analyse.
  • Cutover-Logik implementieren:

    • Script-Logik für Parallelbetrieb (unter Verwendung temporärer Ports).
    • Script-Logik für die finale Umstellung.

Phase 2: Parallele Implementierung (Zero Downtime)

Ziel: Installation und Konfiguration der neuen Umgebung neben der alten ohne Unterbrechung des Betriebs.

  • Ansible Playbooks ausführen:

    • Ziel-Server: drk008, drk002, drk004, drk009.
    • Aktion: Installation von Nginx und PHP-FPM.
  • Temporäre Ports konfigurieren:

    • Nginx auf einen temporären Port setzen (z.B. 8443).
    • Verifikation: Internes Testen der migrierten Sites über den temporären Port.
  • Spezialaufgabe: Installation von PHP-CLI auf Server drk112.


Phase 3: Finale Migration (Wartungsfenster)

Ziel: Umleitung des Live-Traffics von Apache zu Nginx.

Hinweis: Erfordert ein 2-stündiges Wartungsfenster.

  • Apache deaktivieren:

    • Änderung der Apache Listening-Ports, um 80/443 freizugeben.
  • Nginx rekonfigurieren:

    • Umstellung der Nginx-Konfiguration auf Standard-Ports (80 / 443).
  • Go Live & Verifizierung:

    • Neustart aller Services.
    • Durchführung finaler Funktionstests auf allen produktiven Websites.

Phase 4: QA, Dokumentation & Übergabe

Ziel: Überprüfung der Systemstabilität und Abschluss des Projekts.

  • Cross-Browser/Device-Testing: Überprüfung von Rendering und Funktionalität.

  • Log-Analyse: Prüfung der Server-Logs auf Fehler nach der Migration.

  • Dokumentation:

    • Dokumentation der Ansible Playbook-Logik.
    • Dokumentation der neuen Serverstruktur.
  • Projektübergabe: Koordination und finaler Sign-off mit dem Team.

## Phase 1: Konzeption & Automatisierung (Ansible) **Ziel:** Erstellung eines wiederverwendbaren Ansible Playbooks zur Automatisierung der Serverkonfiguration. - [x] **Basis-Rolle entwickeln (System-Vorbereitung):** - Ziel: Debian 10/11 - Umfang: Paketquellen, Abhängigkeiten, System-Grundlagen. - [x] **PHP-Rolle programmieren:** - Installation von PHP-CLI und PHP-FPM. - Benötigte Versionen: 7.4, 8.3, 8.4. - Einbindung aller notwendigen Extensions. - [x] **Nginx-Rolle erstellen:** - Logik zur Analyse bestehender Apache-Konfigurationen. - Auto-Generierung von Nginx Server Blocks basierend auf der Analyse. - [x] **Cutover-Logik implementieren:** - Script-Logik für Parallelbetrieb (unter Verwendung temporärer Ports). - Script-Logik für die finale Umstellung. --- ## Phase 2: Parallele Implementierung (Zero Downtime) **Ziel:** Installation und Konfiguration der neuen Umgebung neben der alten ohne Unterbrechung des Betriebs. - [x] **Ansible Playbooks ausführen:** - Ziel-Server: drk008, drk002, drk004, drk009. - Aktion: Installation von Nginx und PHP-FPM. - [x] **Temporäre Ports konfigurieren:** - Nginx auf einen temporären Port setzen (z.B. 8443). - Verifikation: Internes Testen der migrierten Sites über den temporären Port. - [x] **Spezialaufgabe:** Installation von PHP-CLI auf Server drk112. --- ## Phase 3: Finale Migration (Wartungsfenster) **Ziel:** Umleitung des Live-Traffics von Apache zu Nginx. **Hinweis:** Erfordert ein 2-stündiges Wartungsfenster. - [ ] **Apache deaktivieren:** - Änderung der Apache Listening-Ports, um 80/443 freizugeben. - [ ] **Nginx rekonfigurieren:** - Umstellung der Nginx-Konfiguration auf Standard-Ports (80 / 443). - [ ] **Go Live & Verifizierung:** - Neustart aller Services. - Durchführung finaler Funktionstests auf allen produktiven Websites. --- ## Phase 4: QA, Dokumentation & Übergabe **Ziel:** Überprüfung der Systemstabilität und Abschluss des Projekts. - [ ] **Cross-Browser/Device-Testing:** Überprüfung von Rendering und Funktionalität. - [ ] **Log-Analyse:** Prüfung der Server-Logs auf Fehler nach der Migration. - [ ] **Dokumentation:** - Dokumentation der Ansible Playbook-Logik. - Dokumentation der neuen Serverstruktur. - [ ] **Projektübergabe:** Koordination und finaler Sign-off mit dem Team.
Author
Owner

@rkoerner - Schau dir das bitte mal an.

@rkoerner - Schau dir das bitte mal an.
Author
Owner

COPY/PASTE von @rkoerner Nachricht

Für spätere Umstellungen:

~# apt list --installed php7.4* 
Auflistung… Fertig   <<<---- die Zeile stört hier noch in der Ausgabe
php7.4-apcu/bullseye,now 5.1.27-2+0~20251124.50+debian11~1.gbp89e0aa amd64  [installiert]
php7.4-bcmath/bullseye,now 1:7.4.33-21+0~20250703.110+debian11~1.gbp07b85f amd64  [installiert]
php7.4-cli/bullseye,now 1:7.4.33-21+0~20250703.110+debian11~1.gbp07b85f amd64  [installiert]
...

Die passende Liste zur Weiterverarbeitung:

~# PHP_VER=7.4
~# INSTALLED=$(apt list --installed php${PHP_VER}* | grep ^php | cut -d/ -f1)

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

~# echo $INSTALLED
php7.4-apcu php7.4-bcmath php7.4-cli php7.4-common php7.4-curl php7.4-fpm php7.4-gd php7.4-igbinary php7.4-imagick php7.4-imap php7.4-intl php7.4-json php7.4-mbstring php7.4-memcached php7.4-msgpack php7.4-mysql php7.4-opcache php7.4-phpdbg php7.4-pspell php7.4-readline php7.4-redis php7.4-soap php7.4-sqlite3 php7.4-tidy php7.4-xml php7.4-xmlrpc php7.4-zip php7.4

Alte Debianpakete entfernen und die entsprechenden Pakete aus dem Sury-Repo wieder installieren:

~# apt-get remove $INSTALLED
~# apt-get install $INSTALLED

Gleiche Pakete in einer weiteren Version installieren:

~# OLD_VER=7.4
~# NEW_VER=8.4
~# INSTALL_NEW_VERSION=$(apt list --installed php${OLD_VER}* | grep ^php | sed "s/${OLD_VER}/${NEW_VER}/" | cut -d/ -f1)

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

~# echo $INSTALL_NEW_VERSION
php8.4-apcu php8.4-bcmath php8.4-cli php8.4-common php8.4-curl php8.4-fpm php8.4-gd php8.4-igbinary php8.4-imagick php8.4-imap php8.4-intl php8.4-json php8.4-mbstring php8.4-memcached php8.4-msgpack php8.4-mysql php8.4-opcache php8.4-phpdbg php8.4-pspell php8.4-readline php8.4-redis php8.4-soap php8.4-sqlite3 php8.4-tidy php8.4-xml php8.4-xmlrpc php8.4-zip php8.4

~# apt-get install $INSTALL_NEW_VERSION

Das sollten wir auf einer Test-VM mal durchspielen und kontrollieren, wie sich das mit den (virtuellen) Paketen verhält, die ohne Versionsnummer installiert wurden bzw. von denen gar kein versionsspezifisches Paket existiert, wie z.B. php-common.

COPY/PASTE von @rkoerner Nachricht Für spätere Umstellungen: ``` ~# apt list --installed php7.4* Auflistung… Fertig <<<---- die Zeile stört hier noch in der Ausgabe php7.4-apcu/bullseye,now 5.1.27-2+0~20251124.50+debian11~1.gbp89e0aa amd64 [installiert] php7.4-bcmath/bullseye,now 1:7.4.33-21+0~20250703.110+debian11~1.gbp07b85f amd64 [installiert] php7.4-cli/bullseye,now 1:7.4.33-21+0~20250703.110+debian11~1.gbp07b85f amd64 [installiert] ... ``` Die passende Liste zur Weiterverarbeitung: ``` ~# PHP_VER=7.4 ~# INSTALLED=$(apt list --installed php${PHP_VER}* | grep ^php | cut -d/ -f1) WARNING: apt does not have a stable CLI interface. Use with caution in scripts. ~# echo $INSTALLED php7.4-apcu php7.4-bcmath php7.4-cli php7.4-common php7.4-curl php7.4-fpm php7.4-gd php7.4-igbinary php7.4-imagick php7.4-imap php7.4-intl php7.4-json php7.4-mbstring php7.4-memcached php7.4-msgpack php7.4-mysql php7.4-opcache php7.4-phpdbg php7.4-pspell php7.4-readline php7.4-redis php7.4-soap php7.4-sqlite3 php7.4-tidy php7.4-xml php7.4-xmlrpc php7.4-zip php7.4 ``` Alte Debianpakete entfernen und die entsprechenden Pakete aus dem Sury-Repo wieder installieren: ``` ~# apt-get remove $INSTALLED ~# apt-get install $INSTALLED ``` Gleiche Pakete in einer weiteren Version installieren: ``` ~# OLD_VER=7.4 ~# NEW_VER=8.4 ~# INSTALL_NEW_VERSION=$(apt list --installed php${OLD_VER}* | grep ^php | sed "s/${OLD_VER}/${NEW_VER}/" | cut -d/ -f1) WARNING: apt does not have a stable CLI interface. Use with caution in scripts. ~# echo $INSTALL_NEW_VERSION php8.4-apcu php8.4-bcmath php8.4-cli php8.4-common php8.4-curl php8.4-fpm php8.4-gd php8.4-igbinary php8.4-imagick php8.4-imap php8.4-intl php8.4-json php8.4-mbstring php8.4-memcached php8.4-msgpack php8.4-mysql php8.4-opcache php8.4-phpdbg php8.4-pspell php8.4-readline php8.4-redis php8.4-soap php8.4-sqlite3 php8.4-tidy php8.4-xml php8.4-xmlrpc php8.4-zip php8.4 ~# apt-get install $INSTALL_NEW_VERSION ``` Das sollten wir auf einer Test-VM mal durchspielen und kontrollieren, wie sich das mit den (virtuellen) Paketen verhält, die ohne Versionsnummer installiert wurden bzw. von denen gar kein versionsspezifisches Paket existiert, wie z.B. php-common.
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Clients/drk#8
No description provided.