odoo/docker/odoo14/Dockerfile

169 lines
5.3 KiB
Docker

ARG PYTHON_RELEASE=3.8
FROM python:${PYTHON_RELEASE}-alpine as dist
LABEL maintainer aynic.os <support+docker@asycn.io>
ARG DOCKER_BUILD_DIR=.
ARG ODOO_REMOTE=https://github.com/odoo/odoo
ARG ODOO_VERSION=14.0
ARG PYTHON_RELEASE=3.8
RUN apk add --no-cache --virtual .build-deps \
g++ \
git \
jpeg-dev \
libev-dev \
libffi-dev \
libpq-dev \
libxml2-dev \
libxslt-dev \
make \
musl-dev \
openldap-dev \
&& ln -s /usr/lib/libldap.so /usr/lib/libldap_r.so \
&& /usr/local/bin/python${PYTHON_RELEASE} -m venv /opt/odoo \
&& /opt/odoo/bin/pip${PYTHON_RELEASE} install -U pip wheel \
&& wget -qO - ${ODOO_REMOTE}/archive/refs/heads/${ODOO_VERSION}.tar.gz |tar --strip-components 1 -C /opt/odoo -xzf - \
&& /opt/odoo/bin/pip${PYTHON_RELEASE} install -r /opt/odoo/requirements.txt /opt/odoo \
&& rm -rf /root/.cache /opt/odoo/build /opt/odoo/odoo \
&& apk del --no-network .build-deps \
&& find /opt/odoo/lib -type f -executable \
-exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \
| tr ',' '\n' \
| sort -u \
| awk 'system("[ -e /lib/"$1" -o -e /usr/lib/"$1" -o -e /opt/odoo/lib/python'"${PYTHON_RELEASE}"'/site-packages/*/"$1" ]") == 0 { next } { print "so:" $1 }' \
| xargs -rt apk add --no-cache
RUN wget -qO /usr/local/bin/wkhtmltopdf https://raw.githubusercontent.com/acsone/kwkhtmltopdf/master/client/python/kwkhtmltopdf_client.py \
&& chmod +x /usr/local/bin/wkhtmltopdf
RUN apk add --repository https://dl-cdn.alpinelinux.org/alpine/edge/testing \
envsubst \
gosu \
&& apk add --no-cache \
bash \
expect \
postgresql-client
COPY ${DOCKER_BUILD_DIR}/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
RUN mkdir -p /data/odoo /opt/odoo/etc
ENV \
ADDONS_PATH=/opt/odoo/lib/python${PYTHON_RELEASE}/site-packages/odoo/addons,/opt/odoo/addons \
ADMIN_PASSWD=admin \
AUTO_RELOAD=False \
CSV_INTERNAL_SEP=, \
DATA_DIR=/data/odoo \
DBFILTER=^.*$ \
DB_HOST=db \
DB_MAXCONN=64 \
DB_NAME=odoo14 \
DB_PASSWORD=odoo \
DB_PORT=5432 \
DB_SSLMODE=prefer \
DB_TEMPLATE=template1 \
DB_USER=odoo \
DEBUG_MODE=False \
EMAIL_FROM=False \
HTTP_PORT=8069 \
HTTP_ENABLE=True \
KWKHTMLTOPDF_SERVER_URL=http://kwkhtmltopdf \
LANG=C.UTF-8 \
LC_ALL=C.UTF-8 \
LIMIT_MEMORY_HARD=1395864371 \
LIMIT_MEMORY_SOFT=255652815 \
LIMIT_REQUEST=8192 \
LIMIT_TIME_CPU=60 \
LIMIT_TIME_REAL=120 \
LIMIT_TIME_REAL_CRON=120 \
LIST_DB=False \
LOGFILE=/dev/stdout \
LOGROTATE=False \
LOG_DB=False \
LOG_HANDLER=:INFO \
LOG_LEVEL=info \
LONGPOLLING_PORT=8072 \
MAX_CRON_THREADS=1 \
ODOO_RC=/opt/odoo/etc/odoo.conf \
OSV_MEMORY_AGE_LIMIT=False \
OSV_MEMORY_COUNT_LIMIT=False \
PATH=/opt/odoo/bin:$PATH \
PROXY_MODE=True \
RUNNING_ENV=dev \
SERVER_WIDE_MODULES=base,web \
SMTP_PASSWORD=False \
SMTP_PORT=25 \
SMTP_SERVER=False \
SMTP_SSL=False \
SMTP_USER=False \
SYSLOG=False \
TRANSIENT_AGE_LIMIT=1.0 \
UNACCENT=False \
WITHOUT_DEMO=True \
WORKERS=0 \
XMLRPC=True \
XMLRPC_PORT=8069 \
XMLRPCS=True \
XMLRPCS_PORT=8071
COPY odoo.conf.tpl /opt/odoo/etc/
VOLUME ["/data/odoo"]
WORKDIR /opt/odoo
EXPOSE 8069 8070 8071 8072
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["odoo"]
FROM dist as master
ARG PYTHON_RELEASE=3.8
ARG UID
ARG USER
ENV UID=${UID:-999}
ENV GID=${UID}
ENV USER=odoo
# If we provide a specific UID
RUN let $UID >/dev/null 2>&1 \
# Remove user with $UID if it is not our $USER
&& if [ "$(getent passwd $UID |awk 'BEGIN {FS=":"} {print $1}')" != "$USER" ]; then \
sed -i '/^'$(getent passwd $UID |awk 'BEGIN {FS=":"} {print $1}')':x:'$UID':/d' /etc/passwd; \
sed -i '/^'$(getent group $GID |awk 'BEGIN {FS=":"} {print $1}')':x:'$GID':/d' /etc/group; \
fi \
# Force $UID if our $USER already exists
&& sed -i 's/^'$USER':x:[0-9]\+:[0-9]\+:/'$USER':x:'$UID':'$GID':/' /etc/passwd \
&& sed -i 's/^'$USER':x:[0-9]\+:/'$USER':x:'$GID':/' /etc/group \
# Create $USER if it does not exist
&& if [ "$(getent passwd $UID)" = "" ]; then \
echo "$USER:x:$UID:$GID::/home/$USER:/bin/false" >> /etc/passwd; \
echo "$USER:!:$(($(date +%s) / 60 / 60 / 24)):0:99999:7:::" >> /etc/shadow; \
echo "$USER:x:$GID:" >> /etc/group; \
fi \
&& mkdir -p /home/$USER \
&& chown $UID:$GID /home/$USER \
|| true
COPY extra-requirements.txt /opt/odoo/
RUN apk add --no-cache --virtual .build-deps \
g++ \
git \
libffi-dev \
make \
&& /opt/odoo/bin/pip${PYTHON_RELEASE} install -r /opt/odoo/extra-requirements.txt \
&& rm -rf /root/.cache \
&& apk del --no-network .build-deps \
&& find /opt/odoo/lib -type f -executable \
-exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \
| tr ',' '\n' \
| sort -u \
| awk 'system("[ -e /lib/"$1" -o -e /usr/lib/"$1" -o -e /opt/odoo/lib/python'"${PYTHON_RELEASE}"'/site-packages/*/"$1" ]") == 0 { next } { print "so:" $1 }' \
| xargs -rt apk add --no-cache
COPY --chown=${USER} *.yml /opt/odoo/
COPY --chown=${USER} bin/ /opt/odoo/bin/
COPY --chown=${USER} csv/ /opt/odoo/csv/
COPY --chown=${USER} entrypoint.d/ /opt/odoo/entrypoint.d/
COPY --chown=${USER} extra-addons/ /opt/odoo/extra-addons/
ENV ADDONS_PATH=${ADDONS_PATH},/opt/odoo/extra-addons