Merge pull request #2 from codeagencybe/feat/keydb-cache

Code Agency | Feature | KeyDB (Redis) Integration+ PgAdmin Upgrades
This commit is contained in:
Yhael S
2023-09-30 03:27:14 -06:00
committed by GitHub
18 changed files with 429 additions and 59 deletions

View File

@@ -5,9 +5,9 @@
APP_ENV=local APP_ENV=local
INIT= INIT=
UPDATE= UPDATE=
LOAD=base,web LOAD=base,web,session_redis
WORKERS=2 WORKERS=2
DEV_MODE=reload,qweb DEV_MODE=reload,xml
DOMAIN=erp.odoocker.test DOMAIN=erp.odoocker.test
# Enterprise # Enterprise
@@ -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=odoocker
DB_USER=odoo DB_USER=odoo
DB_PASSWORD=odoo DB_PASSWORD=odoo
LOAD_LANGUAGE= LOAD_LANGUAGE=
@@ -31,7 +31,7 @@ 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
@@ -52,9 +52,35 @@ SMTP_PASSWORD=
EMAIL_FROM= EMAIL_FROM=
FROM_FILTER= FROM_FILTER=
# Postgres
POSTGRES_MAIN_HOST=${DB_HOST}
POSTGRES_MAIN_PORT=${DB_PORT}
POSTGRES_MAIN_DB=postgres
POSTGRES_MAIN_USER=postgres
POSTGRES_MAIN_PASSWORD=${DB_PASSWORD}
# Redis
SESSION_REDIS=true
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_URL=
REDIS_PREFIX=odoo
REDIS_EXPIRATION=604800
REDIS_EXPIRATION_ANONYMOUS=10800
# PgAdmin # PgAdmin
PGADMIN_DOMAIN=pgadmin.odoocker.test PGADMIN_DOMAIN=pgadmin.odoocker.test
PGADMIN_PASSWORD=odoo 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=pgadmin@example.com
PGADMIN_PASSWORD=pgadmin
PGADMIN_SERVERS_JSON=
PGADMIN_CONFIG_SERVER_MODE=True
#------------------------------# #------------------------------#
# Project Configurations # # Project Configurations #
@@ -65,7 +91,7 @@ SUPPORT_EMAIL=mail@example.com
# Containers' Tags # Containers' Tags
ODOO_TAG=16.0 ODOO_TAG=16.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
@@ -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 #
#-------------------# #-------------------#
@@ -235,3 +252,68 @@ CORS_ALLOWED_DOMAIN=${CORS_ALLOWED_DOMAIN}
# ACME Companion # # ACME Companion #
#----------------------# #----------------------#
DEFAULT_EMAIL=${SUPPORT_EMAIL} DEFAULT_EMAIL=${SUPPORT_EMAIL}
#-------------#
# Redis #
#-------------#
ODOO_SESSION_REDIS=${SESSION_REDIS}
ODOO_SESSION_REDIS_HOST=${REDIS_HOST}
ODOO_SESSION_REDIS_PORT=${REDIS_PORT}
ODOO_SESSION_REDIS_PASSWORD=${REDIS_PASSWORD}
ODOO_SESSION_REDIS_URL=${REDIS_URL}
ODOO_SESSION_REDIS_PREFIX=${REDIS_PREFIX}
ODOO_SESSION_REDIS_EXPIRATION=${REDIS_EXPIRATION}
ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS=${REDIS_EXPIRATION_ANONYMOUS}
#-------------#
# PgAdmin #
#-------------#
# Volume path
PGADMIN_DATA=/var/lib/pgadmin
# Nginx Proxy Configuration
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_DEFAULT_SERVER="'127.0.0.1'"
PGADMIN_CONFIG_DEFAULT_SERVER_PORT=5050
PGADMIN_CONFIG_MAX_SESSION_IDLE_TIME=120
PGADMIN_CONFIG_MAX_QUERY_HIST_STORED=20
# Security 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
# DB Configuration
PGADMIN_CONFIG_CONFIG_DATABASE_URI=${PGADMIN_DB_HOST}
PGADMIN_CONFIG_CONFIG_DATABASE_CONNECTION_POOL_SIZE=5
# Load Shared Servers Configuration into DB
PGADMIN_SERVERS_JSON=${PGADMIN_SERVERS_JSON}
# Authentication
PGADMIN_DEFAULT_EMAIL=${PGADMIN_EMAIL}
PGADMIN_DEFAULT_PASSWORD=${PGADMIN_PASSWORD}
# PgAdmin 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 (Add as many as you need following copying these variables like {DB1}, {DB2}, DB3)
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,16 +10,18 @@ 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
tty: true tty: true
volumes: volumes:
- data-dir:${DATA_DIR} - odoo-data:${DATA_DIR}
- ./odoo/extra-addons:${EXTRA_ADDONS} - ./odoo/extra-addons:${EXTRA_ADDONS}
- ./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,8 +29,8 @@ 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
@@ -41,9 +43,26 @@ 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
redis:
image: eqalpha/keydb:latest
platform: linux/amd64
ports:
- 6379:6379
restart: unless-stopped
networks:
- internal
volumes:
- redis-data:/var/lib/keydb
nginx: nginx:
image: nginx:${NGINX_TAG} image: nginx:${NGINX_TAG}
depends_on: depends_on:
@@ -83,8 +102,9 @@ services:
- internal - internal
volumes: volumes:
data-dir: odoo-data:
pg-data: pg-data:
redis-data:
certs: certs:
vhost: vhost:
html: html:

