project.yml — IaC Manifest
The single source of truth for each Odoo project. Located at the root of every project directory.
Full Example
project:
name: client1
author: My Agency
project_hash: a1b2c3d4e5f6g7h8i9j0... # auto-generated (64-char SHA-256)
master_password: "supersecret" # optional
environments:
main:
env_hash: abc123def456789 # auto-generated (15-char)
server:
image: odoo
version: 18.0
env_type: dev # "dev" or "prod"
users: 5
ram: auto # "auto" or integer GB
domain: client1.com # required for production
port: 8069 # dev only
websecure: true # production: Let's Encrypt
traefik_name: client1-dev # optional: override Traefik router name
repositories: # optional
- url: https://github.com/user/custom_addons.git
branch: 18.0
token: ghp_xxxx # optional
preinstall: # optional shell commands
- "npm install -g less"
postinstall: # optional shell commands
- "pip install odoo-addon-l10n_ar"
command: -- --dev=reload # optional custom Odoo command
Project Fields
| Field |
Required |
Description |
name |
Yes |
Project name (directory name) |
author |
Yes |
Person or agency owning the project |
project_hash |
Auto |
Unique 64-char SHA-256 identifier |
master_password |
No |
Odoo admin password (auto-generated if absent) |
Environment Fields
| Field |
Required |
Description |
env_hash |
Auto |
Unique 15-char identifier |
server.image |
Yes |
Docker image (e.g. odoo, custom-build) |
server.version |
Yes |
Odoo version |
server.env_type |
Yes |
dev or prod |
server.users |
Yes |
Estimated concurrent users (affects workers) |
server.ram |
Yes |
RAM in GB or auto |
server.domain |
Prod |
Domain name |
server.port |
Dev |
Host port for Odoo |
server.websecure |
Prod |
Enable Let's Encrypt |
server.proxy_mode |
No |
Enable proxy_mode = True in odoo.conf |
server.traefik_name |
No |
Override Traefik router name |
repositories |
No |
List of Git repos to clone into addons/ |
preinstall |
No |
Shell commands before pip install |
postinstall |
No |
Shell commands after pip install |
command |
No |
Custom Odoo CLI command |