# Getting set up

<details>

<summary>Step 1: Setting up the project files</summary>

Make a project with under a directory called `nextway`

Clone the repository <https://github.com/next-way/nextway-erp-api> for the FastAPI app

```
git clone https://github.com/next-way/nextway-erp-api.git
```

Go back up to `nextway` and make a directory `nextway-erp-web` this will contain our Odoo app.&#x20;

While at `nextway-erp-web` create a directory `addons` and this will contain Nextway's custom addons.

Change directory into addons and clone the repository <https://github.com/next-way/order_dispatch>

```
git clone https://github.com/next-way/order_dispatch
```

At the end, we get following directory structure

```
nextway
├── nextway-erp-api
└── nextway-erp-web
   └── addons
       └── order_dispatch
```

</details>

<details>

<summary>Step 2: Configuration</summary>

Here, we are going to focus on `nextway-erp-web` to get Odoo ready.

### Nextway ERP WEB

#### Odoo system configuration

Create the file `config/odoo.conf`

The following is how the config may look like.

<pre class="language-systemd" data-title="config/odoo.conf"><code class="lang-systemd"><strong>#-----------------------------------------------------------------------------
</strong># Filter listed database REGEXP 
#-----------------------------------------------------------------------------
db_name = nextwaydb
db_host = host.docker.internal
db_port = 5435
db_user = odoo
db_password = secretdbpass

#-----------------------------------------------------------------------------
# Specify the addons_path folders ordered by priority
# addons_path=/first/path/,/second/path/
#-----------------------------------------------------------------------------
addons_path = /usr/lib/python3/dist-packages/odoo/addons,/var/lib/odoo/.local/share/Odoo/addons/16.0,/mnt/extra-addons

#-----------------------------------------------------------------------------
# Comma-separated list of server-wide modules, default=web
#-----------------------------------------------------------------------------
server_wide_modules = web,sale_management,stock,fleet,contacts,hr,delivery,order_dispatch
</code></pre>

This sets up the database Odoo will use, the `addons_path` and the modules that will be installed and enabled by default.

📌 More on Odoo system configuration here: <https://www.odoo.com/documentation/16.0/administration/install/deploy.html>

#### Database configuration

The postgres image will be used for PostgreSQL. We will only be needing one file for now.

Create a `odoo_pg_pass` file and add the database password. This will be used as a `postgresql_password` secret in our compose file later.&#x20;

#### Dockerfile

Now we are going to create the Dockerfile.

{% code title="Dockerfile" %}

```docker
FROM odoo:16
ARG extra_addons_path=addons
USER root
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    python3-pip
COPY $extra_addons_path /mnt/extra-addons
USER odoo
COPY --chown=odoo:odoo config/odoo.conf /etc/odoo/odoo.conf
```

{% endcode %}

#### Docker compose

For simplicity, here is how a compose file would look like.

{% code title="docker-compose.yml" %}

```yaml
version: '3.1'
services:
  web:
    image: localhost:6000/nextway-odoo-web:latest
    platform: linux/amd64
    depends_on:
      - db
    ports:
      - "8069:8069"
    volumes:
      - odoo-web-data:/var/lib/odoo
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
    environment:
      - PASSWORD_FILE=/run/secrets/postgresql_password
    secrets:
      - postgresql_password
  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD_FILE=/run/secrets/postgresql_password
      - POSTGRES_USER=odoo
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - odoo-db-data:/var/lib/postgresql/data/pgdata
    secrets:
      - postgresql_password
    ports:
      - "5435:5432"
  api:
    image: localhost:6000/nextway-odoo-api:latest
    platform: linux/amd64
    environment:
      - DOCKER_DEFAULT_PLATFORM=linux/amd64
      - PASSWORD_FILE=/run/secrets/postgresql_password
    depends_on:
      - db
      - web
    ports:
      - "8082:8082"
    volumes:
      - ../nextway-erp-api/.env.shared:/usr/local/api/.env.shared
      - ./config:/etc/odoo
    secrets:
      - postgresql_password
volumes:
  odoo-web-data:
  odoo-db-data:

secrets:
  postgresql_password:
    file: odoo_pg_pass
```

{% endcode %}

Now our `nextway-erp-web` directory looks like the following.

```
nextway/nextway-erp-web
├── Dockerfile
├── odoo_pg_pass
├── addons
│   └── order_dispatch
└── docker-compose.yml
```

We are getting close! Now for the API.

### Nextway ERP API

There are a few environment variables available for setup. For simplicity, a file called `.env.sample` is created for you. Copy the file into a `.env.shared` file and update the variables.

</details>

<details>

<summary>Step 3: Up and running system</summary>

Run docker compose up.

