Odoo 14
This commit is contained in:
commit
038eb4bee0
7
.env
Normal file
7
.env
Normal file
@ -0,0 +1,7 @@
|
||||
ODOO_ADMIN_PASSWORD=odoo
|
||||
POSTGRES_HOST=odoo-postgres
|
||||
POSTGRES_USER=odoo
|
||||
POSTGRES_PASSWORD=odoo
|
||||
POSTGRES_DB=odoo
|
||||
SMTP_HOST=odoo-smtp
|
||||
SMTP_SENDER=odoo@example.com
|
38
README.md
Normal file
38
README.md
Normal file
@ -0,0 +1,38 @@
|
||||
Odoo
|
||||
====
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce,
|
||||
accounting, inventory, point of sale, project management, etc. Odoo runs on python 3 and uses
|
||||
PostgreSQL database.
|
||||
|
||||
Development without docker-compose
|
||||
----------------------------------
|
||||
|
||||
```bash
|
||||
rm -rf ~/postgres_data
|
||||
mkdir ~/postgres_data
|
||||
podman run -it --rm \
|
||||
--env "POSTGRES_USER=odoo" \
|
||||
--env "POSTGRES_PASSWORD=odoo" \
|
||||
--env "POSTGRES_DB=odoo" \
|
||||
--volume ~/postgres_data:/var/lib/postgresql/data \
|
||||
--ip 10.88.0.2 \
|
||||
docker.io/postgres:16-alpine
|
||||
```
|
||||
|
||||
```bash
|
||||
podman build -t odoo:latest odoo
|
||||
|
||||
rm -rf ~/odoo_{conf,data}
|
||||
mkdir ~/odoo_{conf,data}
|
||||
podman run -it --rm \
|
||||
--env-file .env \
|
||||
--volume ~/odoo_conf:/srv/odoo/conf \
|
||||
--volume ~/odoo_data:/srv/odoo/data \
|
||||
--add-host odoo-postgres:10.88.0.2 \
|
||||
--ip 10.88.0.3 \
|
||||
odoo:latest
|
||||
```
|
34
docker-compose.yml
Normal file
34
docker-compose.yml
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
version: '3'
|
||||
services:
|
||||
|
||||
odoo:
|
||||
build: odoo
|
||||
image: odoo:14.0.0-240826
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- odoo-postgres
|
||||
env_file:
|
||||
- .env
|
||||
expose:
|
||||
- 8080
|
||||
ports:
|
||||
- 8080:8080
|
||||
volumes:
|
||||
- odoo_conf:/srv/odoo/conf
|
||||
- odoo_data:/srv/odoo/data
|
||||
|
||||
odoo-postgres:
|
||||
image: postgres:16-alpine
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER
|
||||
- POSTGRES_PASSWORD
|
||||
- POSTGRES_DB
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
odoo_conf:
|
||||
odoo_data:
|
||||
postgres_data:
|
52
odoo/Dockerfile
Normal file
52
odoo/Dockerfile
Normal file
@ -0,0 +1,52 @@
|
||||
FROM docker.io/alpine:3.12
|
||||
|
||||
RUN \
|
||||
# Update packages
|
||||
apk --no-cache upgrade && \
|
||||
# Install common packages
|
||||
apk --no-cache add libbz2 libgcc libressl libstdc++ libxml2 libxslt ncurses-libs pcre readline s6 xz-libs && \
|
||||
# Install python
|
||||
apk --no-cache add python3 py3-pip py3-wheel && \
|
||||
# Install runtime dependencies
|
||||
apk --no-cache add libffi libjpeg-turbo libpq nodejs postgresql-client ttf-dejavu ttf-droid ttf-freefont ttf-liberation ttf-ubuntu-font-family wkhtmltopdf && \
|
||||
# Set time zone data
|
||||
apk --no-cache add tzdata && \
|
||||
cp /usr/share/zoneinfo/UTC /etc/localtime && \
|
||||
apk --no-cache del tzdata && \
|
||||
# Set python interpret
|
||||
ln -s /usr/bin/python3 /usr/bin/python && \
|
||||
# Replace wkhtmltopdf
|
||||
# Extracted from https://github.com/Surnet/docker-wkhtmltopdf
|
||||
# wkhtmltopdf 0.12.7 is expected to support Alpine linux out of the box
|
||||
wget https://repo.spotter.cz/libwkhtmltox.tar.xz -O - | tar -xJf - -C / && \
|
||||
# Cleanup
|
||||
rm -rf /etc/crontabs/root /etc/periodic
|
||||
|
||||
RUN \
|
||||
# Install build dependencies
|
||||
apk --no-cache add --virtual .deps build-base git libffi-dev libjpeg-turbo-dev libxml2-dev libxslt-dev linux-headers msttcorefonts-installer openldap-dev postgresql-dev python3-dev && \
|
||||
# Update fonts
|
||||
update-ms-fonts && \
|
||||
fc-cache -f && \
|
||||
# Install Odoo
|
||||
git clone -b 14.0 --depth 1 https://github.com/odoo/odoo.git /srv/odoo && \
|
||||
cd /srv/odoo && \
|
||||
pip3 install gevent==20.9.0 --no-build-isolation && \
|
||||
pip3 install -r requirements.txt && \
|
||||
mkdir /srv/odoo/conf && \
|
||||
# Create OS user
|
||||
addgroup -S -g 8080 odoo && \
|
||||
adduser -S -u 8080 -h /srv/odoo -s /bin/false -g odoo -G odoo odoo && \
|
||||
chown -R odoo:odoo /srv/odoo && \
|
||||
# Cleanup
|
||||
apk --no-cache del .deps && \
|
||||
find /srv/odoo -name '.git*' -exec rm -rf {} + && \
|
||||
rm -rf /root/.cache
|
||||
|
||||
COPY image.d/srv/odoo/ /srv/odoo/
|
||||
COPY image.d/etc/ /etc/
|
||||
COPY image.d/entrypoint.sh /
|
||||
|
||||
VOLUME ["/srv/odoo/conf", "/srv/odoo/data"]
|
||||
EXPOSE 8080
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
43
odoo/image.d/entrypoint.sh
Executable file
43
odoo/image.d/entrypoint.sh
Executable file
@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
if [ "$*" != "" ]; then
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
echo "Starting Odoo..."
|
||||
|
||||
# Fix volume permissions
|
||||
chown -R odoo:odoo /srv/odoo/conf /srv/odoo/data
|
||||
|
||||
# Configure Odoo
|
||||
python3 /srv/odoo/conf-from-env-vars.py
|
||||
|
||||
# Populate database
|
||||
export PGPASSWORD=${POSTGRES_PASSWORD}
|
||||
DB_EXISTS=$(psql -h "${POSTGRES_HOST}" -Atc "SELECT 1 FROM res_users" "${POSTGRES_DB}" "${POSTGRES_USER}" 2>/dev/null || true)
|
||||
if [ -z "${DB_EXISTS}" ]; then
|
||||
echo "Populating database..."
|
||||
su - odoo -s /bin/sh -c '/srv/odoo/odoo-bin -c /srv/odoo/conf/odoo.conf -i base --without-demo all --load-language cs_CZ' >/tmp/odoo.log 2>&1 &
|
||||
ODOO_PID=$!
|
||||
until grep -q 'odoo.modules.loading: Modules loaded.' /tmp/odoo.log; do
|
||||
if ! kill -0 ${ODOO_PID} 2>/dev/null; then
|
||||
cat /tmp/odoo.log >&2
|
||||
echo "Odoo database population process ended unexpectedly." >&2
|
||||
exit 1
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
kill ${ODOO_PID}
|
||||
psql -h "${POSTGRES_HOST}" -Atc "UPDATE res_lang SET active = true WHERE code = 'cs_CZ'" "${POSTGRES_DB}" "${POSTGRES_USER}" >/dev/null
|
||||
psql -h "${POSTGRES_HOST}" -Atc "UPDATE res_partner SET lang = 'cs_CZ', tz = 'Europe/Prague' WHERE id = 3" "${POSTGRES_DB}" "${POSTGRES_USER}" >/dev/null
|
||||
fi
|
||||
# Update admin
|
||||
if [ -n "${ODOO_ADMIN_PASSWORD}" ]; then
|
||||
ODOO_ADMIN_HASH=$(python3 -c "from passlib.hash import pbkdf2_sha512;print(pbkdf2_sha512.hash('${ODOO_ADMIN_PASSWORD}'))")
|
||||
psql -h "${POSTGRES_HOST}" -Atc "UPDATE res_users SET password = '${ODOO_ADMIN_HASH}' WHERE login = 'admin'" "${POSTGRES_DB}" "${POSTGRES_USER}" >/dev/null
|
||||
fi
|
||||
unset PGPASSWORD
|
||||
|
||||
# Exec into s6 supervisor
|
||||
exec /bin/s6-svscan /etc/services.d
|
3
odoo/image.d/etc/services.d/.s6-svscan/finish
Executable file
3
odoo/image.d/etc/services.d/.s6-svscan/finish
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/execlineb
|
||||
|
||||
exit 0
|
4
odoo/image.d/etc/services.d/odoo/run
Executable file
4
odoo/image.d/etc/services.d/odoo/run
Executable file
@ -0,0 +1,4 @@
|
||||
#!/bin/execlineb -P
|
||||
|
||||
s6-setuidgid odoo
|
||||
/srv/odoo/odoo-bin -c /srv/odoo/conf/odoo.conf
|
1
odoo/image.d/etc/services.d/odoo/timeout-kill
Normal file
1
odoo/image.d/etc/services.d/odoo/timeout-kill
Normal file
@ -0,0 +1 @@
|
||||
3000
|
30
odoo/image.d/srv/odoo/conf-from-env-vars.py
Normal file
30
odoo/image.d/srv/odoo/conf-from-env-vars.py
Normal file
@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
from configparser import ConfigParser
|
||||
|
||||
|
||||
ODOO_CONFIG_FILE = "/srv/odoo/conf/odoo.conf"
|
||||
|
||||
|
||||
config = ConfigParser()
|
||||
config.add_section("options")
|
||||
config.read(ODOO_CONFIG_FILE)
|
||||
|
||||
options_dict = {
|
||||
"admin_passwd": os.getenv("ODOO_ADMIN_PASSWORD") or options.get("admin_passwd") or "odoo",
|
||||
"data_dir": "/srv/odoo/data",
|
||||
"db_host": os.getenv("POSTGRES_HOST") or options.get("db_host") or "localhost",
|
||||
"db_name": os.getenv("POSTGRES_DB") or options.get("db_name") or "odoo",
|
||||
"db_user": os.getenv("POSTGRES_USER") or options.get("db_user") or "odoo",
|
||||
"db_password": os.getenv("POSTGRES_PASSWORD") or options.get("db_password") or "odoo",
|
||||
"smtp_server": os.getenv("SMTP_HOST") or options.get("smtp_server") or "localhost",
|
||||
"email_from": os.getenv("SMTP_SENDER") or options.get("email_from") or "odoo@example.com",
|
||||
"http_port": "8080",
|
||||
"proxy_mode": "True",
|
||||
"list_db": "False",
|
||||
}
|
||||
config.read_dict({"options": options_dict})
|
||||
|
||||
with open(ODOO_CONFIG_FILE, "w", encoding="utf-8") as f:
|
||||
config.write(f)
|
Loading…
Reference in New Issue
Block a user