Initial commit

- odoo dockerfile
- myos makefile
- librezo odoo addon
This commit is contained in:
Yann Autissier 2022-03-07 04:02:24 +01:00
commit 453cae1724
21 changed files with 549 additions and 0 deletions

20
.env.dist Normal file
View File

@ -0,0 +1,20 @@
APP=odoo
APP_DOMAIN=${ENV}.${DOMAIN}
APP_HOST=${APP}.${APP_DOMAIN}
APP_PATH=${ENV_SUFFIX}
APP_SCHEME=http
APP_URI=${APP_HOST}/${APP_PATH}
APP_URL=${APP_SCHEME}://${APP_URI}
DOCKER=false
ENV=dist
ODOO14_ADDITIONAL_ODOO_RC=encryption_key=${APP_DOMAIN}
ODOO14_ADMIN_PASSWD=admin
ODOO14_DB_HOST=postgres
ODOO14_DB_NAME=odoo14
ODOO14_DB_PASSWORD=odoo
ODOO14_DB_USER=odoo
ODOO14_ODOO_BASE_URL=${APP_URL}
ODOO14_ODOO_REPORT_URL=${APP_URL}
ODOO14_SERVER_WIDE_MODULES=web
ODOO14_SERVICE_8069_TAGS=urlprefix-${APP_URI}
ODOO14_SERVICE_8072_TAGS=urlprefix-${APP_URI}longpolling/

1
.env.local Normal file
View File

@ -0,0 +1 @@
ENV=local

9
.env.prod Normal file
View File

@ -0,0 +1,9 @@
APP_DOMAIN=${DOMAIN}
ENV=prod
MARABUNTA_ALLOW_SERIE=False
MARABUNTA_MODE=full
ODOO14_LOG_HANDLER=:WARN
ODOO14_LOG_LEVEL=warn
ODOO14_MAX_CRON_THREADS=2
ODOO14_RUNNING_ENV=prod
ODOO14_WORKERS=16

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.env

6
Makefile Normal file
View File

@ -0,0 +1,6 @@
MYOS ?= ../myos
$(MYOS):
git clone https://git.p2p.legal/aya/myos $(MYOS)
-include $(MYOS)/make/include.mk

View File

@ -0,0 +1,7 @@
version: "3.6"
services:
odoo14:
ports:
- 8169:8069
- 8172:8072

View File

@ -0,0 +1,23 @@
version: "3.6"
services:
db:
environment:
- POSTGRES_USER=odoo
- POSTGRES_DB=odoo14
image: quay.io/akretion/postgresql:10
networks:
private:
volumes:
- db:/var/lib/postgresql/data
ports:
- 5432
restart: always
networks:
private:
external: true
name: ${DOCKER_NETWORK_PRIVATE}
volumes:
db:

View File

@ -0,0 +1,6 @@
version: "3.6"
services:
odoo14:
ports:
- 9999:9999

View File

@ -0,0 +1,14 @@
version: "3.6"
services:
odoo14:
environment:
ADDITIONAL_ODOO_RC: |-
encryption_key=local.localhost
[ir.config_parameter]
report.url=http://odoo.local.localhost
web.base.url=http://odoo.local.localhost
depends_on:
- kwkhtmltopdf
kwkhtmltopdf:
image: acsone/kwkhtmltopdf

View File

@ -0,0 +1,16 @@
version: "3.6"
services:
mail:
image: sj26/mailcatcher:latest
networks:
- private
ports:
- 1025
- 1080:1080
restart: always
networks:
private:
external: true
name: ${DOCKER_NETWORK_PRIVATE}

View File

@ -0,0 +1,16 @@
version: "3.6"
networks:
public:
external: true
name: ${DOCKER_NETWORK_PUBLIC}
services:
odoo14:
labels:
- SERVICE_8069_NAME=${COMPOSE_SERVICE_NAME}-odoo14-8069
- SERVICE_8069_CHECK_TCP=true
- SERVICE_8069_CHECK_INITITAL_STATUS=passing
- SERVICE_8069_TAGS=${ODOO14_SERVICE_8069_TAGS}
networks:
public:

