diff --git a/.env.example b/.env.example
index 8256912..53e014b 100644
--- a/.env.example
+++ b/.env.example
@@ -1,38 +1,74 @@
#--------------------------#
# Main Configuration #
#--------------------------#
-APP_ENV=fresh
-ADDONS_TO_UPDATE=
-ADDONS_TO_INSTALL=
+# Project
+PROJECT_NAME=odoocker
+DOMAIN=erp.odoocker.test
+SUPPORT_EMAIL=mail@example.com
+CORS_ALLOWED_DOMAIN="'http://external-domain.test'"
+# App
+APP_ENV=fresh
+DEV_MODE=reload,qweb
+
+# Odoo
+ODOO_VERSION=14.0
+UPDATE=
+INIT=
+LOAD=base,web
+WORKERS=1
+
+# Enterprise
+GITHUB_USER=
+GITHUB_ACCESS_TOKEN=
+
+# Database
+ADMIN_PASSWD=odoo
+DB_HOST=postgres
+DB_PORT=5432
DB_NAME=odoo
DB_USER=odoo
DB_PASSWORD=odoo
+DB_SSLMODE=prefer
+DB_MAXCONN=64
+DB_TEMPLATE=unaccent_template
+UNACCENT=True
+LIST_DB=True
+DBFILTER=.*
+LOAD_LANGUAGE=
+# Logging
LOG_LEVEL=info
LOG_HANDLER="[':INFO']"
+# PgAdmin
+PGADMIN_DOMAIN=pgadmin.odoocker.test
+PGADMIN_PASSWORD=odoo
+
+# Testing
+TEST_ENABLE=False
+TEST_TAGS=
+ADDONS_TO_TEST=
+
+# Mail
SMTP_SERVER=
SMTP_PORT=25
SMTP_SSL=
SMTP_USER=
SMTP_PASSWORD=
EMAIL_FROM=
-
-ADMIN_PASSWD=odoo
-DOMAIN=erp.odoo.test
-PGADMIN_DOMAIN=pgadmin.odoo.test
-PGADMIN_PASSWORD=${DB_PASSWORD}
-LOAD_LANGUAGE=en_US
-DEV_MODE=False
-DEBUG_MODE=False
+FROM_FILTER=
#------------------------------#
# Project Configurations #
#------------------------------#
-PROJECT_NAME=odoocker
+PROJECT_NAME=${PROJECT_NAME}
DOMAIN=${DOMAIN}
-SUPPORT_EMAIL=example@mail.com
+SUPPORT_EMAIL=${SUPPORT_EMAIL}
+ODOO_VERSION=${ODOO_VERSION}
+GITHUB_USER=${GITHUB_USER}
+GITHUB_ACCESS_TOKEN=${GITHUB_ACCESS_TOKEN}
+ENTERPRISE_REPO=https://${GITHUB_USER}:${GITHUB_ACCESS_TOKEN}@github.com/odoo/enterprise.git
#------------#
# Odoo #
@@ -46,33 +82,37 @@ REPORTGZ=False
WEBSOCKET_KEEP_ALIVE_TIMEOUT=3600
WEBSOCKET_RATE_LIMIT_BURST=10
WEBSOCKET_RATE_LIMIT_DELAY=0.2
+
# Custom paths
COMMUNITY_ADDONS=${ROOT_PATH}/addons
ENTERPRISE_ADDONS=${ROOT_PATH}/enterprise
EXTRA_ADDONS=${ROOT_PATH}/extra-addons
CUSTOM_ADDONS=${ROOT_PATH}/custom-addons
+LOG_PATH=/var/log/odoo/odoo.log
+DEBUG_PATH=/usr/bin/odoo
# Server startup config
ODOO_RC=/etc/odoo/odoo.conf
SAVE=False
-INIT=${ADDONS_TO_INSTALL}
-UPDATE=${ADDONS_TO_UPDATE}
+INIT=${INIT}
+UPDATE=${UPDATE}
DEMO=False
WITHOUT_DEMO=all
-IMPORT_PARTIAL=
+IMPORT_PARTIAL=False
PIDFILE=
ADDONS_PATH=${COMMUNITY_ADDONS},${ENTERPRISE_ADDONS},${EXTRA_ADDONS},${CUSTOM_ADDONS}
UPGRADE_PATH=
-SERVER_WIDE_MODULES=base,web
+SERVER_WIDE_MODULES=${LOAD}
DATA_DIR=/var/lib/odoo
# HTTP
HTTP_INTERFACE=0.0.0.0
+XMLRPCS_INTERFACE=${HTTP_INTERFACE}
+DEBUG_INTERFACE=${HTTP_INTERFACE}
HTTP_PORT=8069
-XMLRPCS_INTERFACE=0.0.0.0
+DEBUG_PORT=8070
XMLRPCS_PORT=8071
-GEVENT_PORT=8072
-LONGPOLLING_PORT=0
+LONGPOLLING_PORT=8072
HTTP_ENABLE=True
XMLRPCS=True
PROXY_MODE=True
@@ -80,22 +120,22 @@ X_SENDFILE=False
# Testing
TEST_FILE=False
-TEST_ENABLE=False
-TEST_TAGS=None
+TEST_ENABLE=${TEST_ENABLE}
+TEST_TAGS=${TEST_TAGS}
SCREENCASTS=None
SCREENSHOTS=/tmp/odoo_tests
# Logging
LOGFILE=
SYSLOG=False
-LOG_HANDLER="[':INFO']"
+LOG_HANDLER=${LOG_HANDLER}
LOG_DB=False
LOG_DB_LEVEL=info
-LOG_LEVEL=info
+LOG_LEVEL=${LOG_LEVEL}
# Email
EMAIL_FROM=${EMAIL_FROM}
-FROM_FILTER=False
+FROM_FILTER=${FROM_FILTER}
SMTP_SERVER=${SMTP_SERVER}
SMTP_PORT=${SMTP_PORT}
SMTP_SSL=${SMTP_SSL}
@@ -109,11 +149,11 @@ DB_NAME=${DB_NAME}
DB_USER=${DB_USER}
DB_PASSWORD=${DB_PASSWORD}
PG_PATH=
-DB_HOST=postgres
-DB_PORT=5432
-DB_SSLMODE=prefer
-DB_MAXCONN=64
-DB_TEMPLATE=unaccent_template
+DB_HOST=${DB_HOST}
+DB_PORT=${DB_PORT}
+DB_SSLMODE=${DB_SSLMODE}
+DB_MAXCONN=${DB_MAXCONN}
+DB_TEMPLATE=${DB_TEMPLATE}
# Internationalisation options
LOAD_LANGUAGE=${LOAD_LANGUAGE}
LANGUAGE=
@@ -122,30 +162,27 @@ TRANSLATE_IN=
OVERWRITE_EXISTING_TRANSLATIONS=False
TRANSLATE_MODULES="['all']"
# Security
-LIST_DB=True
+LIST_DB=${LIST_DB}
# WEB
-DBFILTER=.*
+DBFILTER=${DBFILTER}
# Advanced options
DEV_MODE=${DEV_MODE}
-DEBUG_MODE=${DEBUG_MODE}
SHELL_INTERFACE=ptpython
STOP_AFTER_INIT=False
OSV_MEMORY_COUNT_LIMIT=False
TRANSIENT_AGE_LIMIT=1.0
MAX_CRON_THREADS=2
-UNACCENT=True
+UNACCENT=${UNACCENT}
GEOIP_DATABASE=/usr/share/GeoIP/GeoLite2-City.mmdb
-WORKERS=0
+WORKERS=${WORKERS}
LIMIT_MEMORY_SOFT=2147483648
LIMIT_MEMORY_HARD=2684354560
LIMIT_TIME_CPU=120
-LIMIT_TIME_REAL=240
+LIMIT_TIME_REAL=480
LIMIT_TIME_REAL_CRON=600
LIMIT_REQUEST=8192
-INSTALLED_MODULES=
-
#--------------#
# Docker #
#--------------#
@@ -171,7 +208,7 @@ NGINX_DEFAULT_CONF=/etc/nginx/conf.d/default.conf
VIRTUAL_HOST=${DOMAIN}
LETSENCRYPT_HOST=${DOMAIN}
LETSENCRYPT_EMAIL=${SUPPORT_EMAIL}
-CORS_ALLOWED_DOMAIN="'https://sub.domain.com'"
+CORS_ALLOWED_DOMAIN=${CORS_ALLOWED_DOMAIN}
#-------------#
# PgAdmin #
@@ -197,4 +234,4 @@ CORS_ALLOWED_DOMAIN=${CORS_ALLOWED_DOMAIN}
#----------------------#
# ACME Companion #
#----------------------#
-DEFAULT_EMAIL=${SUPPORT_EMAIL}
\ No newline at end of file
+DEFAULT_EMAIL=${SUPPORT_EMAIL}
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index b328113..0749d0a 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,11 +1,22 @@
-## :rocket: Deployment
-- `ADDONS_TO_INSTALL="my_custom_addon"`
-- `ADDONS_TO_UPGRADE="contacts,sale"`
+### :rocket: Deployment
+- `INIT="my_custom_addon_1"`
+- `ADDONS_TO_UPGRADE="my_custom_addon_2"`
-## :memo: Changes
+### :jigsaw: Odoo/Asana Tasks
+- *Paste Task URL*
+
+### :memo: Changes
**Change 1: *Title***
- In detail, explain what changes were made.
-*Add links and screenshots*
+*Add links, videos and screenshots here*
-
\ No newline at end of file
+
+
+### :white_check_mark: Code Review Checklist
+- [ ] Comments are present where appropriate and provide useful information, **not just stating what the code is obviously doing**.
+- [ ] No values have been hard-coded where they should be declared as constant.
+- [ ] Successfully passed all tests when implemented.
+- [ ] Install package(s) without additional **WARNINGS** or **ERRORS**.
+- [ ] Update package(s) without additional **WARNINGS** or **ERRORS**.
+- [ ] Uninstall package(s) without additional **WARNINGS** or **ERRORS**.
diff --git a/.gitignore b/.gitignore
index 75364dd..d65093e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,7 @@
/.env
# Ignores the docker compose local or production environment.
-docker-compose.override.yml
\ No newline at end of file
+docker-compose.override.yml
+
+# Ignores any __pycache__ folder.
+__pycache__
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 016310a..13caad0 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -2,27 +2,19 @@
"version": "0.2.0",
"configurations": [
{
- "name": "Odoocker Debug",
+ "name": "Odoocker Debugger",
"type": "python",
"request": "attach",
"host": "localhost",
"port": 8069,
- "debugServer": 8071,
+ "debugServer": 8070,
"justMyCode": false,
"pathMappings": [
{
- "localRoot": "${workspaceFolder}/odoo/custom-addons",
- "remoteRoot": "/usr/lib/python3/dist-packages/odoo/custom-addons"
- },
- {
- "localRoot": "${workspaceFolder}/odoo/extra-addons",
- "remoteRoot": "/usr/lib/python3/dist-packages/odoo/extra-addons"
- },
- // {
- // "localRoot": "${workspaceFolder}/core/odoo",
- // "remoteRoot": "/usr/bin/odoo"
- // }
+ "localRoot": "${workspaceFolder}/odoo",
+ "remoteRoot": "/usr/lib/python3/dist-packages/odoo"
+ }
]
}
]
-}
\ No newline at end of file
+}
diff --git a/README.md b/README.md
index d36089f..6112b9f 100644
--- a/README.md
+++ b/README.md
@@ -7,22 +7,20 @@ git clone git@github.com:yhaelopez/odoocker.git
```
cp .env.example .env && cp docker-compose.override.local.yml docker-compose.override.yml
```
-3. Manually add entry to your `hosts` file as below (Local)
+3. Manually add entry to your `hosts` file as below
```
-echo '127.0.0.1 erp.odoo.test' | sudo tee -a /etc/hosts
-echo '127.0.0.1 pgadmin.odoo.test' | sudo tee -a /etc/hosts
+echo '127.0.0.1 erp.icomsa.test' | sudo tee -a /etc/hosts
+echo '127.0.0.1 pgadmin.icomsa.test' | sudo tee -a /etc/hosts
```
- For Windows, go to `C:\Windows\System32\drivers\etc\`, and add this line:
```
-127.0.0.1 erp.odoo.test
-127.0.0.1 pgadmin.odoo.test
+127.0.0.1 erp.icomsa.test
+127.0.0.1 pgadmin.icomsa.test
```
In order to understand how each environment works, take a look at `odoo/entrypoint.sh`.
-```
-Master Password: odoo
-```
+**Default Master Password:** odoo
## Fresh Environment
This environment will have no database created.
@@ -30,7 +28,7 @@ The `env.example` is ready for this stage, no modifications are needed on `.env`
1. Make sure `APP_ENV=fresh`.
2. Run
```
-docker-compose up --build -d && docker-compose logs -f odoo
+docker-compose up -d --build && docker-compose logs -f odoo
```
3. Navigate to the `DOMAIN` in your browser.
4. Create Database form will be displayed.
@@ -41,9 +39,32 @@ docker-compose stop odoo
```
7. Set [`Local`](https://github.com/yhaelopez/odoocker#local-environment) environment.
+## Restore Environment
+This environment will have no database created and it's ready to make an import on the production database.
+1. Set `APP_ENV=restore`.
+2. Run:
+```
+docker-compose up -d --build && docker-compose logs -f odoo
+```
+3. Navigate to the `DOMAIN` in your browser & Restore the production database
+4. Stop the Odoo container:
+```
+docker-compose stop odoo
+```
+5. Set [`Local`](https://github.com/yhaelopez/odoocker#local-environment) environment.
+
+#### If you are in a production server:
+
+6. Run [`Staging`](https://github.com/yhaelopez/odoocker#staging-environment) environment.
+7. Stop the Odoo container:
+```
+docker-compose stop odoo
+```
+8. Run the [`Production`](https://github.com/yhaelopez/odoocker#production-environment) environment.
+
## Full Environment
This environment will initialize a database with `DB_NAME` and install the `INSTALLED_MODULES`.
-This allows us to have a fresh database will all modules installed in production.
+This allows us to have a fresh production database replica.
1. Make sure `APP_ENV=full`.
2. Make sure `DB_NAME=odoo` or whatever name you want.
3. Run
@@ -62,39 +83,16 @@ docker-compose stop odoo
```
7. Set [`Local`](https://github.com/yhaelopez/odoocker#local-environment) environment.
-## Restore Environment
-This environment will have no database created and it's ready to make an import on the production database.
-1. Set `APP_ENV=restore`.
-2. Run:
-```
-docker-compose up --build -d && docker-compose logs -f odoo
-```
-3. Navigate to the `DOMAIN` in your browser & Restore the production database
-4. Stop the Odoo container:
-```
-docker-compose stop odoo
-```
-5. Set [`Local`](https://github.com/yhaelopez/odoocker#local-environment) environment.
-
---- If you are in a production server:
-
-6. Set [`Staging`](https://github.com/yhaelopez/odoocker#staging-environment) environment.
-7. Stop the Odoo container:
-```
-docker-compose stop odoo
-```
-8. Run the [`Production`](https://github.com/yhaelopez/odoocker#production-environment) environment.
-
## Local Environment
This environment will help us install / update the specific modules we are working on.
It's recommended to use this environment after [`Fresh`](https://github.com/yhaelopez/odoocker#fresh-environment), [`Full`](https://github.com/yhaelopez/odoocker#full-environment) or [`Restore`](https://github.com/yhaelopez/odoocker#fresh-environment) environments are run.
1. Make sure `APP_ENV=local`.
2. Make sure `DB_NAME` is set.
-3. Set `ADDONS_TO_UPDATE=module1,module2,module3`.
+3. Set `UPDATE=module1,module2,module3`.
4. Run:
```
-docker-compose up --build -d odoo && docker-compose logs -f odoo
+docker-compose up -d --build && docker-compose logs -f odoo
```
5. Navigate to the `DOMAIN` in your browser.
6. Start coding!
@@ -102,15 +100,123 @@ docker-compose up --build -d odoo && docker-compose logs -f odoo
```
docker-compose restart odoo && docker-compose logs -f odoo
```
-- If you think your package is not being updated, run:
+- If you need to change a .env variable, run:
```
-docker-compose up --build -d odoo && docker-compose logs -f odoo
+docker-compose up -d --build && docker-compose logs -f odoo
```
-8. Any time you add a new addon to `ADDONS_TO_UPDATE` re-run last step
-## Additional Local Help
+## Debug Environment
+This environment will bring up Odoo with `debugpy` library.
+It's recommended to use this environment after [`Fresh`](https://github.com/yhaelopez/odoocker#fresh-environment), [`Full`](https://github.com/yhaelopez/odoocker#full-environment) or [`Restore`](https://github.com/yhaelopez/odoocker#fresh-environment) environments are run.
+It works the same exact way as [`Local`](https://github.com/yhaelopez/odoocker#local-environment), since it respects any change in `.env` file.
-### Creating new Odoo Addons
+1. Make sure `APP_ENV=debug`.
+2. Make sure `DB_NAME` is set.
+3. Set `UPDATE=module1,module2,module3`.
+4. Run:
+```
+docker-compose up -d --build && docker-compose logs -f odoo
+```
+5. Navigate to the `DOMAIN` in your browser.
+6. Mark breakpoints through the code.
+7. Start VSCode Debugger
+8. Start debugging!
+9. Continue coding as if you were in [`Local`](https://github.com/yhaelopez/odoocker#local-environment)
+
+## Testing Environment
+This environment will help us test the modules we are developing to ensure a safe deployment.
+A `test_*` database is automagically created, addons to test get installed, test are filtered and run by their tags.
+Odoo will stop after running the tests.
+1. Set `APP_ENV=testing`.
+2. Set `ADDONS_TO_TEST=addon_1,addon_2`.
+3. Set `TEST_TAGS=test_tag_1,test_tag_2` to fitler tests.
+4. Run:
+```
+docker-compose down && docker-compose up -d --build && docker-compose logs -f odoo
+```
+
+## Staging Environment
+This environment performs a full update on all installed modules to test if they all can be upgraded at once.
+This also allows to install new packages through `INIT`
+1. Set `APP_ENV=staging`
+2. Set `DB_NAME` to the desired one.
+3. Set `INIT` if there are any.
+5. Run
+```
+git pull && docker-compose down && docker-compose pull && docker-compose build --no-cache && docker-compose up -d && docker-compose logs -f odoo
+```
+7. Check Odoo continues to work as expected.
+8. Change environment immediatly after finish testing.
+
+**Do not bring down & up again unless you want to perform a whole update again.**
+
+## Production Environment
+This environment has a preset of settings to work in production. Some `.env` variables won't work because are overwritten in the odoo command.
+
+Let's imagine we are migrating a database from another server.
+
+1. Set `APP_ENV=production`
+2. Set prod `DB_NAME`.
+3. Set prod `DB_PASSWORD`.
+4. Set prod `ADMIN_PASSWD`.
+5. Set prod `DOMAIN` (make sure DNS are pointing to your instance).
+6. Run [`Restore`](https://github.com/yhaelopez/odoocker#restore-environment) environment
+7. Run [`Staging`](https://github.com/yhaelopez/odoocker#staging-environment) environment.
+8. Repace the `docker-compose.override.yml` with `docker-compose.override.production.yml`.
+This will bring Let's Encrypt (Nginx-Proxy/Acme-Companion) container
+```
+cp docker-compose.override.production.yml docker-compose.override.yml
+```
+9. Rebuild the containers
+```
+docker-compose down && docker-compose up -d --build && docker-compose logs odoo
+```
+
+### Pro(d) Tips
+The following tips will enhance your developing and production experience.
+
+#### Define the following aliases:
+```
+alias odoo='cd odoo-icomsa'
+
+alias hard-deploy='git pull && docker-compose down && docker-compose pull && docker-compose build --no-cache && docker-compose up -d && docker-compose logs -f odoo'
+
+alias deploy='git pull && docker-compose down && docker-compose pull && docker-compose build && docker-compose up -d && docker-compose logs -f --tail 2000 odoo'
+
+alias soft-deploy='git pull && docker-compose down && docker-compose up -d --build && docker-compose logs -f --tail 2000 odoo'
+
+alias logs='docker-compose logs -f --tail 2000 odoo'
+```
+
+#### NEVER run
+```
+docker-compose down **-v**
+```
+...without having a tested backed up database
+
+Have in mind that dropping volumes will destroy DB data, Odoo Conf & Filestore, Let's Encrypt certificates, and more!
+
+Also, if you do this process several times in a short period of time, you may reach `Let's Encrypt` certificates limits and won't be able to generate new ones after **several hours**.
+
+#### Colorize your branches
+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
+```
+
+#### Creating new Odoo Addons
1. Log into the odoo container
```
docker-compose exec -u root odoo
@@ -125,7 +231,7 @@ odoo scaffold
```
- The new addon will be available in the `odoo/custom_addons` folder in this project.
-### Using Odoo Shell
+#### Using Odoo Shell
1. Log into the odoo container
```
docker-compose exec odoo bash
@@ -135,58 +241,26 @@ docker-compose exec odoo bash
odoo shell --http-port=8071
```
-5. Connect to database through any Postgres Database Manager using `localhost` and the `.env` credentials
+# DB Connection
+- Any other Postgres Database Manager con connect to the DB using `.env` credentials.
-## Testing Environment (Work in progress...) DO NOT USE
-This environment will help us test all modules to ensure a safe deployment.
-It's recommneded to use this environment after importing production database in a Fresh environment.
-1. Replace `docker-compose.override.yml` with `docker-compose.override.testing.yml`
-This will set up the Odoo container will all the packages installed needed to run the tests.
+## PgAdmin Container
+- This project comes with a PgAdmin container which is loaded only in `docker-compose.override.pgadmin.yml`.
+In order to manage DB we provide a pgAdmin container.
+In order to bring this up, simply run:
```
-cp docker-compose.override.testing.yml docker-compose.override.yml
+docker-compose -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.pgadmin.yml up -d --build
```
-2. Clone Production Database as `test_${DB_NAME}`.
-3. Set `APP_ENV=testing`.
-4. Set `DB_NAME=test_${DB_NAME}` or whatever db you set before.
-5. Run:
+And to turn down
```
-docker-compose down && docker-compose pull && docker-compose build --no-cache && docker-compose up -d && docker-compose logs -f odoo
+docker-compose -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.pgadmin.yml down
```
-## Staging
-This environment allows us to perfom a full update on all installed modules to test if they all can be upgraded at once.
-This also allows to install new packages through `ADDONS_TO_INSTALL`
-1. Set `APP_ENV=staging`
-2. Set `DB_NAME` to the desired one.
-3. Set `ADDONS_TO_INSTALL` if there are any.
-5. Run
-```
-git pull && docker-compose down && docker-compose pull && docker-compose build --no-cache && docker-compose up -d && docker-compose logs -f odoo
-```
-7. Check Odoo continues to work as expected.
-8. Change environment immediatly after finish testing.
+If your instance has pgAdmin, make sure you adapt this to your aliases.
-**Do not bring down & up again unless you want to perform the whole update again.**
+# Deployment Process
+Note: the deployment process is easier & faster with aliases.
-# Production
-1. Set `APP_ENV=production`
-2. Set prod `DB_NAME`.
-3. Set prod `DB_PASSWORD`.
-4. Set prod `ADMIN_PASSWD`.
-5. Set prod `DOMAIN`.
-6. Setup `Fresh` environment
-7. Setup `Staging` environment.
-8. Repace the `docker-compose.override.yml` with the production one.
-This will bring Let's Encrypt (Nginx-Proxy/Acme-Companion) container
-```
-cp docker-compose.override.production.yml docker-compose.override.yml
-```
-9. Rebuild the containers
-```
-docker-compose down && docker-compose up -d --build && docker-compose logs odoo
-```
-
-## Deployment
1. Backup the production Databases from `/web/database/manager`.
2. Run
```
@@ -206,16 +280,19 @@ sudo apt update && sudo apt upgrade -y
```
4. Go to the project folder in /home/ubuntu or (~)
```
-cd ~/odoocker
+cd ~/odoo-icomsa
+```
+or with alias:
+```
+odoo
```
5. Pull the latest `main` branch changes.
```
git pull origin main
```
-6. Set Staging environment
-7. Make sure everything continues to work as expected.
-8. Set `APP_ENV=production`
-9. Take down the containers, pull the latest images from docker hub, and rebuild the containers.
+6. Set [`Staging`](https://github.com/yhaelopez/odoocker#staging-environment) environment
+7. Set `APP_ENV=production`
+8. Take down the containers, pull the latest images from docker hub, and rebuild the containers.
+```
+docker-compose down && docker-compose up -d --build && docker-compose logs -f odoo
```
-docker-compose down && docker-compose pull && docker-compose build --no-cache && docker-compose up -d && docker-compose logs -f odoo
-```
\ No newline at end of file
diff --git a/docker-compose.override.local.yml b/docker-compose.override.local.yml
index 8b558c6..6c6c3d8 100644
--- a/docker-compose.override.local.yml
+++ b/docker-compose.override.local.yml
@@ -3,6 +3,7 @@ services:
restart: 'no'
ports:
- 8069:8069
+ - 8070:8070
- 8071:8071
- 8072:8072
@@ -18,19 +19,3 @@ services:
restart: 'no'
ports:
- 80:80
-
- pgadmin:
- image: dpage/pgadmin4:7.1
- restart: unless-stopped
- expose:
- - 80
- volumes:
- - pgadmin-data:${PGADMIN_DATA}
- environment:
- - PGADMIN_DEFAULT_EMAIL
- - PGADMIN_DEFAULT_PASSWORD
- - VIRTUAL_HOST=${PGADMIN_VIRTUAL_HOST}
- - LETSENCRYPT_HOST=${PGADMIN_LETSENCRYPT_HOST}
- - LETSENCRYPT_EMAIL
- networks:
- - internal
\ No newline at end of file
diff --git a/docker-compose.override.production.yml b/docker-compose.override.production.yml
index d94a935..3eaaf88 100644
--- a/docker-compose.override.production.yml
+++ b/docker-compose.override.production.yml
@@ -7,10 +7,12 @@ services:
- 127.0.0.1:8072:8072
postgres:
+ restart: unless-stopped
ports:
- 127.0.0.1:5432:5432
nginx-proxy:
+ restart: unless-stopped
ports:
- 80:80
- 443:443
@@ -33,4 +35,4 @@ services:
volumes:
acme:
- certs:
\ No newline at end of file
+ certs:
diff --git a/docker-compose.pgadmin.yml b/docker-compose.pgadmin.yml
new file mode 100644
index 0000000..26c995d
--- /dev/null
+++ b/docker-compose.pgadmin.yml
@@ -0,0 +1,19 @@
+services:
+ pgadmin:
+ image: dpage/pgadmin4:7.4
+ restart: unless-stopped
+ expose:
+ - 80
+ volumes:
+ - pgadmin-data:${PGADMIN_DATA}
+ environment:
+ - PGADMIN_DEFAULT_EMAIL
+ - PGADMIN_DEFAULT_PASSWORD
+ - VIRTUAL_HOST=${PGADMIN_VIRTUAL_HOST}
+ - LETSENCRYPT_HOST=${PGADMIN_LETSENCRYPT_HOST}
+ - LETSENCRYPT_EMAIL
+ networks:
+ - internal
+
+volumes:
+ pgadmin-data:
diff --git a/docker-compose.yml b/docker-compose.yml
index 243e0d3..55595c9 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -3,6 +3,15 @@ services:
build:
context: ./
dockerfile: ./odoo/Dockerfile
+ args:
+ - ODOO_VERSION
+ - ODOO_RC
+ - ROOT_PATH
+ - GITHUB_USER
+ - GITHUB_ACCESS_TOKEN
+ - ENTERPRISE_REPO
+ - ENTERPRISE_ADDONS
+ - LOG_PATH
depends_on:
- postgres
tty: true
@@ -35,7 +44,7 @@ services:
- internal
nginx:
- image: nginx:1.24.0
+ image: nginx:1.25.1
depends_on:
- odoo
restart: unless-stopped
@@ -54,7 +63,7 @@ services:
- internal
nginx-proxy:
- image: nginxproxy/nginx-proxy:1.3.0
+ image: nginxproxy/nginx-proxy:1.3.1
depends_on:
- nginx
restart: unless-stopped
@@ -78,8 +87,7 @@ volumes:
certs:
vhost:
html:
- pgadmin-data:
networks:
internal:
- driver: bridge
\ No newline at end of file
+ driver: bridge
diff --git a/nginx-proxy/nginx.conf b/nginx-proxy/nginx.conf
index 48862ca..08927f5 100644
--- a/nginx-proxy/nginx.conf
+++ b/nginx-proxy/nginx.conf
@@ -34,4 +34,4 @@ http {
}
-daemon off;
\ No newline at end of file
+daemon off;
diff --git a/nginx/default.conf b/nginx/default.conf
index 6ff5062..97f5929 100644
--- a/nginx/default.conf
+++ b/nginx/default.conf
@@ -54,4 +54,4 @@ server {
proxy_set_header Host $host;
proxy_pass http://odoo:8072;
}
-}
\ No newline at end of file
+}
diff --git a/nginx/nginx.conf b/nginx/nginx.conf
index 238f3c0..646f968 100644
--- a/nginx/nginx.conf
+++ b/nginx/nginx.conf
@@ -23,4 +23,4 @@ http {
keepalive_timeout 900;
include /etc/nginx/conf.d/*.conf;
-}
\ No newline at end of file
+}
diff --git a/odoo/Dockerfile b/odoo/Dockerfile
index 47155f5..47d0788 100644
--- a/odoo/Dockerfile
+++ b/odoo/Dockerfile
@@ -1,74 +1,90 @@
-ARG ODOO_VERSION=16.0
-
+#------------------------#
+# Odoo Community #
+#------------------------#
+ARG ODOO_VERSION
FROM odoo:${ODOO_VERSION}
-# Switch back to root user
+# Switch to root user
USER root
-# Update & Upgrade
-RUN apt-get update && apt-get upgrade -y
+# Receive ARGs from docker-compose.yml & convert them into ENVs
+ARG ROOT_PATH
+ARG LOG_PATH
+ARG GITHUB_USER
+ARG GITHUB_ACCESS_TOKEN
+ARG ENTERPRISE_REPO
+ARG ENTERPRISE_ADDONS
+ARG ODOO_RC
-# Upgrade pip
-RUN pip3 install --upgrade pip
-
-# Set Odoo root path
-ARG ROOT_PATH=/usr/lib/python3/dist-packages/odoo
-
-#---------------#
-# Logging #
-#---------------#
-# Set Log variables
-ARG LOGPATH=/var/log/odoo
-ARG LOGFILE=${LOGPATH}/odoo.log
-
-# Create odoo.log file and give permissions.
-RUN touch ${LOGFILE} && chown odoo:odoo -R ${LOGPATH}
-
-#-----------------------#
-# Odoo Enterprise #
-#-----------------------#
-# Install git
-RUN apt-get install git -y
-
-# Set Github Credentials
-ARG GITHUB_USER=yhaelopez
-ARG GITHUB_ACCESS_TOKEN=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
-ARG ENTERPRISE_REPO=https://${GITHUB_USER}:${GITHUB_ACCESS_TOKEN}@github.com/odoo/enterprise.git
-ARG ENTERPRISE_PATH=${ROOT_PATH}/enterprise
-
-# Create Enterprise Path & give permissions
-RUN mkdir -p ${ENTERPRISE_PATH} && chown odoo:odoo -R ${ENTERPRISE_PATH}
-
-# Clone Enterprise Repository
-RUN git clone ${ENTERPRISE_REPO} ${ROOT_PATH}/enterprise --depth 1 --branch ${ODOO_VERSION} --single-branch --no-tags
-
-#--------------------------------#
-# Fix Deprecation Warnings #
-#--------------------------------#
+ENV ODOO_VERSION=${ODOO_VERSION} \
+ LOG_PATH=${LOG_PATH} \
+ GITHUB_USER=${GITHUB_USER} \
+ GITHUB_ACCESS_TOKEN=${GITHUB_ACCESS_TOKEN} \
+ ENTERPRISE_REPO=${ENTERPRISE_REPO} \
+ ENTERPRISE_ADDONS=${ENTERPRISE_ADDONS} \
+ ODOO_RC=${ODOO_RC}
#------------------------#
# APT Dependencies #
#------------------------#
+RUN apt-get update && apt-get install -y \
+ apt-utils \
+ git \
+ git-man \
+ less \
+ libcbor0 \
+ libcurl3-gnutls \
+ libedit2 \
+ liberror-perl \
+ libxmuu1 \
+ openssh-client \
+ patch \
+ xauth \
+ # Clean up the apt cache to reduce the image size
+ && rm -rf /var/lib/apt/lists/*
#-----------------------#
-# PIP Dependencies #
+# Odoo Enterprise #
#-----------------------#
-# Copy PIP requirements
-COPY ./odoo/requirements.txt /tmp/requirements.txt
-# Install PIP requirements
-RUN python3 -m pip install -r /tmp/requirements.txt
-# RUN pip3 install debugpy
+# Create Enterprise addons directory
+RUN mkdir -p ${ENTERPRISE_ADDONS} && \
+ chown odoo:odoo -R ${ENTERPRISE_ADDONS}
+
+# Clone Enterprise addons if user and token are present
+RUN if [ -n "$GITHUB_USER" ] && [ -n "$GITHUB_ACCESS_TOKEN" ]; then \
+ git clone ${ENTERPRISE_REPO} ${ENTERPRISE_ADDONS} --depth 1 --branch ${ODOO_VERSION} --single-branch --no-tags; \
+ fi
+
+#---------------------#
+# PIP Dependecies #
+#---------------------#
+# Upgrade pip
+RUN pip3 install --upgrade pip
+
+# Copy & Install PIP requirements
+COPY --chown=odoo:odoo ./odoo/requirements.txt /tmp/requirements.txt
+
+RUN python3 -m pip install --upgrade -r /tmp/requirements.txt && \
+ rm /tmp/requirements.txt
+
+#---------------------#
+# Logging #
+#---------------------#
+
+# Create odoo.log file
+RUN touch ${LOG_PATH} && chown odoo:odoo ${LOG_PATH}
#-----------------------#
# Odoo Conf #
#-----------------------#
-# Copy environment variables at /
-COPY ./.env /
-# Copy script to generate odoo.conf
-COPY ./odoo/odoorc.sh /
+
+# Copy environment variables & script to generate odoo.conf
+COPY --chown=odoo:odoo ./.env /
+COPY --chown=odoo:odoo ./odoo/odoorc.sh /
+
# Generate odoo.conf
RUN /odoorc.sh && chown odoo:odoo ${ODOO_RC}
# Switch back to odoo user
-USER odoo
\ No newline at end of file
+USER odoo
diff --git a/odoo/custom-addons/.gitignore b/odoo/custom-addons/.gitignore
deleted file mode 100644
index 75b6f9c..0000000
--- a/odoo/custom-addons/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# Ignores any __pycache__ folder.
-__pycache__
\ No newline at end of file
diff --git a/odoo/entrypoint.sh b/odoo/entrypoint.sh
index 4a7c9e3..a343b17 100755
--- a/odoo/entrypoint.sh
+++ b/odoo/entrypoint.sh
@@ -12,50 +12,50 @@ case "$1" in
wait-for-psql.py --db_host ${DB_HOST} --db_port ${DB_PORT} --db_user ${DB_USER} --db_password ${DB_PASSWORD} --timeout=30
if [ ${APP_ENV} = 'fresh' ] || [ ${APP_ENV} = 'restore' ]; then
- echo odoo --config ${ODOO_RC} --database= --update= --init= --load=${SERVER_WIDE_MODULES} --workers=0 --log-handler=:INFO --log-level=info --max-cron-threads=2 --limit-time-cpu=3600 --limit-time-real=7200 --limit-time-real-cron=600 --limit-request=8192 --limit-memory-soft=2147483648 --limit-memory-hard=2684354560 --transient-age-limit=1.0 --load-language= --without-demo=True --import-partial=False --log-db= --dev=False
+ echo odoo --config ${ODOO_RC} --database= --init= --update= --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --load-language= --workers=0 --limit-time-cpu=3600 --limit-time-real=7200
- exec odoo --config ${ODOO_RC} --database= --update= --init= --load=${SERVER_WIDE_MODULES} --workers=0 --log-handler=:INFO --log-level=info --max-cron-threads=2 --limit-time-cpu=3600 --limit-time-real=7200 --limit-time-real-cron=600 --limit-request=8192 --limit-memory-soft=2147483648 --limit-memory-hard=2684354560 --transient-age-limit=1.0 --load-language= --without-demo=True --import-partial=False --log-db= --dev=False
+ exec odoo --config ${ODOO_RC} --database= --init= --update= --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --load-language= --workers=0 --limit-time-cpu=3600 --limit-time-real=7200
fi
if [ ${APP_ENV} = 'full' ] ; then
- echo odoo --config ${ODOO_RC} --database=${DB_NAME} --init=${INSTALLED_MODULES} --update= --load=${SERVER_WIDE_MODULES} --workers=0 --log-handler=:INFO --log-level=info --max-cron-threads=2 --limit-time-cpu=3600 --limit-time-real=7200 --limit-time-real-cron=600 --limit-request=8192 --limit-memory-soft=2147483648 --limit-memory-hard=2684354560 --transient-age-limit=1.0 --db-filter= --load-language=${LOAD_LANGUAGE} --without-demo=True --import-partial=False --log-db= --dev=False
+ echo odoo --config ${ODOO_RC} --database=${DB_NAME} --init=${INSTALLED_MODULES} --update= --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --load-language=${LOAD_LANGUAGE} --max-cron-threads=${MAX_CRON_THREADS} --limit-time-cpu=3600 --limit-time-real=7200 --workers=0 --without-demo=all
- exec odoo --config ${ODOO_RC} --database=${DB_NAME} --init=${INSTALLED_MODULES} --update= --load=${SERVER_WIDE_MODULES} --workers=0 --log-handler=:INFO --log-level=info --max-cron-threads=2 --limit-time-cpu=3600 --limit-time-real=7200 --limit-time-real-cron=600 --limit-request=8192 --limit-memory-soft=2147483648 --limit-memory-hard=2684354560 --transient-age-limit=1.0 --db-filter= --load-language=${LOAD_LANGUAGE} --without-demo=True --import-partial=False --log-db= --dev=False
+ exec odoo --config ${ODOO_RC} --database=${DB_NAME} --init=${INSTALLED_MODULES} --update= --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --load-language=${LOAD_LANGUAGE} --max-cron-threads=${MAX_CRON_THREADS} --limit-time-cpu=3600 --limit-time-real=7200 --workers=0 --without-demo=all
fi
if [ ${APP_ENV} = 'local' ] ; then
# Automagically update the addons you are currently working on.
- echo odoo --config ${ODOO_RC} --database=${DB_NAME} --update=${UPDATE} --init=${INIT} --load=${SERVER_WIDE_MODULES} --dev=${DEV_MODE}
+ echo odoo --config ${ODOO_RC} --database=${DB_NAME} --init=${INIT} --update=${UPDATE} --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --workers=${WORKERS} --dev=${DEV_MODE}
- exec odoo --config ${ODOO_RC} --database=${DB_NAME} --update=${UPDATE} --init=${INIT} --load=${SERVER_WIDE_MODULES} --dev=${DEV_MODE}
+ exec odoo --config ${ODOO_RC} --database=${DB_NAME} --init=${INIT} --update=${UPDATE} --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --workers=${WORKERS} --dev=${DEV_MODE}
fi
if [ ${APP_ENV} = 'debug' ] ; then
# Automagically update the addons you are currently working on.
- exec /usr/bin/python3 -m debugpy --listen 0.0.0.0:8888 /usr/bin/odoo --config ${ODOO_RC} --database=${DB_NAME} --update=${UPDATE} --init=${INIT} --load=${SERVER_WIDE_MODULES} --dev=${DEV_MODE}
+ echo /usr/bin/python3 -m debugpy --listen ${DEBUG_INTERFACE}:${DEBUG_PORT} ${DEBUG_PATH} --config ${ODOO_RC} --database=${DB_NAME} --init=${INIT} --update=${UPDATE} --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --workers=${WORKERS} --dev=${DEV_MODE}
- exec /usr/bin/python3 -m debugpy --listen 0.0.0.0:8888 /usr/bin/odoo --config ${ODOO_RC} --database=${DB_NAME} --update=${UPDATE} --init=${INIT} --load=${SERVER_WIDE_MODULES} --dev=${DEV_MODE}
+ exec /usr/bin/python3 -m debugpy --listen ${DEBUG_INTERFACE}:${DEBUG_PORT} ${DEBUG_PATH} --config ${ODOO_RC} --database=${DB_NAME} --init=${INIT} --update=${UPDATE} --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --workers=${WORKERS} --dev=${DEV_MODE}
fi
if [ ${APP_ENV} = 'testing' ] ; then
- # Work in progres... (DO NOT USE)
- echo odoo --config ${ODOO_RC} --database=test_${DB_NAME} --db-filter=test_${DB_NAME} --test-enable --test-commit --log-handler=:DEBUG --log-level=debug --workers=0 --init= --update=
+ # Runs the tests in a 'test_*' database for the addons you are currently working on via test tags.
+ echo odoo --config ${ODOO_RC} --database=test_${DB_NAME} --test-enable --test-tags ${TEST_TAGS} --init=${ADDONS_TO_TEST} --update=${ADDONS_TO_TEST} --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --without-demo= --workers=0 --stop-after-init
- exec odoo --config ${ODOO_RC} --database=test_${DB_NAME} --db-filter=test_${DB_NAME} --test-enable --test-commit --log-handler=:DEBUG --log-level=debug --workers=0 --init= --update=
+ exec odoo --config ${ODOO_RC} --database=test_${DB_NAME} --test-enable --test-tags ${TEST_TAGS} --init=${ADDONS_TO_TEST} --update=${ADDONS_TO_TEST} --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --without-demo= --workers=0 --stop-after-init
fi
if [ ${APP_ENV} = 'staging' ] ; then
- # Automagically install/upgrade all addons
- echo odoo --config ${ODOO_RC} --database=${DB_NAME} --init=${INIT} --update=all --load=${SERVER_WIDE_MODULES} --workers=0 --log-handler=:INFO --log-level=info --max-cron-threads=2 --limit-time-cpu=3600 --limit-time-real=7200 --limit-time-real-cron=600 --limit-request=8192 --limit-memory-soft=2147483648 --limit-memory-hard=2684354560 --transient-age-limit=1.0 --db-filter= --load-language=${LOAD_LANGUAGE} --without-demo=True --import-partial=False --log-db= --dev=False
+ # Automagically upgrade all addons and install new ones.
+ echo odoo --config ${ODOO_RC} --database=${DB_NAME} --init=${INIT} --update=all --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --load-language=${LOAD_LANGUAGE} --limit-time-cpu=3600 --limit-time-real=7200 --workers=0 --without-demo=all
- exec odoo --config ${ODOO_RC} --database=${DB_NAME} --init=${INIT} --update=all --load=${SERVER_WIDE_MODULES} --workers=0 --log-handler=:INFO --log-level=info --max-cron-threads=2 --limit-time-cpu=3600 --limit-time-real=7200 --limit-time-real-cron=600 --limit-request=8192 --limit-memory-soft=2147483648 --limit-memory-hard=2684354560 --transient-age-limit=1.0 --db-filter= --load-language=${LOAD_LANGUAGE} --without-demo=True --import-partial=False --log-db= --dev=False
+ exec odoo --config ${ODOO_RC} --database=${DB_NAME} --init=${INIT} --update=all --load=${SERVER_WIDE_MODULES} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --load-language=${LOAD_LANGUAGE} --limit-time-cpu=3600 --limit-time-real=7200 --workers=0 --without-demo=all
fi
if [ ${APP_ENV} = 'production' ] ; then
- # Bring up Odoo without any addons to install/update.
- echo odoo --config ${ODOO_RC} --database= --init= --update= --load-language= --db-filter= --dev=False --import-partial=False --without-demo=True --log-handler=:INFO --log-level=info --log-db= --log-db-level=warning --workers=2 --max-cron-threads=2 --log-level=info --log-handler=:INFO --limit-time-cpu=120 --limit-time-real=240 --limit-request=8192 --limit-memory-soft=2147483648 --limit-memory-hard=2684354560 --transient-age-limit=1.0 --import-partial=False
+ # Bring up Odoo ready for production.
+ echo odoo --config ${ODOO_RC} --database= --init= --update= --load=${SERVER_WIDE_MODULES} --workers=${WORKERS} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --load-language= --without-demo=all --dev=False
- exec odoo --config ${ODOO_RC} --database= --init= --update= --load-language= --db-filter= --dev=False --import-partial=False --without-demo=True --log-handler=:INFO --log-level=info --log-db= --log-db-level=warning --workers=2 --max-cron-threads=2 --log-level=info --log-handler=:INFO --limit-time-cpu=120 --limit-time-real=240 --limit-request=8192 --limit-memory-soft=2147483648 --limit-memory-hard=2684354560 --transient-age-limit=1.0 --import-partial=False
+ exec odoo --config ${ODOO_RC} --database= --init= --update= --load=${SERVER_WIDE_MODULES} --workers=${WORKERS} --log-handler=${LOG_HANDLER} --log-level=${LOG_LEVEL} --load-language= --without-demo=all --dev=False
fi
fi
;;
@@ -72,4 +72,4 @@ case "$1" in
exec "$@"
esac
-exit 1
\ No newline at end of file
+exit 1
diff --git a/odoo/extra-addons/.gitignore b/odoo/extra-addons/.gitignore
deleted file mode 100644
index 75b6f9c..0000000
--- a/odoo/extra-addons/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# Ignores any __pycache__ folder.
-__pycache__
\ No newline at end of file
diff --git a/odoo/odoo.example.conf b/odoo/odoo.example.conf
index 6a1fb69..84e2820 100644
--- a/odoo/odoo.example.conf
+++ b/odoo/odoo.example.conf
@@ -3,249 +3,258 @@
; Options not exposed on the command line. ;
;------------------------------------------;
-admin_passwd=odoo
-csv_internal_sep=,
-publisher_warranty_url=http://services.openerp.com/publisher-warranty/
-root_path=/usr/lib/python3/dist-packages/odoo
-reportgz=False
-websocket_keep_alive_timeout=3600
-websocket_rate_limit_burst=10
-websocket_rate_limit_delay=0.2
+admin_passwd = {ADMIN_PASSWD}
+csv_internal_sep = {CSV_INTERNAL_SEP}
+publisher_warranty_url = {PUBLISHER_WARRANTY_URL}
+root_path = {ROOT_PATH}
+reportgz = {REPORTGZ}
+websocket_keep_alive_timeout = {WEBSOCKET_KEEP_ALIVE_TIMEOUT}
+websocket_rate_limit_burst = {WEBSOCKET_RATE_LIMIT_BURST}
+websocket_rate_limit_delay = {WEBSOCKET_RATE_LIMIT_DELAY}
;-----------------------;
; Server startup config ;
;-----------------------;
; --config | -c
-config=/etc/odoo/odoo.conf
+config = {ODOO_RC}
; --save
-save=False
+save = {SAVE}
; --init | -i
-init=
+init = {INIT}
; --update | -u
-update=
+update = {UPDATE}
; --without-demo
-demo=False
-without_demo=all
+demo = {DEMO}
+without_demo = {WITHOUT_DEMO}
; --import-partial
-import_partial=
+import_partial = {IMPORT_PARTIAL}
; --pidfile
-pidfile=
+pidfile = {PIDFILE}
; --addons-path
-addons_path=/usr/lib/python3/dist-packages/odoo/addons,/usr/lib/python3/dist-packages/odoo/enterprise,/usr/lib/python3/dist-packages/odoo/extra-addons,/usr/lib/python3/dist-packages/odoo/custom-addons
+addons_path = {ADDONS_PATH}
; --upgrade-path
-upgrade_path=
+upgrade_path = {UPGRADE_PATH}
; --load
-server_wide_modules=base,web
+server_wide_modules = {SERVER_WIDE_MODULES}
; --data-dir
-data_dir=/var/lib/odoo
+data_dir = {DATA_DIR}
;------;
; HTTP ;
;------;
; --http-interface | --xmlrpc-interface
-http_interface=0.0.0.0
+http_interface = {HTTP_INTERFACE}
; --http-port | -p | --xmlrpc-port
-http_port=8069
+http_port = {HTTP_PORT}
+
+; --xmlrpcs-interface
+xmlrpcs_interface = {XMLRPCS_INTERFACE}
+
+; --xmlrpcs-port
+xmlrpcs_port = {XMLRPCS_PORT}
; --longpolling_port
-longpolling_port=8072
+longpolling_port = {LONGPOLLING_PORT}
; --no-http | --no-xmlrpc
-http_enable=True
+http_enable = {HTTP_ENABLE}
+
+; --no-xmlrpcs
+xmlrpcs = {XMLRPCS}
; --proxy-mode
-proxy_mode=True
+proxy_mode = {PROXY_MODE}
; --x-sendfile
-x_sendfile =False
+x_sendfile = {X_SENDFILE}
;---------------;
; Testing Group ;
;---------------;
; --test-file
-test_file=False
+test_file = {TEST_FILE}
; --test-enable
-test_enable=False
+test_enable = {TEST_ENABLE}
; --test-tags
-test_tags=False
+test_tags = {TEST_FILE}
; --screencasts
-screencasts=None
+screencasts = {SCREENCASTS}
; --screenshots
-screenshots=/tmp/odoo_tests
+screenshots = {SCREENSHOTS}
;---------------;
; Logging Group ;
;---------------;
; --logfile
-logfile=
+logfile = {LOGFILE}
; --syslog
-syslog=False
+syslog = {SYSLOG}
; --log-handler | --log-web (--log-handler=odoo.http:DEBUG) | --log-sql (--log-handler=odoo.sql_db:DEBUG)
-log_handler=[':INFO']
+log_handler = {LOG_HANDLER}
; --log-db
-log_db=False
+log_db = {LOG_DB}
; --log-db-level
-log_db_level=info
+log_db_level = {LOG_DB_LEVEL}
; --log-level
-log_level=info
+log_level = {LOG_LEVEL}
;------------;
; SMTP Group ;
;------------;
; --email-from
-email_from=
+email_from = {EMAIL_FROM}
; --from-filter
-from_filter=False
+from_filter = {FROM_FILTER}
; --smtp
-smtp_server=
+smtp_server = {SMTP_SERVER}
; --smtp-port
-smtp_port=25
+smtp_port = {SMTP_PORT}
; --smtp-ssl
-smtp_ssl=
+smtp_ssl = {SMTP_SSL}
; --smtp-user
-smtp_user=
+smtp_user = {SMTP_USER}
; --smtp-password
-smtp_password=
+smtp_password = {SMTP_PASSWORD}
; --smtp-ssl-certificate-filename
-smtp_ssl_certificate_filename=False
+smtp_ssl_certificate_filename = {SMTP_SSL_CERTIFICATE_FILENAME}
; --smtp-ssl-private-key-filename
-smtp_ssl_private_key_filename=False
+smtp_ssl_private_key_filename = {SMTP_SSL_PRIVATE_KEY_FILENAME}
;----------;
; DB Group ;
;----------;
; --database | -d
-db_name=odoo
+db_name = {DB_NAME}
; --db_user | -r
-db_user=odoo
+db_user = {DB_USER}
; --db_password | -w
-db_password=odoo
+db_password = {DB_PASSWORD}
; --pg_path
-pg_path=
+pg_path = {PG_PATH}
; --db_host
-db_host=postgres
+db_host = {DB_HOST}
; --db_port
-db_port=5432
+db_port = {DB_PORT}
; --db_sslmode
-db_sslmode=prefer
+db_sslmode = {DB_SSLMODE}
; --db_maxconn
-db_maxconn=64
+db_maxconn = {DB_MAXCONN}
; --db-template
-db_template=unaccent_template
+db_template = {DB_TEMPLATE}
;------------------------------;
; Internationalisation options ;
;------------------------------;
; --load-language
-load_language=en_US
+load_language = {LOAD_LANGUAGE}
; --language
-language=
+language = {LANGUAGE}
; --i18n-export
-translate_out=
+translate_out = {TRANSLATE_OUT}
; --i18n-import
-translate_in=
+translate_in = {TRANSLATE_IN}
; --i18n-overwrite
-overwrite_existing_translations=False
+overwrite_existing_translations = {OVERWRITE_EXISTING_TRANSLATIONS}
; --modules
-translate_modules=['all']
+translate_modules = {TRANSLATE_MODULES}
;----------;
; Security ;
;----------;
; --no-database-list
-list_db=True
+list_db = {LIST_DB}
;-----;
; WEB ;
;-----;
; --db-filter
-dbfilter=.*
+dbfilter = {DBFILTER}
;------------------;
; Advanced options ;
;------------------;
-; --dev
-dev_mode=False
+; --dev (all, reload, qweb, werkzeug, sql, shell, assets, tests)
+dev_mode = {DEV_MODE}
; --shell-interface
-shell_interface=ptpython
+shell_interface = {SHELL_INTERFACE}
; --stop-after-init
-stop_after_init=False
+stop_after_init = {STOP_AFTER_INIT}
; --osv-memory-count-limit
-osv_memory_count_limit=False
+osv_memory_count_limit = {OSV_MEMORY_COUNT_LIMIT}
-; --transient-age-limit (for deprecated --osv-memory-age-limit)
-transient_age_limit=1.0
+; --transient-age-limit | --osv-memory-age-limit (deprecated)
+transient_age_limit = {TRANSIENT_AGE_LIMIT}
; --max-cron-threads
-max_cron_threads=2
+max_cron_threads = {MAX_CRON_THREADS}
; --unaccent
-unaccent=True
+unaccent = {UNACCENT}
; --geoip-db
-geoip_database=/usr/share/GeoIP/GeoLite2-City.mmdb
+geoip_database = {GEOIP_DATABASE}
; --workers
-workers=0
+workers = {WORKERS}
; --limit-memory-soft
-limit_memory_soft=2147483648
+limit_memory_soft = {LIMIT_MEMORY_SOFT}
; --limit-memory-hard
-limit_memory_hard=2684354560
+limit_memory_hard = {LIMIT_MEMORY_HARD}
; --limit-time-cpu
-limit_time_cpu=120
+limit_time_cpu = {LIMIT_TIME_CPU}
; --limit-time-real
-limit_time_real=240
+limit_time_real = {LIMIT_TIME_REAL}
; --limit-time-real-cron
-limit_time_real_cron=600
+limit_time_real_cron = {LIMIT_TIME_REAL_CRON}
; --limit-request
-limit_request=8192
+limit_request = {LIMIT_REQUEST}
diff --git a/odoo/odoorc.sh b/odoo/odoorc.sh
index acbe0bd..9b841f2 100755
--- a/odoo/odoorc.sh
+++ b/odoo/odoorc.sh
@@ -35,7 +35,7 @@ defaults=(
[HTTP_PORT]=${HTTP_PORT}
[XMLRPCS_INTERFACE]=${XMLRPCS_INTERFACE}
[XMLRPCS_PORT]=${XMLRPCS_PORT}
- [GEVENT_PORT]=${GEVENT_PORT}
+ [LONGPOLLING_PORT]=${LONGPOLLING_PORT}
[HTTP_ENABLE]=${HTTP_ENABLE}
[XMLRPCS]=${XMLRPCS}
[PROXY_MODE]=${PROXY_MODE}
@@ -86,7 +86,6 @@ defaults=(
[LIST_DB]=${LIST_DB}
[DEV_MODE]=${DEV_MODE}
- [DEBUG_MODE]=${DEBUG_MODE}
[SHELL_INTERFACE]=${SHELL_INTERFACE}
[STOP_AFTER_INIT]=${STOP_AFTER_INIT}
[OSV_MEMORY_COUNT_LIMIT]=${OSV_MEMORY_COUNT_LIMIT}
@@ -122,252 +121,248 @@ websocket_rate_limit_delay = {WEBSOCKET_RATE_LIMIT_DELAY}
;-----------------------;
; Server startup config ;
;-----------------------;
-; `--config | -c`
+; --config | -c
config = {ODOO_RC}
-; `--save`
+; --save
save = {SAVE}
-; `--init | -i`
+; --init | -i
init = {INIT}
-; `--update | -u`
+; --update | -u
update = {UPDATE}
-; `--without-demo`
+; --without-demo
demo = {DEMO}
without_demo = {WITHOUT_DEMO}
-; `--import-partial`
+; --import-partial
import_partial = {IMPORT_PARTIAL}
-; `--pidfile`
+; --pidfile
pidfile = {PIDFILE}
-; `--addons-path`
+; --addons-path
addons_path = {ADDONS_PATH}
-; `--upgrade-path`
+; --upgrade-path
upgrade_path = {UPGRADE_PATH}
-; `--load`
+; --load
server_wide_modules = {SERVER_WIDE_MODULES}
-; `--data-dir`
+; --data-dir
data_dir = {DATA_DIR}
;------;
; HTTP ;
;------;
-; `--http-interface | --xmlrpc-interface`
+; --http-interface | --xmlrpc-interface
http_interface = {HTTP_INTERFACE}
-; `--http-port | -p | --xmlrpc-port`
+; --http-port | -p | --xmlrpc-port
http_port = {HTTP_PORT}
-; `--xmlrpcs-interface`
+; --xmlrpcs-interface
xmlrpcs_interface = {XMLRPCS_INTERFACE}
-; `--xmlrpcs-port`
+; --xmlrpcs-port
xmlrpcs_port = {XMLRPCS_PORT}
-; `--gevent-port | --longpolling_port` (deprecated)
-gevent_port = {GEVENT_PORT}
-longpolling_port = 0
+; --longpolling_port
+longpolling_port = {LONGPOLLING_PORT}
-; `--no-http | --no-xmlrpc`
+; --no-http | --no-xmlrpc
http_enable = {HTTP_ENABLE}
-; `--no-xmlrpcs`
+; --no-xmlrpcs
xmlrpcs = {XMLRPCS}
-; `--proxy-mode`
+; --proxy-mode
proxy_mode = {PROXY_MODE}
-; `--x-sendfile`
+; --x-sendfile
x_sendfile = {X_SENDFILE}
;---------------;
; Testing Group ;
;---------------;
-; `--test-file`
+; --test-file
test_file = {TEST_FILE}
-; `--test-enable`
+; --test-enable
test_enable = {TEST_ENABLE}
-; `--test-tags`
+; --test-tags
test_tags = {TEST_FILE}
-; `--screencasts`
+; --screencasts
screencasts = {SCREENCASTS}
-; `--screenshots`
+; --screenshots
screenshots = {SCREENSHOTS}
;---------------;
; Logging Group ;
;---------------;
-; `--logfile`
+; --logfile
logfile = {LOGFILE}
-; `--syslog`
+; --syslog
syslog = {SYSLOG}
-; `--log-handler | --log-web (--log-handler=odoo.http:DEBUG) | --log-sql (--log-handler=odoo.sql_db:DEBUG)`
+; --log-handler | --log-web (--log-handler=odoo.http:DEBUG) | --log-sql (--log-handler=odoo.sql_db:DEBUG)
log_handler = {LOG_HANDLER}
-; `--log-db`
+; --log-db
log_db = {LOG_DB}
-; `--log-db-level`
+; --log-db-level
log_db_level = {LOG_DB_LEVEL}
-; `--log-level`
+; --log-level
log_level = {LOG_LEVEL}
;------------;
; SMTP Group ;
;------------;
-; `--email-from`
+; --email-from
email_from = {EMAIL_FROM}
-; `--from-filter`
+; --from-filter
from_filter = {FROM_FILTER}
-; `--smtp`
+; --smtp
smtp_server = {SMTP_SERVER}
-; `--smtp-port`
+; --smtp-port
smtp_port = {SMTP_PORT}
-; `--smtp-ssl`
+; --smtp-ssl
smtp_ssl = {SMTP_SSL}
-; `--smtp-user`
+; --smtp-user
smtp_user = {SMTP_USER}
-; `--smtp-password`
+; --smtp-password
smtp_password = {SMTP_PASSWORD}
-; `--smtp-ssl-certificate-filename`
+; --smtp-ssl-certificate-filename
smtp_ssl_certificate_filename = {SMTP_SSL_CERTIFICATE_FILENAME}
-; `--smtp-ssl-private-key-filename`
+; --smtp-ssl-private-key-filename
smtp_ssl_private_key_filename = {SMTP_SSL_PRIVATE_KEY_FILENAME}
;----------;
; DB Group ;
;----------;
-; `--database | -d`
+; --database | -d
db_name = {DB_NAME}
-; `--db_user | -r`
+; --db_user | -r
db_user = {DB_USER}
-; `--db_password | -w`
+; --db_password | -w
db_password = {DB_PASSWORD}
-; `--pg_path`
+; --pg_path
pg_path = {PG_PATH}
-; `--db_host`
+; --db_host
db_host = {DB_HOST}
-; `--db_port`
+; --db_port
db_port = {DB_PORT}
-; `--db_sslmode`
+; --db_sslmode
db_sslmode = {DB_SSLMODE}
-; `--db_maxconn`
+; --db_maxconn
db_maxconn = {DB_MAXCONN}
-; `--db-template`
+; --db-template
db_template = {DB_TEMPLATE}
;------------------------------;
; Internationalisation options ;
;------------------------------;
-; `--load-language`
+; --load-language
load_language = {LOAD_LANGUAGE}
-; `--language`
+; --language
language = {LANGUAGE}
-; `--i18n-export`
+; --i18n-export
translate_out = {TRANSLATE_OUT}
-; `--i18n-import`
+; --i18n-import
translate_in = {TRANSLATE_IN}
-; `--i18n-overwrite`
+; --i18n-overwrite
overwrite_existing_translations = {OVERWRITE_EXISTING_TRANSLATIONS}
-; `--modules `
+; --modules
translate_modules = {TRANSLATE_MODULES}
;----------;
; Security ;
;----------;
-; `--no-database-list`
+; --no-database-list
list_db = {LIST_DB}
;-----;
; WEB ;
;-----;
-; `--db-filter`
+; --db-filter
dbfilter = {DBFILTER}
;------------------;
; Advanced options ;
;------------------;
-; `--dev`
+; --dev
dev_mode = {DEV_MODE}
-;
-debug_mode = {DEV_MODE}
-
-; `--shell-interface`
+; --shell-interface
shell_interface = {SHELL_INTERFACE}
-; `--stop-after-init`
+; --stop-after-init
stop_after_init = {STOP_AFTER_INIT}
-; `--osv-memory-count-limit`
+; --osv-memory-count-limit
osv_memory_count_limit = {OSV_MEMORY_COUNT_LIMIT}
-; `--transient-age-limit | --osv-memory-age-limit` (deprecated)
+; --transient-age-limit | --osv-memory-age-limit (deprecated)
transient_age_limit = {TRANSIENT_AGE_LIMIT}
-; `--max-cron-threads`
+; --max-cron-threads
max_cron_threads = {MAX_CRON_THREADS}
-; `--unaccent`
+; --unaccent
unaccent = {UNACCENT}
-; `--geoip-db`
+; --geoip-db
geoip_database = {GEOIP_DATABASE}
-; `--workers`
+; --workers
workers = {WORKERS}
-; `--limit-memory-soft`
+; --limit-memory-soft
limit_memory_soft = {LIMIT_MEMORY_SOFT}
-; `--limit-memory-hard`
+; --limit-memory-hard
limit_memory_hard = {LIMIT_MEMORY_HARD}
-; `--limit-time-cpu`
+; --limit-time-cpu
limit_time_cpu = {LIMIT_TIME_CPU}
-; `--limit-time-real`
+; --limit-time-real
limit_time_real = {LIMIT_TIME_REAL}
-; `--limit-time-real-cron`
+; --limit-time-real-cron
limit_time_real_cron = {LIMIT_TIME_REAL_CRON}
-; `--limit-request`
+; --limit-request
limit_request = {LIMIT_REQUEST}
EOF
)
@@ -381,4 +376,4 @@ for key in "${!defaults[@]}"; do
done
# Store the result to the odoo.conf file
-echo "$template" > ${ODOO_RC}
\ No newline at end of file
+echo "$template" > ${ODOO_RC}
diff --git a/odoo/requirements.txt b/odoo/requirements.txt
index 8ccada8..3054caa 100644
--- a/odoo/requirements.txt
+++ b/odoo/requirements.txt
@@ -1 +1,5 @@
-debugpy
\ No newline at end of file
+jinja2
+sortedcontainers
+debugpy
+websocket-client
+pyOpenSSL
diff --git a/postgres/Dockerfile b/postgres/Dockerfile
index eb19eb8..bd59d7a 100644
--- a/postgres/Dockerfile
+++ b/postgres/Dockerfile
@@ -1,13 +1,14 @@
-FROM postgres:15.2
-
-# Update apt packages
-RUN apt-get update && apt-get upgrade -y
+FROM postgres:15.3
#------------------------#
# APT Dependencies #
#------------------------#
-# Unaccent extension dependencies
-RUN apt-get install -y postgresql-contrib
+# Update apt packages
+RUN apt-get update && apt-get install -y \
+ # Unaccent extension dependencies
+ postgresql-contrib \
+ # Clean up the apt cache to reduce the image size
+ && rm -rf /var/lib/apt/lists/*
# Copy the script to create the unaccent template
-COPY ./entrypoint.sh /docker-entrypoint-initdb.d/entrypoint.sh
\ No newline at end of file
+COPY ./entrypoint.sh /docker-entrypoint-initdb.d/entrypoint.sh
diff --git a/postgres/entrypoint.sh b/postgres/entrypoint.sh
index d3511c5..de38ff1 100755
--- a/postgres/entrypoint.sh
+++ b/postgres/entrypoint.sh
@@ -1,3 +1,3 @@
psql -p 5432 -U odoo -d postgres -c "CREATE DATABASE unaccent_template WITH TEMPLATE = template0"
psql -p 5432 -U odoo -d postgres -c "\\c unaccent_template"
-psql -p 5432 -U odoo -d postgres -c "CREATE EXTENSION IF NOT EXISTS unaccent;"
\ No newline at end of file
+psql -p 5432 -U odoo -d postgres -c "CREATE EXTENSION IF NOT EXISTS unaccent;"