First of all it does not has to be the best way but it's the way that works for me and I would like to share it with you.
1- Docker more about it.
at the start we need a postgres database server so we create a container using docker.
docker run -d p 5436:5432 -v -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name dev_pg_12 postgres:12
This means we have a pg server exposed at port 5436 so we can access it in localhost:5436
so you want to get on with your life which is running odoo server and develop awesome odoo apps (or you would be wasting your life here my friend 😕)
so you have this project which based on odoo 12 and you have some custom code so you need to create a docker file to tell docker how to create your container.
1 FROM odoo:12.0 2 USER root 3 RUN mkdir /opt/odoo && mkdir /opt/odoo/extra-addons 4 WORKDIR /opt/odoo 5 COPY requirements.txt requirements.txt 6 RUN apt-get update && apt-get install -y python3-pip && pip3 install --no-cache-dir -r requirements.txt 7 RUN chown -R odoo /opt/odoo
1- The first line mean we are going to use odoo:12.0 as the base image so after this step we gonna get all v12 stuff.
2- Switch to the root user (we need the permissions).
3- We need to create directory to store custom modules(you know, what you think you need to add or change in odoo functionality you big shot).
4- Change the working directory (like 'cd' in bash).
5- Copping the requirements file ,I forgot if you have a requirements file for python of course you need to put it at the same directory as the docker file.
6- Just installing the requirements.txt file.
7- Change the owner of the /opt/odoo we created in step 3 cause the service runs with odoo user permissions.
save the file above on with name (Dockerfile) along side requirements.txt file.
if you don't have requirements.txt omit steps 5 and 6.
Now in the same directory open the terminal and run
docker build -t custom_odoo_v12 .
Congratulation you have a working odoo v12 image on your device.
In this step you need to get odoo source, For v12
now extract it any where in your pc.
and navigate to the odoo directory inside it
the path should be something like
next we gonna need an odoo.conf file
let's keep it simple
[options] addons_path = /opt/odoo/extra-addons/ data_dir = /var/lib/odoo
next we gonna run odoo service by creating an odoo container
docker run -p 8082:8069 -v odoo12-dev-web-data:/var/lib/odoo -v path/to/custom/addons:/opt/odoo/extra-addons -v /etc/odoo.conf:/etc/odoo/odoo.conf -v /opt/odoo_12.0.latest/odoo-12.0.post20210215/odoo:/usr/lib/python3/dist-packages/odoo --name odoo12-dev --link dev_pg_12:db -t custom_odoo_v12
what does it means 🤔
1) -p 8082:8069
Mapping odoo port(8069) to port(8082) on the host (your device).
2) -v odoo12-dev-web-data:/var/lib/odoo
Creating a volume to store odoo data (like filestore ...).
3) -v path/to/custom/addons:/opt/odoo/extra-addons
You add the path to your custom addons.
4) -v /etc/odoo.conf:/etc/odoo/odoo.conf
The path to the conf file
5) -v /opt/odoo_12.0.latest/odoo-12.0.post20210215/odoo:/usr/lib/python3/dist-packages/odoo
The path to odoo source (this is optional you need it if you gonna debug the odoo files like set up a debugger or add some print statements 😅).
6) --name odoo12-dev
The name of the container.
7) --link dev_pg_12:db
Linking the PostgreSQL db to odoo as db (this is confusing I know but it's the easiest way to do it 🤷♂️ ).
8) -t custom_odoo_v12
The Image we gonna use.
now you can access the service on HTTP://localhost:8082.
to restart the service and see the log just do
docker restart odoo12-dev && docker logs -f odoo12-dev
1- Odooly get it.
You can always access odoo service via the browser like (chrome , firefox ,...), But some highly repeated processes like upgrading modules or reading data from a model or checking users access rights and rules you may need a faster way to do things.
I personally prefer Odooly it's an amazing tool which I depend on daily.
to access odoo via Odooly you just
odooly --server="http://localhost:8082" -d dev-db-1 -u admin -p admin
then you will be inside Odooly terminal just type help and you will find lots of options like
3- env['hr.employee'].sudo(uid).search() #uid of a user