51
docker/docker-compose.yml Normal file
View File

@ -0,0 +1,51 @@
version: "3.6"
networks:
private:
external: true
name: ${DOCKER_NETWORK_PRIVATE}
services:
odoo14:
tty: true
stdin_open: true
build:
args:
- DOCKER_BUILD_DIR=docker/odoo14
- TARGET=${DOCKER_BUILD_TARGET}
context: ..
dockerfile: docker/odoo14/Dockerfile
target: ${DOCKER_BUILD_TARGET}
environment:
- ADDITIONAL_ODOO_RC=${ODOO14_ADDITIONAL_ODOO_RC}
- ADDONS_PATH=${ODOO14_ADDONS_PATH:-\$ADDONS_PATH}
- ADMIN_PASSWD=${ODOO14_ADMIN_PASSWD}
- DB_HOST=${ODOO14_DB_HOST}
- DB_NAME=${ODOO14_DB_NAME}
- DB_PASSWORD=${ODOO14_DB_PASSWORD}
- DB_USER=${ODOO14_DB_USER}
- LOG_DB=${ODOO14_LOG_DB:-False}
- LOG_HANDLER=${ODOO14_LOG_HANDLER:-:INFO}
- LOG_LEVEL=${ODOO14_LOG_LEVEL:-info}
- MARABUNTA_ALLOW_SERIE=${ODOO14_MARABUNTA_ALLOW_SERIE:-True}
- MARABUNTA_FORCE_VERSION=${ODOO14_MARABUNTA_FORCE_VERSION}
- MARABUNTA_MODE=${ODOO14_MARABUNTA_MODE:-demo}
- MAX_CRON_THREADS=${ODOO14_MAX_CRON_THREADS}
- ODOO_BASE_URL=${ODOO14_ODOO_BASE_URL}
- ODOO_QUEUE_JOB_CHANNELS=${ODOO14_ODOO_QUEUE_JOB_CHANNELS}
- ODOO_REPORT_URL=${ODOO14_ODOO_REPORT_URL}
- RUNNING_ENV=${ODOO14_RUNNING_ENV:-dev}
- SERVER_WIDE_MODULES=${ODOO14_SERVER_WIDE_MODULES}
- WORKERS=${ODOO14_WORKERS:-0}
networks:
private:
ports:
- 8069
- 8072
volumes:
- odoo14:/data/odoo
- odoo14-cache:/odoo/.cache
volumes:
odoo14:
odoo14-cache:

160
docker/odoo14/Dockerfile Normal file
View File

