mirror of
				https://github.com/odoocker/odoocker
				synced 2025-11-04 07:19:15 +01:00 
			
		
		
		
	first commit
This commit is contained in:
		
							
								
								
									
										194
									
								
								.env.example
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								.env.example
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,194 @@
 | 
			
		||||
#--------------------------#
 | 
			
		||||
#    Main Configuration    #
 | 
			
		||||
#--------------------------#
 | 
			
		||||
APP_ENV=fresh
 | 
			
		||||
ADDONS_TO_UPDATE=
 | 
			
		||||
ADDONS_TO_INSTALL=
 | 
			
		||||
 | 
			
		||||
DB_NAME=odoo
 | 
			
		||||
DB_USER=odoo
 | 
			
		||||
DB_PASSWORD=odoo
 | 
			
		||||
 | 
			
		||||
LOG_LEVEL=info
 | 
			
		||||
LOG_HANDLER="[':INFO']"
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
#------------------------------#
 | 
			
		||||
#    Project Configurations    #
 | 
			
		||||
#------------------------------#
 | 
			
		||||
PROJECT_NAME=odoocker
 | 
			
		||||
DOMAIN=${DOMAIN}
 | 
			
		||||
SUPPORT_EMAIL=example@mail.com
 | 
			
		||||
 | 
			
		||||
#------------#
 | 
			
		||||
#    Odoo    #
 | 
			
		||||
#------------#
 | 
			
		||||
# Options not exposed on the command line.
 | 
			
		||||
ADMIN_PASSWD=${ADMIN_PASSWD}
 | 
			
		||||
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
 | 
			
		||||
# Custom paths
 | 
			
		||||
COMMUNITY_ADDONS=${ROOT_PATH}/addons
 | 
			
		||||
ENTERPRISE_ADDONS=${ROOT_PATH}/enterprise
 | 
			
		||||
EXTRA_ADDONS=${ROOT_PATH}/extra-addons
 | 
			
		||||
CUSTOM_ADDONS=${ROOT_PATH}/custom-addons
 | 
			
		||||
 | 
			
		||||
# Server startup config
 | 
			
		||||
ODOO_RC=/etc/odoo/odoo.conf
 | 
			
		||||
SAVE=False
 | 
			
		||||
INIT=${ADDONS_TO_INSTALL}
 | 
			
		||||
UPDATE=${ADDONS_TO_UPDATE}
 | 
			
		||||
DEMO=False
 | 
			
		||||
WITHOUT_DEMO=all
 | 
			
		||||
IMPORT_PARTIAL=
 | 
			
		||||
PIDFILE=
 | 
			
		||||
ADDONS_PATH=${COMMUNITY_ADDONS},${ENTERPRISE_ADDONS},${EXTRA_ADDONS},${CUSTOM_ADDONS}
 | 
			
		||||
UPGRADE_PATH=
 | 
			
		||||
SERVER_WIDE_MODULES=base,web
 | 
			
		||||
DATA_DIR=/var/lib/odoo
 | 
			
		||||
 | 
			
		||||
# HTTP
 | 
			
		||||
HTTP_INTERFACE=0.0.0.0
 | 
			
		||||
HTTP_PORT=8069
 | 
			
		||||
LONGPOLLING_PORT=8072
 | 
			
		||||
HTTP_ENABLE=True
 | 
			
		||||
PROXY_MODE=True
 | 
			
		||||
X_SENDFILE=False
 | 
			
		||||
 | 
			
		||||
# Testing
 | 
			
		||||
TEST_FILE=False
 | 
			
		||||
TEST_ENABLE=False
 | 
			
		||||
TEST_TAGS=None
 | 
			
		||||
SCREENCASTS=None
 | 
			
		||||
SCREENSHOTS=/tmp/odoo_tests
 | 
			
		||||
 | 
			
		||||
# Logging
 | 
			
		||||
LOGFILE=
 | 
			
		||||
SYSLOG=False
 | 
			
		||||
LOG_HANDLER="[':INFO']"
 | 
			
		||||
LOG_DB=False
 | 
			
		||||
LOG_DB_LEVEL=info
 | 
			
		||||
LOG_LEVEL=info
 | 
			
		||||
 | 
			
		||||
# Email
 | 
			
		||||
EMAIL_FROM=${EMAIL_FROM}
 | 
			
		||||
FROM_FILTER=False
 | 
			
		||||
SMTP_SERVER=${SMTP_SERVER}
 | 
			
		||||
SMTP_PORT=${SMTP_PORT}
 | 
			
		||||
SMTP_SSL=${SMTP_SSL}
 | 
			
		||||
SMTP_USER=${SMTP_USER}
 | 
			
		||||
SMTP_PASSWORD=${SMTP_PASSWORD}
 | 
			
		||||
SMTP_SSL_CERTIFICATE_FILENAME=False
 | 
			
		||||
SMTP_SSL_PRIVATE_KEY_FILENAME=False
 | 
			
		||||
 | 
			
		||||
# DB Group
 | 
			
		||||
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
 | 
			
		||||
# Internationalisation options
 | 
			
		||||
LOAD_LANGUAGE=${LOAD_LANGUAGE}
 | 
			
		||||
LANGUAGE=
 | 
			
		||||
TRANSLATE_OUT=
 | 
			
		||||
TRANSLATE_IN=
 | 
			
		||||
OVERWRITE_EXISTING_TRANSLATIONS=False
 | 
			
		||||
TRANSLATE_MODULES="['all']"
 | 
			
		||||
# Security
 | 
			
		||||
LIST_DB=True
 | 
			
		||||
# WEB
 | 
			
		||||
DBFILTER=.*
 | 
			
		||||
 | 
			
		||||
# Advanced options
 | 
			
		||||
DEV_MODE=${DEV_MODE}
 | 
			
		||||
SHELL_INTERFACE=ptpython
 | 
			
		||||
STOP_AFTER_INIT=False
 | 
			
		||||
OSV_MEMORY_COUNT_LIMIT=False
 | 
			
		||||
TRANSIENT_AGE_LIMIT=1.0
 | 
			
		||||
MAX_CRON_THREADS=2
 | 
			
		||||
UNACCENT=True
 | 
			
		||||
GEOIP_DATABASE=/usr/share/GeoIP/GeoLite2-City.mmdb
 | 
			
		||||
WORKERS=0
 | 
			
		||||
LIMIT_MEMORY_SOFT=2147483648
 | 
			
		||||
LIMIT_MEMORY_HARD=2684354560
 | 
			
		||||
LIMIT_TIME_CPU=120
 | 
			
		||||
LIMIT_TIME_REAL=240
 | 
			
		||||
LIMIT_TIME_REAL_CRON=600
 | 
			
		||||
LIMIT_REQUEST=8192
 | 
			
		||||
 | 
			
		||||
INSTALLED_MODULES=
 | 
			
		||||
 | 
			
		||||
#--------------#
 | 
			
		||||
#    Docker    #
 | 
			
		||||
#--------------#
 | 
			
		||||
COMPOSE_PROJECT_NAME=${PROJECT_NAME}
 | 
			
		||||
DOCKER_SOCK=/var/run/docker.sock
 | 
			
		||||
TEMP_DOCKER_SOCK=/tmp/docker.sock
 | 
			
		||||
 | 
			
		||||
#----------------#
 | 
			
		||||
#    Postgres    #
 | 
			
		||||
#----------------#
 | 
			
		||||
POSTGRES_HOST=${DB_HOST}
 | 
			
		||||
POSTGRES_PORT=${DB_PORT}
 | 
			
		||||
POSTGRES_DB=postgres
 | 
			
		||||
POSTGRES_USER=${DB_USER}
 | 
			
		||||
POSTGRES_PASSWORD=${DB_PASSWORD}
 | 
			
		||||
