Files
bdi_podman_serverconf/containers/odoo/odoo-entrypoint.sh
T

125 rindas
4.2 KiB
Bash

#!/bin/bash
set -e
# Valori di default
ADMIN_PASSWD="${ADMIN_PASSWD:-Password123}"
WITH_DEMO="${WITH_DEMO:-False}"
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-5432}"
DB_USER="${DB_USER:-odoo}"
DB_PASSWORD="${DB_PASSWORD:-odoo}"
DB_NAME="${DB_NAME:-}"
DB_TEMPLATE="${DB_TEMPLATE:-template1}"
# Lingue da caricare all'inizializzazione del database (la prima diventa la
# lingua di default per i partner). CLI-only: in Odoo --load-language ha
# file_exportable=False, quindi va passata al comando di init, non in odoo.conf.
LOAD_LANGUAGE="${LOAD_LANGUAGE:-it_IT}"
CONFIG_FILE=/etc/odoo/odoo.conf
# Crea il file di configurazione Odoo con i valori delle variabili d'ambiente
cat > "$CONFIG_FILE" << EOF
[options]
; Server Configuration
admin_passwd = $ADMIN_PASSWD
db_host = $DB_HOST
db_port = $DB_PORT
db_user = $DB_USER
db_password = $DB_PASSWORD
db_template = $DB_TEMPLATE
EOF
# Aggiungi db_name e list_db a seconda se DB_NAME è impostata
if [ -n "$DB_NAME" ]; then
cat >> "$CONFIG_FILE" << EOF
db_name = $DB_NAME
list_db = False
EOF
else
echo "list_db = True" >> "$CONFIG_FILE"
fi
cat >> "$CONFIG_FILE" << EOF
; File Paths (installazione tramite pacchetto .deb ufficiale)
addons_path = /usr/lib/python3/dist-packages/odoo/addons,/var/lib/odoo/custom_addons,/opt/duckdoo-addons
data_dir = /var/lib/odoo/.local/share/Odoo
; Logging
logfile = /var/log/odoo/odoo.log
log_level = info
; Workers (optional, for production)
workers = 4
gevent_port = 8072
; Other Settings
max_cron_threads = 2
EOF
# Scopre i moduli custom installabili: ogni sottocartella con __manifest__.py
# in /var/lib/odoo/custom_addons (repo del progetto) e /opt/duckdoo-addons
# (moduli DuckDoo, presenti solo se l'immagine è buildata con --support-duckdoo).
discover_custom_modules() {
local modules=""
for addons_dir in /var/lib/odoo/custom_addons /opt/duckdoo-addons; do
[ -d "$addons_dir" ] || continue
for mod_dir in "$addons_dir"/*/; do
[ -f "${mod_dir}__manifest__.py" ] || continue
local mod_name
mod_name=$(basename "$mod_dir")
if [ -z "$modules" ]; then
modules="$mod_name"
else
modules="$modules,$mod_name"
fi
done
done
echo "$modules"
}
if [ -n "$DB_NAME" ]; then
if [ "$WITH_DEMO" = "True" ]; then
WITHOUT_DEMO_FLAG=False
else
WITHOUT_DEMO_FLAG=True
fi
CUSTOM_MODULES=$(discover_custom_modules)
if [ ! -f /var/lib/odoo/.odoo_initialized ]; then
# Database nuovo: inizializza base + installa tutti i moduli custom.
echo "Inizializzazione del database..."
# Con DB_NAME impostato, DB_USER è volutamente senza privilegio CREATEDB:
# il database deve essere già stato creato a mano (vedi containers/postgres/postgres.README)
DB_EXISTS=$(PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d "$DB_TEMPLATE" -tAc "SELECT 1 FROM pg_database WHERE datname = '$DB_NAME'" 2>/dev/null)
if [ -z "$DB_EXISTS" ]; then
echo "ERRORE: il database '$DB_NAME' non esiste e $DB_USER non ha il privilegio CREATEDB."
echo "Crealo manualmente (vedi containers/postgres/postgres.README) prima di avviare questa istanza."
exit 1
fi
MODULES=base
[ -n "$CUSTOM_MODULES" ] && MODULES="$MODULES,$CUSTOM_MODULES"
/usr/bin/odoo -c "$CONFIG_FILE" -i "$MODULES" --load-language="$LOAD_LANGUAGE" --stop-after-init --without-demo=$WITHOUT_DEMO_FLAG
touch /var/lib/odoo/.odoo_initialized
touch /var/lib/odoo/.modules_synced
echo "Database inizializzato."
elif [ ! -f /var/lib/odoo/.modules_synced ] && [ -n "$CUSTOM_MODULES" ]; then
# Database restorato/importato: lo schema esiste gia' ma i moduli
# custom non sono installati (il flag .modules_synced viene rimosso
# da DuckDoo ad ogni restore, vedi services/podman.py).
echo "Installazione moduli custom su database esistente: $CUSTOM_MODULES"
/usr/bin/odoo -c "$CONFIG_FILE" -i "$CUSTOM_MODULES" --stop-after-init --without-demo=$WITHOUT_DEMO_FLAG
touch /var/lib/odoo/.modules_synced
echo "Moduli custom installati."
fi
fi
# Avvia Odoo
exec /usr/bin/odoo -c "$CONFIG_FILE"