Odoo20
OfficialDocker app from Eurotimmy's Repository
Overview
Odoo is an open-source suite of integrated business applications that includes various modules for different business functions such as accounting, project management, inventory management, human resources, and more. It provides a comprehensive and modular solution for businesses to manage and streamline their processes.
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
CRM | e-Commerce | Accounting | Inventory | PoS | Project management | MRP
:: IMPORTANT NOTES ::
*** BETA - NOT YET TESTED ON Unraid ***
Do NOT use with production data without testing first. Provided as-is with no warranty; use at your own risk. The template author accepts no responsibility for any loss of data. Keep backups and do your own due diligence.
Odoo 20 requires PostgreSQL 16 or later. A separate PostgreSQL container is required.
See the README.md file at https://github.com/Eurotimmy/Unraid-templates/blob/main/Odoo20/README.md
Readme
View on GitHubNotes for using Odoo20 on an Unraid server via the CA installation
[!CAUTION] BETA – NOT YET TESTED ON UNRAID. DO NOT USE WITH PRODUCTION DATA WITHOUT TESTING FIRST.
This Odoo20 template is new and has not been fully tested on Unraid. It is based on the Odoo19 template and the official Odoo 20 Docker image. Test it on a separate, non-production setup first, and keep backups of your PostgreSQL database and filestore.
These templates and notes are provided as-is, free of charge, with no warranty of any kind. You use them at your own risk. I accept no responsibility for any loss of data, downtime or other issues arising from their use, or for any due diligence you choose not to do beforehand.
Please report anything that does or doesn't work in the support thread.
- Installing the Odoo container in Unraid... the template defaults are expected to work as-is, but this has not yet been confirmed for Odoo20
- Odoo20 requires PostgreSQL 16 or later (Odoo 19 only needed 13). Check your PostgreSQL container version before installing; many existing Unraid setups run an older version
- Odoo20 also connects to the default
postgresdatabase for some shared background tasks (the newdb_systemoption). With the standard PostgreSQL container from CA this just works. If your database user can only access a single database, either grant it access topostgresor setdb_systeminodoo.confto a database it can use - Installing PostgreSQL was also straight-forward and you'll only need to note down the settings you select here to transpose into the 'odoo.conf' file (detailed below)
- The support thread for this container is located in the Unraid Forums here, please post any questions or contributions
IMPORTANT NOTE 
Permissions on the mapped volumes
I needed to use the Extra Parameters in the Unraid template 'ADVANCED VIEW', with the value set as --user=100:101 due to having some issues with the container being able to write to the 3 mapped volumes
The process I followed was to check the uid and gid in the Odoo20 container with docker exec -it Odoo20 sh -c 'echo "uid=$(id -u) gid=$(id -g)"' which returned uid=100 gid=101
I then manually made the folder I had seen in the error logs with mkdir -p /mnt/user/appdata/odoo20/data/sessions
Then to CHOWN the folders with chown -R 100:101 /mnt/user/appdata/odoo20
And, finally CHMOD the folders with chmod -R 775 /mnt/user/appdata/odoo20
I was good from the next restart of the Odoo20 container
After installing Odoo, return to Unraid to view the container template in 'ADVANCED VIEW'
We will need to make a change to the Post Arguments section to avoid having a security exposure open via a default Admin account
The Post Arguments need to be removed after the initial first successful boot
- I have used the
-i basecommand as Odoo (17 & 18) wouldn't initialise its DB during its first startup without it - The
-i basecommand must be removed to make for a safe environment
DEMO DATA (changed in Odoo20) 
- Like Odoo19 (and unlike Odoo17 / Odoo18), Odoo20 does not install demo data by default, so the default
-i basegives you a clean database - If you want demo data (handy for a test instance), change your
Post Argumentsto be-i base --with-demo --stop-after-init - This will initialise Odoo20 with the demo data, and then stop Odoo20 from running.
- Please restart your container after removing
-i base --with-demo --stop-after-initfrom yourPost Arguments - Alternatively, set
with_demo = Trueinodoo.confbefore the first start-up
INSTALLATION STEPS 
The odoo.conf file needs to be copied in to the
Config Locationpath on Unraid server
TheConfig Locationpath is selected by you in the Odoo20 settings when installing in Unraid CA
Your typicalConfig Locationpath may be at/mnt/user/appdata/odoo20/configMy odoo.conf file if you'd like to use it
For my path (above), within the Unraid Shell / CLI:
-
cd /mnt/user/appdata/odoo20/config -
wget https://raw.githubusercontent.com/Eurotimmy/unraid-templates/main/Odoo20/odoo.conf -
nano odoo.conf
- The
odoo.conffile needs to be edited and then your Odoo Docker container needs to be started / restarted:
admin_passwd = (This password will become hashed on first start-up, for security reasons)
db_host = (Use the IP address assigned to the PostgreSQL container, in the 'Docker' tab)
db_port = (Enter what your PostgreSQL 'Container Port' is set to, from your PostgreSQL install)
db_user = (Enter what your PostgreSQL 'POSTGRES_USER' is set to, from your PostgreSQL install)
db_password = (Enter what your PostgreSQL 'POSTGRES_PASSWORD' is set to, from your PostgreSQL install)
db_name = (Enter what your PostgreSQL 'POSTGRES_DB' is set to, from your PostgreSQL install)
- Once your container starts, open the Odoo Web UI from your Odoo icon
Change the admin password straight away (Settings > Users)
- Username: admin
- Password: admin
NPM (Nginx Proxy Manager) - Reverse Proxy settings 
I am using NPM to reverse proxy my Odoo instance via my own domain name
You will need to edit your odoo.conf file (in your Config Location) to include proxy_mode = True
In NPM on my odoo.example.com domain I use the following in my location settings (within the 'Advanced' tab)
proxy_pass $forward_scheme://$server:$port;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
}
If you run Odoo20 with workers above 0 (multi-process mode), the live chat / notification websocket is served on port 8072.
Map the Live Chat / WebSocket Port in the template (ADVANCED VIEW) and add a second location in NPM:
location /websocket {
proxy_pass $forward_scheme://$server:8072;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
With workers = 0 (the default) you don't need this.
Upgrading from Odoo19 
- Odoo major versions cannot be upgraded by just changing the image tag. Pointing an Odoo19 database at Odoo20 will not work
- Install Odoo20 as a separate container with its own appdata folders and its own (new) database
- To migrate existing data use the official Odoo Upgrade service or the community OpenUpgrade project, then restore into Odoo20
- Any custom / community addons in
extra-addonsmust be Odoo 20 compatible versions - Back up your PostgreSQL database and filestore before trying any upgrade
Additional Resources 
Theres a great GitHub Gist here with well documented options you can use in the odoo.conf file if you want greater control
Requirements
Categories
Download Statistics
Total Downloads Over Time
Related apps
Explore more like this
Explore allLinks
Details
Runtime arguments
- Web UI
http://[IP]:[PORT:8069]- Network
bridge- Shell
bash- Privileged
- false
- Extra Params
--user=100:101
Template configuration
Port to access the Odoo web interface
- Target
- 8069
- Default
- 8069
- Value
- 8069
Only needed if you set workers above 0 in odoo.conf (multi-process mode). Route /websocket to this port in your reverse proxy.
- Target
- 8072
- Default
- 8072
Odoo filestore (attachments, sessions, etc.)
- Target
- /var/lib/odoo
- Default
- /mnt/user/appdata/odoo20/data
- Value
- /mnt/user/appdata/odoo20/data
Directory containing odoo.conf
- Target
- /etc/odoo
- Default
- /mnt/user/appdata/odoo20/config
- Value
- /mnt/user/appdata/odoo20/config
Custom/community addons (must be Odoo 20 compatible)
- Target
- /mnt/extra-addons
- Default
- /mnt/user/appdata/odoo20/extra-addons
- Value
- /mnt/user/appdata/odoo20/extra-addons