feat: Docker image with clone functionality

This commit is contained in:
Janik von Rotz committed 2024-10-16 16:21:45 +02:00
1 parent 7fd603843d
commit d896be49db
58 files changed
+142 -70

No files matched your search

Submodule addons/certificate_planer updated: b05787d258...54a006f21c.
+4 -2
View File
@@ -41,6 +41,8 @@ RUN apt-get update \
python3-xlrd \
python3-xlwt \
xz-utils \
git \
openssh-client \
gettext \
python3-dev \
libpq-dev \
@@ -98,8 +100,8 @@ COPY ./build/odoo.conf.template /etc/odoo/
COPY ./build/entrypoint.sh /
# Create a user named odoo
ARG UID=101
ARG GID=101
ARG UID=102
ARG GID=102
RUN groupadd --gid $GID odoo
RUN useradd --uid $UID --gid $GID -m odoo
+29 -9
View File
@@ -2,17 +2,16 @@
A better Odoo image.
- Substitutes environment vars in `odoo.conf.template`
- Detects and aggregates nested module folders
- The Odoo source is set to the latest commit of date in tag
- Ships with python 3.11
- Define Odoo configs with env vars
- Odoo source is based on exact git revision
- Setup `odoo.conf` with environment vars
- Clones addons from git repos
- Detects and aggregates nested module folders
- Stores session information in database
- Set and get environment name from server config
## Usage
Use `ODOO_ADDONS_PATH` to pass paths with nested module folders.
```yml
version: "3"
services:
@@ -26,11 +25,20 @@ services:
USER: odoo
PASSWORD: odoo
PORT: 5432
ENVIRONMENT: production
GIT_SSH_PRIVATE_KEY: |
-----BEGIN OPENSSH PRIVATE KEY-----
QyNTUxOQAAACCuoR1PvK081rwrC5hlSXM7Q24cPQOpSlymLefnPiihxQAAAJjEbzDGxG8w
AAAEDx6kjL/1dmz7WZctryva7EphDT1rHyyfjxFiEPVnmrXq6hHU+8rTzWvCsLmGVJcztD
bhw9A6lKXKYt5+c+KKHFAAAAEmJvdEBtaW50LXN5c3RlbS5jaAECAw==
-----END OPENSSH PRIVATE KEY-----
ADDONS_GIT_REPOS: "git@github.com:Mint-System/Odoo-Apps-Server-Tools.git#17.0,git@github.com:OCA/server-tools.git#17.0"
ODOO_ADDONS_PATH: /mnt/addons/,/mnt/oca/,/mnt/enterprise,/mnt/themes/
SERVER_WIDE_MODULES: web,session_db
SESSION_DB_URI: postgres://odoo:odoo@db/16.0
LOG_LEVEL: debug
ADMIN_PASSWD: oqua9AiHeibac2pie9ei
DBFILTER: ^%d$
ENVIRONMENT: production
LIST_DB: False
PROXY_MODE: True
WORKERS: 4
@@ -42,6 +50,18 @@ services:
- ./oca:/mnt/oca
- ./enterprise:/mnt/enterprise
- ./themes:/mnt/themes
db:
container_name: db
image: postgres:14-alpine
environment:
POSTGRES_USER: odoo
POSTGRES_PASSWORD: odoo
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- db-data:/var/lib/postgresql/data/pgdata
volumes:
odoo-data:
db-data:
```
## Develop
@@ -51,7 +71,7 @@ services:
Extend the image with additional python packages:
```dockerfile
FROM mintsystem/odoo:16.0.2024.0405
FROM mintsystem/odoo:17.0.20240730
USER root
@@ -65,7 +85,7 @@ USER odoo
Copy a custom Odoo conf file to the image:
```dockerfile
FROM mintsystem/odoo:16.0.2024.0405
FROM mintsystem/odoo:17.0.20240730
USER root
+50 -5
View File
@@ -22,6 +22,47 @@ entrypoint_log() {
fi
}
git_clone_addons() {
if [ -n "$ADDONS_GIT_REPOS" ]; then
# Setup git ssh key
mkdir -p ~/.ssh
echo "$GIT_SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
eval "$(ssh-agent -s)" >> /dev/null
ssh-add ~/.ssh/id_ed25519
# Clone git repo addons into /var/lib/odoo/addons
for ADDON_GIT_REPO in $(echo "$ADDONS_GIT_REPOS" | tr "," "\n"); do
# Parse git ssh url
GIT_HOSTNAME=$(echo "$ADDON_GIT_REPO" | cut -d "@" -f 2 | cut -d ":" -f 1)
GIT_URL=$(echo "$ADDON_GIT_REPO" | cut -d "#" -f 1)
GIT_BRANCH=$(echo "$ADDON_GIT_REPO" | cut -d "#" -f 2)
GIT_PATH=$(echo "$ADDON_GIT_REPO" | cut -d "#" -f 1 | cut -d ":" -f 2 | cut -d "." -f 1)
ADDON_PATH="/var/lib/odoo/addons/$GIT_PATH"
# Clone git repo and submodules
if [ ! -d "$ADDON_PATH" ]; then
ssh-keyscan -t rsa,dsa "$GIT_HOSTNAME" > ~/.ssh/known_hosts 2>/dev/null
entrypoint_log "$ME: Clone $GIT_URL branch $GIT_BRANCH"
git clone "$GIT_URL" --depth 1 --single-branch --branch "$GIT_BRANCH" "$ADDON_PATH"
cd "$ADDON_PATH"
git submodule update --init --recursive && git submodule update --init --recursive
fi
# Add git repo to addons path
if [ -n "$ODOO_ADDONS_PATH" ]; then
ODOO_ADDONS_PATH="$ODOO_ADDONS_PATH,$ADDON_PATH"
else
ODOO_ADDONS_PATH="$ADDON_PATH"
fi
done
fi
}
git_clone_addons
set_odoo_config_env() {
if [ -n "$ODOO_ADDONS_PATH" ]; then
@@ -29,14 +70,15 @@ set_odoo_config_env() {
# Search for module manifest files containing "version.+NN.0" and return list of module paths
ODOO_MODULE_PATH=$(echo "$ODOO_ADDONS_PATH" | tr "," "\n" | xargs -I {} find {} -type f -name "__manifest__.py" | xargs grep -l "version.*${ODOO_VERSION}" | xargs -r dirname | sort -u | tr "\n" ",")
# Set parent folder of module paths as new addons path
ODOO_ADDONS_PATH=$(echo "$ODOO_MODULE_PATH" | tr "," "\n" | xargs -I {} dirname {} | sort -u | tr "\n" "," | sed 's/,$//')
export ODOO_ADDONS_PATH
# Set parent folder of module paths as new addons path
ODOO_MODULE_PATH=$(echo "$ODOO_MODULE_PATH" | tr "," "\n" | xargs -I {} dirname {} | sort -u | tr "\n" "," | sed 's/,$//')
if [ -n "$ODOO_MODULE_PATH" ]; then
ODOO_ADDONS_PATH="$ODOO_ADDONS_PATH,$ODOO_MODULE_PATH"
fi
fi
: "${LOG_LEVEL:=info}"
export LOG_LEVEL
@@ -57,6 +99,9 @@ set_odoo_config_env() {
: "${WORKERS:=0}"
export WORKERS
: "${SERVER_WIDE_MODULES:=web}"
export SERVER_WIDE_MODULES
}
set_odoo_config_env
+1
View File
@@ -8,6 +8,7 @@ environment = $ENVIRONMENT
list_db = $LIST_DB
proxy_mode = $PROXY_MODE
workers = $WORKERS
server_wide_modules = $SERVER_WIDE_MODULES
; csv_internal_sep = ,
; db_maxconn = 64
; db_name = False
+5 -1
View File
@@ -11,7 +11,11 @@ services:
USER: odoo
PASSWORD: odoo
PORT: ${POSTGRES_PORT}
GIT_SSH_PRIVATE_KEY: ${GIT_SSH_PRIVATE_KEY}
ADDONS_GIT_REPOS: ${ADDONS_GIT_REPOS}
ODOO_ADDONS_PATH: ${ODOO_ADDONS_PATH}
SERVER_WIDE_MODULES: ${SERVER_WIDE_MODULES}
SESSION_DB_URI: ${SESSION_DB_URI}
LOG_LEVEL: ${LOG_LEVEL}
ADMIN_PASSWD: ${ADMIN_PASSWD}
DBFILTER: ${DBFILTER}
@@ -43,7 +47,7 @@ services:
- ./config/servers.json:/pgadmin4/servers.json
db:
container_name: db
image: postgres:12-alpine
image: postgres:14-alpine
ports:
- "127.0.0.1:${POSTGRES_PORT}:${POSTGRES_PORT}"
environment:
+1 -1
Submodule oca/dms updated: a272546315...6dd4f2fb7d.
+1 -1
Submodule oca/edi updated: 40f164c843...d4f8e4d48a.
+1 -1
Submodule oca/hr updated: 6097c995c2...1a5dfa0369.
+1 -1
Submodule oca/iot updated: 430793659a...6452f06ec4.
+1 -1
Submodule oca/web updated: 949fc07164...a73351bc57.
+1 -1
Submodule odoo updated: 6281aa9233...d2714fa73e.