serveurs:installation:web-srv:docker-wordpress

Installer, configurer et gérer le sous-domaine "cms"

  • Créer un fichier de configuration : vi /etc/nginx/sites-available/cms.conf
  • Créer un lien depuis les sites actifs : cd /etc/nginx/sites-enabled/ ; ln -s ../sites-available/cms.conf cms.conf
    • Tester la config et relancer Nginx si OK : nginx-reload ou nginx -t && nginx -s reload
    • Tester l'URL http://cms.<domaine-sinp>/ qui doit afficher une erreur 502 car nous n'avons pas encore lancé le container Docker.
  • En local, sur votre machine, se placer dans le dépôt Github "docker-paca-sinp" récupéré précédemment et si nécessaire resynchroniser le dossier web-srv avec le serveur de destination en exécutant la commande Rsync indiquée dans le fichier README.md.
  • Sur le serveur dans le dossier docker de l'utilisateur admin :
    • vérifier la présence du réseau Docker spécifique à notre utilisation de type bridge nommé nginx-proxy (voir fichier .env) : docker network ls
    • se placer dans le dossier cms.silene.eu : cd ~/docker/cms.silene.eu
    • exécuter la commande : docker-compose up
    • vérifier que tout fonctionne à l'adresse : http://cms.<domaine-sinp> (l'installateur Wordpress doit s'afficher)
    • arrêter le container : CTRL+C
    • relancer le container en tant que service : docker-compose up -d
      • si besoin de l'arrêter utiliser : docker compose down
  • Installer un certificat SSL via Certbot (Letsencrypt) : certbot --nginx -d cms.<domaine-sinp>
    • Répondre : 2
    • Tester ensuite la redirection auto de HTTP vers HTTPS : http://cms.<domaine-sinp>/ → doit redirigé vers HTTPS automatiquement
  • Tester la configuration SSL : https://www.ssllabs.com/ssltest/analyze.html?d=cms.<domaine-sinp>
  • Tester l'URL https://cms.<domaine-sinp>/
  • La configuration finale :
    server {
        listen 443 ssl http2; # managed by Certbot
        listen [::]:443 ssl http2; # managed by Certbot
     
        server_name cms.<domaine-sinp>;
     
        location / {
            # ATTENTION : si le header HOST n'est pas renvoyé Wordpress utilise l'url 127.0.0.1:50080 pour les fichiers CSS, JS...
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Host $host:$server_port;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
     
            proxy_pass http://127.0.0.1:50080/;# ATTENTION : bien mettre un slash final ! Sinon => erreur 404
        }
     
        ssl_certificate /etc/letsencrypt/live/cms.<domaine-sinp>/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/cms.<domaine-sinp>/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    }
     
    server {
        listen 80;
        listen [::]:80;
     
        server_name cms.<domaine-sinp>;
     
        return 302 https://$host$request_uri;
    }

