integrate keydb to odoocker

This commit is contained in:
Yhael S
2023-09-27 22:47:22 -05:00
parent dddafd862f
commit fc0d0c9875
18 changed files with 415 additions and 97 deletions

View File

@@ -4,11 +4,11 @@
# Odoo # Odoo
APP_ENV=local APP_ENV=local
INIT= INIT=
UPDATE= UPDATE=custom_core
LOAD=base,web,session_redis LOAD=base,web,session_redis
WORKERS=2 WORKERS=2
DEV_MODE=reload,qweb DEV_MODE=reload,xml
DOMAIN=erp.odoocker.test DOMAIN=erp.j8c.test
# Enterprise # Enterprise
GITHUB_USER= GITHUB_USER=
@@ -18,7 +18,7 @@ GITHUB_ACCESS_TOKEN=
ADMIN_PASSWD=odoo ADMIN_PASSWD=odoo
DB_HOST=postgres DB_HOST=postgres
DB_PORT=5432 DB_PORT=5432
DB_NAME=odoo DB_NAME=j8c
DB_USER=odoo DB_USER=odoo
DB_PASSWORD=odoo DB_PASSWORD=odoo
LOAD_LANGUAGE= LOAD_LANGUAGE=
@@ -31,12 +31,12 @@ LIST_DB=True
DBFILTER=.* DBFILTER=.*
# Logging # Logging
LOG_LEVEL=debug LOG_LEVEL=info
# Additional logs # Additional logs
LOG_HANDLER_LEVEL=INFO LOG_HANDLER_LEVEL=INFO
# Nginx # Nginx
CORS_ALLOWED_DOMAIN="'http://external-domain.test'" CORS_ALLOWED_DOMAIN="'https://odoo.j8c.com.mx'"
# Testing # Testing
TEST_ENABLE=False TEST_ENABLE=False
@@ -52,20 +52,46 @@ SMTP_PASSWORD=
EMAIL_FROM= EMAIL_FROM=
FROM_FILTER= FROM_FILTER=
# Redis
SESSION_REDIS=true
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
# REDIS_URL=
REDIS_PREFIX=odoo
REDIS_EXPIRATION=604800
REDIS_EXPIRATION_ANONYMOUS=10800
# Postgres
POSTGRES_MAIN_HOST=${DB_HOST}
POSTGRES_MAIN_PORT=${DB_PORT}
POSTGRES_MAIN_DB=postgres
POSTGRES_MAIN_USER=postgres
POSTGRES_MAIN_PASSWORD=${DB_PASSWORD}
# PgAdmin # PgAdmin
PGADMIN_DOMAIN=pgadmin.odoocker.test PGADMIN_DOMAIN=pgadmin.j8c.test
PGADMING_DB_NAME=pgadmin
PGADMING_DB_USER=pgadmin
PGADMIN_DB_PASSWORD=${DB_PASSWORD}
PGADMIN_DB_HOST="'postgresql://${PGADMING_DB_USER}:${PGADMIN_DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${PGADMING_DB_NAME}'"
PGADMIN_EMAIL=contacto@juarezsoft.com.mx
PGADMIN_PASSWORD=odoo PGADMIN_PASSWORD=odoo
PGADMIN_SERVERS_JSON=
PGADMIN_CONFIG_SERVER_MODE=True
#------------------------------# #------------------------------#
# Project Configurations # # Project Configurations #
#------------------------------# #------------------------------#
# Docker # Docker
PROJECT_NAME=odoocker PROJECT_NAME=j8c
SUPPORT_EMAIL=mail@example.com SUPPORT_EMAIL=contacto@juarezsoft.com.mx
# Containers' Tags # Containers' Tags
ODOO_TAG=16.0 ODOO_TAG=15.0
POSTGRES_TAG=15.4 POSTGRES_TAG=16.0
NGINX_TAG=1.25.2 NGINX_TAG=1.25.2
NGINX_PROXY_TAG=1.3.1 NGINX_PROXY_TAG=1.3.1
ACME_COMPANION_TAG=2.2.8 ACME_COMPANION_TAG=2.2.8
@@ -87,6 +113,7 @@ WEBSOCKET_RATE_LIMIT_DELAY=0.2
# Custom paths # Custom paths
COMMUNITY_ADDONS=${ROOT_PATH}/addons COMMUNITY_ADDONS=${ROOT_PATH}/addons
ENTERPRISE_ADDONS=${ROOT_PATH}/enterprise ENTERPRISE_ADDONS=${ROOT_PATH}/enterprise
THIRD_PARTY_ADDONS=${ROOT_PATH}/third-party-addons
EXTRA_ADDONS=${ROOT_PATH}/extra-addons EXTRA_ADDONS=${ROOT_PATH}/extra-addons
CUSTOM_ADDONS=${ROOT_PATH}/custom-addons CUSTOM_ADDONS=${ROOT_PATH}/custom-addons
LOG_PATH=/var/log/odoo/odoo.log LOG_PATH=/var/log/odoo/odoo.log
@@ -101,7 +128,7 @@ DEMO=False
WITHOUT_DEMO=all WITHOUT_DEMO=all
IMPORT_PARTIAL=False IMPORT_PARTIAL=False
PIDFILE= PIDFILE=
ADDONS_PATH=${COMMUNITY_ADDONS},${ENTERPRISE_ADDONS},${EXTRA_ADDONS},${CUSTOM_ADDONS} ADDONS_PATH=${COMMUNITY_ADDONS},${ENTERPRISE_ADDONS},${THIRD_PARTY_ADDONS},${EXTRA_ADDONS},${CUSTOM_ADDONS}
UPGRADE_PATH= UPGRADE_PATH=
SERVER_WIDE_MODULES=${LOAD} SERVER_WIDE_MODULES=${LOAD}
DATA_DIR=/var/lib/odoo DATA_DIR=/var/lib/odoo
@@ -113,7 +140,7 @@ DEBUG_INTERFACE=${HTTP_INTERFACE}
HTTP_PORT=8069 HTTP_PORT=8069
DEBUG_PORT=8070 DEBUG_PORT=8070
XMLRPCS_PORT=8071 XMLRPCS_PORT=8071
GEVENT_PORT=8072 LONGPOLLING_PORT=8072
HTTP_ENABLE=True HTTP_ENABLE=True
XMLRPCS=True XMLRPCS=True
PROXY_MODE=True PROXY_MODE=True
@@ -172,7 +199,7 @@ SHELL_INTERFACE=ptpython
STOP_AFTER_INIT=False STOP_AFTER_INIT=False
OSV_MEMORY_COUNT_LIMIT=False OSV_MEMORY_COUNT_LIMIT=False
TRANSIENT_AGE_LIMIT=1.0 TRANSIENT_AGE_LIMIT=1.0
MAX_CRON_THREADS=2 MAX_CRON_THREADS=1
UNACCENT=${UNACCENT} UNACCENT=${UNACCENT}
GEOIP_DATABASE=/usr/share/GeoIP/GeoLite2-City.mmdb GEOIP_DATABASE=/usr/share/GeoIP/GeoLite2-City.mmdb
WORKERS=${WORKERS} WORKERS=${WORKERS}
@@ -193,11 +220,11 @@ TEMP_DOCKER_SOCK=/tmp/docker.sock
#----------------# #----------------#
# Postgres # # Postgres #
#----------------# #----------------#
POSTGRES_HOST=${DB_HOST} POSTGRES_HOST=${POSTGRES_MAIN_HOST}
POSTGRES_PORT=${DB_PORT} POSTGRES_PORT=${POSTGRES_MAIN_PORT}
POSTGRES_DB=postgres POSTGRES_DB=${POSTGRES_MAIN_DB}
POSTGRES_USER=${DB_USER} POSTGRES_USER=${POSTGRES_MAIN_USER}
POSTGRES_PASSWORD=${DB_PASSWORD} POSTGRES_PASSWORD=${POSTGRES_MAIN_PASSWORD}
PGDATA=/var/lib/postgresql/data/${PROJECT_NAME} PGDATA=/var/lib/postgresql/data/${PROJECT_NAME}
#-------------# #-------------#
@@ -210,16 +237,6 @@ LETSENCRYPT_HOST=${DOMAIN}
LETSENCRYPT_EMAIL=${SUPPORT_EMAIL} LETSENCRYPT_EMAIL=${SUPPORT_EMAIL}
CORS_ALLOWED_DOMAIN=${CORS_ALLOWED_DOMAIN} CORS_ALLOWED_DOMAIN=${CORS_ALLOWED_DOMAIN}
#-------------#
# 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 Proxy #
#-------------------# #-------------------#
@@ -236,14 +253,67 @@ CORS_ALLOWED_DOMAIN=${CORS_ALLOWED_DOMAIN}
#----------------------# #----------------------#
DEFAULT_EMAIL=${SUPPORT_EMAIL} DEFAULT_EMAIL=${SUPPORT_EMAIL}
#----------------------# #-------------#
# REDIS Caching # # Redis #
#----------------------# #-------------#
ODOO_SESSION_REDIS = ${ODOO_SESSION_REDIS} ODOO_SESSION_REDIS=${SESSION_REDIS}
ODOO_SESSION_REDIS_HOST = ${ODOO_SESSION_REDIS_HOST} ODOO_SESSION_REDIS_HOST=${REDIS_HOST}
ODOO_SESSION_REDIS_PORT = ${ODOO_SESSION_REDIS_PORT} ODOO_SESSION_REDIS_PORT=${REDIS_PORT}
ODOO_SESSION_REDIS_PASSWORD = ${ODOO_SESSION_REDIS_PASSWORD} ODOO_SESSION_REDIS_PASSWORD=${REDIS_PASSWORD}
ODOO_SESSION_REDIS_URL = ${ODOO_SESSION_REDIS_URL} # ODOO_SESSION_REDIS_URL=
ODOO_SESSION_REDIS_PREFIX = ${ODOO_SESSION_REDIS_PREFIX} ODOO_SESSION_REDIS_PREFIX=${REDIS_PREFIX}
ODOO_SESSION_REDIS_EXPIRATION = ${ODOO_SESSION_REDIS_EXPIRATION} ODOO_SESSION_REDIS_EXPIRATION=${REDIS_EXPIRATION}
ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS = ${ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS} ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS=${REDIS_EXPIRATION_ANONYMOUS}
#-------------#
# PgAdmin #
#-------------#
# Container
PGADMIN_DATA=/var/lib/pgadmin
PGADMIN_SERVERS_JSON=${PGADMIN_SERVERS_JSON}
PGADMIN_DEFAULT_EMAIL=${PGADMIN_EMAIL}
PGADMIN_DEFAULT_PASSWORD=${PGADMIN_PASSWORD}
PGADMIN_VIRTUAL_HOST=${PGADMIN_DOMAIN}
PGADMIN_LETSENCRYPT_HOST=${PGADMIN_DOMAIN}
PGADMIN_LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
# PgAdmin Configuration
PGADMIN_CONFIG_APP_NAME="'pgAdmin 4'"
PGADMIN_CONFIG_SERVER_MODE=${PGADMIN_CONFIG_SERVER_MODE}
PGADMIN_CONFIG_CONFIG_DATABASE_CONNECTION_POOL_SIZE=5
PGADMIN_CONFIG_DEFAULT_SERVER="'127.0.0.1'"
PGADMIN_CONFIG_DEFAULT_SERVER_PORT=5050
PGADMIN_CONFIG_MAX_SESSION_IDLE_TIME=120
PGADMIN_CONFIG_CONFIG_DATABASE_URI=${PGADMIN_DB_HOST}
# Password Settings
PGADMIN_CONFIG_PASSWORD_LENGTH_MIN=6
PGADMIN_CONFIG_ALLOW_SAVE_PASSWORD=True
PGADMIN_CONFIG_ALLOW_SAVE_TUNNEL_PASSWORD=True
PGADMIN_CONFIG_MAX_LOGIN_ATTEMPTS=10
# Query History
PGADMIN_CONFIG_MAX_QUERY_HIST_STORED=20
# SMTP Server
PGADMIN_CONFIG_MAIL_SERVER="'localhost'"
PGADMIN_CONFIG_MAIL_PORT=25
PGADMIN_CONFIG_MAIL_USE_SSL=False
PGADMIN_CONFIG_MAIL_USE_TLS=False
PGADMIN_CONFIG_MAIL_USERNAME="''"
PGADMIN_CONFIG_MAIL_PASSWORD="''"
PGADMIN_CONFIG_MAIL_DEBUG=False
PGADMIN_CONFIG_SECURITY_EMAIL_SENDER="'$PGADMIN_DEFAULT_EMAIL'"
# Dynamic PgAdmin Servers
PGADMIN_DB1_NAME=Odoocker
PGADMIN_DB1_HOST=localhost
PGADMIN_DB1_PORT=5432
PGADMIN_DB1_MAINTENANCE_DB=odoocker
PGADMIN_DB1_USERNAME=odoo
PGADMIN_DB1_TUNNEL_HOST=erp.odoocker.test
PGADMIN_DB1_TUNNEL_PORT=22
PGADMIN_DB1_TUNNEL_USERNAME=ubuntu