PGDATA=/var/lib/postgresql/data/${PROJECT_NAME}
 | 
			
		||||
 | 
			
		||||
#-------------#
 | 
			
		||||
#    Nginx    #
 | 
			
		||||
#-------------#
 | 
			
		||||
NGINX_CONF=/etc/nginx/nginx.conf
 | 
			
		||||
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'"
 | 
			
		||||
 | 
			
		||||
#-------------#
 | 
			
		||||
#   PgAdmin   #
 | 
			
		||||
#-------------#
 | 
			
		||||
PGADMIN_DATA=/var/lib/pgadmin
 | 
			
		||||
PGADMIN_VIRTUAL_HOST=${PGADMIN_DOMAIN}
 | 
			
		||||
PGADMIN_DEFAULT_EMAIL=${SUPPORT_EMAIL}
 | 
			
		||||
PGADMIN_DEFAULT_PASSWORD=${PGADMIN_PASSWORD}
 | 
			
		||||
PGADMIN_LETSENCRYPT_HOST=${PGADMIN_DOMAIN}
 | 
			
		||||
LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
 | 
			
		||||
 | 
			
		||||
#-------------------#
 | 
			
		||||
#    Nginx Proxy    #
 | 
			
		||||
#-------------------#
 | 
			
		||||
NGINX_CERTS=/etc/nginx/certs
 | 
			
		||||
NGINX_VHOST=/etc/nginx/vhost.d
 | 
			
		||||
NGINX_HTML=/usr/share/nginx/html
 | 
			
		||||
NGINX_ACME=/etc/acme.sh
 | 
			
		||||
TRUST_DOWNSTREAM_PROXY=true
 | 
			
		||||
NGINX_PROXY_CORS_CONF=/etc/nginx/cors.conf
 | 
			
		||||
CORS_ALLOWED_DOMAIN=${CORS_ALLOWED_DOMAIN}
 | 
			
		||||
 | 
			
		||||
#----------------------#
 | 
			
		||||
#    ACME Companion    #
 | 
			
		||||
#----------------------#
 | 
			
		||||
DEFAULT_EMAIL=${SUPPORT_EMAIL}
 | 
			
		||||
							
								
								
									
										11
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
## :rocket: Deployment
 | 
			
		||||
- `ADDONS_TO_INSTALL="my_custom_addon"`
 | 
			
		||||
- `ADDONS_TO_UPGRADE="contacts,sale"`
 | 
			
		||||
 | 
			
		||||
## :memo: Changes
 | 
			
		||||
**Change 1: *Title***
 | 
			
		||||
- In detail, explain what changes were made.
 | 
			
		||||
 | 
			
		||||
*Add links and screenshots*
 | 
			
		||||
 | 
			
		||||
<hr>
 | 
			
		||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
# Ignores the main configuration file.
 | 
			
		||||
/.env
 | 
			
		||||
 | 
			
		||||
# Ignores the docker compose local or production environment.
 | 
			
		||||
docker-compose.override.yml
 | 
			
		||||
							
								
								
									
										221
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										221
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,221 @@
 | 
			
		||||
# Setup
 | 
			
		||||
```
 | 
			
		||||
1. Clone the repository:
 | 
			
		||||
```
 | 
			
		||||
git clone git@github.com:yhaelopez/odoocker.git
 | 
			
		||||
```
 | 
			
		||||
2. Copy the `.env.example` and `docker-compose.override.local.yml`
 | 
			
		||||
```
 | 
			
		||||
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)
 | 
			
		||||
```
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
- 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
 | 
			
		||||
 | 
			
		||||
In order to understand how each environment works, take a look at `odoo/entrypoint.sh`.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Master Password: odoo
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Fresh Environment
 | 
			
		||||
This environment will have no database created.
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
3. Navigate to the `DOMAIN` in your browser.
 | 
			
		||||
4. Create Database form will be displayed.
 | 
			
		||||
5. Create Fresh DB.
 | 
			
		||||
6. Stop the Odoo container:
 | 
			
		||||
```
 | 
			
		||||
docker-compose stop odoo
 | 
			
		||||
```
 | 
			
		||||
7. Set [`Local`](https://github.com/yhaelopez/odoocker#local-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.
 | 
			
		||||
1. Make sure `APP_ENV=full`.
 | 
			
		||||
2. Make sure `DB_NAME=odoo` or whatever name you want.
 | 
			
		||||
3. Run
 | 
			
		||||
```
 | 
			
		||||
docker-compose up -d --build && docker-compose logs -f odoo
 | 
			
		||||
```
 | 
			
		||||
4. Navigate to the `DOMAIN` in your browser.
 | 
			
		||||
5. Log in using the default credentials
 | 
			
		||||
```
 | 
			
		||||
Email: admin
 | 
			
		||||
Password: admin
 | 
			
		||||
```
 | 
			
		||||
6. Stop the Odoo container:
 | 
			
		||||
```
 | 
			
		||||
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`.
 | 
			
		||||
4. Run:
 | 
			
		||||
```
 | 
			
		||||
docker-compose up --build -d odoo && docker-compose logs -f odoo
 | 
			
		||||
```
 | 
			
		||||
5. Navigate to the `DOMAIN` in your browser.
 | 
			
		||||
6. Start coding!
 | 
			
		||||
7. Any change you make to your packages, run:
 | 
			
		||||
```
 | 
			
		||||
docker-compose restart odoo && docker-compose logs -f odoo
 | 
			
		||||
```
 | 
			
		||||
- If you think your package is not being updated, run:
 | 
			
		||||
```
 | 
			
		||||
docker-compose up --build -d odoo && docker-compose logs -f odoo
 | 
			
		||||
```
 | 
			
		||||
8. Any time you add a new addon to `ADDONS_TO_UPDATE` re-run last step
 | 
			
		||||
 | 
			
		||||
## Additional Local Help
 | 
			
		||||
 | 
			
		||||
### Creating new Odoo Addons
 | 
			
		||||
1. Log into the odoo container
 | 
			
		||||
```
 | 
			
		||||
docker-compose exec -u root odoo
 | 
			
		||||
```
 | 
			
		||||
2. Navigate to custom addons folder inside the container
 | 
			
		||||
```
 | 
			
		||||
cd /usr/lib/python3/dist-packages/odoo/custom-addons
 | 
			
		||||
```
 | 
			
		||||
3. Create new addons running:
 | 
			
		||||
```
 | 
			
		||||
odoo scaffold <addon_name>
 | 
			
		||||
```
 | 
			
		||||
- The new addon will be available in the `odoo/custom_addons` folder in this project.
 | 
			
		||||
 | 
			
		||||
### Using Odoo Shell
 | 
			
		||||
1. Log into the odoo container
 | 
			
		||||
```
 | 
			
		||||
docker-compose exec odoo bash
 | 
			
		||||
```
 | 
			
		||||
2. Start Odoo shell running:
 | 
			
		||||
```
 | 
			
		||||
odoo shell --http-port=8071
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
5. Connect to database through any Postgres Database Manager using `localhost` and the `.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.
 | 
			
		||||
```
 | 
			
		||||
cp docker-compose.override.testing.yml docker-compose.override.yml
 | 
			
		||||
```
 | 
			
		||||
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:
 | 
			
		||||
```
 | 
			
		||||
docker-compose down && docker-compose pull && docker-compose build --no-cache && docker-compose up -d && docker-compose logs -f odoo
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## 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.
 | 
			
		||||
 | 
			
		||||
**Do not bring down & up again unless you want to perform the whole update again.**
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
```
 | 
			
		||||
sudo apt update && sudo apt upgrade -y
 | 
			
		||||
```
 | 
			
		||||
- If packages are kept, install them
 | 
			
		||||
```
 | 
			
		||||
sudo apt install <kept packages>
 | 
			
		||||
```
 | 
			
		||||
