[{"data":1,"prerenderedAt":665},["ShallowReactive",2],{"\u002Fnext\u002Fadministrer\u002Finstallation\u002Fplus\u002Fdocker-personnalise":3,"section:\u002Fnext\u002Fadministrer\u002Finstallation\u002Fplus\u002Fdocker-personnalise":664},{"id":4,"title":5,"body":6,"description":649,"extension":650,"meta":651,"navigation":652,"path":660,"seo":661,"stem":662,"__hash__":663},"docs\u002F2.next\u002F5.administrer\u002F02.installation\u002F9.plus\u002F3.docker-personnalise.md","Docker personnalisé",{"type":7,"value":8,"toc":642},"minimark",[9,34,53,58,62,71,75,78,89,93,102,107,116,142,151,184,192,363,368,376,442,460,480,484,494,519,530,550,556,559,589,599,607,611,638],[10,11,12],"blockquote",{},[13,14,15,16,23,24,27,28,33],"p",{},"Ce tutoriel utilise l'outil ",[17,18,22],"a",{"href":19,"rel":20},"https:\u002F\u002Fgithub.com\u002Ffrappe\u002Ffrappe_docker",[21],"nofollow","Frappe Docker"," pour déployer Dokos sous Docker.",[25,26],"br",{},"\nPour bien comprendre Frappe Docker, veuillez vous référer à sa ",[17,29,32],{"href":30,"rel":31},"https:\u002F\u002Fgithub.com\u002Ffrappe\u002Ffrappe_docker\u002Ftree\u002Fmain\u002Fdocs",[21],"documentation",".",[35,36,39],"callout",{"color":37,"icon":38},"amber","i-heroicons-exclamation-triangle",[13,40,41,42,47,48,33],{},"Ce tutoriel est à destination de la communauté Dokos et dépend du projet Frappe Docker, il peut donc ne pas être à jour.\nSi c'est le cas, ouvrez un ticket sur ",[17,43,46],{"href":44,"rel":45},"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fdocumentation\u002F-\u002Fissues",[21],"GitLab"," : il faut un compte GitLab. Vous pouvez aussi le signaler sur le ",[17,49,52],{"href":50,"rel":51},"https:\u002F\u002Fcommunity.dokos.io",[21],"forum",[54,55,57],"h1",{"id":56},"configuration-avancée-avec-docker","Configuration avancée avec Docker",[59,60,22],"h2",{"id":61},"frappe-docker",[13,63,64,67,68,70],{},[17,65,22],{"href":19,"rel":66},[21]," est un projet communautaire permettant d'installer Frappe et ERPNext dans des conteneurs Docker.",[25,69],{},"\nDodock étant basé sur le framework Frappe, il est possible d'utiliser ce projet en changeant quelques éléments afin de lancer Dodock et Dokos dans des conteneurs Docker.",[59,72,74],{"id":73},"docker","Docker",[13,76,77],{},"Si Docker et Docker Compose ne sont pas installés sur votre serveur, vous pouvez utiliser la commande suivante ou vous reporter à la documentation de Docker.",[79,80,85],"pre",{"className":81,"code":83,"language":84},[82],"language-text","# Install docker and docker-compose-plugin\ncurl -fsSL https:\u002F\u002Fget.docker.com | bash\n","text",[86,87,83],"code",{"__ignoreMap":88},"",[59,90,92],{"id":91},"création-des-images","Création des images",[13,94,95,96,98,99,101],{},"Afin de pouvoir lancer un site Dokos dans un conteneur Docker, il faut commencer par construire les images qui seront utilisées.",[25,97],{},"\nLes modifications de configuration proposées ci-dessous permettent de générer des images incluant Dodock, Payments, Dokos et HRMS.",[25,100],{},"\nVous pouvez modifier la configuration pour exclure HRMS ou Payments + Dokos.",[10,103,104],{},[13,105,106],{},"Rappel : Payments est une application nécessaire au fonctionnement de Dokos. Vous ne pouvez pas l'exclure sans exclure Dokos.",[13,108,109,110,115],{},"La construction utilise les ",[17,111,114],{"href":112,"rel":113},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fsecrets\u002F",[21],"secrets de build"," de Docker. Il faut Docker avec BuildKit (actif par défaut dans les versions récentes) ou Podman avec Buildah.",[35,117,120],{"color":118,"icon":119},"blue","i-mdi-information",[13,121,122,123,126,127,130,131,134,135,138,139,141],{},"Cette page utilise la v5, la version stable. Pour tester la version en développement, remplacez ",[86,124,125],{},"v5"," par ",[86,128,129],{},"develop"," dans ",[86,132,133],{},"apps.json"," et dans ",[86,136,137],{},"FRAPPE_BRANCH",". N'utilisez pas ",[86,140,129],{}," en production.",[143,144,145],"ol",{},[146,147,148,149,33],"li",{},"Étape 1 : clonez ",[86,150,19],{},[79,152,156],{"className":153,"code":154,"language":155,"meta":88,"style":88},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002Ffrappe\u002Ffrappe_docker\ncd frappe_docker\n","bash",[86,157,158,174],{"__ignoreMap":88},[159,160,163,167,171],"span",{"class":161,"line":162},"line",1,[159,164,166],{"class":165},"sBMFI","git",[159,168,170],{"class":169},"sfazB"," clone",[159,172,173],{"class":169}," https:\u002F\u002Fgithub.com\u002Ffrappe\u002Ffrappe_docker\n",[159,175,177,181],{"class":161,"line":176},2,[159,178,180],{"class":179},"s2Zo4","cd",[159,182,183],{"class":169}," frappe_docker\n",[143,185,186],{"start":176},[146,187,188,189,191],{},"Étape 2 : créez le fichier ",[86,190,133],{}," à la racine du dépôt. Il liste les applications à installer dans l'image.",[79,193,197],{"className":194,"code":195,"language":196,"meta":88,"style":88},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[\n    {\n        \"url\": \"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fpayments\",\n        \"branch\": \"v5\"\n    },\n    {\n        \"url\": \"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fhrms\",\n        \"branch\": \"v5\"\n    },\n    {\n        \"url\": \"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fdokos\",\n        \"branch\": \"v5\"\n    }\n]\n","json",[86,198,199,205,210,237,256,262,267,287,304,309,314,334,351,357],{"__ignoreMap":88},[159,200,201],{"class":161,"line":162},[159,202,204],{"class":203},"sMK4o","[\n",[159,206,207],{"class":161,"line":176},[159,208,209],{"class":203},"    {\n",[159,211,213,216,220,223,226,229,232,234],{"class":161,"line":212},3,[159,214,215],{"class":203},"        \"",[159,217,219],{"class":218},"spNyl","url",[159,221,222],{"class":203},"\"",[159,224,225],{"class":203},":",[159,227,228],{"class":203}," \"",[159,230,231],{"class":169},"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fpayments",[159,233,222],{"class":203},[159,235,236],{"class":203},",\n",[159,238,240,242,245,247,249,251,253],{"class":161,"line":239},4,[159,241,215],{"class":203},[159,243,244],{"class":218},"branch",[159,246,222],{"class":203},[159,248,225],{"class":203},[159,250,228],{"class":203},[159,252,125],{"class":169},[159,254,255],{"class":203},"\"\n",[159,257,259],{"class":161,"line":258},5,[159,260,261],{"class":203},"    },\n",[159,263,265],{"class":161,"line":264},6,[159,266,209],{"class":203},[159,268,270,272,274,276,278,280,283,285],{"class":161,"line":269},7,[159,271,215],{"class":203},[159,273,219],{"class":218},[159,275,222],{"class":203},[159,277,225],{"class":203},[159,279,228],{"class":203},[159,281,282],{"class":169},"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fhrms",[159,284,222],{"class":203},[159,286,236],{"class":203},[159,288,290,292,294,296,298,300,302],{"class":161,"line":289},8,[159,291,215],{"class":203},[159,293,244],{"class":218},[159,295,222],{"class":203},[159,297,225],{"class":203},[159,299,228],{"class":203},[159,301,125],{"class":169},[159,303,255],{"class":203},[159,305,307],{"class":161,"line":306},9,[159,308,261],{"class":203},[159,310,312],{"class":161,"line":311},10,[159,313,209],{"class":203},[159,315,317,319,321,323,325,327,330,332],{"class":161,"line":316},11,[159,318,215],{"class":203},[159,320,219],{"class":218},[159,322,222],{"class":203},[159,324,225],{"class":203},[159,326,228],{"class":203},[159,328,329],{"class":169},"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fdokos",[159,331,222],{"class":203},[159,333,236],{"class":203},[159,335,337,339,341,343,345,347,349],{"class":161,"line":336},12,[159,338,215],{"class":203},[159,340,244],{"class":218},[159,342,222],{"class":203},[159,344,225],{"class":203},[159,346,228],{"class":203},[159,348,125],{"class":169},[159,350,255],{"class":203},[159,352,354],{"class":161,"line":353},13,[159,355,356],{"class":203},"    }\n",[159,358,360],{"class":161,"line":359},14,[159,361,362],{"class":203},"]\n",[35,364,365],{"color":37,"icon":38},[13,366,367],{},"Pour chaque application, indiquez la branche ou le tag de la version que vous voulez installer.\nLes dernières versions sont disponibles dans les dépôts GitLab de chaque application.",[143,369,370],{"start":212},[146,371,372,373,33],{},"Étape 3 : construisez l'image à partir de ",[86,374,375],{},"images\u002Fcustom\u002FContainerfile",[79,377,379],{"className":153,"code":378,"language":155,"meta":88,"style":88},"docker build \\\n  --build-arg=FRAPPE_PATH=https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fdodock \\\n  --build-arg=FRAPPE_BRANCH=v5 \\\n  --build-arg=PYTHON_VERSION=3.14 \\\n  --build-arg=NODE_VERSION=24 \\\n  --secret=id=apps_json,src=apps.json \\\n  --tag=custom-dokos:v5 \\\n  --file=images\u002Fcustom\u002FContainerfile .\n",[86,380,381,392,399,406,413,420,427,434],{"__ignoreMap":88},[159,382,383,385,388],{"class":161,"line":162},[159,384,73],{"class":165},[159,386,387],{"class":169}," build",[159,389,391],{"class":390},"sTEyZ"," \\\n",[159,393,394,397],{"class":161,"line":176},[159,395,396],{"class":169},"  --build-arg=FRAPPE_PATH=https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fdodock",[159,398,391],{"class":390},[159,400,401,404],{"class":161,"line":212},[159,402,403],{"class":169},"  --build-arg=FRAPPE_BRANCH=v5",[159,405,391],{"class":390},[159,407,408,411],{"class":161,"line":239},[159,409,410],{"class":169},"  --build-arg=PYTHON_VERSION=3.14",[159,412,391],{"class":390},[159,414,415,418],{"class":161,"line":258},[159,416,417],{"class":169},"  --build-arg=NODE_VERSION=24",[159,419,391],{"class":390},[159,421,422,425],{"class":161,"line":264},[159,423,424],{"class":169},"  --secret=id=apps_json,src=apps.json",[159,426,391],{"class":390},[159,428,429,432],{"class":161,"line":269},[159,430,431],{"class":169},"  --tag=custom-dokos:v5",[159,433,391],{"class":390},[159,435,436,439],{"class":161,"line":289},[159,437,438],{"class":169},"  --file=images\u002Fcustom\u002FContainerfile",[159,440,441],{"class":169}," .\n",[13,443,444,445,447,448,451,452,455,456,459],{},"Le fichier ",[86,446,133],{}," passe par ",[86,449,450],{},"--secret"," et non par ",[86,453,454],{},"--build-arg"," : Frappe Docker ne lit plus la variable ",[86,457,458],{},"APPS_JSON_BASE64",". Un secret n'est pas gardé dans l'historique de l'image, ce qui protège un éventuel jeton d'accès à un dépôt privé.",[35,461,462],{"color":37,"icon":38},[13,463,464,465,467,468,471,472,475,476,479],{},"Pour la variable ",[86,466,137],{},", indiquez la version de Dodock que vous souhaitez installer. Dodock v5 demande Python 3.14 (",[86,469,470],{},"PYTHON_VERSION",") et Node.js 24 ou ultérieur (",[86,473,474],{},"NODE_VERSION","). Ce sont aussi les valeurs par défaut du ",[86,477,478],{},"Containerfile"," de Frappe Docker : vous pouvez omettre ces deux options, mais les écrire fixe les versions si les valeurs par défaut changent.",[59,481,483],{"id":482},"création-dun-site-dokos","Création d'un site Dokos",[13,485,444,486,489,490,493],{},[86,487,488],{},"pwd.yml"," de Frappe Docker utilise les images d'ERPNext (",[86,491,492],{},"frappe\u002Ferpnext:\u003Cversion>","). Avant de créer votre site Dokos, remplacez-les par le tag de votre image :",[79,495,497],{"className":153,"code":496,"language":155,"meta":88,"style":88},"sed -i 's#image: frappe\u002Ferpnext:.*#image: custom-dokos:v5#' pwd.yml\n",[86,498,499],{"__ignoreMap":88},[159,500,501,504,507,510,513,516],{"class":161,"line":162},[159,502,503],{"class":165},"sed",[159,505,506],{"class":169}," -i",[159,508,509],{"class":203}," '",[159,511,512],{"class":169},"s#image: frappe\u002Ferpnext:.*#image: custom-dokos:v5#",[159,514,515],{"class":203},"'",[159,517,518],{"class":169}," pwd.yml\n",[13,520,521,522,525,526,529],{},"Le service ",[86,523,524],{},"create-site"," installe ERPNext sur le site. Remplacez ",[86,527,528],{},"--install-app erpnext"," par les applications de votre image. Payments est installé avec Dokos, dont il est une dépendance :",[79,531,533],{"className":153,"code":532,"language":155,"meta":88,"style":88},"sed -i 's\u002F--install-app erpnext\u002F--install-app dokos --install-app hrms\u002F' pwd.yml\n",[86,534,535],{"__ignoreMap":88},[159,536,537,539,541,543,546,548],{"class":161,"line":162},[159,538,503],{"class":165},[159,540,506],{"class":169},[159,542,509],{"class":203},[159,544,545],{"class":169},"s\u002F--install-app erpnext\u002F--install-app dokos --install-app hrms\u002F",[159,547,515],{"class":203},[159,549,518],{"class":169},[13,551,552,553,33],{},"Vérifiez le résultat avec ",[86,554,555],{},"grep -n \"image:\\|install-app\" pwd.yml",[13,557,558],{},"Vous pouvez ensuite lancer votre site Dokos, en utilisant la commande :",[79,560,562],{"className":153,"code":561,"language":155,"meta":88,"style":88},"docker compose -p dokos -f pwd.yml up -d\n",[86,563,564],{"__ignoreMap":88},[159,565,566,568,571,574,577,580,583,586],{"class":161,"line":162},[159,567,73],{"class":165},[159,569,570],{"class":169}," compose",[159,572,573],{"class":169}," -p",[159,575,576],{"class":169}," dokos",[159,578,579],{"class":169}," -f",[159,581,582],{"class":169}," pwd.yml",[159,584,585],{"class":169}," up",[159,587,588],{"class":169}," -d\n",[13,590,591,592,595,596,33],{},"L'installation du site peut prendre quelques minutes, vous pouvez suivre son avancement avec la commande ",[86,593,594],{},"docker logs dokos-create-site-1 -f",", ou simplement attendre avec ",[86,597,598],{},"docker wait dokos-create-site-1",[13,600,601,602,606],{},"Ensuite, vous pouvez suivre les instructions de l'",[17,603,605],{"href":604},"\u002Fnext\u002Fadministrer\u002Finstallation\u002Fdocker","installation Docker"," de Dokos.",[59,608,610],{"id":609},"anciennes-méthodes-et-liens-utiles","Anciennes méthodes et liens utiles",[612,613,614,622,630],"ul",{},[146,615,616,621],{},[17,617,620],{"href":618,"rel":619},"https:\u002F\u002Fcommunity.dokos.io\u002Ft\u002Ffichier-gitlab-ci-yml-pour-generation-automatique-dimages-docker-de-dokos\u002F629",[21],"Communauté Dokos --- Fichier .gitlab-ci.yml pour génération automatique d'images Docker de Dokos"," (par Adrien)",[146,623,624,629],{},[17,625,628],{"href":626,"rel":627},"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fdokidocker",[21],"GitLab --- Dokidocker"," (par Dokos)",[146,631,632,637],{},[17,633,636],{"href":634,"rel":635},"https:\u002F\u002Fgithub.com\u002FMonogramm\u002Fdocker-dokos-ext",[21],"GitHub --- Monogramm\u002Fdocker-dokos-ext"," (par Christophe et Mathieu)",[639,640,641],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":88,"searchDepth":162,"depth":176,"links":643},[644,645,646,647,648],{"id":61,"depth":176,"text":22},{"id":73,"depth":176,"text":74},{"id":91,"depth":176,"text":92},{"id":482,"depth":176,"text":483},{"id":609,"depth":176,"text":610},"Déployer Dodock et Dokos dans des conteneurs avec le projet communautaire Frappe Docker, pour une configuration avancée.","md",{"reviewed":652,"last_verified":653,"sources":654},true,"2026-11-04",[655,656,657,658,659],"frappe@develop:pyproject.toml","frappe@develop:package.json","https:\u002F\u002Fgithub.com\u002Ffrappe\u002Ffrappe_docker\u002Fblob\u002Fmain\u002Fimages\u002Fcustom\u002FContainerfile","https:\u002F\u002Fgithub.com\u002Ffrappe\u002Ffrappe_docker\u002Fblob\u002Fmain\u002Fdocs\u002F02-setup\u002F02-build-setup.md","https:\u002F\u002Fgithub.com\u002Ffrappe\u002Ffrappe_docker\u002Fblob\u002Fmain\u002Fpwd.yml","\u002Fnext\u002Fadministrer\u002Finstallation\u002Fplus\u002Fdocker-personnalise",{"title":5,"description":649},"2.next\u002F5.administrer\u002F02.installation\u002F9.plus\u002F3.docker-personnalise","jdm9usaM8zLfrur7Nbkj_Aip8iDF6lwwLXfUSe1LtqA",{},1793871719907]