My Odoo Development Environment
Tags: docker, odoo, odooly, devops
Published: 2021-02-15 21:07:06

*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.*

## RUNNING THE SERVICE
###*Technologies used:*
1- Docker *[more about it](https://www.docker.com/)*.

at the start we need a postgres database server so we create a container using docker.
```bash
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.

```dockerfile
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
```
#####What every line means:
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 

```bash
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 
```bash
wget https://nightly.odoo.com/12.0/nightly/tgz/odoo_12.0.latest.zip
```
now extract it any where in your pc.
and navigate to the odoo directory inside it
the path should be something like 
```bash
/opt/odoo_12.0.latest/odoo-12.0.post20210215/odoo
```
next we gonna need an odoo.conf file
let's keep it simple
/etc/odoo.conf
```
[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
```

##MANIPULATING THE DATA:
###*Technologies used:*
1- Odooly *[get it](https://pypi.org/project/Odooly/)*.

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
```
#####*there are lots of variations but I prefer this one*
then you will be inside Odooly terminal just type help and you will find lots of options like 
1- env.install("module_name")
2- env['res.partner'].search([],limit=10)
3- env['hr.employee'].sudo(uid).search([]) #*uid of a user*
Enjoy...