View File

@@ -22,11 +22,12 @@ server {
} }
location / { 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; proxy_pass http://odoo:8069;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Add CORS headers # Add CORS headers
add_header 'Access-Control-Allow-Origin' $CORS_ALLOWED_DOMAIN; add_header 'Access-Control-Allow-Origin' $CORS_ALLOWED_DOMAIN;
@@ -39,19 +40,14 @@ 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-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_pass http://odoo:8072; proxy_pass http://odoo:8072;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
} }
} }

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

@@ -1,4 +1,4 @@
[options] options]
;------------------------------------------; ;------------------------------------------;
; Options not exposed on the command line. ; ; Options not exposed on the command line. ;
;------------------------------------------; ;------------------------------------------;
@@ -66,7 +66,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}
@@ -215,7 +214,7 @@ dbfilter = {DBFILTER}
;------------------; ;------------------;
; Advanced options ; ; Advanced options ;
;------------------; ;------------------;
; --dev (all, reload, qweb, werkzeug, sql, shell, assets, tests) ; --dev (all, reload, xml, qweb, werkzeug, sql, shell, assets, tests)
dev_mode = {DEV_MODE} dev_mode = {DEV_MODE}
; --shell-interface ; --shell-interface
@@ -259,3 +258,34 @@ limit_time_real_cron = {LIMIT_TIME_REAL_CRON}
; --limit-request ; --limit-request
limit_request = {LIMIT_REQUEST} limit_request = {LIMIT_REQUEST}
;-----------------------------;
; External Integrations ;
;-----------------------------;
;-------------;
; Redis ;
;-------------;
; -- Possible values: 1 or true
ODOO_SESSION_REDIS = {ODOO_SESSION_REDIS}
; -- Defaults to is localhost
ODOO_SESSION_REDIS_HOST = {ODOO_SESSION_REDIS_HOST}
; -- Defaults to 6379
ODOO_SESSION_REDIS_PORT = {ODOO_SESSION_REDIS_PORT}
; -- Sets the password for the AUTH command (optional)
ODOO_SESSION_REDIS_PASSWORD = {ODOO_SESSION_REDIS_PASSWORD}
; -- Alternative way to define the Redis server address like rediss:// protocol.
ODOO_SESSION_REDIS_URL = {ODOO_SESSION_REDIS_URL}
; -- Prefix for the session keys (optional)
ODOO_SESSION_REDIS_PREFIX = {ODOO_SESSION_REDIS_PREFIX}
; -- Time in seconds before expiration of the sessions (default is 7 days)
ODOO_SESSION_REDIS_EXPIRATION = {ODOO_SESSION_REDIS_EXPIRATION}
; -- 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,15 @@ 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}
) )
# Define the template # Define the template
@@ -172,7 +181,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}
@@ -321,7 +329,7 @@ dbfilter = {DBFILTER}
;------------------; ;------------------;
; Advanced options ; ; Advanced options ;
;------------------; ;------------------;
; --dev ; --dev (all, reload, xml, qweb, werkzeug, sql, shell, assets, tests)
dev_mode = {DEV_MODE} dev_mode = {DEV_MODE}
; --shell-interface ; --shell-interface
@@ -365,6 +373,38 @@ limit_time_real_cron = {LIMIT_TIME_REAL_CRON}
; --limit-request ; --limit-request
limit_request = {LIMIT_REQUEST} limit_request = {LIMIT_REQUEST}
;-----------------------------;
; External Integrations ;
;-----------------------------;
;-------------;
; Redis ;
;-------------;
; -- Possible values: 1 or true
ODOO_SESSION_REDIS = {ODOO_SESSION_REDIS}
; -- Defaults to is localhost
ODOO_SESSION_REDIS_HOST = {ODOO_SESSION_REDIS_HOST}
; -- Defaults to 6379
ODOO_SESSION_REDIS_PORT = {ODOO_SESSION_REDIS_PORT}
; -- Sets the password for the AUTH command (optional)
ODOO_SESSION_REDIS_PASSWORD = {ODOO_SESSION_REDIS_PASSWORD}
; -- Alternative way to define the Redis server address like rediss:// protocol.
ODOO_SESSION_REDIS_URL = {ODOO_SESSION_REDIS_URL}
; -- Prefix for the session keys (optional)
ODOO_SESSION_REDIS_PREFIX = {ODOO_SESSION_REDIS_PREFIX}
; -- Time in seconds before expiration of the sessions (default is 7 days)
ODOO_SESSION_REDIS_EXPIRATION = {ODOO_SESSION_REDIS_EXPIRATION}
; -- 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,2 +1,3 @@
debugpy debugpy
websocket-client websocket-client
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."