Files
Odoo-Build/image/Dockerfile
T
2025-01-16 21:24:11 +01:00

148 lines
4.6 KiB
Docker

# Based on https://github.com/odoo/docker/blob/master/18.0/Dockerfile
FROM debian:bookworm-slim
LABEL org.opencontainers.image.source="https://github.com/mint-system/odoo-build"
LABEL org.opencontainers.image.authors="Mint System GmbH <info@mint-system.ch>"
SHELL ["/bin/bash", "-xo", "pipefail", "-c"]
# Generate locale C.UTF-8 for postgres and general locale data
ENV LANG=C.UTF-8
# Retrieve the target architecture to install the correct wkhtmltopdf package
ARG TARGETARCH
# Retrieve the Odoo version
ARG ODOO_VERSION
ARG ODOO_DATE
# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
dirmngr \
fonts-noto-cjk \
gnupg \
libssl-dev \
node-less \
npm \
python3-magic \
python3-odf \
python3-pdfminer \
python3-renderpm \
python3-slugify \
python3-watchdog \
xz-utils \
# Custom packages:
git \
openssh-client \
gettext \
build-essential \
python3-dev \
libpq-dev \
libldap2-dev \
libsasl2-dev \
gcc \
fonts-lato && \
if [ -z "${TARGETARCH}" ]; then \
TARGETARCH="$(dpkg --print-architecture)"; \
fi; \
WKHTMLTOPDF_ARCH=${TARGETARCH} && \
case ${TARGETARCH} in \
"amd64") WKHTMLTOPDF_ARCH=amd64 && WKHTMLTOPDF_SHA=e9f95436298c77cc9406bd4bbd242f4771d0a4b2 ;; \
"arm64") WKHTMLTOPDF_SHA=77bc06be5e543510140e6728e11b7c22504080d4 ;; \
"ppc64le" | "ppc64el") WKHTMLTOPDF_ARCH=ppc64el && WKHTMLTOPDF_SHA=7ed8f6dcedf5345a3dd4eeb58dc89704d862f9cd ;; \
esac \
&& curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bookworm_${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
# wcurl https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bookworm_arm64.deb
# sha1sum wkhtmltox_0.12.6.1-3.bookworm_arm64.deb
# Install latest postgresql-client
RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ bookworm-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 uv https://docs.astral.sh/uv/guides/integration/docker/
COPY --from=ghcr.io/astral-sh/uv:0.5.16 /uv /uvx /bin/
# Prepare virtual env
RUN uv venv /opt/odoo-venv
ENV PATH=/opt/odoo-venv/bin:$PATH
# Install Odoo tools
COPY ./image/requirements.txt /opt/odoo-venv/
RUN uv pip install --no-cache-dir -r /opt/odoo-venv/requirements.txt
# Install Odoo
COPY ./odoo /opt/odoo
RUN uv pip install pip
RUN pip install --no-cache-dir -e /opt/odoo -r /opt/odoo/requirements.txt
ENV ADDONS_PATH=/opt/odoo/addons
# Set release serial
RUN sed -i "s/FINAL, 0, '')/FINAL, 0, '.$ODOO_DATE')/" /opt/odoo/odoo/release.py
# Set env vars
ENV ODOO_VERSION=$ODOO_VERSION
# Copy entrypoint scripts and Odoo configuration file
COPY ./image/scripts/* /usr/local/bin/
COPY ./image/entrypoint.sh /
COPY ./image/odoo.conf.template /etc/odoo/
# Create odoo user
ARG UID=102
ARG GID=102
RUN groupadd --gid $GID odoo
RUN useradd --uid $UID --gid $GID -m odoo
# Set the working directory
WORKDIR /opt/odoo
# Grant access and ownership to odoo for:
# Config: /etc/odoo
# Data: /var/lib/odoo
# Python: /opt/odoo-venv
# Addons: /mnt/extra-addons
RUN chown -R odoo:odoo /etc/odoo \
&& mkdir -p /var/lib/odoo \
&& chown -R odoo:odoo /var/lib/odoo\
&& chown -R odoo:odoo /opt/odoo-venv \
&& mkdir -p /mnt/extra-addons \
&& chown -R odoo:odoo /mnt/extra-addons
# Define volumes
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 ./image/wait-for-psql.py /usr/local/bin/
# Set default user when running the container
USER odoo
ENTRYPOINT ["/entrypoint.sh"]
CMD ["odoo"]