3
.gitignore vendored
View File

@@ -1,6 +1,9 @@
# Ignores the main configuration file. # Ignores the main configuration file.
/.env /.env
# Ignores the pgadmin private key
pgadmin/private_key
# Ignores the docker compose local or production environment. # Ignores the docker compose local or production environment.
docker-compose.override.yml docker-compose.override.yml

View File

@@ -11,7 +11,7 @@ services:
restart: 'no' restart: 'no'
ports: ports:
- 5432:5432 - 5432:5432
nginx: nginx:
restart: 'no' restart: 'no'

View File

@@ -1,7 +1,13 @@
services: services:
pgadmin: pgadmin:
image: dpage/pgadmin4:${PGADMIN_TAG} build:
restart: unless-stopped context: ./
dockerfile: ./pgadmin/Dockerfile
args:
- PGADMIN_TAG
depends_on:
- postgres
restart: 'no'
expose: expose:
- 80 - 80
volumes: volumes:
@@ -11,7 +17,27 @@ services:
- PGADMIN_DEFAULT_PASSWORD - PGADMIN_DEFAULT_PASSWORD
- VIRTUAL_HOST=${PGADMIN_VIRTUAL_HOST} - VIRTUAL_HOST=${PGADMIN_VIRTUAL_HOST}
- LETSENCRYPT_HOST=${PGADMIN_LETSENCRYPT_HOST} - LETSENCRYPT_HOST=${PGADMIN_LETSENCRYPT_HOST}
- LETSENCRYPT_EMAIL - LETSENCRYPT_EMAIL=${PGADMIN_LETSENCRYPT_EMAIL}
- PGADMIN_CONFIG_APP_NAME
- PGADMIN_CONFIG_CONFIG_DATABASE_CONNECTION_POOL_SIZE
- PGADMIN_CONFIG_SERVER_MODE
- PGADMIN_CONFIG_DEFAULT_SERVER
- PGADMIN_CONFIG_DEFAULT_SERVER_PORT
- PGADMIN_CONFIG_PASSWORD_LENGTH_MIN
- PGADMIN_CONFIG_MAX_SESSION_IDLE_TIME
- PGADMIN_CONFIG_CONFIG_DATABASE_URI
- PGADMIN_CONFIG_ALLOW_SAVE_PASSWORD
- PGADMIN_CONFIG_MAX_QUERY_HIST_STORED
- PGADMIN_CONFIG_MAIL_SERVER
- PGADMIN_CONFIG_MAIL_PORT
- PGADMIN_CONFIG_MAIL_USE_SSL
- PGADMIN_CONFIG_MAIL_USE_TLS
- PGADMIN_CONFIG_MAIL_USERNAME
- PGADMIN_CONFIG_MAIL_PASSWORD
- PGADMIN_CONFIG_MAIL_DEBUG
- PGADMIN_CONFIG_SECURITY_EMAIL_SENDER
- PGADMIN_CONFIG_ALLOW_SAVE_TUNNEL_PASSWORD
- PGADMIN_CONFIG_MAX_LOGIN_ATTEMPTS
networks: networks:
- internal - internal