3. Restart the server
 | 
			
		||||
```
 | 
			
		||||
sudo reboot
 | 
			
		||||
```
 | 
			
		||||
- Make sure there are no more upgrades or possible kept packages
 | 
			
		||||
```
 | 
			
		||||
sudo apt update && sudo apt upgrade -y
 | 
			
		||||
```
 | 
			
		||||
4. Go to the project folder in /home/ubuntu or (~)
 | 
			
		||||
```
 | 
			
		||||
cd ~/odoocker
 | 
			
		||||
```
 | 
			
		||||
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.
 | 
			
		||||
```
 | 
			
		||||
docker-compose down && docker-compose pull && docker-compose build --no-cache && docker-compose up -d && docker-compose logs -f odoo
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										20
									
								
								docker-compose.override.local.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								docker-compose.override.local.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
services:
 | 
			
		||||
  odoo:
 | 
			
		||||
    restart: 'no'
 | 
			
		||||
    ports:
 | 
			
		||||
      - 8069:8069
 | 
			
		||||
      - 8071:8071
 | 
			
		||||
      - 8072:8072
 | 
			
		||||
 | 
			
		||||
  postgres:
 | 
			
		||||
    restart: 'no'
 | 
			
		||||
    ports:
 | 
			
		||||
      - 5432:5432
 | 
			
		||||
  
 | 
			
		||||
  nginx:
 | 
			
		||||
    restart: 'no'
 | 
			
		||||
 | 
			
		||||
  nginx-proxy:
 | 
			
		||||
    restart: 'no'
 | 
			
		||||
    ports:
 | 
			
		||||
      - 80:80
 | 
			
		||||
							
								
								
									
										36
									
								
								docker-compose.override.production.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								docker-compose.override.production.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
services:
 | 
			
		||||
  odoo:
 | 
			
		||||
    restart: unless-stopped
 | 
			
		||||
    ports:
 | 
			
		||||
      - 127.0.0.1:8069:8069
 | 
			
		||||
      - 127.0.0.1:8071:8071
 | 
			
		||||
      - 127.0.0.1:8072:8072
 | 
			
		||||
 | 
			
		||||
  postgres:
 | 
			
		||||
    ports:
 | 
			
		||||
      - 127.0.0.1:5432:5432
 | 
			
		||||
 | 
			
		||||
  nginx-proxy:
 | 
			
		||||
    ports:
 | 
			
		||||
      - 80:80
 | 
			
		||||
      - 443:443
 | 
			
		||||
 | 
			
		||||
  letsencrypt:
 | 
			
		||||
    image: nginxproxy/acme-companion:2.2.4
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - nginx-proxy
 | 
			
		||||
    restart: unless-stopped
 | 
			
		||||
    volumes_from:
 | 
			
		||||
      - nginx-proxy:rw
 | 
			
		||||
    volumes:
 | 
			
		||||
      - certs:${NGINX_CERTS}:rw
 | 
			
		||||
      - acme:${NGINX_ACME}
 | 
			
		||||
      - ${DOCKER_SOCK}:${DOCKER_SOCK}:ro
 | 
			
		||||
    environment:
 | 
			
		||||
      - DEFAULT_EMAIL
 | 
			
		||||
    networks:
 | 
			
		||||
      - internal
 | 
			
		||||
 | 
			
		||||
volumes:
 | 
			
		||||
  acme:
 | 
			
		||||
  certs:
 | 
			
		||||
							
								
								
									
										101
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
services:
 | 
			
		||||
  odoo:
 | 
			
		||||
    build:
 | 
			
		||||
      context: ./
 | 
			
		||||
      dockerfile: ./odoo/Dockerfile
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - postgres
 | 
			
		||||
    tty: true
 | 
			
		||||
    volumes:
 | 
			
		||||
      - data-dir:${DATA_DIR}
 | 
			
		||||
      - ./odoo/extra-addons:${EXTRA_ADDONS}
 | 
			
		||||
      - ./odoo/custom-addons:${CUSTOM_ADDONS}
 | 
			
		||||
      - ./odoo/entrypoint.sh:/entrypoint.sh
 | 
			
		||||
      - ./odoo/odoorc.sh:/odoorc.sh
 | 
			
		||||
    env_file:
 | 
			
		||||
      - ./.env
 | 
			
		||||
    networks:
 | 
			
		||||
      - internal
 | 
			
		||||
 | 
			
		||||
  postgres:
 | 
			
		||||
    build: 
 | 
			
		||||
      context: ./postgres
 | 
			
		||||
      dockerfile: Dockerfile
 | 
			
		||||
    restart: unless-stopped
 | 
			
		||||
    tty: true
 | 
			
		||||
    volumes:
 | 
			
		||||
      - pg-data:${PGDATA}
 | 
			
		||||
      - ./postgres/entrypoint.sh:/docker-entrypoint-initdb.d/entrypoint.sh
 | 
			
		||||
    environment:
 | 
			
		||||
      - POSTGRES_DB
 | 
			
		||||
      - POSTGRES_USER
 | 
			
		||||
      - POSTGRES_PASSWORD
 | 
			
		||||
      - PGDATA
 | 
			
		||||
    networks:
 | 
			
		||||
      - internal
 | 
			
		||||
 | 
			
		||||
  nginx:
 | 
			
		||||
    image: nginx:1.23.3
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - odoo
 | 
			
		||||
    restart: unless-stopped
 | 
			
		||||
    tty: true
 | 
			
		||||
    expose:
 | 
			
		||||
      - 80/tcp
 | 
			
		||||
    volumes:
 | 
			
		||||
      - ./nginx/nginx.conf:${NGINX_CONF}
 | 
			
		||||
      - ./nginx/default.conf:${NGINX_DEFAULT_CONF}
 | 
			
		||||
    environment:
 | 
			
		||||
      - VIRTUAL_HOST
 | 
			
		||||
      - LETSENCRYPT_HOST
 | 
			
		||||
      - LETSENCRYPT_EMAIL
 | 
			
		||||
      - CORS_ALLOWED_DOMAIN
 | 
			
		||||
    networks:
 | 
			
		||||
      - internal
 | 
			
		||||
 | 
			
		||||
  pgadmin:
 | 
			
		||||
    image: dpage/pgadmin4:6.21
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
  nginx-proxy:
 | 
			
		||||
    image: nginxproxy/nginx-proxy:1.2.0
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - nginx
 | 
			
		||||
    restart: unless-stopped
 | 
			
		||||
    tty: true
 | 
			
		||||
    volumes:
 | 
			
		||||
      - ./nginx-proxy/nginx.conf:${NGINX_CONF}
 | 
			
		||||
      - ./nginx-proxy/cors.conf:${NGINX_PROXY_CORS_CONF}
 | 
			
		||||
      - certs:${NGINX_CERTS}:ro
 | 
			
		||||
      - vhost:${NGINX_VHOST}
 | 
			
		||||
      - html:${NGINX_HTML}
 | 
			
		||||
      - ${DOCKER_SOCK}:${TEMP_DOCKER_SOCK}:ro
 | 
			
		||||
    environment:
 | 
			
		||||
      - TRUST_DOWNSTREAM_PROXY
 | 
			
		||||
      - CORS_ALLOWED_DOMAIN
 | 
			
		||||
    networks:
 | 
			
		||||
      - internal
 | 
			
		||||
 | 
			
		||||
volumes:
 | 
			
		||||
  data-dir:
 | 
			
		||||
  pg-data:
 | 
			
		||||
  certs:
 | 
			
		||||
  vhost:
 | 
			
		||||
  html:
 | 
			
		||||
  pgadmin-data:
 | 
			
		||||
 | 
			
		||||
networks:
 | 
			
		||||
  internal:
 | 
			
		||||
    driver: bridge
 | 
			
		||||
							
								
								
									
										31
									
								
								nginx-proxy/cors.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								nginx-proxy/cors.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
# Allows the usage of $CORS_ALLOWED_DOMAIN
 | 
			
		||||
map $http_x_cors_allowed_domain $CORS_ALLOWED_DOMAIN {
 | 
			
		||||
    default "*";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
server {
 | 
			
		||||
    server_name $VIRTUAL_HOST;
 | 
			
		||||
    listen 443;
 | 
			
		||||
    location / {
 | 
			
		||||
        # Set the Access-Control-Allow-Origin header to allow specific domain(s) for CORS
 | 
			
		||||
        add_header 'Access-Control-Allow-Origin' $CORS_ALLOWED_DOMAIN;
 | 
			
		||||
        # Specify the allowed HTTP methods for CORS requests
 | 
			
		||||
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
 | 
			
		||||
        # Define the allowed request headers for CORS requests
 | 
			
		||||
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
 | 
			
		||||
        # Specify the response headers that are accessible by the client (browser)
 | 
			
		||||
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
 | 
			
		||||
        # Set the maximum age (in seconds) for the CORS preflight request cache in the client (browser)
 | 
			
		||||
        add_header 'Access-Control-Max-Age' 1728000;
 | 
			
		||||
 | 
			
		||||
        # Handle CORS preflight (OPTIONS) requests
 | 
			
		||||
        if ($request_method = 'OPTIONS') {
 | 
			
		||||
            # Set the response content type and charset for the preflight request
 | 
			
		||||
            add_header 'Content-Type' 'text/plain; charset=utf-8';
 | 
			
		||||
            # Set the response content length to 0 for the preflight request
 | 
			
		||||
            add_header 'Content-Length' 0;
 | 
			
		||||
            # Return a 204 No Content status for the preflight request
 | 
			
		||||
            return 204;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										37
									
								
								nginx-proxy/nginx.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								nginx-proxy/nginx.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
user nginx;
 | 
			
		||||
worker_processes auto;
 | 
			
		||||
 | 
			
		||||
error_log /var/log/nginx/error.log notice;
 | 
			
		||||
pid /var/run/nginx.pid;
 | 
			
		||||
 | 
			
		||||
events {
 | 
			
		||||
    worker_connections 10240;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
http {
 | 
			
		||||
    include /etc/nginx/mime.types;
 | 
			
		||||
    default_type application/octet-stream;
 | 
			
		||||
 | 
			
		||||
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 | 
			
		||||
                    '$status $body_bytes_sent "$http_referer" '
 | 
			
		||||
                    '"$http_user_agent" "$http_x_forwarded_for"';
 | 
			
		||||
 | 
			
		||||
    access_log /var/log/nginx/access.log main;
 | 
			
		||||
 | 
			
		||||
    sendfile on;
 | 
			
		||||
 | 
			
		||||
    keepalive_timeout 900;
 | 
			
		||||
 | 
			
		||||
    proxy_connect_timeout 900;
 | 
			
		||||
    proxy_send_timeout 900;
 | 
			
		||||
    proxy_read_timeout 900;
 | 
			
		||||
    send_timeout 900;
 | 
			
		||||
 | 
			
		||||
    client_max_body_size 1024m;
 | 
			
		||||
 | 
			
		||||
    include /etc/nginx/conf.d/*.conf;
 | 
			
		||||
    include /etc/nginx/cors.conf;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
daemon off;
 | 
			
		||||
							
								
								
									
										57
									
								
								nginx/default.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								nginx/default.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
# Allows the usage of $CORS_ALLOWED_DOMAIN
 | 
			
		||||
map $http_x_cors_allowed_domain $CORS_ALLOWED_DOMAIN {
 | 
			
		||||
    default "*";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
server {
 | 
			
		||||
    client_max_body_size 1024m;
 | 
			
		||||
 | 
			
		||||
    proxy_connect_timeout 900;
 | 
			
		||||
    proxy_send_timeout 900;
 | 
			
		||||
    proxy_read_timeout 900;
 | 
			
		||||
    send_timeout 900;
 | 
			
		||||
 | 
			
		||||
    listen [::]:80;
 | 
			
		||||
    listen 80;
 | 
			
		||||
 | 
			
		||||
    server_name $VIRTUAL_HOST;
 | 
			
		||||
 | 
			
		||||
    location ~ /.well-known/acme-challenge {
 | 
			
		||||
        allow all;
 | 
			
		||||
        root /var/www/html;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location / {
 | 
			
		||||
        proxy_set_header X-Real-IP  $remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-For $remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-Proto $scheme;
 | 
			
		||||
        proxy_set_header Host $host;
 | 
			
		||||
        proxy_pass http://odoo:8069;
 | 
			
		||||
 | 
			
		||||
        # Add CORS headers
 | 
			
		||||
        add_header 'Access-Control-Allow-Origin' $CORS_ALLOWED_DOMAIN;
 | 
			
		||||
        add_header 'Access-Control-Allow-Credentials' 'true';
 | 
			
		||||
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
 | 
			
		||||
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
 | 
			
		||||
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
 | 
			
		||||
        if ($request_method = 'OPTIONS') {
 | 
			
		||||
            return 204;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location ~* /web/static/ {
 | 
			
		||||
        proxy_set_header X-Real-IP  $remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-For $remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-Proto $scheme;
 | 
			
		||||
        proxy_set_header Host $host;
 | 
			
		||||
        proxy_pass http://odoo:8069;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /longpolling {
 | 
			
		||||
        proxy_set_header X-Real-IP  $remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-For $remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-Proto $scheme;
 | 
			
		||||
        proxy_set_header Host $host;
 | 
			
		||||
        proxy_pass http://odoo:8072;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								nginx/nginx.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								nginx/nginx.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
user nginx;
 | 
			
		||||
worker_processes auto;
 | 
			
		||||
 | 
			
		||||
error_log /var/log/nginx/error.log notice;
 | 
			
		||||
pid /var/run/nginx.pid;
 | 
			
		||||
 | 
			
		||||
events {
 | 
			
		||||
    worker_connections 1024;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
http {
 | 
			
		||||
    include /etc/nginx/mime.types;
 | 
			
		||||
    default_type application/octet-stream;
 | 
			
		||||
 | 
			
		||||
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 | 
			
		||||
                    '$status $body_bytes_sent "$http_referer" '
 | 
			
		||||
                    '"$http_user_agent" "$http_x_forwarded_for"';
 | 
			
		||||
 | 
			
		||||
    access_log /var/log/nginx/access.log main;
 | 
			
		||||
 | 
			
		||||
    sendfile on;
 | 
			
		||||
 | 
			
		||||
    keepalive_timeout 900;
 | 
			
		||||
 | 
			
		||||
    include /etc/nginx/conf.d/*.conf;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										68
									
								
								odoo/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								odoo/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
ARG ODOO_VERSION=16.0
 | 
			
		||||
 | 
			
		||||
FROM odoo:${ODOO_VERSION}
 | 
			
		||||
 | 
			
		||||
# Switch back to root user
 | 
			
		||||
USER root
 | 
			
		||||
 | 
			
		||||
# Update & Upgrade
 | 
			
		||||
RUN apt-get update && apt-get upgrade -y
 | 
			
		||||
 | 
			
		||||
# 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    #
 | 
			
		||||
#--------------------------------#
 | 
			
		||||
 | 
			
		||||
#------------------------#
 | 
			
		||||
#    APT Dependencies    #
 | 
			
		||||
#------------------------#
 | 
			
		||||
 | 
			
		||||
#-----------------------#
 | 
			
		||||
#   PIP Dependencies    #
 | 
			
		||||
#-----------------------#
 | 
			
		||||
 | 
			
		||||
#-----------------------#
 | 
			
		||||
#       Odoo Conf       #
 | 
			
		||||
#-----------------------#
 | 
			
		||||
# Copy environment variables at /
 | 
			
		||||
COPY ./.env /
 | 
			
		||||
# Copy script to generate odoo.conf
 | 
			
		||||
COPY ./odoo/odoorc.sh /
 | 
			
		||||
# Generate odoo.conf
 | 
			
		||||
RUN /odoorc.sh && chown odoo:odoo ${ODOO_RC}
 | 
			
		||||
 | 
			
		||||
# Switch back to odoo user
 | 
			
		||||
USER odoo
 | 
			
		||||
							
								
								
									
										2
									
								
								odoo/custom-addons/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								odoo/custom-addons/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
# Ignores any __pycache__ folder.
 | 
			
		||||
__pycache__
 | 
			
		||||
							
								
								
									
										68
									
								
								odoo/entrypoint.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										68
									
								
								odoo/entrypoint.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
case "$1" in
 | 
			
		||||
    -- | odoo)
 | 
			
		||||
        shift
 | 
			
		||||
        if [[ "$1" == "scaffold" ]] ; then
 | 
			
		||||
            # Creates new module.
 | 
			
		||||
            exec odoo "$@"
 | 
			
		||||
        else
 | 
			
		||||
            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
 | 
			
		||||
 | 
			
		||||
                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
 | 
			
		||||
            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
 | 
			
		||||
 | 
			
		||||
                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
 | 
			
		||||
            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}
 | 
			
		||||
 | 
			
		||||
                exec odoo --config ${ODOO_RC} --database=${DB_NAME} --update=${UPDATE} --init=${INIT} --load=${SERVER_WIDE_MODULES} --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=
 | 
			
		||||
 | 
			
		||||
                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=
 | 
			
		||||
            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
 | 
			
		||||
 | 
			
		||||
                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
 | 
			
		||||
            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
 | 
			
		||||
 | 
			
		||||
                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
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
        ;;
 | 
			
		||||
    -*)
 | 
			
		||||
        # TODO: check which cases end up here.
 | 
			
		||||
        wait-for-psql.py --db_host ${DB_HOST} --db_port ${DB_PORT} --db_user ${DB_USER} --db_password ${DB_PASSWORD} --timeout=30
 | 
			
		||||
        echo odoo --config ${ODOO_RC}
 | 
			
		||||
        exec odoo --config ${ODOO_RC}
 | 
			
		||||
        ;;
 | 
			
		||||
    *)
 | 
			
		||||
 | 
			
		||||
        # TODO: check which cases end up here.
 | 
			
		||||
        echo "$@"
 | 
			
		||||
        exec "$@"
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
exit 1
 | 
			
		||||
							
								
								
									
										2
									
								
								odoo/extra-addons/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								odoo/extra-addons/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
# Ignores any __pycache__ folder.
 | 
			
		||||
__pycache__
 | 
			
		||||
							
								
								
									
										251
									
								
								odoo/odoo.example.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										251
									
								
								odoo/odoo.example.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,251 @@
 | 
			
		||||
[options]
 | 
			
		||||
;------------------------------------------;
 | 
			
		||||
; 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
 | 
			
		||||
 | 
			
		||||
;-----------------------;
 | 
			
		||||
; Server startup config ;
 | 
			
		||||
;-----------------------;
 | 
			
		||||
; --config | -c
 | 
			
		||||
config=/etc/odoo/odoo.conf
 | 
			
		||||
 | 
			
		||||
; --save
 | 
			
		||||
save=False
 | 
			
		||||
 | 
			
		||||
; --init | -i
 | 
			
		||||
init=
 | 
			
		||||
 | 
			
		||||
; --update | -u
 | 
			
		||||
update=
 | 
			
		||||
 | 
			
		||||
; --without-demo
 | 
			
		||||
demo=False
 | 
			
		||||
without_demo=all
 | 
			
		||||
 | 
			
		||||
; --import-partial
 | 
			
		||||
import_partial=
 | 
			
		||||
 | 
			
		||||
; --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
 | 
			
		||||
 | 
			
		||||
; --upgrade-path
 | 
			
		||||
upgrade_path=
 | 
			
		||||
 | 
			
		||||
; --load
 | 
			
		||||
server_wide_modules=base,web
 | 
			
		||||
 | 
			
		||||
; --data-dir
 | 
			
		||||
data_dir=/var/lib/odoo
 | 
			
		||||
 | 
			
		||||
;------;
 | 
			
		||||
; HTTP ;
 | 
			
		||||
;------;
 | 
			
		||||
; --http-interface | --xmlrpc-interface
 | 
			
		||||
http_interface=0.0.0.0
 | 
			
		||||
 | 
			
		||||
; --http-port | -p | --xmlrpc-port
 | 
			
		||||
http_port=8069
 | 
			
		||||
 | 
			
		||||
; --longpolling_port
 | 
			
		||||
longpolling_port=8072
 | 
			
		||||
 | 
			
		||||
; --no-http | --no-xmlrpc
 | 
			
		||||
http_enable=True
 | 
			
		||||
 | 
			
		||||
; --proxy-mode
 | 
			
		||||
proxy_mode=True
 | 
			
		||||
 | 
			
		||||
; --x-sendfile
 | 
			
		||||
x_sendfile =False
 | 
			
		||||
 | 
			
		||||
;---------------;
 | 
			
		||||
; Testing Group ;
 | 
			
		||||
;---------------;
 | 
			
		||||
; --test-file
 | 
			
		||||
test_file=False
 | 
			
		||||
 | 
			
		||||
; --test-enable
 | 
			
		||||
test_enable=False
 | 
			
		||||
 | 
			
		||||
; --test-tags
 | 
			
		||||
test_tags=False
 | 
			
		||||
 | 
			
		||||
; --screencasts
 | 
			
		||||
screencasts=None
 | 
			
		||||
 | 
			
		||||
; --screenshots
 | 
			
		||||
screenshots=/tmp/odoo_tests
 | 
			
		||||
 | 
			
		||||
;---------------;
 | 
			
		||||
; Logging Group ;
 | 
			
		||||
;---------------;
 | 
			
		||||
; --logfile
 | 
			
		||||
logfile=
 | 
			
		||||
 | 
			
		||||
; --syslog
 | 
			
		||||
syslog=False
 | 
			
		||||
 | 
			
		||||
; --log-handler | --log-web (--log-handler=odoo.http:DEBUG) | --log-sql (--log-handler=odoo.sql_db:DEBUG)
 | 
			
		||||
log_handler=[':INFO']
 | 
			
		||||
 | 
			
		||||
; --log-db
 | 
			
		||||
log_db=False
 | 
			
		||||
 | 
			
		||||
; --log-db-level
 | 
			
		||||
log_db_level=info
 | 
			
		||||
 | 
			
		||||
; --log-level
 | 
			
		||||
log_level=info
 | 
			
		||||
 | 
			
		||||
;------------;
 | 
			
		||||
; SMTP Group ;
 | 
			
		||||
;------------;
 | 
			
		||||
; --email-from
 | 
			
		||||
email_from=
 | 
			
		||||
 | 
			
		||||
; --from-filter
 | 
			
		||||
from_filter=False
 | 
			
		||||
 | 
			
		||||
; --smtp
 | 
			
		||||
smtp_server=
 | 
			
		||||
 | 
			
		||||
; --smtp-port
 | 
			
		||||
smtp_port=25
 | 
			
		||||
 | 
			
		||||
; --smtp-ssl
 | 
			
		||||
smtp_ssl=
 | 
			
		||||
 | 
			
		||||
; --smtp-user
 | 
			
		||||
smtp_user=
 | 
			
		||||
 | 
			
		||||
; --smtp-password
 | 
			
		||||
smtp_password=
 | 
			
		||||
 | 
			
		||||
; --smtp-ssl-certificate-filename
 | 
			
		||||
smtp_ssl_certificate_filename=False
 | 
			
		||||
 | 
			
		||||
; --smtp-ssl-private-key-filename
 | 
			
		||||
smtp_ssl_private_key_filename=False
 | 
			
		||||
 | 
			
		||||
;----------;
 | 
			
		||||
; DB Group ;
 | 
			
		||||
;----------;
 | 
			
		||||
; --database | -d
 | 
			
		||||
db_name=odoo
 | 
			
		||||
 | 
			
		||||
; --db_user | -r
 | 
			
		||||
db_user=odoo
 | 
			
		||||
 | 
			
		||||
; --db_password | -w
 | 
			
		||||
db_password=odoo
 | 
			
		||||
 | 
			
		||||
; --pg_path
 | 
			
		||||
pg_path=
 | 
			
		||||
 | 
			
		||||
; --db_host
 | 
			
		||||
db_host=postgres
 | 
			
		||||
 | 
			
		||||
; --db_port
 | 
			
		||||
db_port=5432
 | 
			
		||||
 | 
			
		||||
; --db_sslmode
 | 
			
		||||
db_sslmode=prefer
 | 
			
		||||
 | 
			
		||||
; --db_maxconn
 | 
			
		||||
db_maxconn=64
 | 
			
		||||
 | 
			
		||||
; --db-template
 | 
			
		||||
db_template=unaccent_template
 | 
			
		||||
 | 
			
		||||
;------------------------------;
 | 
			
		||||
; Internationalisation options ;
 | 
			
		||||
;------------------------------;
 | 
			
		||||
; --load-language
 | 
			
		||||
load_language=en_US
 | 
			
		||||
 | 
			
		||||
; --language
 | 
			
		||||
language=
 | 
			
		||||
 | 
			
		||||
; --i18n-export
 | 
			
		||||
translate_out=
 | 
			
		||||
 | 
			
		||||
; --i18n-import
 | 
			
		||||
translate_in=
 | 
			
		||||
 | 
			
		||||
; --i18n-overwrite
 | 
			
		||||
overwrite_existing_translations=False
 | 
			
		||||
 | 
			
		||||
; --modules 
 | 
			
		||||
translate_modules=['all']
 | 
			
		||||
 | 
			
		||||
;----------;
 | 
			
		||||
; Security ;
 | 
			
		||||
;----------;
 | 
			
		||||
; --no-database-list
 | 
			
		||||
list_db=True
 | 
			
		||||
 | 
			
		||||
;-----;
 | 
			
		||||
; WEB ;
 | 
			
		||||
;-----;
 | 
			
		||||
; --db-filter
 | 
			
		||||
dbfilter=.*
 | 
			
		||||
 | 
			
		||||
;------------------;
 | 
			
		||||
; Advanced options ;
 | 
			
		||||
;------------------;
 | 
			
		||||
; --dev
 | 
			
		||||
dev_mode=False
 | 
			
		||||
 | 
			
		||||
; --shell-interface
 | 
			
		||||
shell_interface=ptpython
 | 
			
		||||
 | 
			
		||||
; --stop-after-init
 | 
			
		||||
stop_after_init=False
 | 
			
		||||
 | 
			
		||||
; --osv-memory-count-limit
 | 
			
		||||
osv_memory_count_limit=False
 | 
			
		||||
 | 
			
		||||
; --transient-age-limit (for deprecated --osv-memory-age-limit)
 | 
			
		||||
transient_age_limit=1.0
 | 
			
		||||
 | 
			
		||||
; --max-cron-threads
 | 
			
		||||
max_cron_threads=2
 | 
			
		||||
 | 
			
		||||
; --unaccent
 | 
			
		||||
unaccent=True
 | 
			
		||||
 | 
			
		||||
; --geoip-db
 | 
			
		||||
geoip_database=/usr/share/GeoIP/GeoLite2-City.mmdb
 | 
			
		||||
 | 
			
		||||
; --workers
 | 
			
		||||
workers=0
 | 
			
		||||
 | 
			
		||||
; --limit-memory-soft
 | 
			
		||||
limit_memory_soft=2147483648
 | 
			
		||||
 | 
			
		||||
; --limit-memory-hard
 | 
			
		||||
limit_memory_hard=2684354560
 | 
			
		||||
 | 
			
		||||
; --limit-time-cpu
 | 
			
		||||
limit_time_cpu=120
 | 
			
		||||
 | 
			
		||||
; --limit-time-real
 | 
			
		||||
limit_time_real=240
 | 
			
		||||
 | 
			
		||||
; --limit-time-real-cron
 | 
			
		||||
limit_time_real_cron=600
 | 
			
		||||
 | 
			
		||||
; --limit-request
 | 
			
		||||
limit_request=8192
 | 
			
		||||
							
								
								
									
										367
									
								
								odoo/odoorc.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										367
									
								
								odoo/odoorc.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,367 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
# Define default values for environment variables
 | 
			
		||||
set -a
 | 
			
		||||
source /.env
 | 
			
		||||
set +a
 | 
			
		||||
 | 
			
		||||
declare -A defaults
 | 
			
		||||
defaults=(
 | 
			
		||||
    [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}
 | 
			
		||||
 | 
			
		||||
    [ODOO_RC]=${ODOO_RC}
 | 
			
		||||
    [SAVE]=${SAVE}
 | 
			
		||||
    [INIT]=${INIT}
 | 
			
		||||
    [UPDATE]=${UPDATE}
 | 
			
		||||
    [DEMO]=${DEMO}
 | 
			
		||||
    [WITHOUT_DEMO]=${WITHOUT_DEMO}
 | 
			
		||||
    [IMPORT_PARTIAL]=${IMPORT_PARTIAL}
 | 
			
		||||
    [PIDFILE]=${PIDFILE}
 | 
			
		||||
    [ADDONS_PATH]=${ADDONS_PATH}
 | 
			
		||||
    [UPGRADE_PATH]=${UPGRADE_PATH}
 | 
			
		||||
    [SERVER_WIDE_MODULES]=${SERVER_WIDE_MODULES}
 | 
			
		||||
    [DATA_DIR]=${DATA_DIR}
 | 
			
		||||
 | 
			
		||||
    [HTTP_INTERFACE]=${HTTP_INTERFACE}
 | 
			
		||||
    [HTTP_PORT]=${HTTP_PORT}
 | 
			
		||||
    [LONGPOLLING_PORT]=${LONGPOLLING_PORT}
 | 
			
		||||
    [HTTP_ENABLE]=${HTTP_ENABLE}
 | 
			
		||||
    [PROXY_MODE]=${PROXY_MODE}
 | 
			
		||||
    [X_SENDFILE]=${X_SENDFILE}
 | 
			
		||||
 | 
			
		||||
    [DBFILTER]=${DBFILTER}
 | 
			
		||||
 | 
			
		||||
    [TEST_FILE]=${TEST_FILE}
 | 
			
		||||
    [TEST_ENABLE]=${TEST_ENABLE}
 | 
			
		||||
    [TEST_TAGS]=${TEST_TAGS}
 | 
			
		||||
    [SCREENCASTS]=${SCREENCASTS}
 | 
			
		||||
    [SCREENSHOTS]=${SCREENSHOTS}
 | 
			
		||||
 | 
			
		||||
    [LOGFILE]=${LOGFILE}
 | 
			
		||||
    [SYSLOG]=${SYSLOG}
 | 
			
		||||
    [LOG_HANDLER]=${LOG_HANDLER}
 | 
			
		||||
    [LOG_DB]=${LOG_DB}
 | 
			
		||||
    [LOG_DB_LEVEL]=${LOG_DB_LEVEL}
 | 
			
		||||
    [LOG_LEVEL]=${LOG_LEVEL}
 | 
			
		||||
 | 
			
		||||
    [EMAIL_FROM]=${EMAIL_FROM}
 | 
			
		||||
    [FROM_FILTER]=${FROM_FILTER}
 | 
			
		||||
    [SMTP_SERVER]=${SMTP_SERVER}
 | 
			
		||||
    [SMTP_PORT]=${SMTP_PORT}
 | 
			
		||||
    [SMTP_SSL]=${SMTP_SSL}
 | 
			
		||||
    [SMTP_USER]=${SMTP_USER}
 | 
			
		||||
    [SMTP_PASSWORD]=${SMTP_PASSWORD}
 | 
			
		||||
    [SMTP_SSL_CERTIFICATE_FILENAME]=${SMTP_SSL_CERTIFICATE_FILENAME}
 | 
			
		||||
    [SMTP_SSL_PRIVATE_KEY_FILENAME]=${SMTP_SSL_PRIVATE_KEY_FILENAME}
 | 
			
		||||
 | 
			
		||||
    [DB_NAME]=${DB_NAME}
 | 
			
		||||
    [DB_USER]=${DB_USER}
 | 
			
		||||
    [DB_PASSWORD]=${DB_PASSWORD}
 | 
			
		||||
    [PG_PATH]=${PG_PATH}
 | 
			
		||||
    [DB_HOST]=${DB_HOST}
 | 
			
		||||
    [DB_PORT]=${DB_PORT}
 | 
			
		||||
    [DB_SSLMODE]=${DB_SSLMODE}
 | 
			
		||||
    [DB_MAXCONN]=${DB_MAXCONN}
 | 
			
		||||
    [DB_TEMPLATE]=${DB_TEMPLATE}
 | 
			
		||||
 | 
			
		||||
    [LOAD_LANGUAGE]=${LOAD_LANGUAGE}
 | 
			
		||||
    [LANGUAGE]=${LANGUAGE}
 | 
			
		||||
    [TRANSLATE_OUT]=${TRANSLATE_OUT}
 | 
			
		||||
    [TRANSLATE_IN]=${TRANSLATE_IN}
 | 
			
		||||
    [OVERWRITE_EXISTING_TRANSLATIONS]=${OVERWRITE_EXISTING_TRANSLATIONS}
 | 
			
		||||
    [TRANSLATE_MODULES]=${TRANSLATE_MODULES}
 | 
			
		||||
 | 
			
		||||
    [LIST_DB]=${LIST_DB}
 | 
			
		||||
 | 
			
		||||
    [DEV_MODE]=${DEV_MODE}
 | 
			
		||||
    [SHELL_INTERFACE]=${SHELL_INTERFACE}
 | 
			
		||||
    [STOP_AFTER_INIT]=${STOP_AFTER_INIT}
 | 
			
		||||
    [OSV_MEMORY_COUNT_LIMIT]=${OSV_MEMORY_COUNT_LIMIT}
 | 
			
		||||
    [TRANSIENT_AGE_LIMIT]=${TRANSIENT_AGE_LIMIT}
 | 
			
		||||
    [MAX_CRON_THREADS]=${MAX_CRON_THREADS}
 | 
			
		||||
    [UNACCENT]=${UNACCENT}
 | 
			
		||||
    [GEOIP_DATABASE]=${GEOIP_DATABASE}
 | 
			
		||||
    [WORKERS]=${WORKERS}
 | 
			
		||||
    [LIMIT_MEMORY_SOFT]=${LIMIT_MEMORY_SOFT}
 | 
			
		||||
    [LIMIT_MEMORY_HARD]=${LIMIT_MEMORY_HARD}
 | 
			
		||||
    [LIMIT_TIME_CPU]=${LIMIT_TIME_CPU}
 | 
			
		||||
    [LIMIT_TIME_REAL]=${LIMIT_TIME_REAL}
 | 
			
		||||
    [LIMIT_TIME_REAL_CRON]=${LIMIT_TIME_REAL_CRON}
 | 
			
		||||
    [LIMIT_REQUEST]=${LIMIT_REQUEST}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Define the template
 | 
			
		||||
template=$(cat << EOF
 | 
			
		||||
[options]
 | 
			
		||||
;------------------------------------------;
 | 
			
		||||
; Options not exposed on the command line. ;
 | 
			
		||||
;------------------------------------------;
 | 
			
		||||
 | 
			
		||||
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={ODOO_RC}
 | 
			
		||||
 | 
			
		||||
; --save
 | 
			
		||||
save={SAVE}
 | 
			
		||||
 | 
			
		||||
; --init | -i
 | 
			
		||||
init={INIT}
 | 
			
		||||
 | 
			
		||||
; --update | -u
 | 
			
		||||
update={UPDATE}
 | 
			
		||||
 | 
			
		||||
; --without-demo
 | 
			
		||||
demo={DEMO}
 | 
			
		||||
without_demo={WITHOUT_DEMO}
 | 
			
		||||
 | 
			
		||||
; --import-partial
 | 
			
		||||
import_partial={IMPORT_PARTIAL}
 | 
			
		||||
 | 
			
		||||
; --pidfile
 | 
			
		||||
pidfile={PIDFILE}
 | 
			
		||||
 | 
			
		||||
; --addons-path
 | 
			
		||||
addons_path={ADDONS_PATH}
 | 
			
		||||
 | 
			
		||||
; --upgrade-path
 | 
			
		||||
upgrade_path={UPGRADE_PATH}
 | 
			
		||||
 | 
			
		||||
; --load
 | 
			
		||||
server_wide_modules={SERVER_WIDE_MODULES}
 | 
			
		||||
 | 
			
		||||
; --data-dir
 | 
			
		||||
data_dir={DATA_DIR}
 | 
			
		||||
 | 
			
		||||
;------;
 | 
			
		||||
; HTTP ;
 | 
			
		||||
;------;
 | 
			
		||||
; --http-interface | --xmlrpc-interface
 | 
			
		||||
http_interface={HTTP_INTERFACE}
 | 
			
		||||
 | 
			
		||||
; --http-port | -p | --xmlrpc-port
 | 
			
		||||
http_port={HTTP_PORT}
 | 
			
		||||
 | 
			
		||||
; --longpolling_port
 | 
			
		||||
longpolling_port={LONGPOLLING_PORT}
 | 
			
		||||
 | 
			
		||||
; --no-http | --no-xmlrpc
 | 
			
		||||
http_enable={HTTP_ENABLE}
 | 
			
		||||
 | 
			
		||||
; --proxy-mode
 | 
			
		||||
proxy_mode={PROXY_MODE}
 | 
			
		||||
 | 
			
		||||
; --x-sendfile
 | 
			
		||||
x_sendfile ={X_SENDFILE}
 | 
			
		||||
 | 
			
		||||
;---------------;
 | 
			
		||||
; Testing Group ;
 | 
			
		||||
;---------------;
 | 
			
		||||
; --test-file
 | 
			
		||||
test_file={TEST_FILE}
 | 
			
		||||
 | 
			
		||||
; --test-enable
 | 
			
		||||
test_enable={TEST_ENABLE}
 | 
			
		||||
 | 
			
		||||
; --test-tags
 | 
			
		||||
test_tags={TEST_FILE}
 | 
			
		||||
 | 
			
		||||
; --screencasts
 | 
			
		||||
screencasts={SCREENCASTS}
 | 
			
		||||
 | 
			
		||||
; --screenshots
 | 
			
		||||
screenshots={SCREENSHOTS}
 | 
			
		||||
 | 
			
		||||
;---------------;
 | 
			
		||||
; Logging Group ;
 | 
			
		||||
;---------------;
 | 
			
		||||
; --logfile
 | 
			
		||||
logfile={LOGFILE}
 | 
			
		||||
 | 
			
		||||
; --syslog
 | 
			
		||||
syslog={SYSLOG}
 | 
			
		||||
 | 
			
		||||
; --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-level
 | 
			
		||||
log_db_level={LOG_DB_LEVEL}
 | 
			
		||||
 | 
			
		||||
; --log-level
 | 
			
		||||
log_level={LOG_LEVEL}
 | 
			
		||||
 | 
			
		||||
;------------;
 | 
			
		||||
; SMTP Group ;
 | 
			
		||||
;------------;
 | 
			
		||||
; --email-from
 | 
			
		||||
email_from={EMAIL_FROM}
 | 
			
		||||
 | 
			
		||||
; --from-filter
 | 
			
		||||
from_filter={FROM_FILTER}
 | 
			
		||||
 | 
			
		||||
; --smtp
 | 
			
		||||
smtp_server={SMTP_SERVER}
 | 
			
		||||
 | 
			
		||||
; --smtp-port
 | 
			
		||||
smtp_port={SMTP_PORT}
 | 
			
		||||
 | 
			
		||||
; --smtp-ssl
 | 
			
		||||
smtp_ssl={SMTP_SSL}
 | 
			
		||||
 | 
			
		||||
; --smtp-user
 | 
			
		||||
smtp_user={SMTP_USER}
 | 
			
		||||
 | 
			
		||||
; --smtp-password
 | 
			
		||||
smtp_password={SMTP_PASSWORD}
 | 
			
		||||
 | 
			
		||||
; --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}
 | 
			
		||||
 | 
			
		||||
;----------;
 | 
			
		||||
; DB Group ;
 | 
			
		||||
;----------;
 | 
			
		||||
; --database | -d
 | 
			
		||||
db_name={DB_NAME}
 | 
			
		||||
 | 
			
		||||
; --db_user | -r
 | 
			
		||||
db_user={DB_USER}
 | 
			
		||||
 | 
			
		||||
; --db_password | -w
 | 
			
		||||
db_password={DB_PASSWORD}
 | 
			
		||||
 | 
			
		||||
; --pg_path
 | 
			
		||||
pg_path={PG_PATH}
 | 
			
		||||
 | 
			
		||||
; --db_host
 | 
			
		||||
db_host={DB_HOST}
 | 
			
		||||
 | 
			
		||||
; --db_port
 | 
			
		||||
db_port={DB_PORT}
 | 
			
		||||
 | 
			
		||||
; --db_sslmode
 | 
			
		||||
db_sslmode={DB_SSLMODE}
 | 
			
		||||
 | 
			
		||||
; --db_maxconn
 | 
			
		||||
db_maxconn={DB_MAXCONN}
 | 
			
		||||
 | 
			
		||||
; --db-template
 | 
			
		||||
db_template={DB_TEMPLATE}
 | 
			
		||||
 | 
			
		||||
;------------------------------;
 | 
			
		||||
; Internationalisation options ;
 | 
			
		||||
;------------------------------;
 | 
			
		||||
; --load-language
 | 
			
		||||
load_language={LOAD_LANGUAGE}
 | 
			
		||||
 | 
			
		||||
; --language
 | 
			
		||||
language={LANGUAGE}
 | 
			
		||||
 | 
			
		||||
; --i18n-export
 | 
			
		||||
translate_out={TRANSLATE_OUT}
 | 
			
		||||
 | 
			
		||||
; --i18n-import
 | 
			
		||||
translate_in={TRANSLATE_IN}
 | 
			
		||||
 | 
			
		||||
; --i18n-overwrite
 | 
			
		||||
overwrite_existing_translations={OVERWRITE_EXISTING_TRANSLATIONS}
 | 
			
		||||
 | 
			
		||||
; --modules 
 | 
			
		||||
translate_modules={TRANSLATE_MODULES}
 | 
			
		||||
 | 
			
		||||
;----------;
 | 
			
		||||
; Security ;
 | 
			
		||||
;----------;
 | 
			
		||||
; --no-database-list
 | 
			
		||||
list_db={LIST_DB}
 | 
			
		||||
 | 
			
		||||
;-----;
 | 
			
		||||
; WEB ;
 | 
			
		||||
;-----;
 | 
			
		||||
; --db-filter
 | 
			
		||||
dbfilter={DBFILTER}
 | 
			
		||||
 | 
			
		||||
;------------------;
 | 
			
		||||
; Advanced options ;
 | 
			
		||||
;------------------;
 | 
			
		||||
; --dev
 | 
			
		||||
dev_mode={DEV_MODE}
 | 
			
		||||
 | 
			
		||||
; --shell-interface
 | 
			
		||||
shell_interface={SHELL_INTERFACE}
 | 
			
		||||
 | 
			
		||||
; --stop-after-init
 | 
			
		||||
stop_after_init={STOP_AFTER_INIT}
 | 
			
		||||
 | 
			
		||||
; --osv-memory-count-limit
 | 
			
		||||
osv_memory_count_limit={OSV_MEMORY_COUNT_LIMIT}
 | 
			
		||||
 | 
			
		||||
; --transient-age-limit (--osv-memory-age-limit deprecated)
 | 
			
		||||
transient_age_limit={TRANSIENT_AGE_LIMIT}
 | 
			
		||||
 | 
			
		||||
; --max-cron-threads
 | 
			
		||||
max_cron_threads={MAX_CRON_THREADS}
 | 
			
		||||
 | 
			
		||||
; --unaccent
 | 
			
		||||
unaccent={UNACCENT}
 | 
			
		||||
 | 
			
		||||
; --geoip-db
 | 
			
		||||
geoip_database={GEOIP_DATABASE}
 | 
			
		||||
 | 
			
		||||
; --workers
 | 
			
		||||
workers={WORKERS}
 | 
			
		||||
 | 
			
		||||
; --limit-memory-soft
 | 
			
		||||
limit_memory_soft={LIMIT_MEMORY_SOFT}
 | 
			
		||||
 | 
			
		||||
; --limit-memory-hard
 | 
			
		||||
limit_memory_hard={LIMIT_MEMORY_HARD}
 | 
			
		||||
 | 
			
		||||
; --limit-time-cpu
 | 
			
		||||
limit_time_cpu={LIMIT_TIME_CPU}
 | 
			
		||||
 | 
			
		||||
; --limit-time-real
 | 
			
		||||
limit_time_real={LIMIT_TIME_REAL}
 | 
			
		||||
 | 
			
		||||
; --limit-time-real-cron
 | 
			
		||||
limit_time_real_cron={LIMIT_TIME_REAL_CRON}
 | 
			
		||||
 | 
			
		||||
; --limit-request
 | 
			
		||||
limit_request={LIMIT_REQUEST}
 | 
			
		||||
EOF
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Override defaults with values from environment variables
 | 
			
		||||
for key in "${!defaults[@]}"; do
 | 
			
		||||
    if [[ ! ${defaults[$key]} =~ ^\{.*\}$ ]]; then
 | 
			
		||||
        value=${!key:-${defaults[$key]}}
 | 
			
		||||
        template="${template//\{$key\}/$value}"
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Store the result to the odoo.conf file
 | 
			
		||||
echo "$template" > ${ODOO_RC}
 | 
			
		||||
							
								
								
									
										5
									
								
								postgres/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								postgres/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
FROM postgres:15.1
 | 
			
		||||
 | 
			
		||||
RUN apt-get update && apt-get install postgresql-contrib
 | 
			
		||||
 | 
			
		||||
COPY ./entrypoint.sh /docker-entrypoint-initdb.d/entrypoint.sh
 | 
			
		||||
							
								
								
									
										3
									
								
								postgres/entrypoint.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								postgres/entrypoint.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +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;"
 | 
			
		||||
		Reference in New Issue
	
	Block a user