diff --git a/V17/Dockerfile b/V17/Dockerfile new file mode 100644 index 0000000..e65416e --- /dev/null +++ b/V17/Dockerfile @@ -0,0 +1,104 @@ +FROM ubuntu:jammy +MAINTAINER Odoo S.A. + +SHELL ["/bin/bash", "-xo", "pipefail", "-c"] + +# Generate locale C.UTF-8 for postgres and general locale data +ENV LANG en_US.UTF-8 + +# Retrieve the target architecture to install the correct wkhtmltopdf package +ARG TARGETARCH + +# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf + +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + dirmngr \ + fonts-noto-cjk \ + gnupg \ + libssl-dev \ + node-less \ + npm \ + python3-magic \ + python3-num2words \ + python3-odf \ + python3-pdfminer \ + python3-pip \ + python3-phonenumbers \ + python3-pyldap \ + python3-qrcode \ + python3-renderpm \ + python3-setuptools \ + python3-slugify \ + python3-vobject \ + python3-watchdog \ + python3-xlrd \ + python3-xlwt \ + xz-utils && \ + if [ -z "${TARGETARCH}" ]; then \ + TARGETARCH="$(dpkg --print-architecture)"; \ + fi; \ + WKHTMLTOPDF_ARCH=${TARGETARCH} && \ + case ${TARGETARCH} in \ + "amd64") WKHTMLTOPDF_ARCH=amd64 && WKHTMLTOPDF_SHA=967390a759707337b46d1c02452e2bb6b2dc6d59 ;; \ + "arm64") WKHTMLTOPDF_SHA=90f6e69896d51ef77339d3f3a20f8582bdf496cc ;; \ + "ppc64le" | "ppc64el") WKHTMLTOPDF_ARCH=ppc64el && WKHTMLTOPDF_SHA=5312d7d34a25b321282929df82e3574319aed25c ;; \ + esac \ + && curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_${WKHTMLTOPDF_ARCH}.deb \ + && echo ${WKHTMLTOPDF_SHA} wkhtmltox.deb | sha1sum -c - \ + && apt-get install -y --no-install-recommends ./wkhtmltox.deb \ + && rm -rf /var/lib/apt/lists/* wkhtmltox.deb + +# install latest postgresql-client +RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ jammy-pgdg main' > /etc/apt/sources.list.d/pgdg.list \ + && GNUPGHOME="$(mktemp -d)" \ + && export GNUPGHOME \ + && repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \ + && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \ + && gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \ + && gpgconf --kill all \ + && rm -rf "$GNUPGHOME" \ + && apt-get update \ + && apt-get install --no-install-recommends -y postgresql-client \ + && rm -f /etc/apt/sources.list.d/pgdg.list \ + && rm -rf /var/lib/apt/lists/* + +# Install rtlcss (on Debian buster) +RUN npm install -g rtlcss + +# Install Odoo +ENV ODOO_VERSION 17.0 +ARG ODOO_RELEASE=20250725 +ARG ODOO_SHA=776c9e48afff1348a0410628a17d0552cb4599a3 +RUN curl -o odoo.deb -sSL http://nightly.odoo.com/${ODOO_VERSION}/nightly/deb/odoo_${ODOO_VERSION}.${ODOO_RELEASE}_all.deb \ + && echo "${ODOO_SHA} odoo.deb" | sha1sum -c - \ + && apt-get update \ + && apt-get -y install --no-install-recommends ./odoo.deb \ + && rm -rf /var/lib/apt/lists/* odoo.deb + +# Copy entrypoint script and Odoo configuration file +COPY ./entrypoint.sh / +COPY ./odoo.conf /etc/odoo/ + +# Set permissions and Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for users addons +RUN chown odoo /etc/odoo/odoo.conf \ + && mkdir -p /mnt/extra-addons \ + && chown -R odoo /mnt/extra-addons +VOLUME ["/var/lib/odoo", "/mnt/extra-addons"] + +# Expose Odoo services +EXPOSE 8069 8071 8072 + +# Set the default config file +ENV ODOO_RC /etc/odoo/odoo.conf + +COPY wait-for-psql.py /usr/local/bin/wait-for-psql.py + +# Set default user when running the container +USER odoo + +ENTRYPOINT ["/entrypoint.sh"] +CMD ["odoo"] diff --git a/V17/Dockerfile.postgres b/V17/Dockerfile.postgres new file mode 100644 index 0000000..97152f4 --- /dev/null +++ b/V17/Dockerfile.postgres @@ -0,0 +1,9 @@ +# Utiliser l'image officielle PostgreSQL 15 +FROM postgres:15 + +# Changer le port d'écoute dans la configuration PostgreSQL +RUN sed -i 's/^#port = 5432/port = 5444/' /usr/share/postgresql/postgresql.conf.sample + +# Copier la configuration dans le répertoire de configuration PostgreSQL +CMD ["postgres", "-c", "config_file=/usr/share/postgresql/postgresql.conf.sample"] + diff --git a/V17/buildimage.odoo.txt b/V17/buildimage.odoo.txt new file mode 100644 index 0000000..bd746c4 --- /dev/null +++ b/V17/buildimage.odoo.txt @@ -0,0 +1 @@ +docker build -t odoo17-20250725-image . diff --git a/V17/buildimage.postgres.txt b/V17/buildimage.postgres.txt new file mode 100644 index 0000000..a6b2675 --- /dev/null +++ b/V17/buildimage.postgres.txt @@ -0,0 +1 @@ +docker build -t postgres15-5444-image . diff --git a/V17/docker-compose.yml b/V17/docker-compose.yml new file mode 100644 index 0000000..4af51b4 --- /dev/null +++ b/V17/docker-compose.yml @@ -0,0 +1,37 @@ +version: '3' + +services: + odoo-mylucdatabase: # Configuration du container Odoo + image: odoo17-20250725-image:latest # Nom de notre image personnalisée + container_name: odoo-20250207-mylucdatabase + restart: unless-stopped + user: root + depends_on: + - postgres # L'exécution de notre service dépend de celui de postgres + ports: + - "8569:8069" # Le port 8069 est exposé pour accéder à l'application Odoo + networks: + - moustyLocalNetwork + volumes: + - ./:/etc/odoo:z + - ./odoo-filestore:/var/lib/odoo/filestore:z + - ./custom:/mnt/extra-addons:z + - ./logs:/var/log/odoo:z + + postgres: # Configuration de notre service PostgreSQL + image: postgres15-5444-image:latest # Image postgres 15 de Docker hub + container_name: postgres-20250725-mylucdatabase + restart: unless-stopped + networks: + - moustyLocalNetwork + environment: + - POSTGRES_USER=odoo + - POSTGRES_PASSWORD=odoo + - POSTGRES_DB=postgres + volumes: + - ./postgresql:/var/lib/postgresql/data:z + +networks: + moustyLocalNetwork: + external: true + diff --git a/V17/entrypoint.sh b/V17/entrypoint.sh new file mode 100644 index 0000000..e834ba0 --- /dev/null +++ b/V17/entrypoint.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +set -e + +if [ -v PASSWORD_FILE ]; then + PASSWORD="$(< $PASSWORD_FILE)" +fi + +# set the postgres database host, port, user and password according to the environment +# and pass them as arguments to the odoo process if not present in the config file +: ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}} +: ${PORT:=${DB_PORT_5432_TCP_PORT:=5434}} +: ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}} +: ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}} + +DB_ARGS=() +function check_config() { + param="$1" + value="$2" + if grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then + value=$(grep -E "^\s*\b${param}\b\s*=" "$ODOO_RC" |cut -d " " -f3|sed 's/["\n\r]//g') + fi; + DB_ARGS+=("--${param}") + DB_ARGS+=("${value}") +} +check_config "db_host" "$HOST" +check_config "db_port" "$PORT" +check_config "db_user" "$USER" +check_config "db_password" "$PASSWORD" + +case "$1" in + -- | odoo) + shift + if [[ "$1" == "scaffold" ]] ; then + exec odoo "$@" + else + wait-for-psql.py ${DB_ARGS[@]} --timeout=30 + exec odoo "$@" "${DB_ARGS[@]}" + fi + ;; + -*) + wait-for-psql.py ${DB_ARGS[@]} --timeout=30 + exec odoo "$@" "${DB_ARGS[@]}" + ;; + *) + exec "$@" +esac + +exit 1 diff --git a/V17/odoo.conf b/V17/odoo.conf new file mode 100644 index 0000000..98c3abd --- /dev/null +++ b/V17/odoo.conf @@ -0,0 +1,16 @@ +[options] +addons_path = /mnt/extra-addons +data_dir = /var/lib/odoo +limit_time_real = 1200 +log_handler = [':INFO'] +log_level = info +logfile = /var/log/odoo/odoo.log +proxy_mode = True +admin_passwd = Douthinkimtupid +db_host = postgres-20250725-mylucdatabase +db_port = 5444 +debug_mode = True +longpolling_port = 8072 +xmlrpc_port = 8069 +xmlrpcs_port = 8071 + diff --git a/V17/wait-for-psql.py b/V17/wait-for-psql.py new file mode 100644 index 0000000..a55f440 --- /dev/null +++ b/V17/wait-for-psql.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +import argparse +import psycopg2 +import sys +import time + + +if __name__ == '__main__': + arg_parser = argparse.ArgumentParser() + arg_parser.add_argument('--db_host', required=True) + arg_parser.add_argument('--db_port', required=True) + arg_parser.add_argument('--db_user', required=True) + arg_parser.add_argument('--db_password', required=True) + arg_parser.add_argument('--timeout', type=int, default=5) + + args = arg_parser.parse_args() + + start_time = time.time() + while (time.time() - start_time) < args.timeout: + try: + conn = psycopg2.connect(user=args.db_user, host=args.db_host, port=args.db_port, password=args.db_password, dbname='postgres') + error = '' + break + except psycopg2.OperationalError as e: + error = e + else: + conn.close() + time.sleep(1) + + if error: + print("Database connection failure: %s" % error, file=sys.stderr) + sys.exit(1) diff --git a/V18-MIG/Dockerfile b/V18-MIG/Dockerfile new file mode 100644 index 0000000..d5bf6e9 --- /dev/null +++ b/V18-MIG/Dockerfile @@ -0,0 +1,112 @@ +FROM ubuntu:noble +MAINTAINER Odoo S.A. + +SHELL ["/bin/bash", "-xo", "pipefail", "-c"] + +# Generate locale C.UTF-8 for postgres and general locale data +ENV LANG en_US.UTF-8 + +# Retrieve the target architecture to install the correct wkhtmltopdf package +ARG TARGETARCH + +# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf + +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + vim \ + git \ + dirmngr \ + fonts-noto-cjk \ + gnupg \ + libssl-dev \ + node-less \ + npm \ + unzip \ + python3-magic \ + python3-num2words \ + python3-odf \ + python3-pdfminer \ + python3-pip \ + python3-phonenumbers \ + python3-pyldap \ + python3-qrcode \ + python3-renderpm \ + python3-setuptools \ + python3-slugify \ + python3-vobject \ + python3-watchdog \ + python3-xlrd \ + python3-xlwt \ + xz-utils && \ + if [ -z "${TARGETARCH}" ]; then \ + TARGETARCH="$(dpkg --print-architecture)"; \ + fi; \ + WKHTMLTOPDF_ARCH=${TARGETARCH} && \ + case ${TARGETARCH} in \ + "amd64") WKHTMLTOPDF_ARCH=amd64 && WKHTMLTOPDF_SHA=967390a759707337b46d1c02452e2bb6b2dc6d59 ;; \ + "arm64") WKHTMLTOPDF_SHA=90f6e69896d51ef77339d3f3a20f8582bdf496cc ;; \ + "ppc64le" | "ppc64el") WKHTMLTOPDF_ARCH=ppc64el && WKHTMLTOPDF_SHA=5312d7d34a25b321282929df82e3574319aed25c ;; \ + esac \ + && curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_${WKHTMLTOPDF_ARCH}.deb \ + && echo ${WKHTMLTOPDF_SHA} wkhtmltox.deb | sha1sum -c - \ + && apt-get install -y --no-install-recommends ./wkhtmltox.deb \ + && rm -rf /var/lib/apt/lists/* wkhtmltox.deb + +# install latest postgresql-client +RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ noble-pgdg main' > /etc/apt/sources.list.d/pgdg.list \ + && GNUPGHOME="$(mktemp -d)" \ + && export GNUPGHOME \ + && repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \ + && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \ + && gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \ + && gpgconf --kill all \ + && rm -rf "$GNUPGHOME" \ + && apt-get update \ + && apt-get install --no-install-recommends -y postgresql-client \ + && rm -f /etc/apt/sources.list.d/pgdg.list \ + && rm -rf /var/lib/apt/lists/* + +# Install rtlcss (on Debian buster) +RUN npm install -g rtlcss + +# Install Odoo +ENV ODOO_VERSION 18.0 +ARG ODOO_RELEASE=20250725 +ARG ODOO_SHA=52215335b04ab9a0991ad1af37be6e07a5b3b276 +RUN curl -o odoo.deb -sSL http://nightly.odoo.com/${ODOO_VERSION}/nightly/deb/odoo_${ODOO_VERSION}.${ODOO_RELEASE}_all.deb \ + && echo "${ODOO_SHA} odoo.deb" | sha1sum -c - \ + && apt-get update \ + && apt-get -y install --no-install-recommends ./odoo.deb \ + && rm -rf /var/lib/apt/lists/* odoo.deb + +# Copy entrypoint script and Odoo configuration file +COPY ./entrypoint.sh / +COPY ./odoo.conf /etc/odoo/ + +# Set permissions and Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for users addons +RUN chown odoo /etc/odoo/odoo.conf \ + && mkdir -p /mnt/extra-addons \ + && chown -R odoo /mnt/extra-addons +VOLUME ["/var/lib/odoo", "/mnt/extra-addons"] + +RUN mkdir -p /var/lib/odoo/OpenUpgrade +RUN pip install --break-system-packages git+https://github.com/OCA/openupgradelib.git@master#egg=openupgradelib + +VOLUME ["/var/lib/odoo", "/mnt/extra-addons", "/var/lib/odoo/OpenUpgrade"] + +# Expose Odoo services +EXPOSE 8069 8071 8072 + +# Set the default config file +ENV ODOO_RC /etc/odoo/odoo.conf + +COPY wait-for-psql.py /usr/local/bin/wait-for-psql.py + +# Set default user when running the container +USER odoo + +ENTRYPOINT ["/entrypoint.sh"] +CMD ["odoo"] diff --git a/V18-MIG/build.odoo.image.txt b/V18-MIG/build.odoo.image.txt new file mode 100644 index 0000000..d6f0081 --- /dev/null +++ b/V18-MIG/build.odoo.image.txt @@ -0,0 +1 @@ +docker build -t odoo18-augmente-20250725-image . diff --git a/V18-MIG/docker-compose.yml b/V18-MIG/docker-compose.yml new file mode 100644 index 0000000..5d15281 --- /dev/null +++ b/V18-MIG/docker-compose.yml @@ -0,0 +1,25 @@ +version: '3' + +services: + odoo-18-AugmenteForUpgrade: #Configuration du container Odoo + image: odoo18-augmente-20250725-image:latest # Nom de notre image personnalisée + restart: "no" + container_name: odoo-18-AugmenteForUpgrade + user: root + ports: + - "8569:8069" # Le port 8069 est exposé pour accéder à l'application Odoo + - "8571:8071" # Le port 8071 est exposé pour accéder à l'application Odoo + - "8572:8072" # Le port 8072 est exposé pour accéder à l'application Odoo + networks: + - moustyLocalNetwork # éseau dans lequel notre service communiquera + volumes: + - ./:/etc/odoo:z + - ./odoo-filestore:/var/lib/odoo/filestore:z + - ./custom:/mnt/extra-addons:z + - ./OpenUpgrade:/var/lib/odoo/OpenUpgrade + - ./logs:/var/log/odoo:z + +networks: + moustyLocalNetwork: + external: true + diff --git a/V18-MIG/entrypoint.sh b/V18-MIG/entrypoint.sh new file mode 100644 index 0000000..acfac90 --- /dev/null +++ b/V18-MIG/entrypoint.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +set -e + +if [ -v PASSWORD_FILE ]; then + PASSWORD="$(< $PASSWORD_FILE)" +fi + +# set the postgres database host, port, user and password according to the environment +# and pass them as arguments to the odoo process if not present in the config file +: ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}} +: ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}} +: ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}} +: ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}} + +DB_ARGS=() +function check_config() { + param="$1" + value="$2" + if grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then + value=$(grep -E "^\s*\b${param}\b\s*=" "$ODOO_RC" |cut -d " " -f3|sed 's/["\n\r]//g') + fi; + DB_ARGS+=("--${param}") + DB_ARGS+=("${value}") +} +check_config "db_host" "$HOST" +check_config "db_port" "$PORT" +check_config "db_user" "$USER" +check_config "db_password" "$PASSWORD" + +case "$1" in + -- | odoo) + shift + if [[ "$1" == "scaffold" ]] ; then + exec odoo "$@" + else + wait-for-psql.py ${DB_ARGS[@]} --timeout=30 + exec odoo \ + --upgrade-path=/var/lib/odoo/OpenUpgrade/openupgrade_scripts/scripts \ + --update=all \ + --stop-after-init \ + --load=base,web,openupgrade_framework \ + "$@" "${DB_ARGS[@]}" + fi + ;; + -*) + wait-for-psql.py ${DB_ARGS[@]} --timeout=30 + exec odoo "$@" "${DB_ARGS[@]}" + ;; + *) + exec "$@" +esac + +exit 1 diff --git a/V18-MIG/odoo.conf b/V18-MIG/odoo.conf new file mode 100644 index 0000000..be3ac8e --- /dev/null +++ b/V18-MIG/odoo.conf @@ -0,0 +1,25 @@ +[options] +addons_path = /mnt/extra-addons,/var/lib/odoo/OpenUpgrade +data_dir = /var/lib/odoo +limit_time_real = 1200 +log_handler = [':INFO'] +log_level = info +logfile = /var/log/odoo/odoo.log +proxy_mode = True +db_host = postgres-20250725-mylucdatabase +db_port = 5444 +db_name = mylucdatabase +db_user = odoo +db_password = odoo +debug_mode = True +longpolling_port = False +gevent_port = 8072 +xmlrpc_port = 8069 +xmlrpcs_port = 8071 +admin_passwd = Douthinkimtupid +upgrade_path = /var/lib/odoo/OpenUpgrade/openupgrade_scripts/scripts +limit_memory_hard = 0 +limit_memory_soft = 2147483648 +limit_request = 8192 +limit_time_cpu = 60 +limit_time_real_cron = -1 diff --git a/V18-MIG/wait-for-psql.py b/V18-MIG/wait-for-psql.py new file mode 100644 index 0000000..a55f440 --- /dev/null +++ b/V18-MIG/wait-for-psql.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +import argparse +import psycopg2 +import sys +import time + + +if __name__ == '__main__': + arg_parser = argparse.ArgumentParser() + arg_parser.add_argument('--db_host', required=True) + arg_parser.add_argument('--db_port', required=True) + arg_parser.add_argument('--db_user', required=True) + arg_parser.add_argument('--db_password', required=True) + arg_parser.add_argument('--timeout', type=int, default=5) + + args = arg_parser.parse_args() + + start_time = time.time() + while (time.time() - start_time) < args.timeout: + try: + conn = psycopg2.connect(user=args.db_user, host=args.db_host, port=args.db_port, password=args.db_password, dbname='postgres') + error = '' + break + except psycopg2.OperationalError as e: + error = e + else: + conn.close() + time.sleep(1) + + if error: + print("Database connection failure: %s" % error, file=sys.stderr) + sys.exit(1) diff --git a/V18/Dockerfile b/V18/Dockerfile new file mode 100644 index 0000000..c5824f2 --- /dev/null +++ b/V18/Dockerfile @@ -0,0 +1,104 @@ +FROM ubuntu:noble +MAINTAINER Odoo S.A. + +SHELL ["/bin/bash", "-xo", "pipefail", "-c"] + +# Generate locale C.UTF-8 for postgres and general locale data +ENV LANG en_US.UTF-8 + +# Retrieve the target architecture to install the correct wkhtmltopdf package +ARG TARGETARCH + +# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf + +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + dirmngr \ + fonts-noto-cjk \ + gnupg \ + libssl-dev \ + node-less \ + npm \ + python3-magic \ + python3-num2words \ + python3-odf \ + python3-pdfminer \ + python3-pip \ + python3-phonenumbers \ + python3-pyldap \ + python3-qrcode \ + python3-renderpm \ + python3-setuptools \ + python3-slugify \ + python3-vobject \ + python3-watchdog \ + python3-xlrd \ + python3-xlwt \ + xz-utils && \ + if [ -z "${TARGETARCH}" ]; then \ + TARGETARCH="$(dpkg --print-architecture)"; \ + fi; \ + WKHTMLTOPDF_ARCH=${TARGETARCH} && \ + case ${TARGETARCH} in \ + "amd64") WKHTMLTOPDF_ARCH=amd64 && WKHTMLTOPDF_SHA=967390a759707337b46d1c02452e2bb6b2dc6d59 ;; \ + "arm64") WKHTMLTOPDF_SHA=90f6e69896d51ef77339d3f3a20f8582bdf496cc ;; \ + "ppc64le" | "ppc64el") WKHTMLTOPDF_ARCH=ppc64el && WKHTMLTOPDF_SHA=5312d7d34a25b321282929df82e3574319aed25c ;; \ + esac \ + && curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_${WKHTMLTOPDF_ARCH}.deb \ + && echo ${WKHTMLTOPDF_SHA} wkhtmltox.deb | sha1sum -c - \ + && apt-get install -y --no-install-recommends ./wkhtmltox.deb \ + && rm -rf /var/lib/apt/lists/* wkhtmltox.deb + +# install latest postgresql-client +RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ noble-pgdg main' > /etc/apt/sources.list.d/pgdg.list \ + && GNUPGHOME="$(mktemp -d)" \ + && export GNUPGHOME \ + && repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \ + && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \ + && gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \ + && gpgconf --kill all \ + && rm -rf "$GNUPGHOME" \ + && apt-get update \ + && apt-get install --no-install-recommends -y postgresql-client \ + && rm -f /etc/apt/sources.list.d/pgdg.list \ + && rm -rf /var/lib/apt/lists/* + +# Install rtlcss (on Debian buster) +RUN npm install -g rtlcss + +# Install Odoo +ENV ODOO_VERSION 18.0 +ARG ODOO_RELEASE=20250725 +ARG ODOO_SHA=52215335b04ab9a0991ad1af37be6e07a5b3b276 +RUN curl -o odoo.deb -sSL http://nightly.odoo.com/${ODOO_VERSION}/nightly/deb/odoo_${ODOO_VERSION}.${ODOO_RELEASE}_all.deb \ + && echo "${ODOO_SHA} odoo.deb" | sha1sum -c - \ + && apt-get update \ + && apt-get -y install --no-install-recommends ./odoo.deb \ + && rm -rf /var/lib/apt/lists/* odoo.deb + +# Copy entrypoint script and Odoo configuration file +COPY ./entrypoint.sh / +COPY ./odoo.conf /etc/odoo/ + +# Set permissions and Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for users addons +RUN chown odoo /etc/odoo/odoo.conf \ + && mkdir -p /mnt/extra-addons \ + && chown -R odoo /mnt/extra-addons +VOLUME ["/var/lib/odoo", "/mnt/extra-addons"] + +# Expose Odoo services +EXPOSE 8069 8071 8072 + +# Set the default config file +ENV ODOO_RC /etc/odoo/odoo.conf + +COPY wait-for-psql.py /usr/local/bin/wait-for-psql.py + +# Set default user when running the container +USER odoo + +ENTRYPOINT ["/entrypoint.sh"] +CMD ["odoo"] diff --git a/V18/build.odoo.image.txt b/V18/build.odoo.image.txt new file mode 100644 index 0000000..3fd964e --- /dev/null +++ b/V18/build.odoo.image.txt @@ -0,0 +1 @@ +docker build -t odoo18-20250725-image . diff --git a/V18/docker-compose.yml b/V18/docker-compose.yml new file mode 100644 index 0000000..a680770 --- /dev/null +++ b/V18/docker-compose.yml @@ -0,0 +1,24 @@ +version: '3' + +services: + odoo-18-NORMAL: #Configuration du container Odoo + image: odoo18-20250725-image:latest # Nom de notre image personnalisée + restart: unless-stopped + container_name: odoo-18-mylucdatabase-migree + user: root + ports: + - "8569:8069" # Le port 8069 est exposé pour accéder à l'application Odoo + - "8571:8071" # Le port 8071 est exposé pour accéder à l'application Odoo + - "8572:8072" # Le port 8072 est exposé pour accéder à l'application Odoo + networks: + - moustyLocalNetwork # éseau dans lequel notre service communiquera + volumes: + - ./:/etc/odoo:z + - ./odoo-filestore:/var/lib/odoo/filestore:z + - ./custom:/mnt/extra-addons:z + - ./logs:/var/log/odoo:z + +networks: + moustyLocalNetwork: + external: true + diff --git a/V18/entrypoint.sh b/V18/entrypoint.sh new file mode 100644 index 0000000..f802bcb --- /dev/null +++ b/V18/entrypoint.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +set -e + +if [ -v PASSWORD_FILE ]; then + PASSWORD="$(< $PASSWORD_FILE)" +fi + +# set the postgres database host, port, user and password according to the environment +# and pass them as arguments to the odoo process if not present in the config file +: ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}} +: ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}} +: ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}} +: ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}} + +DB_ARGS=() +function check_config() { + param="$1" + value="$2" + if grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then + value=$(grep -E "^\s*\b${param}\b\s*=" "$ODOO_RC" |cut -d " " -f3|sed 's/["\n\r]//g') + fi; + DB_ARGS+=("--${param}") + DB_ARGS+=("${value}") +} +check_config "db_host" "$HOST" +check_config "db_port" "$PORT" +check_config "db_user" "$USER" +check_config "db_password" "$PASSWORD" + +case "$1" in + -- | odoo) + shift + if [[ "$1" == "scaffold" ]] ; then + exec odoo "$@" + else + wait-for-psql.py ${DB_ARGS[@]} --timeout=30 + exec odoo "$@" "${DB_ARGS[@]}" + fi + ;; + -*) + wait-for-psql.py ${DB_ARGS[@]} --timeout=30 + exec odoo "$@" "${DB_ARGS[@]}" + ;; + *) + exec "$@" +esac + +exit 1 diff --git a/V18/odoo.conf b/V18/odoo.conf new file mode 100644 index 0000000..3a7ef24 --- /dev/null +++ b/V18/odoo.conf @@ -0,0 +1,18 @@ +[options] +addons_path = /mnt/extra-addons +data_dir = /var/lib/odoo +limit_time_real = 1200 +log_handler = [':INFO'] +log_level = info +logfile = /var/log/odoo/odoo.log +proxy_mode = True +db_host = postgres-20250725-mylucdatabase +db_port = 5444 +db_user = odoo +db_password = odoo +debug_mode = True +longpolling_port = False +gevent_port = 8072 +xmlrpc_port = 8069 +xmlrpcs_port = 8071 +admin_passwd = Douthinkimtupid diff --git a/V18/wait-for-psql.py b/V18/wait-for-psql.py new file mode 100644 index 0000000..a55f440 --- /dev/null +++ b/V18/wait-for-psql.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +import argparse +import psycopg2 +import sys +import time + + +if __name__ == '__main__': + arg_parser = argparse.ArgumentParser() + arg_parser.add_argument('--db_host', required=True) + arg_parser.add_argument('--db_port', required=True) + arg_parser.add_argument('--db_user', required=True) + arg_parser.add_argument('--db_password', required=True) + arg_parser.add_argument('--timeout', type=int, default=5) + + args = arg_parser.parse_args() + + start_time = time.time() + while (time.time() - start_time) < args.timeout: + try: + conn = psycopg2.connect(user=args.db_user, host=args.db_host, port=args.db_port, password=args.db_password, dbname='postgres') + error = '' + break + except psycopg2.OperationalError as e: + error = e + else: + conn.close() + time.sleep(1) + + if error: + print("Database connection failure: %s" % error, file=sys.stderr) + sys.exit(1)