Skip to content

Commit ad549a7

Browse files
committed
[ADD] Odoo: 16.0
1 parent bb1557d commit ad549a7

File tree

4 files changed

+206
-0
lines changed

4 files changed

+206
-0
lines changed

16.0/Dockerfile

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
FROM debian:bullseye-slim
2+
MAINTAINER Odoo S.A. <[email protected]>
3+
4+
SHELL ["/bin/bash", "-xo", "pipefail", "-c"]
5+
6+
# Generate locale C.UTF-8 for postgres and general locale data
7+
ENV LANG C.UTF-8
8+
9+
# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf
10+
RUN apt-get update && \
11+
apt-get install -y --no-install-recommends \
12+
ca-certificates \
13+
curl \
14+
dirmngr \
15+
fonts-noto-cjk \
16+
gnupg \
17+
libssl-dev \
18+
node-less \
19+
npm \
20+
python3-num2words \
21+
python3-pdfminer \
22+
python3-pip \
23+
python3-phonenumbers \
24+
python3-pyldap \
25+
python3-qrcode \
26+
python3-renderpm \
27+
python3-setuptools \
28+
python3-slugify \
29+
python3-vobject \
30+
python3-watchdog \
31+
python3-xlrd \
32+
python3-xlwt \
33+
xz-utils \
34+
&& curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.buster_amd64.deb \
35+
&& echo 'ea8277df4297afc507c61122f3c349af142f31e5 wkhtmltox.deb' | sha1sum -c - \
36+
&& apt-get install -y --no-install-recommends ./wkhtmltox.deb \
37+
&& rm -rf /var/lib/apt/lists/* wkhtmltox.deb
38+
39+
# install latest postgresql-client
40+
RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main' > /etc/apt/sources.list.d/pgdg.list \
41+
&& GNUPGHOME="$(mktemp -d)" \
42+
&& export GNUPGHOME \
43+
&& repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \
44+
&& gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \
45+
&& gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \
46+
&& gpgconf --kill all \
47+
&& rm -rf "$GNUPGHOME" \
48+
&& apt-get update \
49+
&& apt-get install --no-install-recommends -y postgresql-client \
50+
&& rm -f /etc/apt/sources.list.d/pgdg.list \
51+
&& rm -rf /var/lib/apt/lists/*
52+
53+
# Install rtlcss (on Debian buster)
54+
RUN npm install -g rtlcss
55+
56+
# Install Odoo
57+
ENV ODOO_VERSION 16.0
58+
ARG ODOO_RELEASE=20221012
59+
ARG ODOO_SHA=f34bc089609c2a7da65f25f29cf4e0218c7af464
60+
RUN curl -o odoo.deb -sSL http://nightly.odoo.com/${ODOO_VERSION}/nightly/deb/odoo_${ODOO_VERSION}.${ODOO_RELEASE}_all.deb \
61+
&& echo "${ODOO_SHA} odoo.deb" | sha1sum -c - \
62+
&& apt-get update \
63+
&& apt-get -y install --no-install-recommends ./odoo.deb \
64+
&& rm -rf /var/lib/apt/lists/* odoo.deb
65+
66+
# Copy entrypoint script and Odoo configuration file
67+
COPY ./entrypoint.sh /
68+
COPY ./odoo.conf /etc/odoo/
69+
70+
# Set permissions and Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for users addons
71+
RUN chown odoo /etc/odoo/odoo.conf \
72+
&& mkdir -p /mnt/extra-addons \
73+
&& chown -R odoo /mnt/extra-addons
74+
VOLUME ["/var/lib/odoo", "/mnt/extra-addons"]
75+
76+
# Expose Odoo services
77+
EXPOSE 8069 8071 8072
78+
79+
# Set the default config file
80+
ENV ODOO_RC /etc/odoo/odoo.conf
81+
82+
COPY wait-for-psql.py /usr/local/bin/wait-for-psql.py
83+
84+
# Set default user when running the container
85+
USER odoo
86+
87+
ENTRYPOINT ["/entrypoint.sh"]
88+
CMD ["odoo"]

16.0/entrypoint.sh

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
if [ -v PASSWORD_FILE ]; then
6+
PASSWORD="$(< $PASSWORD_FILE)"
7+
fi
8+
9+
# set the postgres database host, port, user and password according to the environment
10+
# and pass them as arguments to the odoo process if not present in the config file
11+
: ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}}
12+
: ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}}
13+
: ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}}
14+
: ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}}
15+
16+
DB_ARGS=()
17+
function check_config() {
18+
param="$1"
19+
value="$2"
20+
if grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then
21+
value=$(grep -E "^\s*\b${param}\b\s*=" "$ODOO_RC" |cut -d " " -f3|sed 's/["\n\r]//g')
22+
fi;
23+
DB_ARGS+=("--${param}")
24+
DB_ARGS+=("${value}")
25+
}
26+
check_config "db_host" "$HOST"
27+
check_config "db_port" "$PORT"
28+
check_config "db_user" "$USER"
29+
check_config "db_password" "$PASSWORD"
30+
31+
case "$1" in
32+
-- | odoo)
33+
shift
34+
if [[ "$1" == "scaffold" ]] ; then
35+
exec odoo "$@"
36+
else
37+
wait-for-psql.py ${DB_ARGS[@]} --timeout=30
38+
exec odoo "$@" "${DB_ARGS[@]}"
39+
fi
40+
;;
41+
-*)
42+
wait-for-psql.py ${DB_ARGS[@]} --timeout=30
43+
exec odoo "$@" "${DB_ARGS[@]}"
44+
;;
45+
*)
46+
exec "$@"
47+
esac
48+
49+
exit 1

16.0/odoo.conf

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
[options]
2+
addons_path = /mnt/extra-addons
3+
data_dir = /var/lib/odoo
4+
; admin_passwd = admin
5+
; csv_internal_sep = ,
6+
; db_maxconn = 64
7+
; db_name = False
8+
; db_template = template1
9+
; dbfilter = .*
10+
; debug_mode = False
11+
; email_from = False
12+
; limit_memory_hard = 2684354560
13+
; limit_memory_soft = 2147483648
14+
; limit_request = 8192
15+
; limit_time_cpu = 60
16+
; limit_time_real = 120
17+
; list_db = True
18+
; log_db = False
19+
; log_handler = [':INFO']
20+
; log_level = info
21+
; logfile = None
22+
; longpolling_port = 8072
23+
; max_cron_threads = 2
24+
; osv_memory_age_limit = 1.0
25+
; osv_memory_count_limit = False
26+
; smtp_password = False
27+
; smtp_port = 25
28+
; smtp_server = localhost
29+
; smtp_ssl = False
30+
; smtp_user = False
31+
; workers = 0
32+
; xmlrpc = True
33+
; xmlrpc_interface =
34+
; xmlrpc_port = 8069
35+
; xmlrpcs = True
36+
; xmlrpcs_interface =
37+
; xmlrpcs_port = 8071

16.0/wait-for-psql.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/usr/bin/env python3
2+
import argparse
3+
import psycopg2
4+
import sys
5+
import time
6+
7+
8+
if __name__ == '__main__':
9+
arg_parser = argparse.ArgumentParser()
10+
arg_parser.add_argument('--db_host', required=True)
11+
arg_parser.add_argument('--db_port', required=True)
12+
arg_parser.add_argument('--db_user', required=True)
13+
arg_parser.add_argument('--db_password', required=True)
14+
arg_parser.add_argument('--timeout', type=int, default=5)
15+
16+
args = arg_parser.parse_args()
17+
18+
start_time = time.time()
19+
while (time.time() - start_time) < args.timeout:
20+
try:
21+
conn = psycopg2.connect(user=args.db_user, host=args.db_host, port=args.db_port, password=args.db_password, dbname='postgres')
22+
error = ''
23+
break
24+
except psycopg2.OperationalError as e:
25+
error = e
26+
else:
27+
conn.close()
28+
time.sleep(1)
29+
30+
if error:
31+
print("Database connection failure: %s" % error, file=sys.stderr)
32+
sys.exit(1)

0 commit comments

Comments
 (0)