View File

@@ -10,6 +10,7 @@ services:
- GITHUB_USER - GITHUB_USER
- GITHUB_ACCESS_TOKEN - GITHUB_ACCESS_TOKEN
- ENTERPRISE_ADDONS - ENTERPRISE_ADDONS
- THIRD_PARTY_ADDONS
- LOG_PATH - LOG_PATH
depends_on: depends_on:
- postgres - postgres
@@ -20,6 +21,7 @@ services:
- ./odoo/custom-addons:${CUSTOM_ADDONS} - ./odoo/custom-addons:${CUSTOM_ADDONS}
- ./odoo/entrypoint.sh:/entrypoint.sh - ./odoo/entrypoint.sh:/entrypoint.sh
- ./odoo/odoorc.sh:/odoorc.sh - ./odoo/odoorc.sh:/odoorc.sh
- ./odoo/third-party-addons.sh:/third-party-addons.sh
env_file: env_file:
- ./.env - ./.env
networks: networks:
@@ -27,12 +29,11 @@ services:
postgres: postgres:
build: build:
context: ./postgres context: ./
dockerfile: Dockerfile dockerfile: ./postgres/Dockerfile
args: args:
- POSTGRES_TAG - POSTGRES_TAG
restart: unless-stopped restart: unless-stopped
shm_size: 1GB
tty: true tty: true
volumes: volumes:
- pg-data:${PGDATA} - pg-data:${PGDATA}
@@ -42,6 +43,12 @@ services:
- POSTGRES_USER - POSTGRES_USER
- POSTGRES_PASSWORD - POSTGRES_PASSWORD
- PGDATA - PGDATA
- DB_USER
- DB_TEMPLATE
- UNACCENT_TEMPLATE
- PGADMING_DB_NAME
- PGADMING_DB_USER
- PGADMIN_DB_PASSWORD
networks: networks:
- internal - internal
@@ -83,17 +90,16 @@ services:
networks: networks:
- internal - internal
keydb: redis:
image: eqalpha/keydb:latest image: eqalpha/keydb:latest
platform: linux/amd64 platform: linux/amd64
shm_size: 1GB ports:
- 6379:6379
restart: unless-stopped restart: unless-stopped
networks: networks:
- internal - internal
# command: keydb-server /etc/keydb/keydb.conf
volumes: volumes:
#- ./keydb.conf:/etc/keydb/keydb.conf:ro - redis-data:/var/lib/keydb
- cache-db-data:/var/lib/keydb
volumes: volumes:
data-dir: data-dir:
@@ -101,8 +107,7 @@ volumes:
certs: certs:
vhost: vhost:
html: html:
cache-db-data: redis-data:
networks: networks:
internal: internal:

