[{"data":1,"prerenderedAt":642},["ShallowReactive",2],{"\u002Fv5\u002Fadministrer\u002Finstallation\u002Fplus\u002Fdocker-personnalise":3,"section:\u002Fv5\u002Fadministrer\u002Finstallation\u002Fplus\u002Fdocker-personnalise":641},{"id":4,"title":5,"body":6,"description":626,"extension":627,"meta":628,"navigation":629,"path":637,"seo":638,"stem":639,"__hash__":640},"docs\u002F1.v5\u002F5.administrer\u002F02.installation\u002F9.plus\u002F3.docker-personnalise.md","Docker personnalisé",{"type":7,"value":8,"toc":619},"minimark",[9,34,53,58,62,71,75,78,89,93,102,107,116,125,158,167,339,344,352,418,436,457,461,471,496,507,527,533,536,566,576,584,588,615],[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.",[117,118,119],"ol",{},[120,121,122,123,33],"li",{},"Étape 1 : clonez ",[86,124,19],{},[79,126,130],{"className":127,"code":128,"language":129,"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,131,132,148],{"__ignoreMap":88},[133,134,137,141,145],"span",{"class":135,"line":136},"line",1,[133,138,140],{"class":139},"sBMFI","git",[133,142,144],{"class":143},"sfazB"," clone",[133,146,147],{"class":143}," https:\u002F\u002Fgithub.com\u002Ffrappe\u002Ffrappe_docker\n",[133,149,151,155],{"class":135,"line":150},2,[133,152,154],{"class":153},"s2Zo4","cd",[133,156,157],{"class":143}," frappe_docker\n",[117,159,160],{"start":150},[120,161,162,163,166],{},"Étape 2 : créez le fichier ",[86,164,165],{},"apps.json"," à la racine du dépôt. Il liste les applications à installer dans l'image.",[79,168,172],{"className":169,"code":170,"language":171,"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,173,174,180,185,212,232,238,243,263,280,285,290,310,327,333],{"__ignoreMap":88},[133,175,176],{"class":135,"line":136},[133,177,179],{"class":178},"sMK4o","[\n",[133,181,182],{"class":135,"line":150},[133,183,184],{"class":178},"    {\n",[133,186,188,191,195,198,201,204,207,209],{"class":135,"line":187},3,[133,189,190],{"class":178},"        \"",[133,192,194],{"class":193},"spNyl","url",[133,196,197],{"class":178},"\"",[133,199,200],{"class":178},":",[133,202,203],{"class":178}," \"",[133,205,206],{"class":143},"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fpayments",[133,208,197],{"class":178},[133,210,211],{"class":178},",\n",[133,213,215,217,220,222,224,226,229],{"class":135,"line":214},4,[133,216,190],{"class":178},[133,218,219],{"class":193},"branch",[133,221,197],{"class":178},[133,223,200],{"class":178},[133,225,203],{"class":178},[133,227,228],{"class":143},"v5",[133,230,231],{"class":178},"\"\n",[133,233,235],{"class":135,"line":234},5,[133,236,237],{"class":178},"    },\n",[133,239,241],{"class":135,"line":240},6,[133,242,184],{"class":178},[133,244,246,248,250,252,254,256,259,261],{"class":135,"line":245},7,[133,247,190],{"class":178},[133,249,194],{"class":193},[133,251,197],{"class":178},[133,253,200],{"class":178},[133,255,203],{"class":178},[133,257,258],{"class":143},"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fhrms",[133,260,197],{"class":178},[133,262,211],{"class":178},[133,264,266,268,270,272,274,276,278],{"class":135,"line":265},8,[133,267,190],{"class":178},[133,269,219],{"class":193},[133,271,197],{"class":178},[133,273,200],{"class":178},[133,275,203],{"class":178},[133,277,228],{"class":143},[133,279,231],{"class":178},[133,281,283],{"class":135,"line":282},9,[133,284,237],{"class":178},[133,286,288],{"class":135,"line":287},10,[133,289,184],{"class":178},[133,291,293,295,297,299,301,303,306,308],{"class":135,"line":292},11,[133,294,190],{"class":178},[133,296,194],{"class":193},[133,298,197],{"class":178},[133,300,200],{"class":178},[133,302,203],{"class":178},[133,304,305],{"class":143},"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fdokos",[133,307,197],{"class":178},[133,309,211],{"class":178},[133,311,313,315,317,319,321,323,325],{"class":135,"line":312},12,[133,314,190],{"class":178},[133,316,219],{"class":193},[133,318,197],{"class":178},[133,320,200],{"class":178},[133,322,203],{"class":178},[133,324,228],{"class":143},[133,326,231],{"class":178},[133,328,330],{"class":135,"line":329},13,[133,331,332],{"class":178},"    }\n",[133,334,336],{"class":135,"line":335},14,[133,337,338],{"class":178},"]\n",[35,340,341],{"color":37,"icon":38},[13,342,343],{},"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.",[117,345,346],{"start":187},[120,347,348,349,33],{},"Étape 3 : construisez l'image à partir de ",[86,350,351],{},"images\u002Fcustom\u002FContainerfile",[79,353,355],{"className":127,"code":354,"language":129,"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,356,357,368,375,382,389,396,403,410],{"__ignoreMap":88},[133,358,359,361,364],{"class":135,"line":136},[133,360,73],{"class":139},[133,362,363],{"class":143}," build",[133,365,367],{"class":366},"sTEyZ"," \\\n",[133,369,370,373],{"class":135,"line":150},[133,371,372],{"class":143},"  --build-arg=FRAPPE_PATH=https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fdodock",[133,374,367],{"class":366},[133,376,377,380],{"class":135,"line":187},[133,378,379],{"class":143},"  --build-arg=FRAPPE_BRANCH=v5",[133,381,367],{"class":366},[133,383,384,387],{"class":135,"line":214},[133,385,386],{"class":143},"  --build-arg=PYTHON_VERSION=3.14",[133,388,367],{"class":366},[133,390,391,394],{"class":135,"line":234},[133,392,393],{"class":143},"  --build-arg=NODE_VERSION=24",[133,395,367],{"class":366},[133,397,398,401],{"class":135,"line":240},[133,399,400],{"class":143},"  --secret=id=apps_json,src=apps.json",[133,402,367],{"class":366},[133,404,405,408],{"class":135,"line":245},[133,406,407],{"class":143},"  --tag=custom-dokos:v5",[133,409,367],{"class":366},[133,411,412,415],{"class":135,"line":265},[133,413,414],{"class":143},"  --file=images\u002Fcustom\u002FContainerfile",[133,416,417],{"class":143}," .\n",[13,419,420,421,423,424,427,428,431,432,435],{},"Le fichier ",[86,422,165],{}," passe par ",[86,425,426],{},"--secret"," et non par ",[86,429,430],{},"--build-arg"," : Frappe Docker ne lit plus la variable ",[86,433,434],{},"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,437,438],{"color":37,"icon":38},[13,439,440,441,444,445,448,449,452,453,456],{},"Pour la variable ",[86,442,443],{},"FRAPPE_BRANCH",", indiquez la version de Dodock que vous souhaitez installer. Dodock v5 demande Python 3.14 (",[86,446,447],{},"PYTHON_VERSION",") et Node.js 24 ou ultérieur (",[86,450,451],{},"NODE_VERSION","). Ce sont aussi les valeurs par défaut du ",[86,454,455],{},"Containerfile"," de Frappe Docker : vous pouvez omettre ces deux options, mais les écrire fixe les versions si les valeurs par défaut changent.",[59,458,460],{"id":459},"création-dun-site-dokos","Création d'un site Dokos",[13,462,420,463,466,467,470],{},[86,464,465],{},"pwd.yml"," de Frappe Docker utilise les images d'ERPNext (",[86,468,469],{},"frappe\u002Ferpnext:\u003Cversion>","). Avant de créer votre site Dokos, remplacez-les par le tag de votre image :",[79,472,474],{"className":127,"code":473,"language":129,"meta":88,"style":88},"sed -i 's#image: frappe\u002Ferpnext:.*#image: custom-dokos:v5#' pwd.yml\n",[86,475,476],{"__ignoreMap":88},[133,477,478,481,484,487,490,493],{"class":135,"line":136},[133,479,480],{"class":139},"sed",[133,482,483],{"class":143}," -i",[133,485,486],{"class":178}," '",[133,488,489],{"class":143},"s#image: frappe\u002Ferpnext:.*#image: custom-dokos:v5#",[133,491,492],{"class":178},"'",[133,494,495],{"class":143}," pwd.yml\n",[13,497,498,499,502,503,506],{},"Le service ",[86,500,501],{},"create-site"," installe ERPNext sur le site. Remplacez ",[86,504,505],{},"--install-app erpnext"," par les applications de votre image. Payments est installé avec Dokos, dont il est une dépendance :",[79,508,510],{"className":127,"code":509,"language":129,"meta":88,"style":88},"sed -i 's\u002F--install-app erpnext\u002F--install-app dokos --install-app hrms\u002F' pwd.yml\n",[86,511,512],{"__ignoreMap":88},[133,513,514,516,518,520,523,525],{"class":135,"line":136},[133,515,480],{"class":139},[133,517,483],{"class":143},[133,519,486],{"class":178},[133,521,522],{"class":143},"s\u002F--install-app erpnext\u002F--install-app dokos --install-app hrms\u002F",[133,524,492],{"class":178},[133,526,495],{"class":143},[13,528,529,530,33],{},"Vérifiez le résultat avec ",[86,531,532],{},"grep -n \"image:\\|install-app\" pwd.yml",[13,534,535],{},"Vous pouvez ensuite lancer votre site Dokos, en utilisant la commande :",[79,537,539],{"className":127,"code":538,"language":129,"meta":88,"style":88},"docker compose -p dokos -f pwd.yml up -d\n",[86,540,541],{"__ignoreMap":88},[133,542,543,545,548,551,554,557,560,563],{"class":135,"line":136},[133,544,73],{"class":139},[133,546,547],{"class":143}," compose",[133,549,550],{"class":143}," -p",[133,552,553],{"class":143}," dokos",[133,555,556],{"class":143}," -f",[133,558,559],{"class":143}," pwd.yml",[133,561,562],{"class":143}," up",[133,564,565],{"class":143}," -d\n",[13,567,568,569,572,573,33],{},"L'installation du site peut prendre quelques minutes, vous pouvez suivre son avancement avec la commande ",[86,570,571],{},"docker logs dokos-create-site-1 -f",", ou simplement attendre avec ",[86,574,575],{},"docker wait dokos-create-site-1",[13,577,578,579,583],{},"Ensuite, vous pouvez suivre les instructions de l'",[17,580,582],{"href":581},"\u002Fv5\u002Fadministrer\u002Finstallation\u002Fdocker","installation Docker"," de Dokos.",[59,585,587],{"id":586},"anciennes-méthodes-et-liens-utiles","Anciennes méthodes et liens utiles",[589,590,591,599,607],"ul",{},[120,592,593,598],{},[17,594,597],{"href":595,"rel":596},"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)",[120,600,601,606],{},[17,602,605],{"href":603,"rel":604},"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fdokidocker",[21],"GitLab --- Dokidocker"," (par Dokos)",[120,608,609,614],{},[17,610,613],{"href":611,"rel":612},"https:\u002F\u002Fgithub.com\u002FMonogramm\u002Fdocker-dokos-ext",[21],"GitHub --- Monogramm\u002Fdocker-dokos-ext"," (par Christophe et Mathieu)",[616,617,618],"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":136,"depth":150,"links":620},[621,622,623,624,625],{"id":61,"depth":150,"text":22},{"id":73,"depth":150,"text":74},{"id":91,"depth":150,"text":92},{"id":459,"depth":150,"text":460},{"id":586,"depth":150,"text":587},"Déployer Dodock et Dokos dans des conteneurs avec le projet communautaire Frappe Docker, pour une configuration avancée.","md",{"reviewed":629,"last_verified":630,"sources":631},true,"2026-11-04",[632,633,634,635,636],"frappe@v5-dev:pyproject.toml","frappe@v5-dev: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","\u002Fv5\u002Fadministrer\u002Finstallation\u002Fplus\u002Fdocker-personnalise",{"title":5,"description":626},"1.v5\u002F5.administrer\u002F02.installation\u002F9.plus\u002F3.docker-personnalise","dQlfyyyABJ5i-7460YmgEaqY9Ce2Gz_GR-V6qZYr98k",{},1793871948051]