CozyCloud : migrer son instance 2, le retour
Si vous vous rappelez bien, j’ai déjà écrit un article pour expliquer comment migrer son instance https://cozy.io d’un endroit vers un autre. Ces derniers jours, je me suis rendu compte que mon serveur personnel était sous-utilisé et qu’il me serait possible d’en prendre un plus léger et moins cher, d’où la nécessité d’une nouvelle migration d’un serveur à un autre.
Edit (10 février 2016) : j’ai ajouté la copie des répertoires permanents à cette procédure, sans avoir pu tester. Vos retours sur cette partie sont les bienvenus !
Les étapes sont les suivantes :
- Récupérer la base de l’ancien Cozy.
- Recopier le répertoire de données permanentes des apps.
- La mettre en place dans le nouveau Cozy.
- Réinstaller les applications.
Récupérer la base de l’ancien Cozy
Il s’agit d’un fichier qui contient toutes les données relatives à votre Cozy, que ce soit des données internes (par exemple, quelles applications installées) ou propres aux applications (par exemple, vos comptes en banques).
Si votre Cozy est hébergé par CozyCloud (sur cozycloud.cc donc), il est possible de demander l’export de la base de données CouchDB à l’équipe Cozy. Problème réglé.
Si vous êtes auto-hébergé, il va falloir mettre les mains dans le cambouis :
D’abord, réduire la taille de la base de données, c’est-à-dire effectuer un compactage de la base de données. C’est parti, depuis l’ancien serveur :
# On éteint Cozy pour éviter l'apparition de nouvelles données
sudo service supervisor stop
# On fait une sauvegarde de la base, en cas de pépin
cd /var/lib/couchdb/
sudo cp cozy.couch cozy.couch.backup
# On compacte la base
sudo cozy-monitor compact
Ensuite, récupérer la base elle-même. Celle-ci est contenue dans le répertoire
/var/lib/couchdb/
et porte le nom de cozy.couch
, sauf si vous l’avez
modifié vous-même.
L’ancien Cozy était installé par le package Debian
Si vous avez installé votre serveur avec le package Debian ou Ubuntu, il est
possible d’utiliser l’outil scp
pour effectuer cette tâche, en vous
connectant depuis le nouveau serveur vers l’ancien. Si vous utilisez cette
méthode, prenez soin de nommer la version sur le nouveau serveur
cozy.couch.new
, c’est important pour la suite.
L’ancien Cozy était installé avec Docker
Si comme moi vous avez préféré jouer avec le feu et utiliser Docker pour
installer votre cozy, il va falloir ruser un peu. Personnellement, j’ai choisi
la méthode malpropre, à savoir exposer la base de données sur le serveur web
pendant un court instant et utiliser wget
sur le nouveau cozy. Il est
sûrement possible d’extraire le fichier depuis le Docker vers l’hôte, mais
j’avoue ne pas avoir cherché ; si quelqu’un connaît une méthode, je suis
preneur ! Pour ma méthode « malpropre », il faut modifier le fichier de
configuration de nginx pour donner accès au fichier :
# Copier la base vers /var/www
sudo cp /var/lib/couchdb/cozy.couch /var/www/cozy.couch.new
# Donner les droits en lecture à nginx
sudo chown www-data:www-data -R /var/www
# Editer le fichier de config de nginx avec le meilleur éditeur du monde
sudo vim /etc/nginx/sites-available/cozy.conf
J’ai remplacé le bloc location/ { proxy_set_header ...
par le suivant :
location / {
root /var/www;
try_files $uri $uri/ /index.html;
}
Toujours depuis l’ancien serveur, bien penser à relancer nginx :
sudo service nginx restart
Ensuite, depuis le nouveau serveur, sur lequel je suppose que vous avez
déjà installé le paquet cozy
et qu’il tourne correctement :
cd /var/lib/couchdb
# Stopper supervisor va arrêter tout cozy
sudo service supervisor stop
sudo service couchdb stop
sudo wget https://monanciencozy.tld/cozy.couch.new
Recopier les données permanentes des applications
Cela a été rajouté depuis l’écriture initiale de ce blog post, il est donc probable que cela ne fonctionne pas, dans quel cas contactez-moi svp !
Depuis des versions récentes de la plateforme, Cozy autorise les applications à avoir un répertoire de données permanentes, qui sont conservées même si l’application a été désinstallée. C’est très pratique pour porter facilement des applications qui utilisent des fichiers comme mémoire vers Cozy !
Pour porter ce répertoire, voici la procédure à effectuer :
-
copier le répertoire sur la machine précédente et le mettre dans un zip, par exemple:
# depuis la machine qui héberge l'ancien cozy cd /usr/local/var/cozy zip /tmp/usr-local-var-cozy.zip -r ./*
-
transférer le zip vers le nouveau serveur (avec votre méthode préférée : FTP, Web, scp, etc.). Par exemple, avec
scp
:# depuis la nouvelle machine scp user@ancienne-machine:/tmp/usr-local-var-cozy.zip /tmp
-
remplacer le répertoire sur la nouvelle machine:
# depuis la nouvelle machine mkdir -p /usr/local/var/cozy cd /usr/local/var/cozy && zip backup.zip -r ./* unzip /tmp/usr-local-var-cozy.zip
Mettre en place la base dans le nouveau cozy
Je suppose que vous avez déjà récupéré la base d’une manière ou d’une autre, et
que celle-ci est déjà présente dans /var/lib/couchdb
, sous le nom
cozy.couch.new
. Depuis le nouveau serveur, effectuez les commandes suivantes :
cd /var/lib/couchdb
# On arrête Cozy (via supervisor) et couchdb
sudo service supervisor stop
sudo service couchdb stop
# Backup de l'ancienne base
sudo mv cozy.couch cozy.couch.old
sudo mv cozy.couch.new cozy.couch
sudo chown -R couchdb:couchdb ./cozy.couch
# On relance le tout
sudo service couchdb start
sudo service supervisor start
Et voilà ! Après cela, il va falloir attendre quelques minutes que le contrôleur Cozy relance les applications.
Réinstaller les applications manquantes
L’import de la base comprend les données internes à Cozy, notamment les informations sur les applications installées. Comme on vient d’importer une base qui vient d’un autre cozy où des applications sont installées, le nouveau cozy va penser que certaines applications sont présentes sur le disque, alors qu’elles ne le sont pas. Il est nécessaire d’effectuer une petite réparation ici, au niveau de la pile logicielle cozy et des applications installées. Heureusement, l’équipe a pensé à ça et nous a fourni une commande qui permet de réinstaller les applications utilisateurs. C’est parti, depuis le nouveau serveur :
# Mettre à jour cozy-monitor (utile pour les image préinstallées)
sudo npm install -g cozy-monitor
# Mettre à jour l'ensemble de la pile Cozy pour commencer
sudo cozy-monitor update-all-cozy-stack
# Réinstaller les applications manquantes
sudo cozy-monitor reinstall-missing-app
J’ai eu plusieurs erreurs à ce moment-là, souvent liées à des applications qui n’étaient plus trouvées sur github, ou des erreurs réseaux. En général, relancer la commande fonctionne, sinon j’ai purement et simplement désinstallé l’application en question. Par exemple, si l’application plantée était Kresus, j’ai simplement effectué
sudo cozy-monitor uninstall kresus
Ce n’est pas un problème, car la désinstallation d’une application n’implique pas la désinstallation des données. Ensuite, il est possible de réinstaller les applications depuis l’interface du site web.
Pour terminer, il faut mettre à jour les permissions des dossiers contenant les données persistantes :
cd /usr/local/var/cozy
# On change les permissions pour chaque dossier. Note, penser à changer
# le nom de l'application à chaque fois
sudo chown -R cozy-nomApp nomApp
Conclusion
Notons que la migration d’un serveur à l’autre est désormais beaucoup plus facile qu’auparavant ! Pas besoin de rafistoler les données directement dans la base, et il existe une commande pour réinstaller les applications automatiquement. Bien joué, l’équipe Cozy !
J’espère que cette procédure aura marché pour vous, j’ai écrit ces notes
rapidement et de mémoire. Si j’ai oublié quoi que ce soit, n’hésitez pas à me
contacter sur twitter,
diaspora ou sur irc (mon nick est
bnjbvr
). Si ça a marché et que vous avez apprécié, n’hésitez pas à me le dire
également. ;-)