View File

@@ -23,7 +23,7 @@ server {
location / { location / {
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_pass http://odoo:8069; proxy_pass http://odoo:8069;
@@ -39,19 +39,12 @@ server {
} }
} }
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 /websocket { location /websocket {
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Host $host;
proxy_set_header Host $host;
proxy_pass http://odoo:8072; proxy_pass http://odoo:8072;
} }
} }

View File

@@ -14,6 +14,7 @@ ARG LOG_PATH
ARG GITHUB_USER ARG GITHUB_USER
ARG GITHUB_ACCESS_TOKEN ARG GITHUB_ACCESS_TOKEN
ARG ENTERPRISE_ADDONS ARG ENTERPRISE_ADDONS
ARG THIRD_PARTY_ADDONS
ARG ODOO_RC ARG ODOO_RC
ENV ODOO_TAG=${ODOO_TAG} \ ENV ODOO_TAG=${ODOO_TAG} \
@@ -21,6 +22,7 @@ ENV ODOO_TAG=${ODOO_TAG} \
GITHUB_USER=${GITHUB_USER} \ GITHUB_USER=${GITHUB_USER} \
GITHUB_ACCESS_TOKEN=${GITHUB_ACCESS_TOKEN} \ GITHUB_ACCESS_TOKEN=${GITHUB_ACCESS_TOKEN} \
ENTERPRISE_ADDONS=${ENTERPRISE_ADDONS} \ ENTERPRISE_ADDONS=${ENTERPRISE_ADDONS} \
THIRD_PARTY_ADDONS=${THIRD_PARTY_ADDONS} \
ODOO_RC=${ODOO_RC} ODOO_RC=${ODOO_RC}
#------------------------# #------------------------#
@@ -55,6 +57,16 @@ RUN if [ -n "$GITHUB_USER" ] && [ -n "$GITHUB_ACCESS_TOKEN" ]; then \
git clone https://${GITHUB_USER}:${GITHUB_ACCESS_TOKEN}@github.com/odoo/enterprise.git ${ENTERPRISE_ADDONS} --depth 1 --branch ${ODOO_TAG} --single-branch --no-tags; \ git clone https://${GITHUB_USER}:${GITHUB_ACCESS_TOKEN}@github.com/odoo/enterprise.git ${ENTERPRISE_ADDONS} --depth 1 --branch ${ODOO_TAG} --single-branch --no-tags; \
fi fi
#-------------------------#
# Odoo Extra Addons #
#-------------------------#
RUN mkdir -p ${THIRD_PARTY_ADDONS} && \
chown odoo:odoo -R ${THIRD_PARTY_ADDONS}
COPY --chown=odoo:odoo ./odoo/third-party-addons.sh /
RUN /third-party-addons.sh && chown odoo:odoo ${THIRD_PARTY_ADDONS}
#---------------------# #---------------------#
# PIP Dependecies # # PIP Dependecies #
#---------------------# #---------------------#
@@ -64,7 +76,7 @@ RUN pip3 install --upgrade pip
# Copy & Install PIP requirements # Copy & Install PIP requirements
COPY --chown=odoo:odoo ./odoo/requirements.txt /tmp/requirements.txt COPY --chown=odoo:odoo ./odoo/requirements.txt /tmp/requirements.txt
RUN python3 -m pip install --upgrade -r /tmp/requirements.txt && \ RUN python3 -m pip install -r /tmp/requirements.txt && \
rm /tmp/requirements.txt rm /tmp/requirements.txt
#---------------------# #---------------------#

