169 lines
5.3 KiB
Docker
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:8080 \
|
|
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
|