[{"data":1,"prerenderedAt":860},["ShallowReactive",2],{"\u002Fnext\u002Fadministrer\u002Fexploitation\u002Fmigration-v2-v3-vers-v5":3,"section:\u002Fnext\u002Fadministrer\u002Fexploitation\u002Fmigration-v2-v3-vers-v5":859},{"id":4,"title":5,"body":6,"description":841,"extension":842,"meta":843,"navigation":844,"path":855,"seo":856,"stem":857,"__hash__":858},"docs\u002F2.next\u002F5.administrer\u002F03.exploitation\u002F14.migration-v2-v3-vers-v5.md","Migrer un site auto-hébergé de la v2 ou de la v3 à la v5",{"type":7,"value":8,"toc":829},"minimark",[9,13,26,29,32,37,173,188,194,197,218,222,225,243,246,250,293,296,301,320,450,468,475,479,597,600,604,610,681,688,692,695,699,702,719,723,816,825],[10,11,5],"h1",{"id":12},"migrer-un-site-auto-hébergé-de-la-v2-ou-de-la-v3-à-la-v5",[14,15,16],"blockquote",{},[17,18,19,20,25],"p",{},"S'applique à : auto-hébergé, Dokos v2 ou v3 → v5. Pour un site v4, voir ",[21,22,24],"a",{"href":23},"\u002Fnext\u002Fadministrer\u002Fexploitation\u002Fmigration-v4-vers-v5","Migrer de la v4 à la v5",".",[17,27,28],{},"Il n'est pas possible de restaurer directement une base v2 ou v3 sur une v5. Les patchs de migration supposent que la base est dans l'état de la version précédente. Sautez une version et de nombreux patchs échouent : un champ à renommer n'existe pas encore, une table attendue manque. Corriger ces erreurs une par une est long, et la base peut garder des incohérences.",[17,30,31],{},"Passez donc une version majeure à la fois.",[33,34,36],"h2",{"id":35},"les-paliers","Les paliers",[38,39,40,68],"table",{},[41,42,43],"thead",{},[44,45,46,50,53,56,59,62,65],"tr",{},[47,48,49],"th",{},"Étape",[47,51,52],{},"Branche",[47,54,55],{},"Sortie de la version",[47,57,58],{},"Ubuntu LTS à cette date",[47,60,61],{},"Python requis",[47,63,64],{},"Node.js requis",[47,66,67],{},"Détail",[69,70,71,98,123,147],"tbody",{},[44,72,73,77,83,86,89,92,95],{},[74,75,76],"td",{},"Départ : site v2",[74,78,79],{},[80,81,82],"code",{},"v2.x.x",[74,84,85],{},"avril 2021",[74,87,88],{},"20.04",[74,90,91],{},"3.6 ou plus (testé en 3.7)",[74,93,94],{},"12 (testé)",[74,96,97],{},"—",[44,99,100,103,108,111,114,117,120],{},[74,101,102],{},"1. v2 → v3",[74,104,105],{},[80,106,107],{},"v3.x.x",[74,109,110],{},"septembre 2022",[74,112,113],{},"22.04",[74,115,116],{},"3.10 ou plus",[74,118,119],{},"14 ou plus (testé en 16)",[74,121,122],{},"Section « Palier v2 → v3 »",[44,124,125,128,133,136,138,141,144],{},[74,126,127],{},"2. v3 → v4",[74,129,130],{},[80,131,132],{},"v4",[74,134,135],{},"décembre 2023",[74,137,113],{},[74,139,140],{},"3.10 à 3.12",[74,142,143],{},"18 ou plus",[74,145,146],{},"Section « Palier v3 → v4 »",[44,148,149,152,157,160,163,166,169],{},[74,150,151],{},"3. v4 → v5",[74,153,154],{},[80,155,156],{},"v5",[74,158,159],{},"mars 2026",[74,161,162],{},"24.04",[74,164,165],{},"3.14",[74,167,168],{},"24 ou plus",[74,170,171],{},[21,172,24],{"href":23},[17,174,175,176,179,180,183,184,187],{},"« Ubuntu LTS à cette date » est la dernière version LTS d'Ubuntu sortie avant la version de Dokos. Python et Node.js sont les versions que le code de Dodock exige sur la branche : ",[80,177,178],{},"setup.py"," ou ",[80,181,182],{},"pyproject.toml"," pour Python, ",[80,185,186],{},"package.json"," pour Node.js. « Testé » indique la version de l'intégration continue de Dokos quand le code ne fixe pas de minimum.",[17,189,190,191,25],{},"Le Python fourni par Ubuntu est 3.8 sur 20.04, 3.10 sur 22.04 et 3.12 sur 24.04. Sur Ubuntu 22.04, les étapes 1 et 2 utilisent donc le Python du système. Pour l'étape 3, installez Python 3.14 à côté de celui du système, ou utilisez Docker. Installez toujours Node.js depuis NodeSource ou ",[80,192,193],{},"nvm",[17,195,196],{},"Nouvelles applications à ajouter à chaque palier :",[198,199,200,208,213],"ul",{},[201,202,203,207],"li",{},[204,205,206],"strong",{},"v3"," : Payments, HRMS et, si vous l'utilisez, WooCommerce sortent de Dokos.",[201,209,210,212],{},[204,211,132],{}," : Webshop sort de Dokos.",[201,214,215,217],{},[204,216,156],{}," : Blog, Energy Points, Newsletter et Backup Integrations sortent de Dodock. eTransactions remplace OCR.",[33,219,221],{"id":220},"préparer-la-machine","Préparer la machine",[17,223,224],{},"Les anciennes versions de Python et de Node.js ne s'installent pas toujours sur un système récent. Deux approches :",[198,226,227,233],{},[201,228,229,232],{},[204,230,231],{},"Une machine de migration jetable."," Montez une machine virtuelle avec l'Ubuntu LTS de l'étape en cours (voir le tableau). Mettez le système à niveau entre deux paliers, ou changez de machine à chaque palier en déplaçant la sauvegarde.",[201,234,235,238,239,242],{},[204,236,237],{},"Le serveur existant."," Mettez à jour le système d'exploitation par étapes, en parallèle des paliers Dokos. Après chaque mise à jour du système, vérifiez que ",[80,240,241],{},"bench"," démarre avant de continuer.",[17,244,245],{},"Dans les deux cas, gardez le serveur de production d'origine intact jusqu'à la fin.",[33,247,249],{"id":248},"procédure-pour-chaque-palier","Procédure pour chaque palier",[251,252,253,264,271,274,277,283,290],"ol",{},[201,254,255,256,259,260,263],{},"Sauvegardez le site : ",[80,257,258],{},"bench --site dokompany.fr backup --with-files",". Copiez la sauvegarde et ",[80,261,262],{},"site_config.json"," hors de la machine.",[201,265,266,267,270],{},"Installez les versions de Python et de Node.js du palier, ",[204,268,269],{},"à côté"," de celles du système (voir ci-dessous).",[201,272,273],{},"Migrez l'environnement du bench, ou créez un nouveau bench avec la bonne version de Python et déplacez-y le dossier du site.",[201,275,276],{},"Ajoutez les nouvelles applications du palier.",[201,278,279,280,25],{},"Changez de branche avec ",[80,281,282],{},"bench switch-to-branch",[201,284,285,286,289],{},"Installez les nouvelles applications sur le site, lancez ",[80,287,288],{},"bench update --reset",", puis vérifiez le site.",[201,291,292],{},"Passez au palier suivant seulement si le site fonctionne.",[17,294,295],{},"Arrivé en v4, vous pouvez finir par le chemin Docker : sauvegardez le site v4 et restaurez-le sur une installation Docker v5.",[297,298,300],"h3",{"id":299},"installer-python-et-nodejs-à-côté-du-système","Installer Python et Node.js à côté du système",[17,302,303,304,307,308,311,312,319],{},"Ne remplacez jamais le Python du système. Des outils comme ",[80,305,306],{},"apt"," en dépendent. Sous Ubuntu, utilisez le dépôt ",[80,309,310],{},"deadsnakes"," pour Python et NodeSource (ou ",[21,313,317],{"href":314,"rel":315},"https:\u002F\u002Fgithub.com\u002Fnvm-sh\u002Fnvm",[316],"nofollow",[80,318,193],{},") pour Node.js. Exemple pour le palier v3 → v4 :",[321,322,327],"pre",{"className":323,"code":324,"language":325,"meta":326,"style":326},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","wget -qO- https:\u002F\u002Fdeb.nodesource.com\u002Fsetup_18.x | sudo -E bash -\nsudo apt install -y nodejs\nsudo add-apt-repository ppa:deadsnakes\u002Fppa\nsudo apt-get update\nsudo apt-get install python3.10 python3.10-dev python3.10-venv\ncurl -sS https:\u002F\u002Fbootstrap.pypa.io\u002Fget-pip.py | python3.10\npip install dokos-cli --upgrade\n","sh","",[80,328,329,361,379,390,401,419,436],{"__ignoreMap":326},[330,331,334,338,342,345,349,352,355,358],"span",{"class":332,"line":333},"line",1,[330,335,337],{"class":336},"sBMFI","wget",[330,339,341],{"class":340},"sfazB"," -qO-",[330,343,344],{"class":340}," https:\u002F\u002Fdeb.nodesource.com\u002Fsetup_18.x",[330,346,348],{"class":347},"sMK4o"," |",[330,350,351],{"class":336}," sudo",[330,353,354],{"class":340}," -E",[330,356,357],{"class":340}," bash",[330,359,360],{"class":340}," -\n",[330,362,364,367,370,373,376],{"class":332,"line":363},2,[330,365,366],{"class":336},"sudo",[330,368,369],{"class":340}," apt",[330,371,372],{"class":340}," install",[330,374,375],{"class":340}," -y",[330,377,378],{"class":340}," nodejs\n",[330,380,382,384,387],{"class":332,"line":381},3,[330,383,366],{"class":336},[330,385,386],{"class":340}," add-apt-repository",[330,388,389],{"class":340}," ppa:deadsnakes\u002Fppa\n",[330,391,393,395,398],{"class":332,"line":392},4,[330,394,366],{"class":336},[330,396,397],{"class":340}," apt-get",[330,399,400],{"class":340}," update\n",[330,402,404,406,408,410,413,416],{"class":332,"line":403},5,[330,405,366],{"class":336},[330,407,397],{"class":340},[330,409,372],{"class":340},[330,411,412],{"class":340}," python3.10",[330,414,415],{"class":340}," python3.10-dev",[330,417,418],{"class":340}," python3.10-venv\n",[330,420,422,425,428,431,433],{"class":332,"line":421},6,[330,423,424],{"class":336},"curl",[330,426,427],{"class":340}," -sS",[330,429,430],{"class":340}," https:\u002F\u002Fbootstrap.pypa.io\u002Fget-pip.py",[330,432,348],{"class":347},[330,434,435],{"class":336}," python3.10\n",[330,437,439,442,444,447],{"class":332,"line":438},7,[330,440,441],{"class":336},"pip",[330,443,372],{"class":340},[330,445,446],{"class":340}," dokos-cli",[330,448,449],{"class":340}," --upgrade\n",[17,451,452,453,456,457,460,461,464,465,25],{},"Remplacez ",[80,454,455],{},"18"," par ",[80,458,459],{},"16"," pour le palier v2 → v3. Vérifiez ensuite avec ",[80,462,463],{},"node --version"," et ",[80,466,467],{},"python3.10 -V",[17,469,470,471,474],{},"Chaque bench est un environnement virtuel Python séparé. Seul docli (paquet ",[80,472,473],{},"dokos-cli",") utilise le Python par défaut du système.",[33,476,478],{"id":477},"palier-v2-v3","Palier v2 → v3",[321,480,482],{"className":323,"code":481,"language":325,"meta":326,"style":326},"bench migrate-env python3.10\nbench get-app https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fpayments --branch v3.x.x\nbench get-app https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fhrms --branch v3.x.x\nbench get-app https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fwoocommerce --branch v3.x.x   # seulement si vous utilisez WooCommerce\nbench switch-to-branch v3.x.x frappe erpnext --upgrade\nbench --site dokompany.fr install-app payments\nbench --site dokompany.fr install-app hrms\nbench update --reset\n",[80,483,484,493,509,522,540,557,573,586],{"__ignoreMap":326},[330,485,486,488,491],{"class":332,"line":333},[330,487,241],{"class":336},[330,489,490],{"class":340}," migrate-env",[330,492,435],{"class":340},[330,494,495,497,500,503,506],{"class":332,"line":363},[330,496,241],{"class":336},[330,498,499],{"class":340}," get-app",[330,501,502],{"class":340}," https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fpayments",[330,504,505],{"class":340}," --branch",[330,507,508],{"class":340}," v3.x.x\n",[330,510,511,513,515,518,520],{"class":332,"line":381},[330,512,241],{"class":336},[330,514,499],{"class":340},[330,516,517],{"class":340}," https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fhrms",[330,519,505],{"class":340},[330,521,508],{"class":340},[330,523,524,526,528,531,533,536],{"class":332,"line":392},[330,525,241],{"class":336},[330,527,499],{"class":340},[330,529,530],{"class":340}," https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fwoocommerce",[330,532,505],{"class":340},[330,534,535],{"class":340}," v3.x.x",[330,537,539],{"class":538},"sHwdD","   # seulement si vous utilisez WooCommerce\n",[330,541,542,544,547,549,552,555],{"class":332,"line":403},[330,543,241],{"class":336},[330,545,546],{"class":340}," switch-to-branch",[330,548,535],{"class":340},[330,550,551],{"class":340}," frappe",[330,553,554],{"class":340}," erpnext",[330,556,449],{"class":340},[330,558,559,561,564,567,570],{"class":332,"line":421},[330,560,241],{"class":336},[330,562,563],{"class":340}," --site",[330,565,566],{"class":340}," dokompany.fr",[330,568,569],{"class":340}," install-app",[330,571,572],{"class":340}," payments\n",[330,574,575,577,579,581,583],{"class":332,"line":438},[330,576,241],{"class":336},[330,578,563],{"class":340},[330,580,566],{"class":340},[330,582,569],{"class":340},[330,584,585],{"class":340}," hrms\n",[330,587,589,591,594],{"class":332,"line":588},8,[330,590,241],{"class":336},[330,592,593],{"class":340}," update",[330,595,596],{"class":340}," --reset\n",[17,598,599],{},"Payments est obligatoire à partir de la v3. Au début de la migration, des messages d'erreur SQL sur des champs inconnus peuvent apparaître. Ils disparaissent quand les patchs qui créent ces champs ont tourné.",[33,601,603],{"id":602},"palier-v3-v4","Palier v3 → v4",[17,605,606,607,25],{},"Si le bench est déjà en Python 3.10, sautez la commande ",[80,608,609],{},"migrate-env",[321,611,613],{"className":323,"code":612,"language":325,"meta":326,"style":326},"bench migrate-env python3.10\nbench get-app https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fwebshop --branch v4   # seulement si vous utilisez l'e-commerce\nbench switch-to-branch v4 frappe erpnext hrms payments --upgrade\nbench --site dokompany.fr install-app webshop\nbench update --reset\n",[80,614,615,623,640,660,673],{"__ignoreMap":326},[330,616,617,619,621],{"class":332,"line":333},[330,618,241],{"class":336},[330,620,490],{"class":340},[330,622,435],{"class":340},[330,624,625,627,629,632,634,637],{"class":332,"line":363},[330,626,241],{"class":336},[330,628,499],{"class":340},[330,630,631],{"class":340}," https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fwebshop",[330,633,505],{"class":340},[330,635,636],{"class":340}," v4",[330,638,639],{"class":538},"   # seulement si vous utilisez l'e-commerce\n",[330,641,642,644,646,648,650,652,655,658],{"class":332,"line":381},[330,643,241],{"class":336},[330,645,546],{"class":340},[330,647,636],{"class":340},[330,649,551],{"class":340},[330,651,554],{"class":340},[330,653,654],{"class":340}," hrms",[330,656,657],{"class":340}," payments",[330,659,449],{"class":340},[330,661,662,664,666,668,670],{"class":332,"line":392},[330,663,241],{"class":336},[330,665,563],{"class":340},[330,667,566],{"class":340},[330,669,569],{"class":340},[330,671,672],{"class":340}," webshop\n",[330,674,675,677,679],{"class":332,"line":403},[330,676,241],{"class":336},[330,678,593],{"class":340},[330,680,596],{"class":340},[17,682,683,684,687],{},"À partir de la v4, les scripts serveur sont désactivés par défaut. Pour les activer, lancez ",[80,685,686],{},"bench set-config -g server_script_enabled 1",". Ce réglage existe seulement au niveau du bench.",[33,689,691],{"id":690},"exemple","Exemple",[17,693,694],{},"Un site Dokompany tourne en v2 sur Debian 10. L'administrateur monte une machine de migration, restaure la sauvegarde v2, puis passe en v3, en v4 et en v5. Il met le système à jour entre deux paliers. Il garde une sauvegarde à chaque palier. À la fin, il restaure la sauvegarde v4 sur une nouvelle machine Docker v5.",[33,696,698],{"id":697},"vérifier","Vérifier",[17,700,701],{},"À chaque palier :",[198,703,704,710,713],{},[201,705,706,709],{},[80,707,708],{},"bench --site dokompany.fr migrate"," se termine sans erreur.",[201,711,712],{},"Vous vous connectez et ouvrez une facture, un article et un client.",[201,714,715,718],{},[204,716,717],{},"Aide > À propos"," affiche la version attendue.",[33,720,722],{"id":721},"problèmes-fréquents","Problèmes fréquents",[38,724,725,735],{},[41,726,727],{},[44,728,729,732],{},[47,730,731],{},"Problème",[47,733,734],{},"Solution",[69,736,737,766,783,793,806],{},[44,738,739,745],{},[74,740,741,744],{},[80,742,743],{},"bench migrate-env"," échoue",[74,746,747,748,751,752,755,756,759,760,464,763,25],{},"Créez un nouveau bench : ",[80,749,750],{},"bench init ~\u002Fbench-nouveau --python python3.10",". Déplacez-y le dossier du site (",[80,753,754],{},"mv ~\u002Fbench-ancien\u002Fsites\u002Fdokompany.fr ~\u002Fbench-nouveau\u002Fsites\u002F","), ajoutez les applications listées dans ",[80,757,758],{},"~\u002Fbench-ancien\u002Fsites\u002Fapps.txt",", puis lancez ",[80,761,762],{},"bench setup production \u003Cutilisateur>",[80,764,765],{},"bench update",[44,767,768,777],{},[74,769,770,772,773,776],{},[80,771,241],{}," ne trouve plus le module ",[80,774,775],{},"frappe"," après une mise à jour du système",[74,778,779,780,782],{},"L'environnement du bench pointe vers un Python supprimé. Recréez-le avec ",[80,781,743],{}," ou créez un nouveau bench.",[44,784,785,790],{},[74,786,787,788],{},"La compilation d'une dépendance (par exemple numpy) échoue pendant ",[80,789,609],{},[74,791,792],{},"La version de Python est trop récente pour ce palier. Installez la version indiquée dans le tableau.",[44,794,795,800],{},[74,796,797],{},[80,798,799],{},"ModuleNotFoundError: No module named 'virtualenv'",[74,801,802,803,25],{},"Lancez ",[80,804,805],{},"pip install virtualenv",[44,807,808,813],{},[74,809,810,812],{},[80,811,306],{}," ne fonctionne plus",[74,814,815],{},"Le Python du système a été remplacé. Réinstallez-le, puis installez l'autre version à côté.",[17,817,818,819,824],{},"Pour toute question, ouvrez un sujet sur le ",[21,820,823],{"href":821,"rel":822},"https:\u002F\u002Fcommunity.dokos.io",[316],"forum de la communauté"," avec la version d'origine et le message complet.",[826,827,828],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":326,"searchDepth":333,"depth":363,"links":830},[831,832,833,836,837,838,839,840],{"id":35,"depth":363,"text":36},{"id":220,"depth":363,"text":221},{"id":248,"depth":363,"text":249,"children":834},[835],{"id":299,"depth":381,"text":300},{"id":477,"depth":363,"text":478},{"id":602,"depth":363,"text":603},{"id":690,"depth":363,"text":691},{"id":697,"depth":363,"text":698},{"id":721,"depth":363,"text":722},"Passez un ancien site Dokos v2 ou v3 en v5 par paliers successifs, en adaptant à chaque étape les versions de Python et de Node.js.","md",{"reviewed":844,"last_verified":845,"sources":846},true,"2026-11-04",[847,848,849,850,851,852,853,854],"apps\u002Ffrappe\u002Fsetup.py (v2.x.x)","apps\u002Ffrappe\u002Fpyproject.toml (v3.x.x, v4, develop)","apps\u002Ffrappe\u002Fpackage.json (v3.x.x, v4, develop)","apps\u002Ffrappe\u002F.gitlab-ci.yml (v2.0.0, v3.0.0)","tags Dokos v2.0.0, v3.0.0, v4.0.0, v5.0.0 (apps\u002Ffrappe, apps\u002Ferpnext)","https:\u002F\u002Fwiki.ubuntu.com\u002FReleases","forum:2030","anciennes pages migration-v3 et migration-v4 (fusionnées ici)","\u002Fnext\u002Fadministrer\u002Fexploitation\u002Fmigration-v2-v3-vers-v5",{"title":5,"description":841},"2.next\u002F5.administrer\u002F03.exploitation\u002F14.migration-v2-v3-vers-v5","qXoJjjkTDWlY7K62TSXjuuKi8-ykTB8FC4YPwENIRzQ",{},1793871717333]