Migrate Nextcloud / Migration Nextcloud

Hi,

I’d like to migrate a Nextcloud from another server to my yunohost (same version). To be sure:
I will set in maintenance mode both nextcloud. Migrate nextcloud data (rsync -Aax) into the new data directory, apps into apps directory & export and import databases. I think it will erase default data & users and remplace it with my other config.

I’m right ? How can i setup nextcloud in maintenance mode with yunohost ? I don’t know how SSO work but can i link two users ? (a nextcloud migrated one and a yunohost sso created before/after the migration ? )

Thx


Salutations,

J’aimerais faire une migration d’une instance Nextcloud depuis un serveur sur mon yunohost (versions identiques). Pour être sûr:
Je vais mettre en maintenance mes deux Nextcloud. Envoyer mes data (rsync -Aax), mes app dans les dossier data et app de yunohost et exporter/importer ma base de donnée. Ce qui devrais écraser proprement la configuration par défaut de Nextcloud sur Yunohost.

Suis-je dans le vrai ? Comment mettre nextcloud en maintenance manuellement sur Yunohost ? Ne connaissant pas SSO, est-il possible de refaire le lien entre deux utilisateurs (un compte Nextcloud migré et un compte créé avant/après la migration sur le sso) ?

Merci.

Salut,

je ne sais pas si c’est ce que tu cherches, mais certain font des migrations avec le systeme de backup/restore de YunoHost… (c.f. la commande yunohost backup create et yunohost backup restore, ou la section Backup de la webadmin)

  • Tu backup sur ton serveur initial. Suivant si tu veux migrer tout ton systeme (incluant les users) ou juste Nextcloud, il faut mettre des options différentes (genre si tu veux backuper que Nextcloud, c’est --apps nextcloud --ignore-system
  • Tu transfere l’archive .tar.gz aui sera dans /home/yunohost_backups/ (un truc du genre) vers ton autre serveur
  • Un coup de yunohost backup list pour verifier qu’il est bien reconnu sur l’autre serveur, puis yunohost backup restore <nomdubackup>

Salut, mon précédent serveur n’est pas sous Yunohost (mais sous FreeBSD), c’est justement ça qui peux me poser théoriquement problème ^^’

Édit:J’ai fait autrement (j’ai déplacé les data et tout réimporté à la main)

Zut, j’avais exactement la même question (avec en plus le soucis que le nom de mes utilisateurs va changer au passage à yunohost).
Bon ben ça sera synchro à la main des fichiers, tant pis pour leur date de création qui va être perdue :frowning:

J’ai exactement la même question que @vitria.
Je voudrais migrer mes données d’une instance Nextcloud sur un hébergement mutualisé sans YunoHost et sans LDAP vers une nouvelle machine virtuelle avec YunoHost et son SSO.

La doc de Nextcloud décrit comment faire un migration vers un autre serveur : https://docs.nextcloud.com/server/stable/admin_manual/maintenance/migrating.html

Je me demande si le SSO YunoHost continuera à fonctionner après cette migration. Les deux utilisateurs conservent le même nom.

Quelqu’un a une autre idée que d’importer à la main les fichiers (donc perdre les partages, les dates, etc), les contacts et le calendrier ?


I have exactly the same question as @vitria.
I would like to migrate my data from a Nextcloud instance to shared hosting without YunoHost and without LDAP to a new virtual machine with YunoHost and its SSO.

The Nextcloud doc describes how to migrate to another server: https://docs.nextcloud.com/server/stable/admin_manual/maintenance/migrating.html

I wonder if the YunoHost SSO will continue to work after this migration. Both users keep the same name.

Does anyone have another idea than importing the files by hand (so losing shares, dates, etc.), contacts and calendar?

1 Like

Bonjour,

Ayant moi-même réalisé cette opération avec succès, je me permets de copier/coller ci-dessous la petite documentation que j’avais rédigée au moment de ma migration, il y a quelques mois. À utiliser “en l’état”, en espérant que ça puisse servir !

Migrer d’un Nextcloud standalone à un Nextcloud YunoHost revient à deux choses :

  • migrer le Nextcloud existant (backup puis restauration),
  • ajouter un annuaire LDAP (celui utilisé par YunoHost) incluant les utilisateurs existants.

Pour info, je suis parti de ce sujet sur le forum Nextcloud :

Pour désigner le serveur/Nextcloud d’origine, je parlerai de “antérieur” , pour le nouveau, ce sera “YunoHost”.

L’astuce va consister à installer un Nextcloud YunoHost, récupérer les informations relatives au LDAP, restaurer son Nextcloud antérieur en écrasant celui qu’on a installé, puis ré-injecter les données LDAP.

:bulb: Prérequis :

  • connaître le shell de vos serveurs et un peu de SQL,
  • avoir accès aux deux hôtes en SSH,
  • avoir la même version de Nextcloud installé sur le serveur antérieur et sur le YunoHost (ici, la procédure a été faite pour Nextcloud 20),
  • avoir activé l’application Nextcloud ‘LDAP user and group backend’ sur le Nextcloud antérieur ; je ne suis pas sûr que ce soit essentiel à vrai dire, mais il n’est pas gênant de l’activer et de ne pas l’utiliser.

:no_entry: Si vous ne comprenez pas ce qui est fait par les commandes ci-dessous, il est dangereux de vous engager dans cette procédure en faisant des copier-coller !
Dans tous les cas, assurez-vous d’avoir sauvegardé des données qui pourraient être exposées.

Procédure :

Sur l’hôte antérieur, faire un backup des répertoires data (qui contient vos données) et nextcloud (qui contient les sources de Nextcloud), ainsi que de la base de donnée
(cf Backup — Nextcloud latest Administration Manual latest documentation pour la procédure détaillée).

Sur l’hôte YunoHost :
On va tout faire en CLI avec le Nextcloud en mode maintenance pour éviter qu’il n’aille interroger le LDAP

  1. Passer root :
sudo -s
  1. Installer Nextcloud :
yunohost app install nextcloud

:warning: NE PAS se connecter à Nextcloud une fois celui-ci installé.

  1. Mettre le Nextcloud en mode maintenance :
sudo -u nextcloud php /var/www/nextcloud/occ maintenance:mode --on
  1. Restaurer les données issues du Nextcloud antérieur :
  • sauvegarder le répertoire de configuration du Nextcloud YunoHost (exemple : cp -a /var/www/nextcloud/config/ /tmp)
  • remplacer le répertoire nextcloud du YunoHost par celui de l’antérieur
  • remplacer le répertoire data du YunoHost par celui de l’antérieur (ou modifier le paramètre datadirectory dans la config)
  • vérifier que l’utilisateur nextcloud est bien propriétaire des répertoires (si non : chown -R nextcloud:nextcloud /path/to/directory)
  • fusionner les deux fichiers de configuration (ancien et nouveau), sur la base du nouveau, en récupérant notamment le paramètre instanceid de l’ancienne config (bien regarder ligne par ligne ce qu’il est pertinent de garder de l’un ou l’autre des fichiers)
  1. Pour la base de données, nous allons détruire la base générée à l’installation, en recréer une et importer les données de la base antérieure :
  • AVANT la destruction, nous exportons certaines données relatives au LDAP YunoHost (ainsi que les tables oc_external_*) :
mysqldump -u root -p$(cat /etc/yunohost/mysql) nextcloud oc_external_applicable oc_external_config oc_external_mounts oc_external_options oc_ldap_group_mapping oc_ldap_group_members oc_ldap_user_mapping > /tmp/oc_yunohost_new_tables.sql
mysqldump -u root -p$(cat /etc/yunohost/mysql) nextcloud oc_appconfig --where "appid='user_ldap'" > /tmp/oc_yunohost_appconfig_ldap.sql
  • Dans ce dernier fichier, nous devons faire quelques modifications :
    <> retirer le bloc de création de la table (elle existera déjà)
    <> ajouter la ligne suivante avant les requêtes d’insertion des données :
DELETE FROM `oc_appconfig` WHERE `appid`='user_ldap';
  • On recrée la BDD :
mysql -u root -p$(cat /etc/yunohost/mysql)
DROP DATABASE nextcloud;
CREATE DATABASE nextcloud;
\q
  • On importe les données de la base antérieure, puis celles conservées de YunoHost :
mysql -u root -p$(cat /etc/yunohost/mysql) nextcloud < /your/backup/directory/db_dump_ante.sql
mysql -u root -p$(cat /etc/yunohost/mysql) nextcloud < /tmp/oc_yunohost_new_tables.sql
mysql -u root -p$(cat /etc/yunohost/mysql) nextcloud < /tmp/oc_yunohost_appconfig_ldap.sql
  1. Nous devons maintenant modifier certaines données dans la BDD pour éviter les conflits et que le LDAP prenne en compte les utilisateurs existants.

:warning: Les utilisateurs qui avaient un compte Nextcloud sur l’antérieur et qui ne sont pas dans le LDAP de YunoHost vont perdre leur accès ! Pour éviter cela, assurez-vous que tous les utilisateurs du Nextcloud antérieur ont bien un compte dans le LDAP YunoHost.

mysql -u root -p$(cat /etc/yunohost/mysql)
USE nextcloud;
DELETE FROM `oc_accounts`;
DELETE FROM `oc_users`;
DELETE FROM `oc_ldap_user_mapping`;
\q

Les tables oc_accounts, oc_users, oc_ldap_user_mapping et oc_ldap_group_mapping doivent être vides.

  1. [Étape facultative en fonction de votre installation] Changer la correspondance nom d’utilisateur Nextcloud <-> attribut LDAP.

Par défaut, Nextcloud va récupérer l’attribut uid du LDAP YunoHost (les prénoms en minuscule théoriquement). Si dans votre Nextcloud antérieur vous identifiiez vos utilisateurs différement, il faut utiliser un autre attribut des utilisateurs LDAP, qui aura exactement la même valeur que celle utilisée dans l’antérieur. Par exemple, si vous utilisiez le prénom avec une majuscule, vous pouvez utiliser l’attribut cn, ou givenName. Dans le pire des cas, il faudra créer un attribut supplémentaire, pour tous vos utilisateurs YunoHost.
Pour faire la correspondance (dans cet exemple, je remplace uid par cn) :

mysql -u root -p$(cat /etc/yunohost/mysql)
USE nextcloud;
UPDATE `oc_appconfig` SET `configValue`='cn' WHERE `configKey`='ldap_expert_username_attr' AND `configValue`='uid';
UPDATE `oc_appconfig` SET `configValue`='(&(|(objectclass=posixAccount))(cn=%uid))' WHERE `configKey`='ldap_login_filter' AND `configValue`='(&(|(objectclass=posixAccount))(uid=%uid))';
UPDATE `oc_appconfig` SET `configValue`='1' WHERE `configKey`='ldap_login_filter_mode' AND `configValue`='0';
\q
  1. Vérifier que les différentes applications installées sur votre Nextcloud vont fonctionner correctement.

Par exemple, si vous utilisez le webmail, il faudra vérifier la correspondance entre les adresses mails des utilisateurs. Chaque application possède ses tables dans la base de données, et stocke des réglages dans la table oc_appconfig.

  1. Vérifier le bon fonctionnement de Nextcloud.

Pour cela, on va simplement lancer un status :

sudo -u nextcloud php /var/www/nextcloud/occ status

:question: Pour ma part, lors d’un premier essai où je ne pensais pas devoir migrer tout le répertoire nextcloud, j’avais une différence de version mineure (19.0.3 côté YunoHost vs 19.0.6 côté antérieur), j’ai donc mis à jour côté YunoHost en 19.0.6, mais Nextcloud n’était pas content et a quand même réclamé un upgrade (pourtant j’avais changé le numéro de version dans la config), qui a résolu le problème :

sudo -u nextcloud php /var/www/nextcloud/occ upgrade

Lors de la migration avec la version 20.0.7 des deux côtés, le status était normal (en migrant tout le répertoire nextcloud ou pas).

  1. Si tout est bon, on sort Nextcloud de la maintenance, on tente de se connecter avec un utilisateur LDAP avec les droits d’administation sur le Nextcloud (un utilisateur qui les avait avant, donc), et on va voir la liste des utilisateurs pour vérifier qu’il n’y a eu aucune collision (si c’est le cas, les utilisateurs ajoutés par le LDAP auront un numéro aléatoire ajouté à leur nom).

Et voilà ! :white_check_mark:

1 Like

Bonjour,

@SveDec Je me permets de répondre car je viens de réaliser avec succès une migration dans les mêmes conditions grâce au tutoriel ci-dessous, qui a dans l’ensemble très bien fonctionné. Merci beaucoup d’avoir partagé cette doc interne :slight_smile:

Pour information, j’utilisais Nextcloud 23 sur l’instance “antérieure” et seul Nextcloud 22 était disponible sur Yunohost au moment de la migration. Lors de tests préliminaires, j’ai réussi à effectuer la migration sans activer l’application LDAP dans l’instance antérieur, mais j’ai quand-même fini par le faire pour ma tranquilité d’esprit. Par contre, j’ai dû m’y reprendre à quelques fois concernant les permissions. En effet, malgré un chown nextcloud:www-data autant sur le dossier nextcloud que sur celui des données, j’ai eu des soucis d’accès et j’ai dû répéter l’opération. Donc en cas de problème d’accès après une migration apparemment sans accros, cela vaut la peine de jeter un oeil à cela.

Une recommandation que je ferais également à toute personne intéressée par cette migration est de la tenter sur un autre sous-domaine temporairement (eg. un sous-domaine fournis par Yunohost) et de tester la synchronisation en changeant l’url dans le fichier nextcloud.cfg sur l’un des clients. Cela m’a permis de faire des tests tout en étant en mesure de retourner en arrière en cas de problème. Il est ensuite très simple de changer le sous-domaine de l’installation a posteriori.

Bonne chance à ceux qui voudront tenter l’aventure.