{"id":341765,"date":"2022-05-05T09:50:03","date_gmt":"2022-05-05T07:50:03","guid":{"rendered":"https:\/\/axelor.com\/?page_id=341765"},"modified":"2026-07-20T15:49:52","modified_gmt":"2026-07-20T13:49:52","slug":"guide-dinstallation","status":"publish","type":"page","link":"https:\/\/axelor.com\/fr\/guide-dinstallation\/","title":{"rendered":"Guide d&#8217;installation"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.23.1&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;0px||0px||true|false&#8221; global_colors_info=&#8221;{}&#8221; locked=&#8221;off&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_row _builder_version=&#8221;4.23.1&#8243; _module_preset=&#8221;default&#8221; width=&#8221;100%&#8221; max_width=&#8221;100%&#8221; custom_padding=&#8221;0px||0px||true|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.23.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_text _builder_version=&#8221;4.23.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<!DOCTYPE html>\r\n<html lang=\"fr\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>Guide d'installation \u2014 Axelor Open Suite 9<\/title>\r\n<meta name=\"description\" content=\"Guide d'installation \u00e0 jour d'Axelor Open Suite 9 (AOP 8.2) : Java 21, Tomcat 10.1, PostgreSQL 16, Caddy. Installation Ubuntu, Docker, configuration et v\u00e9rification.\">\r\n<script>document.documentElement.classList.add('js');<\/script>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@300;400;500;600;700&family=Chakra+Petch:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&display=swap\" rel=\"stylesheet\">\r\n<style>\r\n  *{margin:0;padding:0;box-sizing:border-box;}\r\n  :root{\r\n    --navy:#010165;--navy-dark:#0D021E;--navy-2:#07013F;\r\n    --ocean:#3ECF8E;--ocean-dark:#2BB57A;--ocean-soft:rgba(62,207,142,0.12);\r\n    --indigo:#4B3FD4;--magnolia:#F5F5FF;--magnolia-2:#FAFAFF;--wheelwright:#5D6B90;--white:#FFFFFF;\r\n    --line:rgba(1,1,101,0.10);--line-2:rgba(1,1,101,0.06);\r\n    --code-bg:#0D021E;--code-line:rgba(255,255,255,0.08);\r\n    --shadow-sm:0 1px 3px rgba(1,1,101,0.06);\r\n    --shadow-md:0 4px 16px rgba(1,1,101,0.08),0 1px 4px rgba(1,1,101,0.04);\r\n    --shadow-lg:0 24px 60px rgba(13,2,30,0.15);\r\n  }\r\n  body{font-family:'Poppins',-apple-system,sans-serif;background:var(--magnolia-2);color:var(--wheelwright);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;}\r\n  p{font-weight:300;line-height:1.6;}\r\n  h1,h2,h3,h4{font-family:'Poppins',sans-serif;font-weight:600;color:var(--navy);letter-spacing:-0.02em;line-height:1.2;margin-bottom:0px;padding-bottom:0px;}\r\n  a{text-decoration:none;color:inherit;}\r\n  code,pre{font-family:'JetBrains Mono',monospace;}\r\n  .eyebrow-pill{display:inline-flex;align-items:center;gap:8px;padding:7px 17px;border-radius:100px;background:var(--ocean-soft);border:1px solid rgba(62,207,142,0.32);font-family:'Chakra Petch',monospace;font-weight:500;font-size:14px;letter-spacing:0.06em;color:var(--ocean-dark);}\r\n  .js .reveal{opacity:0;transform:translateY(18px);transition:opacity .55s ease,transform .55s ease;}\r\n  .js .reveal.in{opacity:1;transform:translateY(0);}\r\n\r\n  \/* ===== HERO ===== *\/\r\n  .gd-hero{position:relative;overflow:hidden;background:linear-gradient(168deg,var(--navy-dark) 0%,var(--navy) 60%,var(--navy-2) 100%);padding:80px 28px 70px;text-align:center;}\r\n  .gd-hero::before{content:\"\";position:absolute;top:-10%;right:-5%;width:560px;height:560px;background:radial-gradient(circle,rgba(62,207,142,0.13),transparent 60%);pointer-events:none;}\r\n  .gd-hero::after{content:\"\";position:absolute;bottom:-25%;left:-10%;width:460px;height:460px;background:radial-gradient(circle,rgba(75,63,212,0.16),transparent 60%);pointer-events:none;}\r\n  .gd-hero-inner{position:relative;z-index:2;max-width:740px;margin:0 auto;}\r\n  .gd-hero .eyebrow-pill{background:rgba(62,207,142,0.1);border-color:rgba(62,207,142,0.32);color:var(--ocean);margin-bottom:18px;}\r\n  .gd-hero h1{font-size:clamp(32px,4.6vw,48px);color:#fff;margin-bottom:16px;}\r\n  .gd-hero p{font-size:17px;color:rgba(255,255,255,0.66);font-weight:300;line-height:1.5;margin-bottom:28px;}\r\n  .gd-hero-badge{display:inline-flex;align-items:center;gap:8px;background:rgba(62,207,142,0.14);color:var(--ocean);font-family:'Chakra Petch',monospace;font-weight:600;font-size:13px;letter-spacing:0.04em;padding:6px 14px;border-radius:999px;margin-bottom:18px;}\r\n  .gd-hero-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;}\r\n  .btn{display:inline-flex;align-items:center;gap:9px;padding:13px 24px;border-radius:12px;font-family:'Chakra Petch',monospace;font-weight:500;font-size:14.5px;transition:transform .2s,box-shadow .2s,background .2s,border-color .2s;}\r\n  .btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.2;}\r\n  .btn-primary{background:linear-gradient(135deg,var(--ocean),var(--ocean-dark));color:var(--navy);box-shadow:0 8px 22px rgba(62,207,142,0.3);}\r\n  .btn-primary:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(62,207,142,0.42);}\r\n  .btn-ghost{background:rgba(255,255,255,0.06);color:#fff;border:1px solid rgba(255,255,255,0.18);}\r\n  .btn-ghost:hover{background:rgba(255,255,255,0.12);border-color:rgba(255,255,255,0.3);}\r\n\r\n  \/* ===== LAYOUT GUIDE ===== *\/\r\n  .gd-wrap{max-width:1200px;margin:0 auto;padding:60px 28px 80px;display:grid;grid-template-columns:260px 1fr;gap:48px;align-items:start;}\r\n\r\n  \/* sommaire lat\u00e9ral sticky *\/\r\n  .gd-toc{position:sticky;top:24px;}\r\n  .gd-toc-title{font-family:'Chakra Petch',monospace;font-size:12px;font-weight:600;letter-spacing:0.08em;text-transform:uppercase;color:var(--wheelwright);margin-bottom:16px;padding-left:14px;}\r\n  .gd-toc-list{display:flex;flex-direction:column;gap:2px;list-style-type: none !important;padding: 0 0 23px 0px !important;}\r\n  .gd-toc-link{display:flex;align-items:center;gap:11px;padding:10px 14px;border-radius:10px;font-size:14px;font-weight:400;color:var(--wheelwright);transition:all .18s;border-left:2px solid transparent;}\r\n  .gd-toc-link:hover{background:var(--magnolia);color:var(--navy);}\r\n  .gd-toc-link.active{background:var(--ocean-soft);color:var(--navy);font-weight:500;border-left-color:var(--ocean);}\r\n  .gd-toc-num{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ocean-dark);font-weight:500;flex-shrink:0;}\r\n\r\n  \/* contenu *\/\r\n  .gd-content{min-width:0;}\r\n  .gd-intro{background:var(--white);border:1px solid var(--line);border-radius:16px;padding:28px 30px;box-shadow:var(--shadow-sm);margin-bottom:40px;}\r\n  .gd-intro p{font-size:15px;color:var(--wheelwright);font-weight:300;line-height:1.6;margin-bottom:12px;}\r\n  .gd-intro p:last-child{margin-bottom:0;}\r\n  .gd-intro strong{color:var(--navy);font-weight:500;}\r\n  .gd-callout{display:flex;gap:12px;align-items:flex-start;background:var(--ocean-soft);border:1px solid rgba(62,207,142,0.25);border-radius:12px;padding:16px 18px;margin:20px 0;}\r\n  .gd-callout svg{width:20px;height:20px;stroke:var(--ocean-dark);fill:none;stroke-width:2;flex-shrink:0;margin-top:1px;}\r\n  .gd-callout p{font-size:14px;color:var(--navy);font-weight:400;margin:0;line-height:1.5;}\r\n\r\n  \/* \u00e9tape *\/\r\n  .gd-step{margin-bottom:56px;scroll-margin-top:24px;}\r\n  .gd-step-head{display:flex;align-items:center;gap:16px;margin-bottom:20px;}\r\n  .gd-step-num{width:46px;height:46px;border-radius:13px;background:var(--navy);color:var(--ocean);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:600;font-size:18px;flex-shrink:0;}\r\n  .gd-step-head h2{font-size:25px;}\r\n  .gd-sub{font-size:18px;font-weight:600;color:var(--navy);margin:28px 0 10px;font-family:'Poppins',sans-serif;}\r\n  .gd-os-tag{display:inline-flex;align-items:center;gap:7px;font-family:'Chakra Petch',monospace;font-size:12px;font-weight:500;color:var(--wheelwright);background:var(--magnolia);border:1px solid var(--line);border-radius:8px;padding:4px 11px;margin:14px 0 8px;}\r\n  .gd-os-tag svg{width:13px;height:13px;stroke:var(--ocean-dark);fill:none;stroke-width:2;}\r\n  .gd-content > .gd-step p, .gd-step p{font-size:15px;color:var(--wheelwright);font-weight:300;line-height:1.6;margin:10px 0;}\r\n  .gd-step p strong{color:var(--navy);font-weight:500;}\r\n  .gd-step a{color:var(--ocean-dark);font-weight:500;}\r\n  .gd-step p code, .gd-step li code, .gd-intro code{background:var(--magnolia);padding:2px 7px;border-radius:5px;font-size:12px;color:var(--navy);}\r\n  .gd-note{font-size:13.5px;color:#9AA3BC;font-weight:300;margin:10px 0;}\r\n  .gd-file{display:flex;align-items:center;gap:7px;font-family:'Chakra Petch',monospace;font-size:12px;letter-spacing:0.04em;color:#9AA3BC;margin:16px 0 -6px;}\r\n  .gd-file svg{width:14px;height:14px;stroke:var(--ocean-dark);fill:none;stroke-width:2;flex-shrink:0;}\r\n  .gd-tag-reco{display:inline-flex;align-items:center;font-family:'Chakra Petch',monospace;font-weight:600;font-size:11px;letter-spacing:0.06em;text-transform:uppercase;color:var(--navy);background:var(--ocean);padding:3px 11px;border-radius:999px;margin-left:10px;vertical-align:middle;}\r\n\r\n  \/* bloc de code *\/\r\n  .code-block{position:relative;background:var(--code-bg);border:1px solid var(--code-line);border-radius:12px;margin:14px 0;overflow:hidden;}\r\n  .code-bar{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--code-line);}\r\n  .code-dots{display:flex;gap:7px;}\r\n  .code-dot{width:11px;height:11px;border-radius:50%;}\r\n  .code-dot.r{background:#FF5F57;}.code-dot.y{background:#FEBC2E;}.code-dot.g{background:#28C840;}\r\n  .code-copy{display:inline-flex;align-items:center;gap:7px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.12);color:rgba(255,255,255,0.8);font-family:'Chakra Petch',monospace;font-size:12px;font-weight:500;padding:6px 12px;border-radius:7px;cursor:pointer;transition:all .18s;}\r\n  .code-copy:hover{background:rgba(62,207,142,0.16);border-color:var(--ocean);color:var(--ocean);}\r\n  .code-copy svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;}\r\n  .code-copy.copied{background:var(--ocean);border-color:var(--ocean);color:var(--navy);}\r\n  .code-block pre{padding:18px;overflow-x:auto;font-size:13px;line-height:1.7;color:#cdd5f0;}\r\n  .code-block pre .cmt{color:#6b7794;}\r\n  .code-block pre .cmd{color:var(--ocean);}\r\n\r\n  \/* tableau *\/\r\n  .gd-table-wrap{overflow-x:auto;margin:16px 0;border:1px solid var(--line);border-radius:12px;}\r\n  .gd-table{width:100%;border-collapse:collapse;font-size:13.5px;min-width:480px;}\r\n  .gd-table th{background:var(--magnolia);font-family:'Chakra Petch',monospace;font-weight:600;font-size:12px;letter-spacing:0.03em;text-transform:uppercase;color:var(--navy);text-align:left;padding:13px 16px;border-bottom:1px solid var(--line);}\r\n  .gd-table td{padding:12px 16px;border-bottom:1px solid var(--line-2);color:var(--wheelwright);font-weight:300;}\r\n  .gd-table tr:last-child td{border-bottom:none;}\r\n  .gd-table td code{background:var(--magnolia);padding:2px 7px;border-radius:5px;font-size:12px;color:var(--navy);}\r\n  .gd-table td.comp{font-weight:500;color:var(--navy);}\r\n  .gd-table .ver{font-family:'JetBrains Mono',monospace;font-weight:500;color:var(--ocean-dark);}\r\n\r\n  \/* CTA final *\/\r\n  .gd-cta-final{background:linear-gradient(168deg,var(--navy) 0%,var(--navy-2) 100%);border-radius:20px;padding:44px 40px;text-align:center;margin-top:24px;position:relative;overflow:hidden;}\r\n  .gd-cta-final::before{content:\"\";position:absolute;top:-30%;right:-10%;width:360px;height:360px;background:radial-gradient(circle,rgba(62,207,142,0.14),transparent 60%);pointer-events:none;}\r\n  .gd-cta-final-inner{position:relative;z-index:1;}\r\n  .gd-cta-final h3{color:#fff;font-size:24px;margin-bottom:10px;}\r\n  .gd-cta-final p{color:rgba(255,255,255,0.66);font-size:15px;font-weight:300;margin-bottom:24px;max-width:480px;margin-left:auto;margin-right:auto;}\r\n  .gd-meta{font-size:13px;color:#9AA3BC;font-weight:300;text-align:center;margin-top:28px;line-height:1.6;}\r\n  .gd-meta strong{color:var(--navy);font-weight:500;}\r\n\r\n  @media (max-width:920px){\r\n    .gd-wrap{grid-template-columns:1fr;gap:0;}\r\n    .gd-toc{position:static;margin-bottom:36px;background:var(--white);border:1px solid var(--line);border-radius:14px;padding:20px;}\r\n    .gd-toc-list{flex-direction:row;flex-wrap:wrap;gap:6px;}\r\n    .gd-toc-link{border-left:none;border:1px solid var(--line);}\r\n    .gd-toc-link.active{border-color:var(--ocean);}\r\n  }\r\n  @media (max-width:560px){\r\n    .gd-hero{padding:60px 16px 52px;}\r\n    .gd-wrap{padding:44px 16px 60px;}\r\n    .gd-step-head h2{font-size:21px;}\r\n  }\r\n  @media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important;}.js .reveal{opacity:1;transform:none;}html{scroll-behavior:auto;}}\r\n  html{scroll-behavior:smooth;}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<!-- HERO -->\r\n<section class=\"gd-hero\">\r\n  <div class=\"gd-hero-inner\">\r\n    <span class=\"eyebrow-pill reveal\">Installation<\/span>\r\n    <h1 class=\"reveal\">Guide d'installation - Axelor Open Suite 9<\/h1>\r\n    <div class=\"reveal\"><span class=\"gd-hero-badge\"><svg style=\"width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;\" viewBox=\"0 0 24 24\"><path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\"\/><\/svg>Stack \u00e0 jour : Java 21 - Tomcat 10.1 - PostgreSQL 16<\/span><\/div>\r\n    <p class=\"reveal\">Installez Axelor Open Suite 9 (Axelor Open Platform 8.2) sur un socle moderne. Ce guide couvre les pr\u00e9requis, l'installation pas-\u00e0-pas sous Ubuntu, le d\u00e9marrage rapide en Docker, la configuration et la v\u00e9rification de l'instance.<\/p>\r\n    <div class=\"gd-hero-cta reveal\">\r\n      <a class=\"btn btn-primary\" href=\"https:\/\/axelor.com\/fr\/demande-axelor-demo\/\">Demander une d\u00e9monstration <svg viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg><\/a>\r\n      <a target=\"blank\" class=\"btn btn-ghost\" href=\"https:\/\/docs.axelor.com\/adk\/7.1\/getting-started\/install.html\" rel=\"noopener\">Documentation technique <svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><\/svg><\/a>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- LAYOUT -->\r\n<div class=\"gd-wrap\">\r\n\r\n  <!-- SOMMAIRE -->\r\n  <aside class=\"gd-toc\">\r\n    <div class=\"gd-toc-title\">Sommaire<\/div>\r\n    <ul class=\"gd-toc-list\">\r\n      <li><a class=\"gd-toc-link active\" href=\"#stack\"><span class=\"gd-toc-num\">01<\/span>Stack technique<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#prerequis\"><span class=\"gd-toc-num\">02<\/span>Pr\u00e9requis<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#telechargement\"><span class=\"gd-toc-num\">03<\/span>T\u00e9l\u00e9chargement<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#installation\"><span class=\"gd-toc-num\">04<\/span>Installation Ubuntu<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#docker\"><span class=\"gd-toc-num\">05<\/span>Docker<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#configuration\"><span class=\"gd-toc-num\">06<\/span>Configuration<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#verification\"><span class=\"gd-toc-num\">07<\/span>V\u00e9rification<\/a><\/li>\r\n    <\/ul>\r\n  <\/aside>\r\n\r\n  <!-- CONTENU -->\r\n  <main class=\"gd-content\">\r\n\r\n    <!-- \u00c9TAPE 1 \u2014 STACK -->\r\n    <section class=\"gd-step reveal\" id=\"stack\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">01<\/span>\r\n        <h2>La stack technique d'AOS 9<\/h2>\r\n      <\/div>\r\n      <p>Axelor Open Suite 9 s'appuie sur Axelor Open Platform 8.2 et l'espace de noms Jakarta EE 10. Les versions ci-dessous constituent le socle minimal de r\u00e9f\u00e9rence pour un d\u00e9ploiement en production.<\/p>\r\n      <div class=\"gd-table-wrap\">\r\n        <table class=\"gd-table\">\r\n          <thead><tr><th>Composant<\/th><th>Version<\/th><th>Remarques<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td class=\"comp\">Java \/ JDK<\/td><td><span class=\"ver\">21 LTS<\/span><\/td><td>OpenJDK ; Garbage Collector G1 par d\u00e9faut.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Apache Tomcat<\/td><td><span class=\"ver\">10.1.x<\/span><\/td><td>Compatible Jakarta Servlet 6.0 (Jakarta EE 10).<\/td><\/tr>\r\n            <tr><td class=\"comp\">PostgreSQL<\/td><td><span class=\"ver\">\u2265 16<\/span><\/td><td>Extension <code>unaccent<\/code> requise.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Caddy (reverse proxy)<\/td><td><span class=\"ver\">\u2265 2.x<\/span><\/td><td>HTTPS automatique via ACME ; Nginx \u2265 1.24 en alternative.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Axelor Open Platform<\/td><td><span class=\"ver\">8.2<\/span><\/td><td>Framework embarqu\u00e9 dans le WAR.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Axelor Open Suite<\/td><td><span class=\"ver\">9<\/span><\/td><td>Suite ERP \/ CRM \/ BPM applicative.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Gradle<\/td><td><span class=\"ver\">8.14.5<\/span><\/td><td>Uniquement pour construire un WAR sur mesure.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Node.js<\/td><td><span class=\"ver\">\u2265 24.13<\/span><\/td><td>Build de l'interface React 19.2 (TypeScript 5.9, Vite 7).<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n      <\/div>\r\n      <div class=\"gd-callout\">\r\n        <svg viewBox=\"0 0 24 24\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\/><\/svg>\r\n        <p><strong>Migration depuis AOS 8 :<\/strong> ce n'est pas un simple red\u00e9ploiement. AOS 9 impose une rupture d'environnement \u2014 Java 8 \u2192 <strong>Java 21<\/strong>, Tomcat 9 \u2192 <strong>Tomcat 10.1<\/strong> (Jakarta EE 10) et le passage du chiffrement <code>CBC<\/code> \u00e0 <code>GCM<\/code>. Planifiez la migration en cons\u00e9quence.<\/p>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 2 \u2014 PR\u00c9REQUIS -->\r\n    <section class=\"gd-step reveal\" id=\"prerequis\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">02<\/span>\r\n        <h2>Pr\u00e9requis serveur &amp; client<\/h2>\r\n      <\/div>\r\n      <p>Syst\u00e8me de r\u00e9f\u00e9rence : <strong>Ubuntu Server LTS 24.04<\/strong> (installation minimale, sans interface graphique). Dimensionnez le serveur selon le nombre d'utilisateurs.<\/p>\r\n\r\n      <div class=\"gd-sub\">Dimensionnement mat\u00e9riel<\/div>\r\n      <div class=\"gd-table-wrap\">\r\n        <table class=\"gd-table\">\r\n          <thead><tr><th>Utilisateurs<\/th><th>vCPU<\/th><th>RAM<\/th><th>Disque<\/th><th>Profil<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td class=\"comp\">~10<\/td><td>2 vCPU<\/td><td>8 Gio<\/td><td>50 Go<\/td><td>TPE \/ usage CRM basique<\/td><\/tr>\r\n            <tr><td class=\"comp\">~30<\/td><td>4 vCPU<\/td><td>16 Gio<\/td><td>50 Go<\/td><td>PME, d\u00e9ploiement standard<\/td><\/tr>\r\n            <tr><td class=\"comp\">~60<\/td><td>8 vCPU<\/td><td>32 Gio<\/td><td>50 Go<\/td><td>PME, usage intensif<\/td><\/tr>\r\n            <tr><td class=\"comp\">~120<\/td><td>16 vCPU<\/td><td>64 Gio<\/td><td>50 Go<\/td><td>ETI, forte charge<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n      <\/div>\r\n      <p class=\"gd-note\">Estimations avec base de donn\u00e9es colocalis\u00e9e et 50 Go de stockage. Pour les fortes volum\u00e9tries, pr\u00e9voir une configuration d\u00e9di\u00e9e ou une topologie cluster haute disponibilit\u00e9.<\/p>\r\n\r\n      <div class=\"gd-sub\">Navigateurs support\u00e9s<\/div>\r\n      <div class=\"gd-table-wrap\">\r\n        <table class=\"gd-table\">\r\n          <thead><tr><th>Navigateur<\/th><th>Minimum compatible<\/th><th>Recommand\u00e9<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td class=\"comp\">Google Chrome \/ Chromium<\/td><td>94<\/td><td>Derni\u00e8re version majeure<\/td><\/tr>\r\n            <tr><td class=\"comp\">Microsoft Edge<\/td><td>94<\/td><td>Derni\u00e8re version majeure<\/td><\/tr>\r\n            <tr><td class=\"comp\">Mozilla Firefox<\/td><td>93<\/td><td>ESR 140 ou Stable r\u00e9cent<\/td><\/tr>\r\n            <tr><td class=\"comp\">Apple Safari (macOS \/ iOS)<\/td><td>16.4<\/td><td>3 derni\u00e8res versions<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n      <\/div>\r\n      <div class=\"gd-callout\">\r\n        <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"\/><\/svg>\r\n        <p>AOS 9 est une solution full web (React 19, ES2022). JavaScript et les cookies du domaine doivent \u00eatre autoris\u00e9s. <strong>Internet Explorer n'est pas support\u00e9.<\/strong><\/p>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 3 \u2014 T\u00c9L\u00c9CHARGEMENT -->\r\n    <section class=\"gd-step reveal\" id=\"telechargement\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">03<\/span>\r\n        <h2>T\u00e9l\u00e9chargement<\/h2>\r\n      <\/div>\r\n      <p>Choisissez la m\u00e9thode adapt\u00e9e \u00e0 votre contexte : d\u00e9ploiement classique \u00e0 partir d'une archive WAR, ou conteneurisation via l'image Docker officielle.<\/p>\r\n\r\n      <div class=\"gd-sub\">Archive WAR <span class=\"gd-tag-reco\">Recommand\u00e9<\/span><\/div>\r\n      <p>Le livrable <code>axelor-erp-9.0.x.war<\/code> (290 \u00e0 320 Mo) se d\u00e9ploie dans Tomcat 10.1. Id\u00e9al pour un d\u00e9ploiement ma\u00eetris\u00e9 sur serveur Linux avec reverse proxy Caddy. <a href=\"#installation\">Suivre l'installation<\/a>.<\/p>\r\n\r\n      <div class=\"gd-sub\">Image Docker<\/div>\r\n      <p>L'image officielle <code>axelor\/aos-ce:9.0<\/code> (Community Edition) avec PostgreSQL 16 permet un d\u00e9marrage rapide pilot\u00e9 par variables d'environnement. <a href=\"#docker\">D\u00e9marrage Docker<\/a>.<\/p>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 4 \u2014 INSTALLATION UBUNTU -->\r\n    <section class=\"gd-step reveal\" id=\"installation\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">04<\/span>\r\n        <h2>Installation sur Ubuntu<\/h2>\r\n      <\/div>\r\n      <div class=\"gd-os-tag\"><svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><\/svg>Ubuntu Server 24.04<\/div>\r\n      <p>D\u00e9ploiement mono-serveur avec un compte de service d\u00e9di\u00e9 <code>axelor<\/code> et l'arborescence <code>\/opt\/axelor<\/code>. Toutes les commandes s'ex\u00e9cutent en <code>sudo<\/code>.<\/p>\r\n\r\n      <div class=\"gd-sub\">1. Pr\u00e9parer le syst\u00e8me<\/div>\r\n      <p>Mettre \u00e0 jour, cr\u00e9er l'utilisateur de service et ouvrir le pare-feu (HTTPS uniquement).<\/p>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo apt update &amp;&amp; sudo apt upgrade -y\r\nsudo apt install -y bash-completion nano unzip\r\nsudo adduser --system --group --home \/opt\/axelor axelor\r\nsudo ufw allow OpenSSH &amp;&amp; sudo ufw allow 443\/tcp &amp;&amp; sudo ufw enable<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">2. Installer PostgreSQL 16<\/div>\r\n      <p>Cr\u00e9er l'utilisateur, activer l'extension <code>unaccent<\/code> puis cr\u00e9er la base.<\/p>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo apt install -y postgresql\r\nsudo -u postgres createuser --no-superuser --pwprompt axelor\r\nsudo -u postgres psql template1 -c \"CREATE EXTENSION IF NOT EXISTS unaccent;\"\r\nsudo -u postgres createdb --owner=axelor axelor<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">3. Installer Java 21<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo apt install -y openjdk-21-jdk\r\njava --version   <span class=\"cmt\"># doit afficher OpenJDK 21<\/span><\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">4. Installer Apache Tomcat 10.1<\/div>\r\n      <p>Cr\u00e9er l'arborescence cible, d\u00e9ployer Tomcat et donner la propri\u00e9t\u00e9 au compte de service.<\/p>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>TC=10.1.55\r\nsudo mkdir -p \/opt\/axelor\/{dist,tomcat,data,conf,backups}\r\ncd \/tmp\r\nwget https:\/\/dlcdn.apache.org\/tomcat\/tomcat-10\/v${TC}\/bin\/apache-tomcat-${TC}.tar.gz\r\nsudo tar xzf apache-tomcat-${TC}.tar.gz -C \/opt\/axelor\/tomcat --strip-components=1\r\nsudo chown -R axelor:axelor \/opt\/axelor<\/code><\/pre>\r\n      <\/div>\r\n      <div class=\"gd-file\"><svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><\/svg>\/opt\/axelor\/tomcat\/conf\/server.xml \u2014 connecteur derri\u00e8re le proxy<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>&lt;Connector port=\"8080\" protocol=\"HTTP\/1.1\" address=\"127.0.0.1\"\r\n           proxyPort=\"443\" scheme=\"https\" secure=\"true\"\r\n           connectionTimeout=\"20000\" redirectPort=\"8443\"\r\n           maxParameterCount=\"1000\" \/&gt;<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">5. D\u00e9ployer le WAR<\/div>\r\n      <p>D\u00e9compresser le livrable dans <code>webapps\/ROOT<\/code>. La configuration externe est d\u00e9sign\u00e9e par la variable <code>AXELOR_CONFIG<\/code> (d\u00e9finie dans l'unit\u00e9 systemd).<\/p>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo -u axelor mkdir -p \/opt\/axelor\/data\/{attachments,exports,templates,reports}\r\nsudo systemctl stop axelor-tomcat\r\nsudo -u axelor rm -rf \/opt\/axelor\/tomcat\/webapps\/ROOT\r\nsudo -u axelor unzip -q \/opt\/axelor\/dist\/axelor-erp-9.0.10.war \\\r\n  -d \/opt\/axelor\/tomcat\/webapps\/ROOT\r\nsudo systemctl start axelor-tomcat<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">6. Mettre en place Caddy (reverse proxy + TLS)<\/div>\r\n      <p>Caddy assure la terminaison TLS (certificat automatique Let's Encrypt) et les en-t\u00eates de s\u00e9curit\u00e9.<\/p>\r\n      <div class=\"gd-file\"><svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><\/svg>\/etc\/caddy\/Caddyfile<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>example.axelor.com {\r\n  tls {\r\n    protocols tls1.2 tls1.3\r\n  }\r\n  header {\r\n    Strict-Transport-Security \"max-age=31536000; includeSubDomains\"\r\n    X-Content-Type-Options \"nosniff\"\r\n    X-Frame-Options \"SAMEORIGIN\"\r\n    Referrer-Policy \"strict-origin\"\r\n  }\r\n  request_body { max_size 20MB }\r\n  reverse_proxy 127.0.0.1:8080 {\r\n    transport http { read_timeout 1800s; write_timeout 1800s }\r\n  }\r\n}<\/code><\/pre>\r\n      <\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo caddy validate --config \/etc\/caddy\/Caddyfile\r\nsudo systemctl enable --now caddy<\/code><\/pre>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 5 \u2014 DOCKER -->\r\n    <section class=\"gd-step reveal\" id=\"docker\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">05<\/span>\r\n        <h2>D\u00e9marrage rapide avec Docker<\/h2>\r\n      <\/div>\r\n      <p>L'image officielle <code>axelor\/aos-ce:9.0<\/code> g\u00e9n\u00e8re automatiquement <code>axelor-config.properties<\/code> \u00e0 partir des variables d'environnement, attend PostgreSQL, applique les migrations puis d\u00e9marre Tomcat.<\/p>\r\n      <div class=\"gd-file\"><svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><\/svg>docker-compose.yml<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>services:\r\n  app:\r\n    image: axelor\/aos-ce:9.0\r\n    environment:\r\n      - PGHOST=postgres\r\n      - PGUSER=axelor\r\n      - PGPASSWORD=&lt;mot_de_passe&gt;\r\n      - PGDATABASE=axelor\r\n      - APP_MODE=prod\r\n      - JAVA_XMX=4096m\r\n    ports:\r\n      - \"8080:8080\"\r\n    depends_on: [postgres]\r\n    volumes:\r\n      - app_data:\/data\r\n    healthcheck:\r\n      test: [\"CMD\", \"curl\", \"-f\", \"http:\/\/localhost:8080\/health\"]\r\n      interval: 10s\r\n      timeout: 5s\r\n      retries: 3\r\n      start_period: 1800s\r\n  postgres:\r\n    image: postgres:16\r\n    environment:\r\n      - POSTGRES_USER=axelor\r\n      - POSTGRES_PASSWORD=&lt;mot_de_passe&gt;\r\n      - POSTGRES_DB=axelor\r\n    volumes:\r\n      - postgres_data:\/var\/lib\/postgresql\/data\r\nvolumes:\r\n  app_data:\r\n  postgres_data:<\/code><\/pre>\r\n      <\/div>\r\n      <div class=\"gd-callout\">\r\n        <svg viewBox=\"0 0 24 24\"><path d=\"M9 18h6\"\/><path d=\"M10 22h4\"\/><path d=\"M12 2a7 7 0 0 0-4 12.7c.6.5 1 1.4 1 2.3h6c0-.9.4-1.8 1-2.3A7 7 0 0 0 12 2z\"\/><\/svg>\r\n        <p>En production, placez un reverse proxy Caddy devant le conteneur pour la terminaison TLS, et veillez \u00e0 persister les volumes <code>\/data<\/code> (GED) et la base PostgreSQL.<\/p>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 6 \u2014 CONFIGURATION -->\r\n    <section class=\"gd-step reveal\" id=\"configuration\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">06<\/span>\r\n        <h2>Configuration de l'application<\/h2>\r\n      <\/div>\r\n      <p>Le fichier <code>axelor-config.properties<\/code> est conserv\u00e9 hors du WAR, dans <code>\/opt\/axelor\/conf\/<\/code>, et d\u00e9sign\u00e9 par la variable d'environnement <code>AXELOR_CONFIG<\/code> afin de persister entre les mises \u00e0 jour.<\/p>\r\n      <div class=\"gd-file\"><svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><\/svg>\/opt\/axelor\/conf\/axelor-config.properties<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code><span class=\"cmt\"># === Base de donn\u00e9es ===<\/span>\r\ndb.default.url      = jdbc:postgresql:\/\/localhost:5432\/axelor\r\ndb.default.user     = axelor\r\ndb.default.password = &lt;mot_de_passe&gt;\r\ndb.default.ddl      = update\r\n\r\n<span class=\"cmt\"># === GED (syst\u00e8me de fichiers) ===<\/span>\r\ndata.upload.max-size = 20\r\ndata.upload.dir      = \/opt\/axelor\/data\/attachments\r\ndata.export.dir      = \/opt\/axelor\/data\/exports\r\ntemplate.search-dir  = \/opt\/axelor\/data\/templates\r\nreports.design-dir   = \/opt\/axelor\/data\/reports\r\n\r\n<span class=\"cmt\"># === Application &amp; s\u00e9curit\u00e9 ===<\/span>\r\napplication.mode      = prod\r\napplication.base-url  = https:\/\/example.axelor.com\r\nsession.timeout       = 60\r\nsession.cookie.secure = true<\/code><\/pre>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 7 \u2014 V\u00c9RIFICATION -->\r\n    <section class=\"gd-step reveal\" id=\"verification\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">07<\/span>\r\n        <h2>D\u00e9marrage &amp; v\u00e9rification<\/h2>\r\n      <\/div>\r\n      <p>D\u00e9marrer les services dans l'ordre, puis valider la disponibilit\u00e9 via l'endpoint de sant\u00e9.<\/p>\r\n\r\n      <div class=\"gd-sub\">1. D\u00e9marrer les services<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo systemctl start postgresql\r\nsudo systemctl start axelor-tomcat\r\nsudo systemctl start caddy\r\nsystemctl status postgresql axelor-tomcat caddy --no-pager<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">2. V\u00e9rifier l'\u00e9tat de sant\u00e9<\/div>\r\n      <p>AOS expose un endpoint <code>\/health<\/code>. Une r\u00e9ponse <code>HTTP 200<\/code> avec <code>{\"status\":\"UP\"}<\/code> confirme le bon d\u00e9marrage.<\/p>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>curl -fs http:\/\/127.0.0.1:8080\/health &amp;&amp; echo \" OK\"\r\n<span class=\"cmt\"># via le reverse proxy :<\/span>\r\ncurl -fs https:\/\/example.axelor.com\/health<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-callout\">\r\n        <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><polyline points=\"12 6 12 12 16 14\"\/><\/svg>\r\n        <p><strong>Premier d\u00e9marrage :<\/strong> il peut \u00eatre long \u2014 AOP applique les migrations de sch\u00e9ma et charge l'application. Attendez une r\u00e9ponse <code>HTTP 200<\/code> sur <code>\/health<\/code> avant d'ouvrir l'acc\u00e8s aux utilisateurs.<\/p>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- CTA FINAL -->\r\n    <div class=\"gd-cta-final reveal\">\r\n      <div class=\"gd-cta-final-inner\">\r\n        <h3>Besoin d'accompagnement sur votre projet ?<\/h3>\r\n        <p>D\u00e9couvrez comment notre ERP peut am\u00e9liorer la performance de votre entreprise. Un expert vous contactera rapidement pour \u00e9changer sur votre projet.<\/p>\r\n        <a class=\"btn btn-primary\" href=\"https:\/\/axelor.com\/fr\/demande-axelor-demo\/\">\u00catre recontact\u00e9 <svg viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg><\/a>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <p class=\"gd-meta\"><strong>Guide d'installation mis \u00e0 jour pour AOS 9 \/ AOP 8.2.<\/strong> Contenu \u00e9tabli d'apr\u00e8s le Document d'Architecture Technique et le Dossier d'exploitation \u2014 version 1.0 (12 juin 2026). Page de r\u00e9f\u00e9rence interne, non contractuelle.<\/p>\r\n\r\n  <\/main>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  \/\/ reveal\r\n  const reduced=!!(window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\r\n  const t=document.querySelectorAll('.reveal');\r\n  if(reduced||!('IntersectionObserver' in window)){t.forEach(x=>x.classList.add('in'));}\r\n  else{const o=new IntersectionObserver(es=>{es.forEach(e=>{if(e.isIntersecting){e.target.classList.add('in');o.unobserve(e.target);}});},{threshold:0.06});t.forEach(x=>o.observe(x));}\r\n\r\n  \/\/ copier le code\r\n  document.querySelectorAll('.code-copy').forEach(btn=>{\r\n    btn.addEventListener('click',()=>{\r\n      const code=btn.closest('.code-block').querySelector('pre code').innerText;\r\n      const done=()=>{btn.classList.add('copied');const orig=btn.innerHTML;btn.innerHTML='<svg viewBox=\"0 0 24 24\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>Copi\u00e9 !';setTimeout(()=>{btn.classList.remove('copied');btn.innerHTML=orig;},1800);};\r\n      if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(code).then(done).catch(()=>{});}\r\n      else{const ta=document.createElement('textarea');ta.value=code;document.body.appendChild(ta);ta.select();try{document.execCommand('copy');done();}catch(e){}document.body.removeChild(ta);}\r\n    });\r\n  });\r\n\r\n  \/\/ scroll-spy sommaire\r\n  const links=[...document.querySelectorAll('.gd-toc-link')];\r\n  const steps=[...document.querySelectorAll('.gd-step')];\r\n  if('IntersectionObserver' in window && steps.length){\r\n    const spy=new IntersectionObserver(es=>{\r\n      es.forEach(e=>{\r\n        if(e.isIntersecting){\r\n          const id=e.target.id;\r\n          links.forEach(l=>l.classList.toggle('active',l.getAttribute('href')==='#'+id));\r\n        }\r\n      });\r\n    },{rootMargin:'-20% 0px -70% 0px'});\r\n    steps.forEach(s=>spy.observe(s));\r\n  }\r\n})();\r\n<\/script>\r\n<\/body>\r\n<\/html>\r\n[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<!DOCTYPE html>\r\n<html lang=\"fr\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>Guide d'installation \u2014 Axelor Open Suite 9<\/title>\r\n<meta name=\"description\" content=\"Guide d'installation \u00e0 jour d'Axelor Open Suite 9 (AOP 8.2) : Java 21, Tomcat 10.1, PostgreSQL 16, Caddy. Installation Ubuntu, Docker, configuration et v\u00e9rification.\">\r\n<script>document.documentElement.classList.add('js');<\/script>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@300;400;500;600;700&family=Chakra+Petch:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&display=swap\" rel=\"stylesheet\">\r\n<style>\r\n  *{margin:0;padding:0;box-sizing:border-box;}\r\n  :root{\r\n    --navy:#010165;--navy-dark:#0D021E;--navy-2:#07013F;\r\n    --ocean:#3ECF8E;--ocean-dark:#2BB57A;--ocean-soft:rgba(62,207,142,0.12);\r\n    --indigo:#4B3FD4;--magnolia:#F5F5FF;--magnolia-2:#FAFAFF;--wheelwright:#5D6B90;--white:#FFFFFF;\r\n    --line:rgba(1,1,101,0.10);--line-2:rgba(1,1,101,0.06);\r\n    --code-bg:#0D021E;--code-line:rgba(255,255,255,0.08);\r\n    --shadow-sm:0 1px 3px rgba(1,1,101,0.06);\r\n    --shadow-md:0 4px 16px rgba(1,1,101,0.08),0 1px 4px rgba(1,1,101,0.04);\r\n    --shadow-lg:0 24px 60px rgba(13,2,30,0.15);\r\n  }\r\n  body{font-family:'Poppins',-apple-system,sans-serif;background:var(--magnolia-2);color:var(--wheelwright);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;}\r\n  p{font-weight:300;line-height:1.6;}\r\n  h1,h2,h3,h4{font-family:'Poppins',sans-serif;font-weight:600;color:var(--navy);letter-spacing:-0.02em;line-height:1.2;margin-bottom:0px;padding-bottom:0px;}\r\n  a{text-decoration:none;color:inherit;}\r\n  code,pre{font-family:'JetBrains Mono',monospace;}\r\n  .eyebrow-pill{display:inline-flex;align-items:center;gap:8px;padding:7px 17px;border-radius:100px;background:var(--ocean-soft);border:1px solid rgba(62,207,142,0.32);font-family:'Chakra Petch',monospace;font-weight:500;font-size:14px;letter-spacing:0.06em;color:var(--ocean-dark);}\r\n  .js .reveal{opacity:0;transform:translateY(18px);transition:opacity .55s ease,transform .55s ease;}\r\n  .js .reveal.in{opacity:1;transform:translateY(0);}\r\n\r\n  \/* ===== HERO ===== *\/\r\n  .gd-hero{position:relative;overflow:hidden;background:linear-gradient(168deg,var(--navy-dark) 0%,var(--navy) 60%,var(--navy-2) 100%);padding:80px 28px 70px;text-align:center;}\r\n  .gd-hero::before{content:\"\";position:absolute;top:-10%;right:-5%;width:560px;height:560px;background:radial-gradient(circle,rgba(62,207,142,0.13),transparent 60%);pointer-events:none;}\r\n  .gd-hero::after{content:\"\";position:absolute;bottom:-25%;left:-10%;width:460px;height:460px;background:radial-gradient(circle,rgba(75,63,212,0.16),transparent 60%);pointer-events:none;}\r\n  .gd-hero-inner{position:relative;z-index:2;max-width:740px;margin:0 auto;}\r\n  .gd-hero .eyebrow-pill{background:rgba(62,207,142,0.1);border-color:rgba(62,207,142,0.32);color:var(--ocean);margin-bottom:18px;}\r\n  .gd-hero h1{font-size:clamp(32px,4.6vw,48px);color:#fff;margin-bottom:16px;}\r\n  .gd-hero p{font-size:17px;color:rgba(255,255,255,0.66);font-weight:300;line-height:1.5;margin-bottom:28px;}\r\n  .gd-hero-badge{display:inline-flex;align-items:center;gap:8px;background:rgba(62,207,142,0.14);color:var(--ocean);font-family:'Chakra Petch',monospace;font-weight:600;font-size:13px;letter-spacing:0.04em;padding:6px 14px;border-radius:999px;margin-bottom:18px;}\r\n  .gd-hero-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;}\r\n  .btn{display:inline-flex;align-items:center;gap:9px;padding:13px 24px;border-radius:12px;font-family:'Chakra Petch',monospace;font-weight:500;font-size:14.5px;transition:transform .2s,box-shadow .2s,background .2s,border-color .2s;}\r\n  .btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.2;}\r\n  .btn-primary{background:linear-gradient(135deg,var(--ocean),var(--ocean-dark));color:var(--navy);box-shadow:0 8px 22px rgba(62,207,142,0.3);}\r\n  .btn-primary:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(62,207,142,0.42);}\r\n  .btn-ghost{background:rgba(255,255,255,0.06);color:#fff;border:1px solid rgba(255,255,255,0.18);}\r\n  .btn-ghost:hover{background:rgba(255,255,255,0.12);border-color:rgba(255,255,255,0.3);}\r\n\r\n  \/* ===== LAYOUT GUIDE ===== *\/\r\n  .gd-wrap{max-width:1200px;margin:0 auto;padding:60px 28px 80px;display:grid;grid-template-columns:260px 1fr;gap:48px;align-items:start;}\r\n\r\n  \/* sommaire lat\u00e9ral sticky *\/\r\n  .gd-toc{position:sticky;top:24px;}\r\n  .gd-toc-title{font-family:'Chakra Petch',monospace;font-size:12px;font-weight:600;letter-spacing:0.08em;text-transform:uppercase;color:var(--wheelwright);margin-bottom:16px;padding-left:14px;}\r\n  .gd-toc-list{display:flex;flex-direction:column;gap:2px;list-style-type: none !important;padding: 0 0 23px 0px !important;}\r\n  .gd-toc-link{display:flex;align-items:center;gap:11px;padding:10px 14px;border-radius:10px;font-size:14px;font-weight:400;color:var(--wheelwright);transition:all .18s;border-left:2px solid transparent;}\r\n  .gd-toc-link:hover{background:var(--magnolia);color:var(--navy);}\r\n  .gd-toc-link.active{background:var(--ocean-soft);color:var(--navy);font-weight:500;border-left-color:var(--ocean);}\r\n  .gd-toc-num{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ocean-dark);font-weight:500;flex-shrink:0;}\r\n\r\n  \/* contenu *\/\r\n  .gd-content{min-width:0;}\r\n  .gd-intro{background:var(--white);border:1px solid var(--line);border-radius:16px;padding:28px 30px;box-shadow:var(--shadow-sm);margin-bottom:40px;}\r\n  .gd-intro p{font-size:15px;color:var(--wheelwright);font-weight:300;line-height:1.6;margin-bottom:12px;}\r\n  .gd-intro p:last-child{margin-bottom:0;}\r\n  .gd-intro strong{color:var(--navy);font-weight:500;}\r\n  .gd-callout{display:flex;gap:12px;align-items:flex-start;background:var(--ocean-soft);border:1px solid rgba(62,207,142,0.25);border-radius:12px;padding:16px 18px;margin:20px 0;}\r\n  .gd-callout svg{width:20px;height:20px;stroke:var(--ocean-dark);fill:none;stroke-width:2;flex-shrink:0;margin-top:1px;}\r\n  .gd-callout p{font-size:14px;color:var(--navy);font-weight:400;margin:0;line-height:1.5;}\r\n\r\n  \/* \u00e9tape *\/\r\n  .gd-step{margin-bottom:56px;scroll-margin-top:24px;}\r\n  .gd-step-head{display:flex;align-items:center;gap:16px;margin-bottom:20px;}\r\n  .gd-step-num{width:46px;height:46px;border-radius:13px;background:var(--navy);color:var(--ocean);display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:600;font-size:18px;flex-shrink:0;}\r\n  .gd-step-head h2{font-size:25px;}\r\n  .gd-sub{font-size:18px;font-weight:600;color:var(--navy);margin:28px 0 10px;font-family:'Poppins',sans-serif;}\r\n  .gd-os-tag{display:inline-flex;align-items:center;gap:7px;font-family:'Chakra Petch',monospace;font-size:12px;font-weight:500;color:var(--wheelwright);background:var(--magnolia);border:1px solid var(--line);border-radius:8px;padding:4px 11px;margin:14px 0 8px;}\r\n  .gd-os-tag svg{width:13px;height:13px;stroke:var(--ocean-dark);fill:none;stroke-width:2;}\r\n  .gd-content > .gd-step p, .gd-step p{font-size:15px;color:var(--wheelwright);font-weight:300;line-height:1.6;margin:10px 0;}\r\n  .gd-step p strong{color:var(--navy);font-weight:500;}\r\n  .gd-step a{color:var(--ocean-dark);font-weight:500;}\r\n  .gd-step p code, .gd-step li code, .gd-intro code{background:var(--magnolia);padding:2px 7px;border-radius:5px;font-size:12px;color:var(--navy);}\r\n  .gd-note{font-size:13.5px;color:#9AA3BC;font-weight:300;margin:10px 0;}\r\n  .gd-file{display:flex;align-items:center;gap:7px;font-family:'Chakra Petch',monospace;font-size:12px;letter-spacing:0.04em;color:#9AA3BC;margin:16px 0 -6px;}\r\n  .gd-file svg{width:14px;height:14px;stroke:var(--ocean-dark);fill:none;stroke-width:2;flex-shrink:0;}\r\n  .gd-tag-reco{display:inline-flex;align-items:center;font-family:'Chakra Petch',monospace;font-weight:600;font-size:11px;letter-spacing:0.06em;text-transform:uppercase;color:var(--navy);background:var(--ocean);padding:3px 11px;border-radius:999px;margin-left:10px;vertical-align:middle;}\r\n\r\n  \/* bloc de code *\/\r\n  .code-block{position:relative;background:var(--code-bg);border:1px solid var(--code-line);border-radius:12px;margin:14px 0;overflow:hidden;}\r\n  .code-bar{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--code-line);}\r\n  .code-dots{display:flex;gap:7px;}\r\n  .code-dot{width:11px;height:11px;border-radius:50%;}\r\n  .code-dot.r{background:#FF5F57;}.code-dot.y{background:#FEBC2E;}.code-dot.g{background:#28C840;}\r\n  .code-copy{display:inline-flex;align-items:center;gap:7px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.12);color:rgba(255,255,255,0.8);font-family:'Chakra Petch',monospace;font-size:12px;font-weight:500;padding:6px 12px;border-radius:7px;cursor:pointer;transition:all .18s;}\r\n  .code-copy:hover{background:rgba(62,207,142,0.16);border-color:var(--ocean);color:var(--ocean);}\r\n  .code-copy svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;}\r\n  .code-copy.copied{background:var(--ocean);border-color:var(--ocean);color:var(--navy);}\r\n  .code-block pre{padding:18px;overflow-x:auto;font-size:13px;line-height:1.7;color:#cdd5f0;}\r\n  .code-block pre .cmt{color:#6b7794;}\r\n  .code-block pre .cmd{color:var(--ocean);}\r\n\r\n  \/* tableau *\/\r\n  .gd-table-wrap{overflow-x:auto;margin:16px 0;border:1px solid var(--line);border-radius:12px;}\r\n  .gd-table{width:100%;border-collapse:collapse;font-size:13.5px;min-width:480px;}\r\n  .gd-table th{background:var(--magnolia);font-family:'Chakra Petch',monospace;font-weight:600;font-size:12px;letter-spacing:0.03em;text-transform:uppercase;color:var(--navy);text-align:left;padding:13px 16px;border-bottom:1px solid var(--line);}\r\n  .gd-table td{padding:12px 16px;border-bottom:1px solid var(--line-2);color:var(--wheelwright);font-weight:300;}\r\n  .gd-table tr:last-child td{border-bottom:none;}\r\n  .gd-table td code{background:var(--magnolia);padding:2px 7px;border-radius:5px;font-size:12px;color:var(--navy);}\r\n  .gd-table td.comp{font-weight:500;color:var(--navy);}\r\n  .gd-table .ver{font-family:'JetBrains Mono',monospace;font-weight:500;color:var(--ocean-dark);}\r\n\r\n  \/* CTA final *\/\r\n  .gd-cta-final{background:linear-gradient(168deg,var(--navy) 0%,var(--navy-2) 100%);border-radius:20px;padding:44px 40px;text-align:center;margin-top:24px;position:relative;overflow:hidden;}\r\n  .gd-cta-final::before{content:\"\";position:absolute;top:-30%;right:-10%;width:360px;height:360px;background:radial-gradient(circle,rgba(62,207,142,0.14),transparent 60%);pointer-events:none;}\r\n  .gd-cta-final-inner{position:relative;z-index:1;}\r\n  .gd-cta-final h3{color:#fff;font-size:24px;margin-bottom:10px;}\r\n  .gd-cta-final p{color:rgba(255,255,255,0.66);font-size:15px;font-weight:300;margin-bottom:24px;max-width:480px;margin-left:auto;margin-right:auto;}\r\n  .gd-meta{font-size:13px;color:#9AA3BC;font-weight:300;text-align:center;margin-top:28px;line-height:1.6;}\r\n  .gd-meta strong{color:var(--navy);font-weight:500;}\r\n\r\n  @media (max-width:920px){\r\n    .gd-wrap{grid-template-columns:1fr;gap:0;}\r\n    .gd-toc{position:static;margin-bottom:36px;background:var(--white);border:1px solid var(--line);border-radius:14px;padding:20px;}\r\n    .gd-toc-list{flex-direction:row;flex-wrap:wrap;gap:6px;}\r\n    .gd-toc-link{border-left:none;border:1px solid var(--line);}\r\n    .gd-toc-link.active{border-color:var(--ocean);}\r\n  }\r\n  @media (max-width:560px){\r\n    .gd-hero{padding:60px 16px 52px;}\r\n    .gd-wrap{padding:44px 16px 60px;}\r\n    .gd-step-head h2{font-size:21px;}\r\n  }\r\n  @media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important;}.js .reveal{opacity:1;transform:none;}html{scroll-behavior:auto;}}\r\n  html{scroll-behavior:smooth;}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<!-- HERO -->\r\n<section class=\"gd-hero\">\r\n  <div class=\"gd-hero-inner\">\r\n    <span class=\"eyebrow-pill reveal\">Installation<\/span>\r\n    <h1 class=\"reveal\">Guide d'installation - Axelor Open Suite 9<\/h1>\r\n    <div class=\"reveal\"><span class=\"gd-hero-badge\"><svg style=\"width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;\" viewBox=\"0 0 24 24\"><path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\"\/><\/svg>Stack \u00e0 jour : Java 21 - Tomcat 10.1 - PostgreSQL 16<\/span><\/div>\r\n    <p class=\"reveal\">Installez Axelor Open Suite 9 (Axelor Open Platform 8.2) sur un socle moderne. Ce guide couvre les pr\u00e9requis, l'installation pas-\u00e0-pas sous Ubuntu, le d\u00e9marrage rapide en Docker, la configuration et la v\u00e9rification de l'instance.<\/p>\r\n    <div class=\"gd-hero-cta reveal\">\r\n      <a class=\"btn btn-primary\" href=\"https:\/\/axelor.com\/fr\/demande-axelor-demo\/\">Demander une d\u00e9monstration <svg viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg><\/a>\r\n      <a target=\"blank\" class=\"btn btn-ghost\" href=\"https:\/\/docs.axelor.com\/adk\/7.1\/getting-started\/install.html\" rel=\"noopener\">Documentation technique <svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><\/svg><\/a>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- LAYOUT -->\r\n<div class=\"gd-wrap\">\r\n\r\n  <!-- SOMMAIRE -->\r\n  <aside class=\"gd-toc\">\r\n    <div class=\"gd-toc-title\">Sommaire<\/div>\r\n    <ul class=\"gd-toc-list\">\r\n      <li><a class=\"gd-toc-link active\" href=\"#stack\"><span class=\"gd-toc-num\">01<\/span>Stack technique<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#prerequis\"><span class=\"gd-toc-num\">02<\/span>Pr\u00e9requis<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#telechargement\"><span class=\"gd-toc-num\">03<\/span>T\u00e9l\u00e9chargement<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#installation\"><span class=\"gd-toc-num\">04<\/span>Installation Ubuntu<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#docker\"><span class=\"gd-toc-num\">05<\/span>Docker<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#configuration\"><span class=\"gd-toc-num\">06<\/span>Configuration<\/a><\/li>\r\n      <li><a class=\"gd-toc-link\" href=\"#verification\"><span class=\"gd-toc-num\">07<\/span>V\u00e9rification<\/a><\/li>\r\n    <\/ul>\r\n  <\/aside>\r\n\r\n  <!-- CONTENU -->\r\n  <main class=\"gd-content\">\r\n\r\n    <!-- \u00c9TAPE 1 \u2014 STACK -->\r\n    <section class=\"gd-step reveal\" id=\"stack\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">01<\/span>\r\n        <h2>La stack technique d'AOS 9<\/h2>\r\n      <\/div>\r\n      <p>Axelor Open Suite 9 s'appuie sur Axelor Open Platform 8.2 et l'espace de noms Jakarta EE 10. Les versions ci-dessous constituent le socle minimal de r\u00e9f\u00e9rence pour un d\u00e9ploiement en production.<\/p>\r\n      <div class=\"gd-table-wrap\">\r\n        <table class=\"gd-table\">\r\n          <thead><tr><th>Composant<\/th><th>Version<\/th><th>Remarques<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td class=\"comp\">Java \/ JDK<\/td><td><span class=\"ver\">21 LTS<\/span><\/td><td>OpenJDK ; Garbage Collector G1 par d\u00e9faut.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Apache Tomcat<\/td><td><span class=\"ver\">10.1.x<\/span><\/td><td>Compatible Jakarta Servlet 6.0 (Jakarta EE 10).<\/td><\/tr>\r\n            <tr><td class=\"comp\">PostgreSQL<\/td><td><span class=\"ver\">\u2265 16<\/span><\/td><td>Extension <code>unaccent<\/code> requise.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Caddy (reverse proxy)<\/td><td><span class=\"ver\">\u2265 2.x<\/span><\/td><td>HTTPS automatique via ACME ; Nginx \u2265 1.24 en alternative.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Axelor Open Platform<\/td><td><span class=\"ver\">8.2<\/span><\/td><td>Framework embarqu\u00e9 dans le WAR.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Axelor Open Suite<\/td><td><span class=\"ver\">9<\/span><\/td><td>Suite ERP \/ CRM \/ BPM applicative.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Gradle<\/td><td><span class=\"ver\">8.14.5<\/span><\/td><td>Uniquement pour construire un WAR sur mesure.<\/td><\/tr>\r\n            <tr><td class=\"comp\">Node.js<\/td><td><span class=\"ver\">\u2265 24.13<\/span><\/td><td>Build de l'interface React 19.2 (TypeScript 5.9, Vite 7).<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n      <\/div>\r\n      <div class=\"gd-callout\">\r\n        <svg viewBox=\"0 0 24 24\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\/><\/svg>\r\n        <p><strong>Migration depuis AOS 8 :<\/strong> ce n'est pas un simple red\u00e9ploiement. AOS 9 impose une rupture d'environnement \u2014 Java 8 \u2192 <strong>Java 21<\/strong>, Tomcat 9 \u2192 <strong>Tomcat 10.1<\/strong> (Jakarta EE 10) et le passage du chiffrement <code>CBC<\/code> \u00e0 <code>GCM<\/code>. Planifiez la migration en cons\u00e9quence.<\/p>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 2 \u2014 PR\u00c9REQUIS -->\r\n    <section class=\"gd-step reveal\" id=\"prerequis\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">02<\/span>\r\n        <h2>Pr\u00e9requis serveur &amp; client<\/h2>\r\n      <\/div>\r\n      <p>Syst\u00e8me de r\u00e9f\u00e9rence : <strong>Ubuntu Server LTS 24.04<\/strong> (installation minimale, sans interface graphique). Dimensionnez le serveur selon le nombre d'utilisateurs.<\/p>\r\n\r\n      <div class=\"gd-sub\">Dimensionnement mat\u00e9riel<\/div>\r\n      <div class=\"gd-table-wrap\">\r\n        <table class=\"gd-table\">\r\n          <thead><tr><th>Utilisateurs<\/th><th>vCPU<\/th><th>RAM<\/th><th>Disque<\/th><th>Profil<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td class=\"comp\">~10<\/td><td>2 vCPU<\/td><td>8 Gio<\/td><td>50 Go<\/td><td>TPE \/ usage CRM basique<\/td><\/tr>\r\n            <tr><td class=\"comp\">~30<\/td><td>4 vCPU<\/td><td>16 Gio<\/td><td>50 Go<\/td><td>PME, d\u00e9ploiement standard<\/td><\/tr>\r\n            <tr><td class=\"comp\">~60<\/td><td>8 vCPU<\/td><td>32 Gio<\/td><td>50 Go<\/td><td>PME, usage intensif<\/td><\/tr>\r\n            <tr><td class=\"comp\">~120<\/td><td>16 vCPU<\/td><td>64 Gio<\/td><td>50 Go<\/td><td>ETI, forte charge<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n      <\/div>\r\n      <p class=\"gd-note\">Estimations avec base de donn\u00e9es colocalis\u00e9e et 50 Go de stockage. Pour les fortes volum\u00e9tries, pr\u00e9voir une configuration d\u00e9di\u00e9e ou une topologie cluster haute disponibilit\u00e9.<\/p>\r\n\r\n      <div class=\"gd-sub\">Navigateurs support\u00e9s<\/div>\r\n      <div class=\"gd-table-wrap\">\r\n        <table class=\"gd-table\">\r\n          <thead><tr><th>Navigateur<\/th><th>Minimum compatible<\/th><th>Recommand\u00e9<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td class=\"comp\">Google Chrome \/ Chromium<\/td><td>94<\/td><td>Derni\u00e8re version majeure<\/td><\/tr>\r\n            <tr><td class=\"comp\">Microsoft Edge<\/td><td>94<\/td><td>Derni\u00e8re version majeure<\/td><\/tr>\r\n            <tr><td class=\"comp\">Mozilla Firefox<\/td><td>93<\/td><td>ESR 140 ou Stable r\u00e9cent<\/td><\/tr>\r\n            <tr><td class=\"comp\">Apple Safari (macOS \/ iOS)<\/td><td>16.4<\/td><td>3 derni\u00e8res versions<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n      <\/div>\r\n      <div class=\"gd-callout\">\r\n        <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"\/><\/svg>\r\n        <p>AOS 9 est une solution full web (React 19, ES2022). JavaScript et les cookies du domaine doivent \u00eatre autoris\u00e9s. <strong>Internet Explorer n'est pas support\u00e9.<\/strong><\/p>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 3 \u2014 T\u00c9L\u00c9CHARGEMENT -->\r\n    <section class=\"gd-step reveal\" id=\"telechargement\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">03<\/span>\r\n        <h2>T\u00e9l\u00e9chargement<\/h2>\r\n      <\/div>\r\n      <p>Choisissez la m\u00e9thode adapt\u00e9e \u00e0 votre contexte : d\u00e9ploiement classique \u00e0 partir d'une archive WAR, ou conteneurisation via l'image Docker officielle.<\/p>\r\n\r\n      <div class=\"gd-sub\">Archive WAR <span class=\"gd-tag-reco\">Recommand\u00e9<\/span><\/div>\r\n      <p>Le livrable <code>axelor-erp-9.0.x.war<\/code> (290 \u00e0 320 Mo) se d\u00e9ploie dans Tomcat 10.1. Id\u00e9al pour un d\u00e9ploiement ma\u00eetris\u00e9 sur serveur Linux avec reverse proxy Caddy. <a href=\"#installation\">Suivre l'installation<\/a>.<\/p>\r\n\r\n      <div class=\"gd-sub\">Image Docker<\/div>\r\n      <p>L'image officielle <code>axelor\/aos-ce:9.0<\/code> (Community Edition) avec PostgreSQL 16 permet un d\u00e9marrage rapide pilot\u00e9 par variables d'environnement. <a href=\"#docker\">D\u00e9marrage Docker<\/a>.<\/p>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 4 \u2014 INSTALLATION UBUNTU -->\r\n    <section class=\"gd-step reveal\" id=\"installation\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">04<\/span>\r\n        <h2>Installation sur Ubuntu<\/h2>\r\n      <\/div>\r\n      <div class=\"gd-os-tag\"><svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><\/svg>Ubuntu Server 24.04<\/div>\r\n      <p>D\u00e9ploiement mono-serveur avec un compte de service d\u00e9di\u00e9 <code>axelor<\/code> et l'arborescence <code>\/opt\/axelor<\/code>. Toutes les commandes s'ex\u00e9cutent en <code>sudo<\/code>.<\/p>\r\n\r\n      <div class=\"gd-sub\">1. Pr\u00e9parer le syst\u00e8me<\/div>\r\n      <p>Mettre \u00e0 jour, cr\u00e9er l'utilisateur de service et ouvrir le pare-feu (HTTPS uniquement).<\/p>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo apt update &amp;&amp; sudo apt upgrade -y\r\nsudo apt install -y bash-completion nano unzip\r\nsudo adduser --system --group --home \/opt\/axelor axelor\r\nsudo ufw allow OpenSSH &amp;&amp; sudo ufw allow 443\/tcp &amp;&amp; sudo ufw enable<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">2. Installer PostgreSQL 16<\/div>\r\n      <p>Cr\u00e9er l'utilisateur, activer l'extension <code>unaccent<\/code> puis cr\u00e9er la base.<\/p>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo apt install -y postgresql\r\nsudo -u postgres createuser --no-superuser --pwprompt axelor\r\nsudo -u postgres psql template1 -c \"CREATE EXTENSION IF NOT EXISTS unaccent;\"\r\nsudo -u postgres createdb --owner=axelor axelor<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">3. Installer Java 21<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo apt install -y openjdk-21-jdk\r\njava --version   <span class=\"cmt\"># doit afficher OpenJDK 21<\/span><\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">4. Installer Apache Tomcat 10.1<\/div>\r\n      <p>Cr\u00e9er l'arborescence cible, d\u00e9ployer Tomcat et donner la propri\u00e9t\u00e9 au compte de service.<\/p>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>TC=10.1.55\r\nsudo mkdir -p \/opt\/axelor\/{dist,tomcat,data,conf,backups}\r\ncd \/tmp\r\nwget https:\/\/dlcdn.apache.org\/tomcat\/tomcat-10\/v${TC}\/bin\/apache-tomcat-${TC}.tar.gz\r\nsudo tar xzf apache-tomcat-${TC}.tar.gz -C \/opt\/axelor\/tomcat --strip-components=1\r\nsudo chown -R axelor:axelor \/opt\/axelor<\/code><\/pre>\r\n      <\/div>\r\n      <div class=\"gd-file\"><svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><\/svg>\/opt\/axelor\/tomcat\/conf\/server.xml \u2014 connecteur derri\u00e8re le proxy<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>&lt;Connector port=\"8080\" protocol=\"HTTP\/1.1\" address=\"127.0.0.1\"\r\n           proxyPort=\"443\" scheme=\"https\" secure=\"true\"\r\n           connectionTimeout=\"20000\" redirectPort=\"8443\"\r\n           maxParameterCount=\"1000\" \/&gt;<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">5. D\u00e9ployer le WAR<\/div>\r\n      <p>D\u00e9compresser le livrable dans <code>webapps\/ROOT<\/code>. La configuration externe est d\u00e9sign\u00e9e par la variable <code>AXELOR_CONFIG<\/code> (d\u00e9finie dans l'unit\u00e9 systemd).<\/p>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo -u axelor mkdir -p \/opt\/axelor\/data\/{attachments,exports,templates,reports}\r\nsudo systemctl stop axelor-tomcat\r\nsudo -u axelor rm -rf \/opt\/axelor\/tomcat\/webapps\/ROOT\r\nsudo -u axelor unzip -q \/opt\/axelor\/dist\/axelor-erp-9.0.10.war \\\r\n  -d \/opt\/axelor\/tomcat\/webapps\/ROOT\r\nsudo systemctl start axelor-tomcat<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">6. Mettre en place Caddy (reverse proxy + TLS)<\/div>\r\n      <p>Caddy assure la terminaison TLS (certificat automatique Let's Encrypt) et les en-t\u00eates de s\u00e9curit\u00e9.<\/p>\r\n      <div class=\"gd-file\"><svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><\/svg>\/etc\/caddy\/Caddyfile<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>example.axelor.com {\r\n  tls {\r\n    protocols tls1.2 tls1.3\r\n  }\r\n  header {\r\n    Strict-Transport-Security \"max-age=31536000; includeSubDomains\"\r\n    X-Content-Type-Options \"nosniff\"\r\n    X-Frame-Options \"SAMEORIGIN\"\r\n    Referrer-Policy \"strict-origin\"\r\n  }\r\n  request_body { max_size 20MB }\r\n  reverse_proxy 127.0.0.1:8080 {\r\n    transport http { read_timeout 1800s; write_timeout 1800s }\r\n  }\r\n}<\/code><\/pre>\r\n      <\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo caddy validate --config \/etc\/caddy\/Caddyfile\r\nsudo systemctl enable --now caddy<\/code><\/pre>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 5 \u2014 DOCKER -->\r\n    <section class=\"gd-step reveal\" id=\"docker\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">05<\/span>\r\n        <h2>D\u00e9marrage rapide avec Docker<\/h2>\r\n      <\/div>\r\n      <p>L'image officielle <code>axelor\/aos-ce:9.0<\/code> g\u00e9n\u00e8re automatiquement <code>axelor-config.properties<\/code> \u00e0 partir des variables d'environnement, attend PostgreSQL, applique les migrations puis d\u00e9marre Tomcat.<\/p>\r\n      <div class=\"gd-file\"><svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><\/svg>docker-compose.yml<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>services:\r\n  app:\r\n    image: axelor\/aos-ce:9.0\r\n    environment:\r\n      - PGHOST=postgres\r\n      - PGUSER=axelor\r\n      - PGPASSWORD=&lt;mot_de_passe&gt;\r\n      - PGDATABASE=axelor\r\n      - APP_MODE=prod\r\n      - JAVA_XMX=4096m\r\n    ports:\r\n      - \"8080:8080\"\r\n    depends_on: [postgres]\r\n    volumes:\r\n      - app_data:\/data\r\n    healthcheck:\r\n      test: [\"CMD\", \"curl\", \"-f\", \"http:\/\/localhost:8080\/health\"]\r\n      interval: 10s\r\n      timeout: 5s\r\n      retries: 3\r\n      start_period: 1800s\r\n  postgres:\r\n    image: postgres:16\r\n    environment:\r\n      - POSTGRES_USER=axelor\r\n      - POSTGRES_PASSWORD=&lt;mot_de_passe&gt;\r\n      - POSTGRES_DB=axelor\r\n    volumes:\r\n      - postgres_data:\/var\/lib\/postgresql\/data\r\nvolumes:\r\n  app_data:\r\n  postgres_data:<\/code><\/pre>\r\n      <\/div>\r\n      <div class=\"gd-callout\">\r\n        <svg viewBox=\"0 0 24 24\"><path d=\"M9 18h6\"\/><path d=\"M10 22h4\"\/><path d=\"M12 2a7 7 0 0 0-4 12.7c.6.5 1 1.4 1 2.3h6c0-.9.4-1.8 1-2.3A7 7 0 0 0 12 2z\"\/><\/svg>\r\n        <p>En production, placez un reverse proxy Caddy devant le conteneur pour la terminaison TLS, et veillez \u00e0 persister les volumes <code>\/data<\/code> (GED) et la base PostgreSQL.<\/p>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 6 \u2014 CONFIGURATION -->\r\n    <section class=\"gd-step reveal\" id=\"configuration\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">06<\/span>\r\n        <h2>Configuration de l'application<\/h2>\r\n      <\/div>\r\n      <p>Le fichier <code>axelor-config.properties<\/code> est conserv\u00e9 hors du WAR, dans <code>\/opt\/axelor\/conf\/<\/code>, et d\u00e9sign\u00e9 par la variable d'environnement <code>AXELOR_CONFIG<\/code> afin de persister entre les mises \u00e0 jour.<\/p>\r\n      <div class=\"gd-file\"><svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><\/svg>\/opt\/axelor\/conf\/axelor-config.properties<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code><span class=\"cmt\"># === Base de donn\u00e9es ===<\/span>\r\ndb.default.url      = jdbc:postgresql:\/\/localhost:5432\/axelor\r\ndb.default.user     = axelor\r\ndb.default.password = &lt;mot_de_passe&gt;\r\ndb.default.ddl      = update\r\n\r\n<span class=\"cmt\"># === GED (syst\u00e8me de fichiers) ===<\/span>\r\ndata.upload.max-size = 20\r\ndata.upload.dir      = \/opt\/axelor\/data\/attachments\r\ndata.export.dir      = \/opt\/axelor\/data\/exports\r\ntemplate.search-dir  = \/opt\/axelor\/data\/templates\r\nreports.design-dir   = \/opt\/axelor\/data\/reports\r\n\r\n<span class=\"cmt\"># === Application &amp; s\u00e9curit\u00e9 ===<\/span>\r\napplication.mode      = prod\r\napplication.base-url  = https:\/\/example.axelor.com\r\nsession.timeout       = 60\r\nsession.cookie.secure = true<\/code><\/pre>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- \u00c9TAPE 7 \u2014 V\u00c9RIFICATION -->\r\n    <section class=\"gd-step reveal\" id=\"verification\">\r\n      <div class=\"gd-step-head\">\r\n        <span class=\"gd-step-num\">07<\/span>\r\n        <h2>D\u00e9marrage &amp; v\u00e9rification<\/h2>\r\n      <\/div>\r\n      <p>D\u00e9marrer les services dans l'ordre, puis valider la disponibilit\u00e9 via l'endpoint de sant\u00e9.<\/p>\r\n\r\n      <div class=\"gd-sub\">1. D\u00e9marrer les services<\/div>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>sudo systemctl start postgresql\r\nsudo systemctl start axelor-tomcat\r\nsudo systemctl start caddy\r\nsystemctl status postgresql axelor-tomcat caddy --no-pager<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-sub\">2. V\u00e9rifier l'\u00e9tat de sant\u00e9<\/div>\r\n      <p>AOS expose un endpoint <code>\/health<\/code>. Une r\u00e9ponse <code>HTTP 200<\/code> avec <code>{\"status\":\"UP\"}<\/code> confirme le bon d\u00e9marrage.<\/p>\r\n      <div class=\"code-block\">\r\n        <div class=\"code-bar\"><span class=\"code-dots\"><span class=\"code-dot r\"><\/span><span class=\"code-dot y\"><\/span><span class=\"code-dot g\"><\/span><\/span><button class=\"code-copy\" type=\"button\"><svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>Copier<\/button><\/div>\r\n        <pre><code>curl -fs http:\/\/127.0.0.1:8080\/health &amp;&amp; echo \" OK\"\r\n<span class=\"cmt\"># via le reverse proxy :<\/span>\r\ncurl -fs https:\/\/example.axelor.com\/health<\/code><\/pre>\r\n      <\/div>\r\n\r\n      <div class=\"gd-callout\">\r\n        <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><polyline points=\"12 6 12 12 16 14\"\/><\/svg>\r\n        <p><strong>Premier d\u00e9marrage :<\/strong> il peut \u00eatre long \u2014 AOP applique les migrations de sch\u00e9ma et charge l'application. Attendez une r\u00e9ponse <code>HTTP 200<\/code> sur <code>\/health<\/code> avant d'ouvrir l'acc\u00e8s aux utilisateurs.<\/p>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- CTA FINAL -->\r\n    <div class=\"gd-cta-final reveal\">\r\n      <div class=\"gd-cta-final-inner\">\r\n        <h3>Besoin d'accompagnement sur votre projet ?<\/h3>\r\n        <p>D\u00e9couvrez comment notre ERP peut am\u00e9liorer la performance de votre entreprise. Un expert vous contactera rapidement pour \u00e9changer sur votre projet.<\/p>\r\n        <a class=\"btn btn-primary\" href=\"https:\/\/axelor.com\/fr\/demande-axelor-demo\/\">\u00catre recontact\u00e9 <svg viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg><\/a>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <p class=\"gd-meta\"><strong>Guide d'installation mis \u00e0 jour pour AOS 9 \/ AOP 8.2.<\/strong> Contenu \u00e9tabli d'apr\u00e8s le Document d'Architecture Technique et le Dossier d'exploitation \u2014 version 1.0 (12 juin 2026). Page de r\u00e9f\u00e9rence interne, non contractuelle.<\/p>\r\n\r\n  <\/main>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  \/\/ reveal\r\n  const reduced=!!(window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches);\r\n  const t=document.querySelectorAll('.reveal');\r\n  if(reduced||!('IntersectionObserver' in window)){t.forEach(x=>x.classList.add('in'));}\r\n  else{const o=new IntersectionObserver(es=>{es.forEach(e=>{if(e.isIntersecting){e.target.classList.add('in');o.unobserve(e.target);}});},{threshold:0.06});t.forEach(x=>o.observe(x));}\r\n\r\n  \/\/ copier le code\r\n  document.querySelectorAll('.code-copy').forEach(btn=>{\r\n    btn.addEventListener('click',()=>{\r\n      const code=btn.closest('.code-block').querySelector('pre code').innerText;\r\n      const done=()=>{btn.classList.add('copied');const orig=btn.innerHTML;btn.innerHTML='<svg viewBox=\"0 0 24 24\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>Copi\u00e9 !';setTimeout(()=>{btn.classList.remove('copied');btn.innerHTML=orig;},1800);};\r\n      if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(code).then(done).catch(()=>{});}\r\n      else{const ta=document.createElement('textarea');ta.value=code;document.body.appendChild(ta);ta.select();try{document.execCommand('copy');done();}catch(e){}document.body.removeChild(ta);}\r\n    });\r\n  });\r\n\r\n  \/\/ scroll-spy sommaire\r\n  const links=[...document.querySelectorAll('.gd-toc-link')];\r\n  const steps=[...document.querySelectorAll('.gd-step')];\r\n  if('IntersectionObserver' in window && steps.length){\r\n    const spy=new IntersectionObserver(es=>{\r\n      es.forEach(e=>{\r\n        if(e.isIntersecting){\r\n          const id=e.target.id;\r\n          links.forEach(l=>l.classList.toggle('active',l.getAttribute('href')==='#'+id));\r\n        }\r\n      });\r\n    },{rootMargin:'-20% 0px -70% 0px'});\r\n    steps.forEach(s=>spy.observe(s));\r\n  }\r\n})();\r\n<\/script>\r\n<\/body>\r\n<\/html>\r\n\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","content-type":"","inline_featured_image":false,"footnotes":""},"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Guide d&#039;installation | Axelor<\/title>\n<meta name=\"description\" content=\"Choisissez la m\u00e9thode qui vous convient pour installer Axelor. Nos guides d&#039;installation vous guideront dans la m\u00e9thode !\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/axelor.com\/installation-guide\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Guide d&#039;installation | Axelor\" \/>\n<meta property=\"og:description\" content=\"Choisissez la m\u00e9thode qui vous convient pour installer Axelor. Nos guides d&#039;installation vous guideront dans la m\u00e9thode !\" \/>\n<meta property=\"og:url\" content=\"https:\/\/axelor.com\/installation-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"Axelor\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-20T13:49:52+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/axelor.com\/installation-guide\/\",\"url\":\"https:\/\/axelor.com\/installation-guide\/\",\"name\":\"Guide d'installation | Axelor\",\"isPartOf\":{\"@id\":\"https:\/\/axelor.com\/#website\"},\"datePublished\":\"2022-05-05T07:50:03+00:00\",\"dateModified\":\"2026-07-20T13:49:52+00:00\",\"description\":\"Choisissez la m\u00e9thode qui vous convient pour installer Axelor. Nos guides d'installation vous guideront dans la m\u00e9thode !\",\"breadcrumb\":{\"@id\":\"https:\/\/axelor.com\/installation-guide\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/axelor.com\/installation-guide\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/axelor.com\/installation-guide\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/axelor.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Guide d&#8217;installation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/axelor.com\/#website\",\"url\":\"https:\/\/axelor.com\/\",\"name\":\"Axelor\",\"description\":\"ERP CRM BPM Open Source\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/axelor.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Guide d'installation | Axelor","description":"Choisissez la m\u00e9thode qui vous convient pour installer Axelor. Nos guides d'installation vous guideront dans la m\u00e9thode !","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/axelor.com\/installation-guide\/","og_locale":"fr_FR","og_type":"article","og_title":"Guide d'installation | Axelor","og_description":"Choisissez la m\u00e9thode qui vous convient pour installer Axelor. Nos guides d'installation vous guideront dans la m\u00e9thode !","og_url":"https:\/\/axelor.com\/installation-guide\/","og_site_name":"Axelor","article_modified_time":"2026-07-20T13:49:52+00:00","twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/axelor.com\/installation-guide\/","url":"https:\/\/axelor.com\/installation-guide\/","name":"Guide d'installation | Axelor","isPartOf":{"@id":"https:\/\/axelor.com\/#website"},"datePublished":"2022-05-05T07:50:03+00:00","dateModified":"2026-07-20T13:49:52+00:00","description":"Choisissez la m\u00e9thode qui vous convient pour installer Axelor. Nos guides d'installation vous guideront dans la m\u00e9thode !","breadcrumb":{"@id":"https:\/\/axelor.com\/installation-guide\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/axelor.com\/installation-guide\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/axelor.com\/installation-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/axelor.com\/"},{"@type":"ListItem","position":2,"name":"Guide d&#8217;installation"}]},{"@type":"WebSite","@id":"https:\/\/axelor.com\/#website","url":"https:\/\/axelor.com\/","name":"Axelor","description":"ERP CRM BPM Open Source","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/axelor.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"}]}},"_links":{"self":[{"href":"https:\/\/axelor.com\/fr\/wp-json\/wp\/v2\/pages\/341765"}],"collection":[{"href":"https:\/\/axelor.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/axelor.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/axelor.com\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/axelor.com\/fr\/wp-json\/wp\/v2\/comments?post=341765"}],"version-history":[{"count":53,"href":"https:\/\/axelor.com\/fr\/wp-json\/wp\/v2\/pages\/341765\/revisions"}],"predecessor-version":[{"id":388015,"href":"https:\/\/axelor.com\/fr\/wp-json\/wp\/v2\/pages\/341765\/revisions\/388015"}],"wp:attachment":[{"href":"https:\/\/axelor.com\/fr\/wp-json\/wp\/v2\/media?parent=341765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}