Mettre à jour Ghost via docker-compose (alpine)

Mettre à jour Ghost via docker-compose (alpine)

J'ai voulu mettre à jour ce blog dont je ne m'étais pas occupé depuis un moment. Pour rappel mon instance Ghost tourne sur un VPS héhergé chez OVH (petit budget et bien suffisant vs le besoin). Un serveur Ubuntu 16.04 (oui je sais ça pique un peu), et du Docker avec un joli fichier docker-compose.yml de ce type :

version: '2'
services:
  server:
    image: ghost:4.7.0-alpine
    container_name: ghost
    restart: unless-stopped
    networks:
      - web
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:blog.gabrielsagnard.fr"
      - "traefik.port=2368"
      - "traefik.docker.network=web"
    volumes:
      - /opt/ghost/blog:/var/lib/ghost/content
    environment:
      - NODE_ENV=production
      - url=https://blog.gabrielsagnard.fr

networks:
  web:
    external: true

Logiquement pour mettre à jour c'est simple, se placer dans le bon dossier sur votre serveur Linux, puis lancer un :

 docker-compose up -d

Sauf qu'après avoir effectué une première tentative de 1.26.2 (alpine docker version) -----> fail

Echec le blog n'est plus accessible. Après avoir tenté plusieurs versions intermédiaires downgradées, v3 notamment, pas mieux.

J'entreprends donc de mettre à jour mon noyau linux, vers 18.04 par exemple pour commencer. Problème n°2 : en appliquant la commande :

do-release-upgrade

Là aussi échec :

~# do-release-upgrade
Checking for a new Ubuntu release
Please install all available updates for your release before upgrading.

il me demande de lancer un apt-get update et un apt-get upgrade dans la foulée pour finir la mise à jour des paquets en attente.

sudo apt-get update
Atteint :1 http://nova.clouds.archive.ubuntu.com/ubuntu xenial InRelease
Réception de :2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
Réception de :3 http://nova.clouds.archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
Atteint :4 https://download.docker.com/linux/ubuntu xenial InRelease           
Réception de :5 http://nova.clouds.archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
Réception de :6 http://nova.clouds.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [2 049 kB]
Err :7 https://apt.kubernetes.io kubernetes-xenial InRelease  
  Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY FEEA9169307EA071  NO_PUBKEY 8B57C5C2836F4BEB
2 374 ko réceptionnés en 1s (1 225 ko/s)                      
Lecture des listes de paquets... Fait
W: Une erreur s'est produite lors du contrôle de la signature. Le dépôt n'est pas mis à jour et les fichiers d'index précédents seront utilisés. Erreur de GPG : https://apt.kubernetes.io kubernetes-xenial InRelease : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY FEEA9169307EA071  NO_PUBKEY 8B57C5C2836F4BEB
W: Impossible de récupérer https://apt.kubernetes.io/dists/kubernetes-xenial/InRelease  Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY FEEA9169307EA071  NO_PUBKEY 8B57C5C2836F4BEB
W: Le téléchargement de quelques fichiers d'index a échoué, ils ont été ignorés, ou les anciens ont été utilisés à la place.

Je tente donc les commandes habituelles à savoir remove ou purge :

nettoyer_ubuntu [Wiki ubuntu-fr]

Après plusieurs recherches, je comprends que les derniers paquets qui ne peuvent s'installer ne peuvent ni être purgés, ni remove etc...

La solution je l'ai trouvée ici :

gpg --recv-key FEEA9169307EA071

et ici :

Si la clé n'est pas disponible au téléchargement, récupérez-la par cette méthode :
télécharger la clé publique en utilisant la commande « gpg » sur les 8 derniers caractères du code 0123456789ABC fourni par le message d'erreur vu précédemment lors de l'ajout du dépôt, soit ici : 56789ABC.
Ce qui nous donne la commande :gpg --recv-key 56789ABC
ou avec le serveur :gpg --keyserver wwwkeys.eu.pgp.net --recv-key 56789ABC

Je teste donc la méthode en question pour mettre à jour ces paquets et ensuite les supprimer en raison de leur inutilité.