```
$ docker compose up
[+] Running 3/3
 ⠿ Container nextway-erp-web-db-1   Created                                                                              0.0s
 ⠿ Container nextway-erp-web-web-1  Recreated                                                                            0.8s
 ⠿ Container nextway-erp-web-api-1  Recreated                                                                            0.4s
Attaching to nextway-erp-web-api-1, nextway-erp-web-db-1, nextway-erp-web-web-1
nextway-erp-web-db-1   |
nextway-erp-web-db-1   | PostgreSQL Database directory appears to contain a database; Skipping initialization
nextway-erp-web-db-1   |
nextway-erp-web-db-1   | 2022-12-29 14:03:44.425 UTC [1] LOG:  starting PostgreSQL 13.8 (Debian 13.8-1.pgdg110+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
nextway-erp-web-db-1   | 2022-12-29 14:03:44.426 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
nextway-erp-web-db-1   | 2022-12-29 14:03:44.426 UTC [1] LOG:  listening on IPv6 address "::", port 5432
nextway-erp-web-db-1   | 2022-12-29 14:03:44.432 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
nextway-erp-web-db-1   | 2022-12-29 14:03:44.444 UTC [26] LOG:  database system was shut down at 2022-12-28 04:17:37 UTC
nextway-erp-web-db-1   | 2022-12-29 14:03:44.537 UTC [1] LOG:  database system is ready to accept connections
nextway-erp-web-api-1  | + uvicorn app.main:app --reload --host 0.0.0.0 --port 8082
nextway-erp-web-api-1  | INFO:     Will watch for changes in these directories: ['/usr/local/api']
nextway-erp-web-api-1  | INFO:     Uvicorn running on http://0.0.0.0:8082 (Press CTRL+C to quit)
nextway-erp-web-api-1  | INFO:     Started reloader process [1] using StatReload
nextway-erp-web-web-1  | 2022-12-29 14:03:50,423 1 INFO ? odoo: Odoo version 16.0-20221202
nextway-erp-web-web-1  | 2022-12-29 14:03:50,429 1 INFO ? odoo: Using configuration file at /etc/odoo/odoo.conf
nextway-erp-web-web-1  | 2022-12-29 14:03:50,431 1 INFO ? odoo: addons paths: ['/usr/lib/python3/dist-packages/odoo/addons', '/var/lib/odoo/.local/share/Odoo/addons/16.0', '/mnt/extra-addons']
nextway-erp-web-web-1  | 2022-12-29 14:03:50,435 1 INFO ? odoo: database: odoo@host.docker.internal:5435
nextway-erp-web-web-1  | 2022-12-29 14:03:51,365 1 INFO ? odoo.addons.base.models.ir_actions_report: Will use the Wkhtmltopdf binary at /usr/local/bin/wkhtmltopdf
nextway-erp-web-web-1  | 2022-12-29 14:03:53,698 1 INFO ? odoo.service.server: HTTP service (werkzeug) running on e3ee64dcb357:8069
nextway-erp-web-web-1  | 2022-12-29 14:03:53,821 1 INFO nextwaydb odoo.modules.loading: loading 1 modules...
nextway-erp-web-api-1  | INFO:     Started server process [70]
nextway-erp-web-api-1  | INFO:     Waiting for application startup.
nextway-erp-web-web-1  | 2022-12-29 14:03:53,885 1 INFO nextwaydb odoo.modules.loading: 1 modules loaded in 0.06s, 0 queries (+0 extra)
nextway-erp-web-api-1  | INFO:     Application startup complete.
nextway-erp-web-web-1  | 2022-12-29 14:03:54,045 1 INFO nextwaydb odoo.modules.loading: loading 66 modules...
nextway-erp-web-web-1  | 2022-12-29 14:03:55,473 1 INFO nextwaydb odoo.modules.loading: 66 modules loaded in 1.43s, 0 queries (+0 extra)
nextway-erp-web-web-1  | 2022-12-29 14:03:56,125 1 INFO nextwaydb odoo.modules.loading: Modules loaded.
nextway-erp-web-web-1  | 2022-12-29 14:03:56,145 1 INFO nextwaydb odoo.modules.registry: Registry loaded in 2.455s
```

</details>

#### Local system running

Go to <http://localhost:8069> for Odoo

<figure><img src="https://1434748814-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8jzt5nEhAzb1K8eIfu48%2Fuploads%2FIlIrPRXf17l8eTkZfNCv%2Fimage.png?alt=media&#x26;token=de571d71-453e-45d1-a28c-ab310b39b8fa" alt=""><figcaption><p>Odoo (Nextway ERP Web)</p></figcaption></figure>

And <http://localhost:8082> for the API

<figure><img src="https://1434748814-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8jzt5nEhAzb1K8eIfu48%2Fuploads%2Fpa1GJ70dFZAukYtXPthb%2Fimage.png?alt=media&#x26;token=91652cb7-9fe9-4f74-b7bc-0367d1b06cbd" alt=""><figcaption></figcaption></figure>
