125 rindas
4.2 KiB
Bash
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"
|