root@vps578202:~# gpg --recv-key FEEA9169307EA071
gpg: requesting key 307EA071 from hkp server keys.gnupg.net
gpg: key 307EA071: public key "Rapture Automatic Signing Key (cloud-rapture-signing-key-2021-03-01-08_01_09.pub)" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
root@vps578202:~# gpg --export --armor FEEA9169307EA071 | sudo apt-key add -
OK
root@vps578202:~# gpg --recv-key 8B57C5C2836F4BEB
gpg: requesting key 836F4BEB from hkp server keys.gnupg.net
gpg: key 836F4BEB: public key "gLinux Rapture Automatic Signing Key (//depot/google3/production/borg/cloud-rapture/keys/cloud-rapture-pubkeys/cloud-rapture-signing-key-2020-12-03-16_08_05.pub) <glinux-team@google.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
root@vps578202:~# gpg --export --armor 8B57C5C2836F4BEB | sudo apt-key add -
OK

Je lance donc un update qui achève la mise à jour de ces paquets et là pas serein quand je reçois cela en réponse :

Les paquets suivants ont été conservés :
  apt apt-utils base-files docker-ce docker-ce-cli dpkg kubeadm kubectl kubelet libapt-pkg5.0 ubuntu-advantage-tools ubuntu-server update-notifier-common
0 mis à jour, 0 nouvellement installés, 0 à enlever et 13 non mis à jour.

Non ce n'est pas possible, cela persiste, ok j'envoi donc un cran au-dessus avec :

sudo apt full-upgrade

Ok il n'en reste plus que 3 :

Les paquets suivants ont été conservés :
  kubeadm kubectl kubelet
0 mis à jour, 0 nouvellement installés, 0 à enlever et 3 non mis à jour.

Suppression à la main de chacun :

sudo apt-get remove kubeadm

Mise à jour de Ubuntu en 18.04 :

root@vps578202:~# do-release-upgrade
Checking for a new Ubuntu release
Get:1 Upgrade tool signature [819 B]                                                                                                                                                     
Get:2 Upgrade tool [1 247 kB]                                                                                                                                                            
1 247 ko réceptionnés en 0s (0 o/s)                                                                                                                                                      
authenticate 'bionic.tar.gz' against 'bionic.tar.gz.gpg' 
extracting 'bionic.tar.gz'

Puis mise à niveau du fichier compose.yml vers ghost 4.7-alpine (latest) et vérification :

    /opt/ghost# docker ps
CONTAINER ID   IMAGE                              COMMAND                  CREATED        STATUS                  PORTS                                                                                                                                                                            NAMES
b890aeafcfe5   ghost:4.7.0-alpine                 "docker-entrypoint.s…"   2 hours ago    Up 2 hours              2368/tcp                                                                                                                                                                         ghost
2045da49ae11   gcr.io/cadvisor/cadvisor:v0.39.2   "/usr/bin/cadvisor -…"   25 hours ago   Up 24 hours (healthy)   8080/tcp                                                                                                                                                                         cadvisor
1d40ef758cac   prom/pushgateway:v1.4.1            "/bin/pushgateway"       25 hours ago   Up 24 hours             9091/tcp                                                                                                                                                                         pushgateway
d0e697625605   prom/prometheus:v2.27.1            "/bin/prometheus --c…"   25 hours ago   Up 24 hours             9090/tcp                                                                                                                                                                         prometheus
090c7950100e   caddy:2.3.0                        "caddy run --config …"   25 hours ago   Up 24 hours             80/tcp, 443/tcp, 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp, 0.0.0.0:9090-9091->9090-9091/tcp, :::9090-9091->9090-9091/tcp, 2019/tcp, 0.0.0.0:9093->9093/tcp, :::9093->9093/tcp   caddy
0efc7ac99be4   prom/alertmanager:v0.22.2          "/bin/alertmanager -…"   25 hours ago   Up 24 hours             9093/tcp                                                                                                                                                                         alertmanager
4f7ec43bfacd   grafana/grafana:8.0.0              "/run.sh"                25 hours ago   Up 24 hours             3000/tcp                                                                                                                                                                         grafana
da47840eaeab   prom/node-exporter:v1.1.2          "/bin/node_exporter …"   25 hours ago   Up 24 hours             9100/tcp                                                                                                                                                                         nodeexporter
a5c0d5659fe6   traefik:v1.7.6-alpine              "/entrypoint.sh --we…"   2 years ago    Up 24 hours             0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp                                                                                                         traefik_proxy_1

Le site tourne niquel, on met à jour le thème (Casper) et on peut se féliciter, l'instance est à jour et parfaitement fonctionnelle.