View File

@@ -1,8 +1,8 @@
{ {
'name': 'Report URL', 'name': 'Odoocker Base',
'summary': 'Adds Report URL to Odoo Container', 'summary': 'Supercharge Odoo with Odoocker',
'description': ''' 'description': '''
Odoo Containers doesn't come with report.url param out of the box, so we add it for you to work with Odoocker. Some Odoocker dependencies require to some custom values that we cover with this Addon for you.
''', ''',
'version': '1.0.0', 'version': '1.0.0',
'category': 'Technical', 'category': 'Technical',

View File

@@ -48,6 +48,11 @@
# ... other qweb templates # ... other qweb templates
], ],
'assets': { 'assets': {
'web.assets_frontend': [
'module_name/static/src/js/file.js',
'module_name/static/src/css/style.css'
# ... other assets
],
'web.assets_backend': [ 'web.assets_backend': [
'module_name/static/src/js/file.js', 'module_name/static/src/js/file.js',
'module_name/static/src/css/style.css' 'module_name/static/src/css/style.css'

View File

@@ -64,9 +64,8 @@ xmlrpcs_interface = {XMLRPCS_INTERFACE}
; --xmlrpcs-port ; --xmlrpcs-port
xmlrpcs_port = {XMLRPCS_PORT} xmlrpcs_port = {XMLRPCS_PORT}
; --gevent-port | --longpolling_port (deprecated) ; --longpolling_port
gevent_port = {GEVENT_PORT} gevent_port = {GEVENT_PORT}
longpolling_port = False
; --no-http | --no-xmlrpc ; --no-http | --no-xmlrpc
http_enable = {HTTP_ENABLE} http_enable = {HTTP_ENABLE}
@@ -215,7 +214,7 @@ dbfilter = {DBFILTER}
;------------------; ;------------------;
; Advanced options ; ; Advanced options ;
;------------------; ;------------------;
; --dev (all, reload, qweb, werkzeug, sql, shell, assets, tests) ; --dev
dev_mode = {DEV_MODE} dev_mode = {DEV_MODE}
; --shell-interface ; --shell-interface
@@ -260,22 +259,29 @@ limit_time_real_cron = {LIMIT_TIME_REAL_CRON}
; --limit-request ; --limit-request
limit_request = {LIMIT_REQUEST} limit_request = {LIMIT_REQUEST}
;------------------------------------------; ;-------------;
; Options not exposed on the command line. ; ; Redis ;
;------------------------------------------; ;-------------;
; --ODOO_SESSION_REDIS ; has to be 1 or true
ODOO_SESSION_REDIS = {ODOO_SESSION_REDIS} ;has to be 1 or true ODOO_SESSION_REDIS = {ODOO_SESSION_REDIS}
; --ODOO_SESSION_REDIS_HOST
ODOO_SESSION_REDIS_HOST = {ODOO_SESSION_REDIS_HOST} ;is the redis hostname (default is localhost) ; is the redis hostname (default is localhost)
; --ODOO_SESSION_REDIS_PORT ODOO_SESSION_REDIS_HOST = {ODOO_SESSION_REDIS_HOST}
ODOO_SESSION_REDIS_PORT = {ODOO_SESSION_REDIS_PORT} ;is the redis port (default is 6379)
; --ODOO_SESSION_REDIS_PASSWORD ; is the redis port (default is 6379)
ODOO_SESSION_REDIS_PASSWORD = {ODOO_SESSION_REDIS_PASSWORD} ;is the password for the AUTH command (optional) ODOO_SESSION_REDIS_PORT = {ODOO_SESSION_REDIS_PORT}
; -- ODOO_SESSION_REDIS_URL
ODOO_SESSION_REDIS_URL = {ODOO_SESSION_REDIS_URL} ;is an alternative way to define the Redis server address. It's the preferred way when you're using the rediss:// protocol. ; is the password for the AUTH command (optional)
; -- ODOO_SESSION_REDIS_PREFIX ODOO_SESSION_REDIS_PASSWORD = {ODOO_SESSION_REDIS_PASSWORD}
ODOO_SESSION_REDIS_PREFIX = {ODOO_SESSION_REDIS_PREFIX} ;is the prefix for the session keys (optional)
; -- ODOO_SESSION_REDIS_EXPIRATION ; is an alternative way to define the Redis server address. It's the preferred way when you're using the rediss:// protocol.
ODOO_SESSION_REDIS_EXPIRATION = {ODOO_SESSION_REDIS_EXPIRATION} ;is the time in seconds before expiration of the sessions (default is 7 days) ODOO_SESSION_REDIS_URL = {ODOO_SESSION_REDIS_URL}
; -- ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS
ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS = {ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS} ;the time in seconds before expiration of the anonymous sessions (default is 3 hours) ; is the prefix for the session keys (optional)
ODOO_SESSION_REDIS_PREFIX = {ODOO_SESSION_REDIS_PREFIX}
; is the time in seconds before expiration of the sessions (default is 7 days)
ODOO_SESSION_REDIS_EXPIRATION = {ODOO_SESSION_REDIS_EXPIRATION}
; the time in seconds before expiration of the anonymous sessions (default is 3 hours)
ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS = {ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS}

View File

@@ -100,6 +100,22 @@ defaults=(
[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}
[ODOO_SESSION_REDIS]=${ODOO_SESSION_REDIS}
[ODOO_SESSION_REDIS_HOST]=${ODOO_SESSION_REDIS_HOST}
[ODOO_SESSION_REDIS_PORT]=${ODOO_SESSION_REDIS_PORT}
[ODOO_SESSION_REDIS_PASSWORD]=${ODOO_SESSION_REDIS_PASSWORD}
[ODOO_SESSION_REDIS_URL]=${ODOO_SESSION_REDIS_URL}
[ODOO_SESSION_REDIS_PREFIX]=${ODOO_SESSION_REDIS_PREFIX}
[ODOO_SESSION_REDIS_EXPIRATION]=${ODOO_SESSION_REDIS_EXPIRATION}
[ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS]=${ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS}
[DISABLE_ATTACHMENT_STORAGE]=${DISABLE_ATTACHMENT_STORAGE}
[AWS_HOST]=${AWS_HOST}
[AWS_REGION]=${AWS_REGION}
[AWS_ACCESS_KEY_ID]=${AWS_ACCESS_KEY_ID}
[AWS_SECRET_ACCESS_KEY]=${AWS_SECRET_ACCESS_KEY}
[AWS_BUCKETNAME]=${AWS_BUCKETNAME}
) )
# Define the template # Define the template
@@ -172,7 +188,6 @@ xmlrpcs_port = {XMLRPCS_PORT}
; --gevent-port | --longpolling_port (deprecated) ; --gevent-port | --longpolling_port (deprecated)
gevent_port = {GEVENT_PORT} gevent_port = {GEVENT_PORT}
longpolling_port = False
; --no-http | --no-xmlrpc ; --no-http | --no-xmlrpc
http_enable = {HTTP_ENABLE} http_enable = {HTTP_ENABLE}
@@ -365,6 +380,34 @@ limit_time_real_cron = {LIMIT_TIME_REAL_CRON}
; --limit-request ; --limit-request
limit_request = {LIMIT_REQUEST} limit_request = {LIMIT_REQUEST}
;-------------;
; Redis ;
;-------------;
; has to be 1 or true
ODOO_SESSION_REDIS = {ODOO_SESSION_REDIS}
; is the redis hostname (default is localhost)
ODOO_SESSION_REDIS_HOST = {ODOO_SESSION_REDIS_HOST}
; is the redis port (default is 6379)
ODOO_SESSION_REDIS_PORT = {ODOO_SESSION_REDIS_PORT}
; is the password for the AUTH command (optional)
ODOO_SESSION_REDIS_PASSWORD = {ODOO_SESSION_REDIS_PASSWORD}
; is an alternative way to define the Redis server address. It's the preferred way when you're using the rediss:// protocol.
ODOO_SESSION_REDIS_URL = {ODOO_SESSION_REDIS_URL}
; is the prefix for the session keys (optional)
ODOO_SESSION_REDIS_PREFIX = {ODOO_SESSION_REDIS_PREFIX}
; is the time in seconds before expiration of the sessions (default is 7 days)
ODOO_SESSION_REDIS_EXPIRATION = {ODOO_SESSION_REDIS_EXPIRATION}
; the time in seconds before expiration of the anonymous sessions (default is 3 hours)
ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS = {ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS}
EOF EOF
) )

View File

@@ -1,3 +1,3 @@
debugpy debugpy
websocket-client websocket-client
redis redis

2
odoo/third-party-addons.sh Executable file
View File

@@ -0,0 +1,2 @@
git clone https://github.com/camptocamp/odoo-cloud-platform.git --depth 1 --branch ${ODOO_TAG} --single-branch --no-tags;
cp -r odoo-cloud-platform/session_redis ${THIRD_PARTY_ADDONS}/session_redis

32
pgadmin/Dockerfile Normal file
View File

@@ -0,0 +1,32 @@
#------------------------#
# PGAdmin Server #
#------------------------#
ARG PGADMIN_TAG
FROM dpage/pgadmin4:${PGADMIN_TAG}
# Receive ARGs from docker-compose.yml & convert them into ENVs
ARG PGADMIN_DEFAULT_EMAIL
ENV PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
# Switch to root user
USER root
# Install bash
RUN apk add --no-cache bash jq sqlite
# Conditionally copy the private key if it exists
COPY --chown=pgadmin:root ./pgadmin/private_key /pgadmin4/private_key
# Set permissions for the private key
# Copy your script file into the Docker image
COPY --chown=pgadmin:root ./.env /
COPY ./pgadmin/start_pgadmin.sh /var/lib/pgadmin/start_pgadmin.sh
# Make the script executable
RUN chmod +x /var/lib/pgadmin/start_pgadmin.sh
# Run your script
RUN /var/lib/pgadmin/start_pgadmin.sh
# Expose the necessary port
EXPOSE 80

89
pgadmin/start_pgadmin.sh Executable file
View File

@@ -0,0 +1,89 @@
#!/bin/bash
set -e
# Source environment variables
set -a
source /.env
set +a
# Check if PGADMIN_DEFAULT_EMAIL is set
if [[ -z $PGADMIN_DEFAULT_EMAIL ]]; then
echo "PGADMIN_DEFAULT_EMAIL is not set. Exiting..."
exit 1
fi
# Modify the email to replace @ with _
DIR_NAME="/var/lib/pgadmin/storage/${PGADMIN_DEFAULT_EMAIL//@/_}"
# Create the directory using the modified name
mkdir -p "$DIR_NAME"
cp /pgadmin4/private_key "$DIR_NAME/private_key"
chown -R pgadmin:root "$DIR_NAME/private_key"
# Generate JSON for each matching variable
DB_PATH="/var/lib/pgadmin/pgadmin4.db"
json_output="{\"Servers\":{"
index=1
while true; do
name_var="PGADMIN_DB${index}_NAME"
if [[ -z ${!name_var} ]]; then
break
fi
host_var="PGADMIN_DB${index}_HOST"
port_var="PGADMIN_DB${index}_PORT"
maintenance_db_var="PGADMIN_DB${index}_MAINTENANCE_DB"
username_var="PGADMIN_DB${index}_USERNAME"
tunnel_host_var="PGADMIN_DB${index}_TUNNEL_HOST"
tunnel_port_var="PGADMIN_DB${index}_TUNNEL_PORT"
tunnel_username_var="PGADMIN_DB${index}_TUNNEL_USERNAME"
json_output+="\"$index\":$(jq -n \
--arg name "${!name_var}" \
--arg host "${!host_var:-localhost}" \
--arg port "${!port_var:-5432}" \
--arg db "${!maintenance_db_var:-${!name_var}}" \
--arg username "${!username_var:-odoo}" \
--arg thost "${!tunnel_host_var}" \
--arg tport "${!tunnel_port_var:-22}" \
--arg tuser "${!tunnel_username_var:-ubuntu}" \
'{
"Name": $name,
"Group": "Servers",
"Host": $host,
"Port": $port|tonumber,
"MaintenanceDB": $db,
"Username": $username,
"UseSSHTunnel": 1,
"TunnelHost": $thost,
"TunnelPort": $tport,
"TunnelUsername": $tuser,
"TunnelAuthentication": 1,
"KerberosAuthentication": false,
"ConnectionParameters": {
"sslmode": "prefer",
"connect_timeout": 10,
"sslcert": "'"$DIR_NAME"'/.postgresql/postgresql.crt",
"sslkey": "'"$DIR_NAME"'/.postgresql/postgresql.key"
},
"Shared": true
}'),"
index=$((index + 1))
done
# Remove trailing comma and close JSON braces
json_output=${json_output%,}
json_output+="}}"
# Save the well-formatted JSON to a file using jq
if [[ $PGADMIN_SERVERS_JSON ]]; then
echo $json_output | jq '.' > "$PGADMIN_SERVERS_JSON"
# Make the Servers.json file readable for all users
chmod 755 "/pgadmin4/servers.json"
echo "JSON configuration saved to $DIR_NAME/servers.json"
fi

