ARG PYTHON_RELEASE=3.8 FROM python:${PYTHON_RELEASE}-alpine as dist LABEL maintainer aynic.os 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