Installation Guide - Axelor Open Suite 9
Install Axelor Open Suite 9 (Axelor Open Platform 8.2) on a modern foundation. This guide covers the prerequisites, step-by-step installation on Ubuntu, quick start with Docker, configuration, and verification of the instance.
The AOS 9 technical stack
Axelor Open Suite 9 is built on Axelor Open Platform 8.2 and the Jakarta EE 10 namespace. The versions below form the minimum reference baseline for a production deployment.
| Component | Version | Notes |
|---|---|---|
| Java / JDK | 21 LTS | OpenJDK; G1 Garbage Collector by default. |
| Apache Tomcat | 10.1.x | Compatible with Jakarta Servlet 6.0 (Jakarta EE 10). |
| PostgreSQL | ≥ 16 | Requires the unaccent extension. |
| Caddy (reverse proxy) | ≥ 2.x | Automatic HTTPS via ACME; Nginx ≥ 1.24 as an alternative. |
| Axelor Open Platform | 8.2 | Framework embedded in the WAR. |
| Axelor Open Suite | 9 | ERP / CRM / BPM business suite. |
| Gradle | 8.14.5 | Only for building a custom WAR. |
| Node.js | ≥ 24.13 | Builds the React 19.2 interface (TypeScript 5.9, Vite 7). |
Migrating from AOS 8: this is not a simple redeployment. AOS 9 requires an environment shift — Java 8 → Java 21, Tomcat 9 → Tomcat 10.1 (Jakarta EE 10), and a switch from CBC to GCM encryption. Plan your migration accordingly.
Server & client prerequisites
Reference system: Ubuntu Server LTS 24.04 (minimal installation, no graphical interface). Size the server according to the number of users.
| Users | vCPU | RAM | Disk | Profile |
|---|---|---|---|---|
| ~10 | 2 vCPU | 8 GiB | 50 GB | Micro-business / basic CRM use |
| ~30 | 4 vCPU | 16 GiB | 50 GB | SMB, standard deployment |
| ~60 | 8 vCPU | 32 GiB | 50 GB | SMB, intensive use |
| ~120 | 16 vCPU | 64 GiB | 50 GB | Mid-cap company, heavy load |
Estimates assume a co-located database and 50 GB of storage. For high data volumes, plan a dedicated configuration or a high-availability cluster topology.
| Browser | Minimum compatible | Recommended |
|---|---|---|
| Google Chrome / Chromium | 94 | Latest major version |
| Microsoft Edge | 94 | Latest major version |
| Mozilla Firefox | 93 | ESR 140 or recent Stable |
| Apple Safari (macOS / iOS) | 16.4 | Last 3 versions |
AOS 9 is a full web solution (React 19, ES2022). JavaScript and domain cookies must be allowed. Internet Explorer is not supported.
Download
Choose the method that fits your context: classic deployment from a WAR archive, or containerization via the official Docker image.
The axelor-erp-9.0.x.war deliverable (290 to 320 MB) deploys into Tomcat 10.1. Ideal for a controlled deployment on a Linux server with a Caddy reverse proxy. Follow the installation.
The official axelor/aos-ce:9.0 image (Community Edition) with PostgreSQL 16 enables a quick start driven by environment variables. Docker quick start.
Installation on Ubuntu
Single-server deployment with a dedicated service account axelor and the /opt/axelor directory tree. All commands are run with sudo.
Update the system, create the service user, and open the firewall (HTTPS only).
sudo apt update && sudo apt upgrade -y
sudo apt install -y bash-completion nano unzip
sudo adduser --system --group --home /opt/axelor axelor
sudo ufw allow OpenSSH && sudo ufw allow 443/tcp && sudo ufw enable
Create the user, enable the unaccent extension, then create the database.
sudo apt install -y postgresql
sudo -u postgres createuser --no-superuser --pwprompt axelor
sudo -u postgres psql template1 -c "CREATE EXTENSION IF NOT EXISTS unaccent;"
sudo -u postgres createdb --owner=axelor axelor
sudo apt install -y openjdk-21-jdk
java --version # should print OpenJDK 21
Create the target directory tree, deploy Tomcat, and give ownership to the service account.
TC=10.1.55
sudo mkdir -p /opt/axelor/{dist,tomcat,data,conf,backups}
cd /tmp
wget https://dlcdn.apache.org/tomcat/tomcat-10/v${TC}/bin/apache-tomcat-${TC}.tar.gz
sudo tar xzf apache-tomcat-${TC}.tar.gz -C /opt/axelor/tomcat --strip-components=1
sudo chown -R axelor:axelor /opt/axelor
<Connector port="8080" protocol="HTTP/1.1" address="127.0.0.1"
proxyPort="443" scheme="https" secure="true"
connectionTimeout="20000" redirectPort="8443"
maxParameterCount="1000" />
Unpack the deliverable into webapps/ROOT. The external configuration is referenced by the AXELOR_CONFIG variable (defined in the systemd unit).
sudo -u axelor mkdir -p /opt/axelor/data/{attachments,exports,templates,reports}
sudo systemctl stop axelor-tomcat
sudo -u axelor rm -rf /opt/axelor/tomcat/webapps/ROOT
sudo -u axelor unzip -q /opt/axelor/dist/axelor-erp-9.0.10.war \
-d /opt/axelor/tomcat/webapps/ROOT
sudo systemctl start axelor-tomcat
Caddy handles TLS termination (automatic Let's Encrypt certificate) and security headers.
example.axelor.com {
tls {
protocols tls1.2 tls1.3
}
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
Referrer-Policy "strict-origin"
}
request_body { max_size 20MB }
reverse_proxy 127.0.0.1:8080 {
transport http { read_timeout 1800s; write_timeout 1800s }
}
}
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl enable --now caddy
Quick start with Docker
The official axelor/aos-ce:9.0 image automatically generates axelor-config.properties from environment variables, waits for PostgreSQL, applies migrations, and then starts Tomcat.
services:
app:
image: axelor/aos-ce:9.0
environment:
- PGHOST=postgres
- PGUSER=axelor
- PGPASSWORD=<mot_de_passe>
- PGDATABASE=axelor
- APP_MODE=prod
- JAVA_XMX=4096m
ports:
- "8080:8080"
depends_on: [postgres]
volumes:
- app_data:/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 1800s
postgres:
image: postgres:16
environment:
- POSTGRES_USER=axelor
- POSTGRES_PASSWORD=<mot_de_passe>
- POSTGRES_DB=axelor
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
app_data:
postgres_data:
In production, place a Caddy reverse proxy in front of the container for TLS termination, and make sure to persist the /data (document management) volume and the PostgreSQL database.
Application configuration
The axelor-config.properties file is kept outside the WAR, in /opt/axelor/conf/, and referenced by the AXELOR_CONFIG environment variable so it persists across updates.
# === Database ===
db.default.url = jdbc:postgresql://localhost:5432/axelor
db.default.user = axelor
db.default.password = <mot_de_passe>
db.default.ddl = update
# === Document management (file system) ===
data.upload.max-size = 20
data.upload.dir = /opt/axelor/data/attachments
data.export.dir = /opt/axelor/data/exports
template.search-dir = /opt/axelor/data/templates
reports.design-dir = /opt/axelor/data/reports
# === Application & security ===
application.mode = prod
application.base-url = https://example.axelor.com
session.timeout = 60
session.cookie.secure = true
Startup & verification
Start the services in order, then confirm availability via the health endpoint.
sudo systemctl start postgresql
sudo systemctl start axelor-tomcat
sudo systemctl start caddy
systemctl status postgresql axelor-tomcat caddy --no-pager
AOS exposes a /health endpoint. An HTTP 200 response with {"status":"UP"} confirms a successful startup.
curl -fs http://127.0.0.1:8080/health && echo " OK"
# via the reverse proxy:
curl -fs https://example.axelor.com/health
First startup: it can take a while — AOP applies schema migrations and loads the application. Wait for an HTTP 200 response on /health before opening access to users.
Need help with your project?
Discover how our ERP can improve your company's performance. An expert will contact you shortly to discuss your project.
Get in touch