Par exemple, pour basculer le domaine cms.silene.eu vers silene.eu et en redirigeant www.silene.eu// vers silene.eu. Les étapes de la procédure à suivre sont : * au préalable, il est nécessaire de mettre à jour le certificat SSL pour inclure les nouveaux domaines www.silene.eu// et silene.eu. Ces domaines sont déjà attribué à un serveur en production. Il est donc nécessaire d'installer un plugin de Certbot : certbot-dns-ovh. Ce plugin, spécifique à OVH, va nous permettre de générer un certificat même si ces domaines ne pointent pas vers l'IP du nouveau serveur dans la zone DNS du domaine silene.eu.

  • modifier le fichier de configuration de nginx
  • modifier l'URL enregistré dans la configuration de Wordpress via l'interface d'administration
  • Ressources :
  • Sur "web-srv", installer le plugin avec la même méthode que Certbot : aptitude install python3-certbot-dns-ovh
  • Créer une nouvelle clé d'API ici : https://eu.api.ovh.com/createToken/
    • Sélectionner 1 jour ou 30 jours pour la validité suivant le besoin
    • Pour les droits mettre ceci en remplaçant <domaine-sinp> par le nom de domaine principal (Ex. : "silene.eu") :
      GET /domain/zone/
      GET: /domain/zone/<domaine-sinp>/
      GET /domain/zone/<domaine-sinp>/status
      GET /domain/zone/<domaine-sinp>/record
      GET /domain/zone/<domaine-sinp>/record/*
      POST /domain/zone/<domaine-sinp>/record
      POST /domain/zone/<domaine-sinp>/refresh
      DELETE /domain/zone/<domaine-sinp>/record/*
    • Après validation, les informations qui s'affichent vont permettre de créer le fichier .ovhapi : vi /root/.ovhapi
      • Y placer le contenu suivant où les valeurs <…> seront remplacées par celles obtenues précédemment :
        dns_ovh_endpoint = ovh-eu
        dns_ovh_application_key = <application-key>
        dns_ovh_application_secret = <application-secret>
        dns_ovh_consumer_key = <consumer-key>
      • Restreindre les droits sur ce fichier : chmod 600 /root/.ovhapi
  • La tentative de mise à jour du certificat avec l'option --certname a échouée : certbot certonly --dns-ovh --dns-ovh-credentials ~/.ovhapi --cert-name cms.silene.eu -d silene.eu,www.silene.eu,cms.silene.eu
  • C'est le renouvellement du certificat qui a permis le bon fonctionnement : certbot certonly --dns-ovh --dns-ovh-credentials ~/.ovhapi -d silene.eu,www.silene.eu,cms.silene.eu
    • L'option Renew & replace the cert (limit ~5 per 7 days) a été sélectionnée
  • Ce mécanisme est aussi intéressant pour générer des certificats "étoiles" ou pour des serveurs non accessibles depuis internet.
  • Pour le renouvellement du nom de domaine, si vous savez que les entrées DNS pointeront vers le bon serveur dans 60 jours alors vous pouvez modifier le fichier /etc/letsencrypt/renewal/cms.<domaine-sinp>. Sous la section [renewalparams] :
    • Supprimer la ligne : dns_ovh_credentials
    • Remplacer la valeur de authenticator par nginx
    • Ajouter une ligne : installer = nginx
  • Modifier les lignes contenant server_name ainsi : server_name <domaine-sinp> www.<domaine-sinp> cms.<domaine-sinp>;
    • Ex. : server_name silene.eu www.silene.eu cms.silene.eu;
  • Recharger la configuration de Nginx : nginx-reload
  • La configuration finale :
    server {
        listen 443 ssl http2; # managed by Certbot
        listen [::]:443 ssl http2; # managed by Certbot
     
        server_name <domaine-sinp> www.<domaine-sinp> cms.<domaine-sinp>;
     
        client_max_body_size 12M;
     
        location / { 
            # ATTENTION : si le header HOST n'est pas renvoyé Wordpress utilise l'url 127.0.0.1:50080 pour les fichiers CSS, JS...
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Host $host:$server_port;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
     
            proxy_pass http://127.0.0.1:50080/;# ATTENTION : bien mettre un slash final ! Sinon => erreur 404
        }   
     
        ssl_certificate /etc/letsencrypt/live/cms.<domaine-sinp>/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/cms.<domaine-sinp>/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    }
     
    server {
        listen 80; 
        listen [::]:80;
     
        server_name <domaine-sinp> www.<domaine-sinp> cms.<domaine-sinp>;
     
        return 302 https://<domaine-sinp>$request_uri;
    }

La dernière étapes consiste à mettre à jour l'URL enregistrée pour Wordpress :

  • Se connecter à l'interface d'admin du wordpress : https://cms.<domaine-sinp>/wp-admin
  • Se rendre à l'aide du menu gauche dans : Réglages > Général
  • Remplacer l'ancienne URL (cms.<domaine-sinp>, par exemple cms.silene.eu) par la nouvelle (<domaine-sinp>, par exemple silene.eu) dans les champs :
    • Adresse web de Wordpress (URL)
    • Adresse web du site (URL)
  • Enregistrer
  • Vérifier la bonne redirection des domaines. Par exemple pour Silene, tous les domaines suivant doivent rediriger vers silene.eu en HTTPS : www.silene.eu, cms.silene.eu
  • Il peut-être nécessaire de modifier les URL saisies dans les pages du CMS si elles ne sont pas correctes. Plusieurs solutions :

Si vous souhaitez depuis votre ordinateur accéder à un site dont les entrées DNS publiques ne pointent pas vers le bon serveur, il est nécessaire de modifier son fichier /etc/hosts. Voici les manipulations à réaliser suivant votre système d'exploitation :

Linux

  • Éditer en root (ou avec sudo) le fichier /etc/hosts : vi /etc/hosts
  • Ajouter une ligne (sans # au début) contenant, par exemple :  51.91.137.130   silene.eu www.silene.eu cms.silene.eu

Windows 10 and 8

  • Appuyer sur la touche Windows
  • Tapez Notepad dans le champ de recherche
  • Dans les résultats, clic droit sur Notepad et sélectionner : "Exécuter en tant qu'administrateur"
  • Depuis Notepad, ouvrir le fichier suivant: c:\Windows\System32\Drivers\etc\hosts
  • Ajouter une ligne (sans # au début) contenant :  51.91.137.130   silene.eu www.silene.eu cms.silene.eu
  • Cliquer sur le menu : Fichier > Sauvegarder vos changements

Windows 7 and Vista

  • Cliquez sur Démarrer > Tous les programmes > Accessoires.
  • Clic droit sur Notepad et sélectionner "Exécuter en tant qu'administrateur"
  • Cliquez sur Continuer dans la fenêtre qui demande votre permission.
  • Depuis Notepad, cliquez sur : Fichier > Ouvrir.
  • Dans le champ du nom du fichier, tapez : C:\Windows\System32\Drivers\etc\hosts
  • Cliquer sur Ouvrir.
  • Ajouter une ligne (sans # au début) contenant : 51.91.137.130   silene.eu www.silene.eu cms.silene.eu
  • Cliquer sur le menu : Fichier > Sauvegarder vos changements

MacOs

  • Ressources :
  • Par défaut, le docker Wordpress n'est pas configuré pour envoyé des emails. Pour que l'envoie d'email fonctionne aussi bien dans les extensions que dans le coeur de Wordpress, il a été nécessaire d'installer l'extension WP Mail SMTP.
    • Les tentatives suivantes ont été réalisés :
      • configuration de sendmail (installation, lancement auto, modif php.ini) dans l'image via un DockerFile ⇒ fonctionne dans le système du container mais pas dans Wordpress.
      • utilisation du hook phpmailer_init dans un plugin pour forcer l'utilisation du SMTP Google ⇒ fonctionne dans les plugins mais pas dans le coeur de Wordpress (les notifications de nouveau utilisateur par exemple ne sont pas envoyée).
      • utilisation d'autres plugin de config SMTP plus simple que WP Mail SMTP ⇒ ne fonctionne pas… A priori, WP Mail SMTP n'utilise pas le hook mais surcharge le variable globale $phpmailer avec son propre code.
      • Les fichiers utilisés pour les différentes tentatives sont dans le dépôt Git SINP-PACA.
  • Afin de pouvoir uploader des fichiers sur Wordpress, il est nécessaire de :
    • modifier le fichier php.ini du container contenant le Wordpress en y indiquant les paramètres suivant :
      file_uploads = On
      upload_max_filesize = 12M
      post_max_size = 12M
    • Il faut aussi modifier la configuration du container Nginx utilisé pour indiquer la taille maximum des fichiers téléverssables en Méga Octets. Dans l'exemple ci-dessus, 12Mo :
          client_max_body_size 12M;
    • Enfin, si un dernier serveur Nginx est utilisé sur l'hôte comme proxy, il faudra aussi lui indiquer la taille maximum avec le paramètre client_max_body_size soit au niveau de la configuration globale du serveur soit au niveau de la section server du domaine concerné.
ATTENTION : activer l'indexation par les moteurs de recherche juste avant la mise en production
  • Installateur Wordpress :
    • Choisir la langue : Français
    • Titre du site : SILENE
    • Identifiant : votre identifiant (ne pas utiliser de compte standard - ex. admin - pour éviter les piratages).
    • Mot de passe : voir Keepass
    • Votre adresse de messagerie : votre email pro
    • Visibilité pour les moteurs de recherche : cocher la case pour éviter l'indexation pendant la phase de mise au point…
  • "Extensions" > "Extensions installées"
    • Supprimer toutes les extensions par défaut
  • "Extensions" > "Ajouter"
    • Ajouter l'extension WP Mail SMTP et l'activer
      • Cliquer sur "Réglages" :
        • Adresse e-mail d’envoi : mailer@cbn-alpin.fr
        • Cocher Forcer l’e-mail d’expédition
        • Nom de l’expéditeur : Adminsys
        • Autre SMTP (OVH) :
          • Hébergeur SMTP : ssl0.ovh.net
          • Cryptage : TLS
          • Port SMTP : 587
          • Identifiant SMTP : mailer@silene.eu
          • Mot de passe SMTP : utiliser le mot de passe du compte mailer@silene.eu. À modifier dans le fichier wp-config.php du container cms-wordpress (Voir comment modifier ce fichier). Modifier également la valeur dans le fichier .env du dossier contenant le docker-compose.yml.
        • Autre SMTP (Ancienne config avec Gmail) :
          • Hébergeur SMTP : smtp-relay.gmail.com
          • Cryptage : TLS
          • Port SMTP : 587
          • Identifiant SMTP : mailer@cbn-alpin.fr
          • Mot de passe SMTP : générer une mot de passe d'application sur le compte mailer@cbn-alpin.fr et l'utiliser ici.
      • Tester l'envoie d'email avec l'onglet correspondant
    • Ajouter l'extension WP Matomo et l'activer
      • Cliquer sur "Réglages" :
        • Se connecter à Matomo :
          • Mode de Matomo : Auto-hébergé (API HTTP par défaut)
          • URL de Matomo: https://analytics.<domaine-sinp>/
          • Jeton d'authentification à l'API : récupérer le jeton sur l'outil Matomo installé, menu "Paramètres > Personnel > Sécurité > Jetons d'authentification".
          • Cocher Auto configuration
          • Site déterminé : cms-<region>-sinp (https://cms.<domaine-sinp>)
        • Afficher les statistiques :
          • Date par défaut de Matomo : Aujourd'hui
          • Vue d’ensemble Matomo sur le Tableau de bord : Aujourd'hui
          • Cocher Graphique Matomo sur le Tableau de bord
          • Afficher les statistiques pour : Administrator, Editor.
          • Cocher Afficher les statistiques par article
          • Cocher Raccourci Matomo
          • Nom affiché de WP-Matomo : WP Matomo
          • Cocher Activer les codes courts
        • Activer le suivi :
          • Ajouter le code de suivi : code de suivi par défaut
          • Position du code JavaScript : entête
        • ATTENTION : si WP-Matomo n'arrive pas à se connecter au domaine analytics.silene.eu c'est peut être du l'erreur "No route to host" du container Docker. Tester en se connectant au container et en tapant : curl https://analytics.silene.eu . Si Curl affiche "no route to host", le problème vient de Firewalld qui bloque l'accès depuis le container Docker.
  • "Réglages" > "Général" :
    • Slogan : Système d'Information et de Localisation des Espèces Natives et Envahissantes
    • Adresse web de Wordpress (URL) : d'abord mettre https://cms.<domaine-sinp> pendant la phase de test puis pour la production https:<domaine-sinp>. * Adresse web du site (URL) : d'abord mettre https://cms.<domaine-sinp> pendant la phase de test puis pour la production https:<domaine-sinp>.
    • Adresse e-mail d’administration : adminsys@<domaine-sinp>
    • Rôle par défaut de tout nouvel utilisateur : contributeur
  • "Réglages" > "Discussions" :
    • Décocher la case Autoriser les notification de lien en provenance d’autres blogs (pings et rétroliens) sur les nouvelles publications
    • Décocher la case Autoriser les commentaires sur les nouvelles publications
  • "Réglages" > "Lecture" :
    • Visibilité pour les moteurs de recherche : décocher la case "Demander aux moteurs de recherche de ne pas indexer ce site" lors de la mise en PRODUCTION.
  • "Apparence" > "Personnaliser" > "Identité du site" :
    • Icône du site : charger le fichier favicon.png
  • "Apparence" > "Thèmes" :
    • Supprimer tous les thèmes inutilisés (passer par "Détails" pour accéder à l'action "Supprimer")
  • "Outils" > "Santé du site" :
    • Doit afficher : Bon travail ! Tout fonctionne parfaitement ici.
Le container blacklabelops/volumerize n'est plus maintenu… voir à terme pour son remplacement si nécessaire
  • La sauvegarde et la restauration des fichiers et base de données de Wordpress utilise le container blacklabelops/volumerize.
  • Via Docker-Compose le lancement du container ne semble pas générer les fichiers nécessaire pour mettre en place le système Cron utilisant Jobber. Pour l'activer, il faut :
    • Se connecter au container : docker exec -it cms-volumerize /bin/bash
    • Se placer dans le dossier suivant : cd /opt/volumerize
    • Ajouter la ligne : CUR_DIR='/opt/volumerize après la première ligne du fichier : vi /otp/volumerize/create_jobber.sh
    • Lancer le script : ./create_jobber.sh
    • Vérifier la présence du fichier : vi /root/.jobber
    • Recharger les jobs de tous les utilisateurs : jobber reload -a
    • Vérifier la présence des jobs : jobber list
    • Tester un job : jobber test <nom-du-job>
  • Les sauvegardes sont :
    • exécutées automatiquement chaque jour à 2 heures du matin
    • glissantes sur 7 jours
    • incrémentales sur 6 jours
    • complètes tous les 7 jours
    • stockées dans le dossier /home/admin/docker/cms.<domaine-sinp>/backup
  • Le fichier docker-compose.yml principal contient le service cms-volumerize. Ce service lance le container blacklabelops/volumerize qui contient l'outil Duplicity. Ce dernier se charge des sauvegardes et restauration.
  • Pour réaliser une restauration, il faut utiliser le fichier docker-compose.restore.yml en suivant les étapes suivante :
    • Arrêter le service cms-volumerize : docker-compose stop cms-volumerize
    • Vérifier les différences entre les données actuelles et le dernier point de restauration : docker-compose -f docker-compose.restore.yml run cms-volumerize-restore-from-local verify
      • Pour vérifier avec un point plus ancien, utiliser l'option -t et un temps
    • Exécuter une restauration avec le dernier point de restauration local : docker-compose -f docker-compose.restore.yml run cms-volumerize-restore-from-local restore
      • Pour restaurer à un point plus ancien, utiliser l'option -t et un temps. Exemple pour restaurer l'état 3 jours avant : docker-compose -f docker-compose.restore.yml run cms-volumerize-restore-from-local restore -t 3D
    • Si nécessaire, redémarrer les services restaurer : docker-compose restart cms-nginx cms-wordpress cms-mariadb cms-adminer cms-volumerize
    • Vérifier que la restauration est bonne
      • Ex. : docker-compose -f docker-compose.restore.yml run cms-volumerize-restore-from-dropbox restore
  • En local :
    • Mettre à jour les versions des outils dans le fichier docker-compose.yml
    • Mettre à jour la version de l'image Docker Wordpress dans le fichier /wordpress/build/Dockerfile .
    • Synchroniser le serveur avec ces modifications : rsync -av ./ admin@web-<region>-sinp:~/docker/<dossier-docker-cms>/ --dry-run
  • Sur le serveur "web-srv":
    • Se placer dans le dossier contenant le fichier docker-compose.yml du CMS. Ex. : cd ~/docker/cms.silene.eu/
    • Arrêter les containers : docker-compose down
    • Redémarrer les container en mode "daemon" : docker-compose up -d
      • Notes : cela va automatiquement télécharger les nouvelles images et les démarrer.
  • Sur le web :
    • Une fois les containers démarrés, se rendre sur le site du CMS
    • Se connecter à l'administration du Wordpress
    • Mettre à jour à nouveau le CMS avec le panneau de contrôle.
      • Notes : En effet, l'ensemble du contenu du CMS présent dans le container dans le dossier /var/www/html/ a été placé dans un volume docker. Ainsi, la mise à jour de l'image ne met pas à jour le CMS… Cette seconde mise à jour met donc bien à jour le CMS et sa base de données.

S'il est nécessaire de mettre à jour la configuration du Docker Wordpress, il faut :

  • Se connecter à l'instance "web-srv" en tant qu'admin : ssh admin@<sinp-web>
  • Accéder à un shell du container du Wordpress: docker exec -it cms-wordpress /bin/bash
  • Modifier le fichier de config : vi /var/www/html/wp-config.php
  • Sortir du container : exit
  • Placer vos fichiers sur le serveur par exemple dans /home/admin/docker/cms.silene.eu/wordpress/home/ à l'aide de scp. Ex. : scp ./mon_image.png admin@web-<region>-sinp:/home/admin/docker/cms.silene.eu/wordpress/home/
  • Se connecter au serveur : ssh admin@web-<region>-sinp
  • Se rendre dans le dossier où nous avons stocker le fichier : cd ~/docker/cms.silene.eu/wordpress/home/
  • Copier le fichier local dans le container au bon emplacement. Ex. : docker cp ./mon_image.png cms-wordpress:/var/www/html/wp-content/uploads/2020/11/mon_image.png
  • Vérifier sur le site que le nouveau fichier est bien disponible.
  • Pour accéder au container Nginx en tant que root : docker exec -it --user root cms-nginx /bin/bash
  • Pour accéder au container Wordpress en tant que root : docker exec -it cms-wordpress --user root /bin/bash
  • Effacer tous les volumes (ATTENTION : supprime toutes les données !) : docker-compose down --volumes
  • Pour voir si tout vos paramètres sont correctement pris en compte par Docker Compose : docker-compose -f docker-compose.yml -f docker-compose.dev.yml config
  • serveurs/installation/web-srv/docker-wordpress.txt
  • Dernière modification : 2021/09/23 07:54
  • de jpmilcent