View File

@@ -8,8 +8,11 @@ FROM postgres:${POSTGRES_TAG}
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
# Unaccent extension dependencies # Unaccent extension dependencies
postgresql-contrib \ postgresql-contrib \
apt-utils \
# Clean up the apt cache to reduce the image size # Clean up the apt cache to reduce the image size
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
COPY --chown=postgres:postgres ./.env /
# Copy the script to create the unaccent template # Copy the script to create the unaccent template
COPY ./entrypoint.sh /docker-entrypoint-initdb.d/entrypoint.sh COPY ./postgres/entrypoint.sh /docker-entrypoint-initdb.d/entrypoint.sh

View File

@@ -1,3 +1,32 @@
psql -p 5432 -U odoo -d postgres -c "CREATE DATABASE unaccent_template WITH TEMPLATE = template0" #!/bin/bash
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;" set -e
# Source environment variables
set -a
source /.env
set +a
# Create the $DB_TEMPLATE database
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $POSTGRES_DB -c "CREATE DATABASE $DB_TEMPLATE WITH TEMPLATE = template0;"
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $POSTGRES_DB -c "\\c $DB_TEMPLATE;"
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $POSTGRES_DB -c "CREATE EXTENSION IF NOT EXISTS unaccent;"
# Create Odoo user and give proper privileges
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $POSTGRES_DB -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASSWORD';"
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $POSTGRES_DB -c "ALTER USER $DB_USER CREATEDB;"
# Give Odoo user access to copy $DB_TEMPLATE
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $POSTGRES_DB -c "GRANT ALL PRIVILEGES ON DATABASE $DB_TEMPLATE TO $DB_USER;"
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $DB_TEMPLATE -c "ALTER DATABASE $DB_TEMPLATE OWNER TO $DB_USER;"
# Create PgAdmin user and give proper privileges
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $POSTGRES_DB -c "CREATE DATABASE $PGADMING_DB_NAME;"
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $POSTGRES_DB -c "CREATE USER $PGADMING_DB_USER WITH PASSWORD '$PGADMIN_DB_PASSWORD';"
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $POSTGRES_DB -c "GRANT ALL PRIVILEGES ON DATABASE $PGADMING_DB_NAME TO $PGADMING_DB_USER;"
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $PGADMING_DB_NAME -c "GRANT ALL PRIVILEGES ON SCHEMA public TO $PGADMING_DB_USER;"
# Revoke Odoo user's access to pgadmin database
psql -p $POSTGRES_PORT -U $POSTGRES_MAIN_USER -d $POSTGRES_DB -c "REVOKE CONNECT ON DATABASE $PGADMING_DB_NAME FROM $DB_USER;"
echo "Setup completed."