diff --git a/10.0/Dockerfile b/10.0/Dockerfile deleted file mode 100644 index f334fe586..000000000 --- a/10.0/Dockerfile +++ /dev/null @@ -1,72 +0,0 @@ -FROM debian:jessie -LABEL maintainer="Odoo S.A. " - -# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf -RUN set -x; \ - apt-get update \ - && apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - dirmngr \ - node-less \ - python-gevent \ - python-ldap \ - python-pip \ - python-qrcode \ - python-renderpm \ - python-support \ - python-vobject \ - python-watchdog \ - && curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.jessie_amd64.deb \ - && echo '4d104ff338dc2d2083457b3b1e9baab8ddf14202 wkhtmltox.deb' | sha1sum -c - \ - && dpkg --force-depends -i wkhtmltox.deb \ - && apt-get -y install -f --no-install-recommends \ - && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false -o APT::AutoRemove::SuggestsImportant=false npm \ - && rm -rf /var/lib/apt/lists/* wkhtmltox.deb \ - && pip install psycogreen==1.0 - -# install latest postgresql-client -RUN set -x; \ - echo 'deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main' > etc/apt/sources.list.d/pgdg.list \ - && export GNUPGHOME="$(mktemp -d)" \ - && repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \ - && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \ - && gpg --armor --export "${repokey}" | apt-key add - \ - && rm -rf "$GNUPGHOME" \ - && apt-get update \ - && apt-get install -y postgresql-client \ - && rm -rf /var/lib/apt/lists/* - -# Install Odoo -ENV ODOO_VERSION 10.0 -ARG ODOO_RELEASE=20190816 -ARG ODOO_SHA=397cb4d458cb292edb0432dc8d39a466dce56b65 -RUN set -x; \ - 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 - \ - && dpkg --force-depends -i odoo.deb \ - && apt-get update \ - && apt-get -y install -f --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* odoo.deb - -# Copy entrypoint script and Odoo configuration file -COPY ./entrypoint.sh / -COPY ./odoo.conf /etc/odoo/ -RUN chown odoo /etc/odoo/odoo.conf - -# Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for users addons -RUN mkdir -p /mnt/extra-addons \ - && chown -R odoo /mnt/extra-addons -VOLUME ["/var/lib/odoo", "/mnt/extra-addons"] - -# Expose Odoo services -EXPOSE 8069 8071 - -# Set the default config file -ENV ODOO_RC /etc/odoo/odoo.conf - -# Set default user when running the container -USER odoo - -ENTRYPOINT ["/entrypoint.sh"] -CMD ["odoo"] diff --git a/11.0/Dockerfile b/11.0/Dockerfile deleted file mode 100644 index 4f6b9307a..000000000 --- a/11.0/Dockerfile +++ /dev/null @@ -1,78 +0,0 @@ -FROM debian:stretch -LABEL maintainer="Odoo S.A. " - -# Generate locale C.UTF-8 for postgres and general locale data -ENV LANG C.UTF-8 - -# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf -RUN set -x; \ - apt-get update \ - && apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - dirmngr \ - fonts-noto-cjk \ - gnupg \ - libssl1.0-dev \ - node-less \ - python3-pip \ - python3-pyldap \ - python3-qrcode \ - python3-renderpm \ - python3-setuptools \ - python3-vobject \ - python3-watchdog \ - xz-utils \ - && curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb \ - && echo '7e35a63f9db14f93ec7feeb0fce76b30c08f2057 wkhtmltox.deb' | sha1sum -c - \ - && dpkg --force-depends -i wkhtmltox.deb\ - && apt-get -y install -f --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* wkhtmltox.deb - -# install latest postgresql-client -RUN set -x; \ - echo 'deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main' > etc/apt/sources.list.d/pgdg.list \ - && export GNUPGHOME="$(mktemp -d)" \ - && repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \ - && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \ - && gpg --armor --export "${repokey}" | apt-key add - \ - && gpgconf --kill all \ - && rm -rf "$GNUPGHOME" \ - && apt-get update \ - && apt-get install -y postgresql-client \ - && rm -rf /var/lib/apt/lists/* - -# Install Odoo -ENV ODOO_VERSION 11.0 -ARG ODOO_RELEASE=20190816 -ARG ODOO_SHA=948e097925bfbba8ffd9682c2d0555dc9b539c0a -RUN set -x; \ - 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 - \ - && dpkg --force-depends -i odoo.deb \ - && apt-get update \ - && apt-get -y install -f --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* odoo.deb - -# Copy entrypoint script and Odoo configuration file -RUN pip3 install num2words xlwt -COPY ./entrypoint.sh / -COPY ./odoo.conf /etc/odoo/ -RUN chown odoo /etc/odoo/odoo.conf - -# Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for users addons -RUN mkdir -p /mnt/extra-addons \ - && chown -R odoo /mnt/extra-addons -VOLUME ["/var/lib/odoo", "/mnt/extra-addons"] - -# Expose Odoo services -EXPOSE 8069 8071 - -# Set the default config file -ENV ODOO_RC /etc/odoo/odoo.conf - -# Set default user when running the container -USER odoo - -ENTRYPOINT ["/entrypoint.sh"] -CMD ["odoo"] diff --git a/12.0/Dockerfile b/12.0/Dockerfile deleted file mode 100644 index a983e422b..000000000 --- a/12.0/Dockerfile +++ /dev/null @@ -1,92 +0,0 @@ -FROM debian:stretch -LABEL maintainer="Odoo S.A. " - -# Generate locale C.UTF-8 for postgres and general locale data -ENV LANG C.UTF-8 - -# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf -RUN set -x; \ - apt-get update \ - && apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - dirmngr \ - fonts-noto-cjk \ - gnupg \ - libssl1.0-dev \ - node-less \ - python3-pip \ - python3-pyldap \ - python3-qrcode \ - python3-renderpm \ - python3-setuptools \ - python3-vobject \ - python3-watchdog \ - xz-utils \ - && curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb \ - && echo '7e35a63f9db14f93ec7feeb0fce76b30c08f2057 wkhtmltox.deb' | sha1sum -c - \ - && dpkg --force-depends -i wkhtmltox.deb\ - && apt-get -y install -f --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* wkhtmltox.deb - -# install latest postgresql-client -RUN set -x; \ - echo 'deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main' > etc/apt/sources.list.d/pgdg.list \ - && export GNUPGHOME="$(mktemp -d)" \ - && repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \ - && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \ - && gpg --armor --export "${repokey}" | apt-key add - \ - && gpgconf --kill all \ - && rm -rf "$GNUPGHOME" \ - && apt-get update \ - && apt-get install -y postgresql-client \ - && rm -rf /var/lib/apt/lists/* - -# Install rtlcss (on Debian stretch) -RUN set -x;\ - echo "deb http://deb.nodesource.com/node_8.x stretch main" > /etc/apt/sources.list.d/nodesource.list \ - && export GNUPGHOME="$(mktemp -d)" \ - && repokey='9FD3B784BC1C6FC31A8A0A1C1655A0AB68576280' \ - && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \ - && gpg --armor --export "${repokey}" | apt-key add - \ - && gpgconf --kill all \ - && rm -rf "$GNUPGHOME" \ - && apt-get update \ - && apt-get install -y nodejs \ - && npm install -g rtlcss \ - && rm -rf /var/lib/apt/lists/* - -# Install Odoo -ENV ODOO_VERSION 12.0 -ARG ODOO_RELEASE=20190816 -ARG ODOO_SHA=e95cdfe23d16a8572b63bc8d8e8616be5bc18a0a -RUN set -x; \ - 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 - \ - && dpkg --force-depends -i odoo.deb \ - && apt-get update \ - && apt-get -y install -f --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* odoo.deb - -# Copy entrypoint script and Odoo configuration file -RUN pip3 install num2words xlwt -COPY ./entrypoint.sh / -COPY ./odoo.conf /etc/odoo/ -RUN chown odoo /etc/odoo/odoo.conf - -# Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for users addons -RUN mkdir -p /mnt/extra-addons \ - && chown -R odoo /mnt/extra-addons -VOLUME ["/var/lib/odoo", "/mnt/extra-addons"] - -# Expose Odoo services -EXPOSE 8069 8071 - -# Set the default config file -ENV ODOO_RC /etc/odoo/odoo.conf - -# Set default user when running the container -USER odoo - -ENTRYPOINT ["/entrypoint.sh"] -CMD ["odoo"] diff --git a/17.0/Dockerfile b/17.0/Dockerfile new file mode 100644 index 000000000..99b14d81d --- /dev/null +++ b/17.0/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=20260119 +ARG ODOO_SHA=d05da0fdc75fc57ccae2dd5b797183afb0be0ea8 +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/12.0/entrypoint.sh b/17.0/entrypoint.sh similarity index 69% rename from 12.0/entrypoint.sh rename to 17.0/entrypoint.sh index 4f0ef5993..f802bcb25 100755 --- a/12.0/entrypoint.sh +++ b/17.0/entrypoint.sh @@ -2,6 +2,10 @@ 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'}} @@ -13,10 +17,11 @@ DB_ARGS=() function check_config() { param="$1" value="$2" - if ! grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then - DB_ARGS+=("--${param}") - DB_ARGS+=("${value}") - fi; + 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" @@ -29,10 +34,12 @@ case "$1" in 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[@]}" ;; *) diff --git a/11.0/odoo.conf b/17.0/odoo.conf similarity index 100% rename from 11.0/odoo.conf rename to 17.0/odoo.conf diff --git a/17.0/wait-for-psql.py b/17.0/wait-for-psql.py new file mode 100755 index 000000000..a55f44098 --- /dev/null +++ b/17.0/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/18.0/Dockerfile b/18.0/Dockerfile new file mode 100644 index 000000000..26d248976 --- /dev/null +++ b/18.0/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=20260119 +ARG ODOO_SHA=798dfc952eed08e0d976364c26dc47a45535be70 +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/10.0/entrypoint.sh b/18.0/entrypoint.sh similarity index 69% rename from 10.0/entrypoint.sh rename to 18.0/entrypoint.sh index 4f0ef5993..f802bcb25 100755 --- a/10.0/entrypoint.sh +++ b/18.0/entrypoint.sh @@ -2,6 +2,10 @@ 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'}} @@ -13,10 +17,11 @@ DB_ARGS=() function check_config() { param="$1" value="$2" - if ! grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then - DB_ARGS+=("--${param}") - DB_ARGS+=("${value}") - fi; + 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" @@ -29,10 +34,12 @@ case "$1" in 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[@]}" ;; *) diff --git a/12.0/odoo.conf b/18.0/odoo.conf similarity index 100% rename from 12.0/odoo.conf rename to 18.0/odoo.conf diff --git a/18.0/wait-for-psql.py b/18.0/wait-for-psql.py new file mode 100755 index 000000000..a55f44098 --- /dev/null +++ b/18.0/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/19.0/Dockerfile b/19.0/Dockerfile new file mode 100644 index 000000000..4d280d6f3 --- /dev/null +++ b/19.0/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 19.0 +ARG ODOO_RELEASE=20260118 +ARG ODOO_SHA=9cb5691e31d2d8831887e85cc07268016f522f4d +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/11.0/entrypoint.sh b/19.0/entrypoint.sh similarity index 69% rename from 11.0/entrypoint.sh rename to 19.0/entrypoint.sh index 4f0ef5993..f802bcb25 100755 --- a/11.0/entrypoint.sh +++ b/19.0/entrypoint.sh @@ -2,6 +2,10 @@ 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'}} @@ -13,10 +17,11 @@ DB_ARGS=() function check_config() { param="$1" value="$2" - if ! grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then - DB_ARGS+=("--${param}") - DB_ARGS+=("${value}") - fi; + 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" @@ -29,10 +34,12 @@ case "$1" in 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[@]}" ;; *) diff --git a/10.0/odoo.conf b/19.0/odoo.conf similarity index 91% rename from 10.0/odoo.conf rename to 19.0/odoo.conf index c3769ceb0..28f70c105 100644 --- a/10.0/odoo.conf +++ b/19.0/odoo.conf @@ -1,5 +1,5 @@ [options] -addons_path = /mnt/extra-addons,/usr/lib/python2.7/dist-packages/odoo/addons +addons_path = /mnt/extra-addons data_dir = /var/lib/odoo ; admin_passwd = admin ; csv_internal_sep = , diff --git a/19.0/wait-for-psql.py b/19.0/wait-for-psql.py new file mode 100755 index 000000000..a55f44098 --- /dev/null +++ b/19.0/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)