@ -0,0 +1,160 @@
FROM python:3.8-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
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/python3.8 -m venv /opt/odoo \
&& /opt/odoo/bin/pip3.8 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/pip3.8 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/python3.8/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}/odoo.conf.tpl /opt/odoo/
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
VOLUME ["/data/odoo"]
ENV \
ADDONS_PATH=/opt/odoo/lib/python3.8/site-packages/odoo/addons,/opt/odoo/addons \
ADMIN_PASSWD=admin \
AUTO_RELOAD=False \
CSV_INTERNAL_SEP=, \
DATA_DIR=/data/odoo \
DB_HOST=db \
DB_MAXCONN=64 \
DB_NAME=odoo14 \
DB_PASSWORD=odoo \
DB_PORT=5432 \
DB_SSLMODE=prefer \
DB_TEMPLATE=template1 \
DB_USER=odoo \
DBFILTER=^.*$ \
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=2684354560 \
LIMIT_MEMORY_SOFT=2147483648 \
LIMIT_REQUEST=8192 \
LIMIT_TIME_CPU=60 \
LIMIT_TIME_REAL=120 \
LIMIT_TIME_REAL_CRON=120 \
LIST_DB=False \
LOG_DB=False \
LOG_HANDLER=:INFO \
LOG_LEVEL=info \
LOGFILE=/dev/stdout \
LOGROTATE=False \
LONGPOLLING_PORT=8072 \
MAX_CRON_THREADS=2 \
ODOO_RC=/opt/odoo/etc/odoo.conf \
OSV_MEMORY_AGE_LIMIT=1.0 \
OSV_MEMORY_COUNT_LIMIT=False \
PATH=/opt/odoo/bin:$PATH \
PROXY_MODE=True \
RUNNING_ENV=dev \
SERVER_WIDE_MODULES=web \
SMTP_PASSWORD=False \
SMTP_PORT=25 \
SMTP_SERVER=False \
SMTP_SSL=False \
SMTP_USER=False \
SYSLOG=False \
UNACCENT=False \
WITHOUT_DEMO=True \
WORKERS=0 \
XMLRPC=True \
XMLRPC_PORT=8069 \
XMLRPCS=True \
XMLRPCS_PORT=8071
EXPOSE 8069 8071 8072
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["odoo"]
FROM dist as master
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 librezo-addons/ /opt/odoo/librezo-addons/
ENV ADDONS_PATH=${ADDONS_PATH},/opt/odoo/librezo-addons
RUN apk add --no-cache --virtual .build-deps \
g++ \
git \
libffi-dev \
make \
&& /opt/odoo/bin/pip3.8 install -r /opt/odoo/librezo-addons/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/python3.8/site-packages/*/"$1" ]") == 0 { next } { print "so:" $1 }' \
| xargs -rt apk add --no-cache
COPY entrypoint.d/ /opt/odoo/entrypoint.d/
COPY migration.yml /opt/odoo/

View File

@ -0,0 +1,50 @@
#!/bin/sh
set -eu
mkdir -p /opt/odoo/etc
envsubst < /opt/odoo/odoo.conf.tpl > /opt/odoo/etc/odoo.conf
export PGHOST=${DB_HOST}
export PGPORT=${DB_PORT:-5432}
export PGUSER=${DB_USER}
export PGPASSWORD=${DB_PASSWORD}
export PGDATABASE=${DB_NAME}
mkdir -p /data/odoo/{addons,filestore,sessions}
if [ ! "$(stat -c '%U' /data/odoo)" = "odoo" ]; then
chown -R odoo: /data/odoo
fi
BASE_CMD=$(basename $1)
if [ "$BASE_CMD" = "odoo" ] || [ "$BASE_CMD" = "odoo.py" ] || [ "$BASE_CMD" = "odoo-bin" ] || [ "$BASE_CMD" = "openerp-server" ] ; then
# create db
if ! psql -lqtA -h $DB_HOST -U $DB_USER | grep -q "^$DB_NAME|"; then
createdb -h $DB_HOST -U $DB_USER -O $DB_USER $DB_NAME
fi
# update db
MARABUNTA_DB_HOST=$DB_HOST \
MARABUNTA_DATABASE=$DB_NAME \
MARABUNTA_DB_USER=$DB_USER \
MARABUNTA_DB_PASSWORD=$DB_PASSWORD \
MARABUNTA_DB_PORT=$DB_PORT \
unbuffer marabunta --migration-file /opt/odoo/migration.yml
ENTRYPOINT_DIR=/opt/odoo/entrypoint.d
if [ -d "$ENTRYPOINT_DIR" ]; then
if [ -z "${NOGOSU:-}" ] ; then
gosu odoo run-parts --verbose "$ENTRYPOINT_DIR"
else
run-parts --verbose "$ENTRYPOINT_DIR"
fi
fi
fi
if [ -z "${NOGOSU:-}" ] ; then
echo "Running $@ with UID $USER_ID"
exec gosu odoo "$@"
else
echo "Running $@"
exec "$@"
fi

View File

@ -0,0 +1,49 @@
[options]
addons_path = ${ADDONS_PATH}
admin_passwd = ${ADMIN_PASSWD}
auto_reload = ${AUTO_RELOAD}
csv_internal_sep = ${CSV_INTERNAL_SEP}
data_dir = ${DATA_DIR}
db_host = ${DB_HOST}
db_maxconn = ${DB_MAXCONN}
db_name = ${DB_NAME}
db_password = ${DB_PASSWORD}
db_port = ${DB_PORT}
db_sslmode = ${DB_SSLMODE}
db_template = ${DB_TEMPLATE}
db_user = ${DB_USER}
dbfilter = ${DBFILTER}
debug_mode = ${DEBUG_MODE}
email_from = ${EMAIL_FROM}
http_port = ${HTTP_PORT}
http_enable = ${HTTP_ENABLE}
http_interface = ${HTTP_INTERFACE}
limit_memory_soft = ${LIMIT_MEMORY_SOFT}
limit_memory_hard = ${LIMIT_MEMORY_HARD}
limit_request = ${LIMIT_REQUEST}
limit_time_cpu = ${LIMIT_TIME_CPU}
limit_time_real = ${LIMIT_TIME_REAL}
limit_time_real_cron = ${LIMIT_TIME_REAL_CRON}
list_db = ${LIST_DB}
log_db = ${LOG_DB}
log_handler = ${LOG_HANDLER}
log_level = ${LOG_LEVEL}
logfile = ${LOGFILE}
logrotate = ${LOGROTATE}
longpolling_port = ${LONGPOLLING_PORT}
max_cron_threads = ${MAX_CRON_THREADS}
osv_memory_age_limit = ${OSV_MEMORY_AGE_LIMIT}
osv_memory_count_limit = ${OSV_MEMORY_COUNT_LIMIT}
proxy_mode = ${PROXY_MODE}
running_env = ${RUNNING_ENV}
server_wide_modules = ${SERVER_WIDE_MODULES}
smtp_password = ${SMTP_PASSWORD}
smtp_port = ${SMTP_PORT}
smtp_server = ${SMTP_SERVER}
smtp_ssl = ${SMTP_SSL}
smtp_user = ${SMTP_USER}
syslog = ${SYSLOG}
unaccent = ${UNACCENT}
without_demo = ${WITHOUT_DEMO}
workers = ${WORKERS}
${ADDITIONAL_ODOO_RC}

38
entrypoint.d/000_set_base_url Executable file
View File

@ -0,0 +1,38 @@
#!/bin/sh
# link: https://github.com/camptocamp/docker-odoo-project
if [ -n "${ODOO_BASE_URL}" ]; then
if [ "$( psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" )" != '1' ]
then
echo "Database does not exist, ignoring script"
exit 0
fi
echo "Setting Base URL to domain ${ODOO_BASE_URL}"
psql --quiet << EOF
WITH update_param AS (
UPDATE ir_config_parameter
SET value = '${ODOO_BASE_URL}'
WHERE key = 'web.base.url'
RETURNING *
)
INSERT INTO ir_config_parameter
(value, key, create_uid, write_uid, create_date, write_date)
SELECT '${ODOO_BASE_URL}', 'web.base.url', 1, 1, now(), now()
WHERE NOT EXISTS (SELECT * FROM update_param);
WITH update_param AS (
UPDATE ir_config_parameter
SET value = 'True'
WHERE key = 'web.base.url.freeze'
RETURNING *
)
INSERT INTO ir_config_parameter
(value, key, create_uid, write_uid, create_date, write_date)
SELECT 'True', 'web.base.url.freeze', 1, 1, now(), now()
WHERE NOT EXISTS (SELECT * FROM update_param);
EOF
fi

27
entrypoint.d/001_set_report_url Executable file
View File

@ -0,0 +1,27 @@
#!/bin/sh
# link: https://github.com/camptocamp/docker-odoo-project
if [ -n "${ODOO_REPORT_URL}" ]; then
if [ "$( psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" )" != '1' ]
then
echo "Database does not exist, ignoring script"
exit 0
fi
echo "Setting Report URL to domain ${ODOO_REPORT_URL}"
psql --quiet << EOF
WITH update_param AS (
UPDATE ir_config_parameter
SET value = '${ODOO_REPORT_URL}'
WHERE key = 'report.url'
RETURNING *
)
INSERT INTO ir_config_parameter
(value, key, create_uid, write_uid, create_date, write_date)
SELECT '${ODOO_REPORT_URL}', 'report.url', 1, 1, now(), now()
WHERE NOT EXISTS (SELECT * FROM update_param);
EOF
fi

View File

@ -0,0 +1,2 @@
# from . import models
# from . import tests

View File

@ -0,0 +1,23 @@
{
"name": "Librezo",
"summary": "Librezo base settings",
"author": "aya",
"license": "AGPL-3",
"website": "http://www.librezo.com",
"category": "hidden",
"version": "14.0.1.0.0",
"depends": [
"base",
"l10n_fr",
"account_financial_report",
"contacts",
"products",
"sale",
"server_environment_ir_config_parameter",
"server_environment_data_encryption",
"pattern_import_export_xlsx",
"pattern_import_export_csv",
],
"data": [],
"demo": [],
}

View File

@ -0,0 +1,22 @@
--find-links https://wheelhouse.acsone.eu/manylinux1
--extra-index https://wheelhouse.acsone.eu/shopinvader-simple
--extra-index-url https://wheelhouse.odoo-community.org/oca-simple
click-odoo==1.4.3
click-odoo-contrib==1.12.0
marabunta==0.10.6
odoo14-addon-auth-api-key==14.0.1.0.1.dev4
odoo14-addon-base-exception==14.0.1.0.1.dev2
odoo14-addon-base-export-manager @ git+https://github.com/OCA/server-ux@73502f8c86fcda8e28e8dabe2711347cececda9e#subdirectory=setup/base_export_manager
odoo14-addon-base-jsonify==14.0.1.1.0
odoo14-addon-component==14.0.1.0.2
odoo14-addon-data-encryption @ git+https://github.com/OCA/server-env@5815237d403bb7d7527fd6f8b6b6c4a08a4acbeb#subdirectory=setup/data_encryption
odoo14-addon-onchange-helper==14.0.1.0.1.dev2
odoo14-addon-partner-address-version @ git+https://github.com/oca/partner-contact.git@dff3343f930a4b7451db305611e6a060f2aa37cc#subdirectory=setup/partner_address_version
odoo14-addon-pattern-import-export @ git+https://github.com/shopinvader/pattern-import-export.git@efc838258c8a750eb6542d4081dd4cbf939c41b1#subdirectory=setup/pattern_import_export
odoo14-addon-pattern-import-export-csv @ git+https://github.com/shopinvader/pattern-import-export.git@efc838258c8a750eb6542d4081dd4cbf939c41b1#subdirectory=setup/pattern_import_export_csv
odoo14-addon-pattern-import-export-xlsx @ git+https://github.com/shopinvader/pattern-import-export.git@efc838258c8a750eb6542d4081dd4cbf939c41b1#subdirectory=setup/pattern_import_export_xlsx
odoo14-addon-queue-job==14.0.1.0.2
odoo14-addon-server-environment==14.0.1.0.1.dev5
odoo14-addon-server-environment-data-encryption @ git+https://github.com/OCA/server-env@5815237d403bb7d7527fd6f8b6b6c4a08a4acbeb#subdirectory=setup/server_environment_data_encryption
odoo14-addon-server-environment-ir-config-parameter==14.0.1.0.1.dev2
odoo14-addon-web-notify @ git+https://github.com/OCA/web@21b8349413916fb7be4b78d97b67a7bf65f9a18d#subdirectory=setup/web_notify

8
migration.yml Normal file
View File

@ -0,0 +1,8 @@
migration:
options:
install_command: odoo --without-demo=${WITHOUT_DEMO:-True} -d odoo14 -i web,base_librezo --stop-after-init
versions:
- version: setup
operations:
pre:
- 'sh -c ''psql -c "CREATE EXTENSION pg_trgm;"'''