Welcome to Odoocker, a game-changer in the world of Odoo Development and Deployment. This tool is meticulously crafted to revolutionize your experience with Odoo, ensuring simplicity, efficiency, and a top-tier development journey. And while it’s rooted in the principles of the Official Odoo Docker setup, it goes several steps beyond.
Whether you're using the Community or Enterprise edition, this Docker solution is tailored just for you.
Best part of this? You don't need any prior knowledge of Docker, Odoo or any technology that involves this Framework. We stick to Docker philosophy: Use it, then learn about it.
Feel free to post a Pull Request to continue enhancing this project.
- 🌐 Universal: Suitable for both Odoo Community and Enterprise editions.
- 📦 Easy Setup: Clone, configure
.envfile, and you're ready to deploy. - 🔒 Secure: Automatic SSL certificate renewal to keep your data safe (for production only).
In essence, Odoocker isn't just another tool, it's a philosophy. So, whether you’re a seasoned Odoo veteran or just starting your journey, Odoocker is here to make your journey easier.
- Clone and Configure:
git clone git@github.com:odoocker/odoocker.git
cd odoocker
cp .env.example .env && cp docker-compose.override.local.yml docker-compose.override.yml
- Hosts & Domains: To ensure everything runs smoothly, remember to add the necessary domains to your hosts file.
For Unix:
echo '127.0.0.1 erp.odoocker.test' | sudo tee -a /etc/hosts
echo '127.0.0.1 pgadmin.odoocker.test' | sudo tee -a /etc/hosts
For Windows, manually add these lines to C:\Windows\System32\drivers\etc\hosts:
127.0.0.1 erp.odoocker.test
127.0.0.1 pgadmin.odoocker.test
The environment variables located in .env provide dynamic configurations to Odoo and the project in general.
The odoo.conf file is generated by the odoorc.sh script based on the environment variables.
This file is divided into sections. You will most likely focus on the Main Configuration section. It provides quick access to project and odoo.conf variables. The rest of the sections contain container-specific variables. Note: you may find repeated variables like SUPPORT_EMAIL=${SUPPORT_EMAIL} across multiple sections. That is intentional and explicitly denotes that the same variable is being shared across different containers.
Sample .env file:
# Odoo
APP_ENV=debug
INIT=
UPDATE=my_custom_addon
LOAD=base,web
WORKERS=2
DEV_MODE=reload,qweb
DOMAIN=erp.odoocker.test
# Enterprise (GitHub User with access to Odoo Enterprise [https://github.com/odoo/enterprise] Repo)
# If not present, Odoo Community will be brought up.
GITHUB_USER=odoocker
GITHUB_ACCESS_TOKEN=ghp_token
# Database
ADMIN_PASSWD=odoo
DB_HOST=postgres (container or external host)
DB_PORT=5432
DB_NAME=my-odoo-db
DB_USER=odoo
DB_PASSWORD=odoo
LOAD_LANGUAGE=es_MX
...
The stack is controlled through the .env file using Compose profiles.
SERVICESdefines which service profiles are started.USE_*variables enable feature-specific configuration used by the containers.
Default local setup:
SERVICES=odoo,nginx,proxy,postgres
Optional services:
acme: enables the Let's Encrypt companion for production SSL.pgadmin: enables the PgAdmin container for database administration.keydb: enables the Redis-compatible session store.minio: enables S3-compatible object storage.
Examples:
# Enable PgAdmin
USE_PGADMIN=true
SERVICES=odoo,nginx,proxy,postgres,pgadmin
# Enable Redis-compatible session storage
USE_REDIS=true
SERVICES=odoo,nginx,proxy,postgres,keydb
# Enable S3-compatible object storage
USE_S3=true
SERVICES=odoo,nginx,proxy,postgres,minio
# Production SSL
SERVICES=odoo,nginx,proxy,postgres,acme
When you enable an optional service, keep the related USE_* variable and the matching service profile aligned.
odoo/entrypoint.sh file is the gateway for our Odoo container. Depending on the APP_ENV and the rest of the environment variables, it determines how to start the Odoo service (like local, testing, production, etc.) with different configurations.
In all environments, odoo.conf follows the .env file variables. Some environments may use command-line parameters to override specific configurations.
To bring up the configured environment, run:
docker-compose up -d --build && docker-compose logs odoo
To restart from a clean stopped state:
docker-compose down && docker-compose up -d --build && docker-compose logs odoo
These environments (APP_ENV=fresh or APP_ENV=restore) start without creating a working database. They are ideal for setting up a fresh database instance or restoring a production database.
This environment (APP_ENV=local) will strictly follow the .env variables with no command-line overwrites. You'll most likely be using this regularly.
Use DEV_MODE=reload,qweb to activate hot reload when changing python and xml files.
If you prefer to update packages every time you restart the Odoo container, you can set UPDATE=module1,module2,module3.
This environment (APP_ENV=debug) works the same way as local, but it starts Odoo using the debugpy library. Thanks to our .vscode/launch.json, if you are using Visual Studio Code, you can start a debugger session so the container is aware of your breakpoints and stops wherever you need.
This environment (APP_ENV=testing) is specific to running tests (and will be included in a CI/CD pipeline in a future version). It helps test the modules you are developing to support safer deployments.
A test_DB_NAME database is created automatically.
The addons defined in ADDONS_TO_TEST=addon_1 are installed in that fresh database.
Use TEST_TAGS=test_tag_1 to filter your tests.
NOTE: Avoid running tests without tags; otherwise, it will trigger tests in all installed addons and we don't want this. For now, let's assume Odoo Community & Enterprise tests passed and only focus on the things you need to test.
This environment (APP_ENV=staging) sets UPDATE=all; it allows us to update all installed addons at once.
It also allows you to install new packages before the upgrade through INIT.
It's highly recommended to use this command to run this environment:
docker-compose down && docker-compose pull && docker-compose build --no-cache && docker-compose up -d && docker-compose logs -f odoo
This will pull the latest Odoo Community, Enterprise, Extra and Custom addons, basically, it upgrades the whole Odoo instance to the newest. Additionally, it will also pull the latest images of the other containers in this project. This environment is perfect for deployments.
NOTE: Do not bring down & up again, unless you want to perform a whole upgrade again.
This environment (APP_ENV=production) ensures no demo data is loaded, debugging and dev_mode are turned off. It also brings up the Let's Encrypt container, so you won't worry about SSL Certificates anymore! Some .env variables are overwritten in this setup.
- Take down previous setup of containers
docker-compose down
- Replace the
docker-compose.override.ymlwithdocker-compose.override.production.ymlto bringLet's Encryptcontainer.
cp docker-compose.override.production.yml docker-compose.override.yml
- Update .env
SERVICES(addacme) andACME_CA_URI(use production link). - Make sure the DNS record of your
DOMAINis pointing to your server. - Rebuild the containers
docker-compose up -d --build && docker-compose logs odoo
The following tips will enhance your developing and production experience.
If you are using Visual Studio Code & the Docker Extension is installed, you can open the Odoo Container in the ROOT_PATH. There you will find all Odoo Community Addons, Enterprise Addons, Extra Addons and Custom Addons in the same folder level.
Using the Search Panel will allow you to look at every single reference across the whole Odoo instance and not just in your addons.
alias odoo='cd odoocker'
alias hard-deploy='docker-compose down && git pull && docker-compose pull && docker-compose build --no-cache && docker-compose up -d && docker-compose logs -f odoo'
alias deploy='docker-compose down && git pull && docker-compose up -d --build && docker-compose logs -f --tail 2000 odoo'
alias logs='docker-compose logs -f --tail 2000 odoo'
...without having a tested backup of the database.
Keep in mind that dropping volumes will destroy database data, Odoo configuration, filestore data, Let's Encrypt certificates, and more. If you execute this command several times in prod in a short period of time, you may reach the Let's Encrypt certificate limit and Odoocker will not be able to generate new ones for several hours.
- Log into the odoo container
docker-compose exec odoo bash
- Start Odoo shell running:
odoo shell --http-port=8071
- Log into the odoo container
docker-compose exec -u root odoo
- Navigate to custom addons folder inside the container
cd /usr/lib/python3/dist-packages/odoo/custom-addons
- Create new addons running:
odoo scaffold <addon_name>
- The new addon will be available in the
odoo/custom_addonsfolder in this project.
Add the following to ~/.bashrc
# Color git branches
function parse_git_branch () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
#PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
# Color git branches
PS1="${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \[\033[01;31m\]\$(parse_git_branch)\[\033[00m\]\$ "
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
- Any other Postgres Database Manager can connect to the DB using the
.envcredentials.
- This project comes with a PgAdmin container that is controlled through Compose profiles.
To manage the database, Odoocker provides a PgAdmin container.
To enable it, update your
.envfile:
USE_PGADMIN=true
SERVICES=odoo,nginx,proxy,postgres,pgadmin
Then bring the stack up as usual:
docker-compose up -d --build
And to turn it down:
docker-compose down
If your instance has pgAdmin, make sure you adapt your aliases to this configuration.
Note: the deployment process is easier & faster with aliases.
- Backup the production Databases from
/web/database/manager. - Run
sudo apt update && sudo apt upgrade -y
- If packages are kept, install them
sudo apt install <kept packages>
- Restart the server
sudo reboot
- Make sure there are no more upgrades or possible kept packages
sudo apt update && sudo apt upgrade -y
- Go to the project folder in /home/ubuntu or (~)
cd ~/odoocker
or with alias:
odoo
- Pull the latest
mainbranch changes.
git pull origin main
- Set the
Stagingenvironment. - Set the
Productionenvironment.
This project is based on the Official Odoo Docker image. We've strived to ensure a seamless integration with the original Docker setup while making necessary customizations to suit our requirements. We encourage contributors and users to frequently refer to the official documentation for foundational concepts and updates. Thank you for your continued support and trust in our project.