From e03bb926e8bc9975977fdaa49eb4c376b6c51d91 Mon Sep 17 00:00:00 2001 From: oliver Date: Tue, 13 Oct 2026 08:58:02 -0300 Subject: [PATCH] g --- app/sbin/ODOO_19/ODOO_19.lib | 27 +++++++++++++++++---------- app/sbin/helpers | 11 ++++++++++- app/sbin/start/ODOO_17 | 23 +++++++++++++---------- app/sbin/start/ODOO_18 | 22 +++++++++++++--------- app/sbin/start/ODOO_19 | 22 +++++++++++++--------- app/sbin/start/ODOO_20 | 22 +++++++++++++--------- app/sbin/start/n8n | 8 +++++--- app/update | 4 +++- 8 files changed, 87 insertions(+), 52 deletions(-) diff --git a/app/sbin/ODOO_19/ODOO_19.lib b/app/sbin/ODOO_19/ODOO_19.lib index bd56f9e..6d34229 100644 --- a/app/sbin/ODOO_19/ODOO_19.lib +++ b/app/sbin/ODOO_19/ODOO_19.lib @@ -2,16 +2,15 @@ dump_config (){ -echo "========== Odoo Container Configuration ==========" +echo "$(date '+%Y-%m-%d %H:%M:%S') ========== Odoo Container Configuration ==========" echo "UUID: $UUID" echo "BRANCH: $BRANCH" echo "STAGING: $STAGING" echo echo "PostgreSQL Host: $POSTGRES_HOST" echo "PostgreSQL Port: $POSTGRES_PORT" -echo "PostgreSQL Admin: $POSTGRES_ADMIN_USER / $POSTGRES_ADMIN_PASSWORD" +echo "PostgreSQL Admin: $POSTGRES_ADMIN_USER" echo "ODOO DB User: $ODOO_DB_USER" -echo "ODOO DB Password: $ODOO_DB_PASSWORD" echo echo "BASEURL: $BASEURL" echo "DATA_DIR: $DATA_DIR" @@ -52,22 +51,21 @@ wait_for_postgres() { if pg_admin "SELECT 1;" >/dev/null 2>&1; then return 0 fi - echo "Postgres not reachable yet ($i/$tries), retrying..." + echo "$(date '+%Y-%m-%d %H:%M:%S') Postgres at $POSTGRES_HOST:$POSTGRES_PORT not reachable yet ($i/$tries), retrying in 2s" sleep 2 done return 1 } check_and_create_db() { -echo "check and create" -echo "Connecting as $POSTGRES_ADMIN_USER to $POSTGRES_HOST:$POSTGRES_PORT" +echo "$(date '+%Y-%m-%d %H:%M:%S') Checking user and database for $UUID (DB user $ODOO_DB_USER) as $POSTGRES_ADMIN_USER on $POSTGRES_HOST:$POSTGRES_PORT" # ----------------------------- # Never guess: if Postgres cannot be queried we must NOT assume the DB is # missing, because a restore wipes the filestore. # ----------------------------- if ! wait_for_postgres; then - echo "ERROR: cannot connect to Postgres at $POSTGRES_HOST:$POSTGRES_PORT - skipping DB check, NO restore performed" + echo "$(date '+%Y-%m-%d %H:%M:%S') ERROR: cannot connect to Postgres at $POSTGRES_HOST:$POSTGRES_PORT - skipping DB check, NO restore performed" return 1 fi @@ -76,8 +74,11 @@ fi # ----------------------------- USER_EXISTS=$(PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql -h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='$ODOO_DB_USER';" | grep -q 1 && echo "yes" || echo "no") if [ "$USER_EXISTS" = "no" ]; then - echo "Creating PostgreSQL user $ODOO_DB_USER..." + echo "$(date '+%Y-%m-%d %H:%M:%S') PostgreSQL user $ODOO_DB_USER does not exist, creating it" PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql -h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres -c "CREATE USER \"$ODOO_DB_USER\" WITH PASSWORD '$ODOO_DB_PASSWORD';" + echo "$(date '+%Y-%m-%d %H:%M:%S') CREATE USER $ODOO_DB_USER finished with exit code $?" +else + echo "$(date '+%Y-%m-%d %H:%M:%S') PostgreSQL user $ODOO_DB_USER already exists" fi # ----------------------------- @@ -86,7 +87,7 @@ fi DB_RESULT=$(pg_admin "SELECT 1 FROM pg_database WHERE datname='$UUID';") DB_RC=$? if [ $DB_RC -ne 0 ]; then - echo "ERROR: DB existence query failed (rc=$DB_RC) - NO restore performed" + echo "$(date '+%Y-%m-%d %H:%M:%S') ERROR: existence query for database $UUID failed (rc=$DB_RC) - NO restore performed" return 1 fi @@ -99,10 +100,16 @@ fi if [ "$DB_EXISTS" = "no" ]; then FILESTORE_HOST="/4server/data/$UUID/odoo/odoo-web-data/filestore" if [ -d "$FILESTORE_HOST" ] && [ -n "$(ls -A "$FILESTORE_HOST" 2>/dev/null)" ]; then - echo "ERROR: database $UUID not found but a filestore exists at $FILESTORE_HOST - refusing automatic restore of default.zip (would delete the filestore). Restore manually if intended." + echo "$(date '+%Y-%m-%d %H:%M:%S') ERROR: database $UUID not found but a filestore exists at $FILESTORE_HOST - refusing automatic restore of default.zip (would delete the filestore). Restore manually if intended." return 1 fi + echo "$(date '+%Y-%m-%d %H:%M:%S') Database $UUID does not exist and no filestore found, restoring default.zip" /4server/sbin/ODOO_19/restore $UUID default.zip + local restore_rc=$? + echo "$(date '+%Y-%m-%d %H:%M:%S') Restore of default.zip for $UUID finished with exit code $restore_rc" + return $restore_rc +else + echo "$(date '+%Y-%m-%d %H:%M:%S') Database $UUID already exists, nothing to do" fi } diff --git a/app/sbin/helpers b/app/sbin/helpers index 3e7b56a..c972c69 100755 --- a/app/sbin/helpers +++ b/app/sbin/helpers @@ -10,7 +10,7 @@ DB_PATH="/4server/data/contracts.db" get_contract_info() { - echo "get_contract_info $UUID" + echo "$(date '+%Y-%m-%d %H:%M:%S') Loading contract info for $UUID from $DB_PATH" # Single CTE: the table is scanned once and all projections come from it while IFS="=" read -r key value; do @@ -48,4 +48,13 @@ get_contract_info() { done < <(printf '%s' "$SECRET_LIST" | tr -d '\r\n' | tr '\\' '\n') fi export ODOO_DB_PASSWORD=$psql + + if [ -z "$CONTAINERDBID" ]; then + echo "$(date '+%Y-%m-%d %H:%M:%S') WARNING: no contract found for $UUID in $DB_PATH" + else + echo "$(date '+%Y-%m-%d %H:%M:%S') Loaded contract for $UUID: DBID=$CONTAINERDBID IMAGE=$IMAGE STATUS=$STATUS CREATED=$CREATED EXPIRES=$EXPIRES" + fi + if [ -z "$ODOO_DB_PASSWORD" ]; then + echo "$(date '+%Y-%m-%d %H:%M:%S') WARNING: no psql secret found for $UUID, ODOO_DB_PASSWORD is empty" + fi } diff --git a/app/sbin/start/ODOO_17 b/app/sbin/start/ODOO_17 index d5995bd..65b9696 100755 --- a/app/sbin/start/ODOO_17 +++ b/app/sbin/start/ODOO_17 @@ -1,5 +1,4 @@ #!/bin/bash -echo "START ODOO 17" # Load functions source /4server/sbin/ODOO_19/ODOO_19.lib source /4server/sbin/helpers @@ -12,9 +11,7 @@ BRANCH="${BRANCH:-release}" ODOO_DB_USER="${UUID}" #export ODOO_DB_PASSWORD=$(echo "$SECRET" | jq -r '.psql') - -echo "ENV: $HDD $DOMAIN_SLOTS $BACKUP_SLOTS $CONTAINERDBID" -echo "DBID: $CONTAINERDBID" +echo "$(date '+%Y-%m-%d %H:%M:%S') START ODOO 17 UUID=$UUID BRANCH=$BRANCH DBID=$CONTAINERDBID DB_USER=$ODOO_DB_USER HDD=$HDD DOMAIN_SLOTS=$DOMAIN_SLOTS BACKUP_SLOTS=$BACKUP_SLOTS WORKER=$WORKER" BASEURL="${BASEURL:-/4server/data/$UUID}" DATA_DIR="$BASEURL/odoo/" @@ -38,25 +35,26 @@ if [ -f "$BASEURL/etc/domain" ]; then LABEL_DOMAINS+=("$domain") done < "$BASEURL/etc/domain" else - echo "[DEBUG] No additional domain file found at $BASEURL/etc/domain" + echo "$(date '+%Y-%m-%d %H:%M:%S') No custom domain file at $BASEURL/etc/domain, using default domain $UUID.odoo4projects.com only" fi RULE="" for d in "${LABEL_DOMAINS[@]}"; do RESOLVED_IP=$(nslookup "$d" 2>/dev/null | awk '/^Address: / { print $2 }' | head -n1 || true) if [ -z "$RESOLVED_IP" ]; then - echo "[DEBUG] Could not resolve $d, skipping" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d does not resolve, skipping" continue fi if [ "$RESOLVED_IP" = "$SERVER_IP" ]; then RULE+=" || Host(\`$d\`)" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d resolves to $RESOLVED_IP (server IP), added to Traefik rule" else - echo "[DEBUG] Skipping $d (does not match SERVER_IP $SERVER_IP)" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d resolves to $RESOLVED_IP but server IP is $SERVER_IP, skipping" fi done RULE="${RULE# || }" DOMAIN_LABEL="traefik.http.routers.$UUID.rule=$RULE" -echo "[DEBUG] Final Traefik label: $DOMAIN_LABEL" +echo "$(date '+%Y-%m-%d %H:%M:%S') Traefik label for $UUID: $DOMAIN_LABEL" docker exec "$UUID" mkdir -p /var/lib/odoo/.local/share/Odoo/ docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore @@ -64,9 +62,7 @@ docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/. find "$BASEURL" -type d -exec chmod 777 {} \; PORT=$((CONTAINERDBID + 2200)) -echo "PORT $PORT" mkdir -p ${ETC_DIR} -echo "GITPATH ${ETC_DIR}gitpath" touch ${ETC_DIR}gitpath mkdir -p ${GIT_DIR}keys @@ -74,13 +70,16 @@ touch ${GIT_DIR}keys/id_rsa.pub echo "git clone \"ssh://git@${UUID}.odoo4projects.com:${PORT}/git-server/repos/odoo.git\"" > "${ETC_DIR}/gitpath" +echo "$(date '+%Y-%m-%d %H:%M:%S') Wrote git clone path for $UUID to ${ETC_DIR}gitpath (SSH port $PORT)" +echo "$(date '+%Y-%m-%d %H:%M:%S') Stopping and removing existing container $UUID (if any)" docker stop "$UUID" 2>/dev/null docker rm "$UUID" 2>/dev/null EXTRA_DOCKER_PARAMETER="" +echo "$(date '+%Y-%m-%d %H:%M:%S') Starting container $UUID from docker.odoo4projects.com/4projects/odoo_17:$BRANCH (SSH port $PORT, network 4server_4projects)" docker run -d --name "$UUID" \ --network 4server_4projects \ --restart=always \ @@ -112,7 +111,9 @@ docker run -d --name "$UUID" \ --label "traefik.http.routers.$UUID.tls=true" \ --label "traefik.http.routers.$UUID.service=$UUID" \ docker.odoo4projects.com/4projects/odoo_17:$BRANCH +echo "$(date '+%Y-%m-%d %H:%M:%S') docker run for $UUID finished with exit code $?" +echo "$(date '+%Y-%m-%d %H:%M:%S') Preparing filestore and fixing ownership in container $UUID" docker exec "$UUID" mkdir -p /var/lib/odoo/.local/share/Odoo docker exec "$UUID" rm -rf /var/lib/odoo/.local/share/Odoo/filestore docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore @@ -124,4 +125,6 @@ docker exec $UUID chown -R odoo:odoo /mnt/* docker exec $UUID chown odoo:odoo /git-server/keys/id_rsa.pub +echo "$(date '+%Y-%m-%d %H:%M:%S') Checking/creating database for $UUID (user $ODOO_DB_USER)" check_and_create_db +echo "$(date '+%Y-%m-%d %H:%M:%S') START ODOO 17 finished for $UUID" diff --git a/app/sbin/start/ODOO_18 b/app/sbin/start/ODOO_18 index f76575b..a823162 100755 --- a/app/sbin/start/ODOO_18 +++ b/app/sbin/start/ODOO_18 @@ -12,9 +12,7 @@ BRANCH="${BRANCH:-release}" ODOO_DB_USER="${UUID}" #export ODOO_DB_PASSWORD=$(echo "$SECRET" | jq -r '.psql') - -echo "ENV: $HDD $DOMAIN_SLOTS $BACKUP_SLOTS $CONTAINERDBID" -echo "DBID: $CONTAINERDBID" +echo "$(date '+%Y-%m-%d %H:%M:%S') START ODOO 18 UUID=$UUID BRANCH=$BRANCH DBID=$CONTAINERDBID DB_USER=$ODOO_DB_USER HDD=$HDD DOMAIN_SLOTS=$DOMAIN_SLOTS BACKUP_SLOTS=$BACKUP_SLOTS WORKER=$WORKER" BASEURL="${BASEURL:-/4server/data/$UUID}" DATA_DIR="$BASEURL/odoo/" @@ -38,25 +36,26 @@ if [ -f "$BASEURL/etc/domain" ]; then LABEL_DOMAINS+=("$domain") done < "$BASEURL/etc/domain" else - echo "[DEBUG] No additional domain file found at $BASEURL/etc/domain" + echo "$(date '+%Y-%m-%d %H:%M:%S') No custom domain file at $BASEURL/etc/domain, using default domain $UUID.odoo4projects.com only" fi RULE="" for d in "${LABEL_DOMAINS[@]}"; do RESOLVED_IP=$(nslookup "$d" 2>/dev/null | awk '/^Address: / { print $2 }' | head -n1 || true) if [ -z "$RESOLVED_IP" ]; then - echo "[DEBUG] Could not resolve $d, skipping" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d does not resolve, skipping" continue fi if [ "$RESOLVED_IP" = "$SERVER_IP" ]; then RULE+=" || Host(\`$d\`)" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d resolves to $RESOLVED_IP (server IP), added to Traefik rule" else - echo "[DEBUG] Skipping $d (does not match SERVER_IP $SERVER_IP)" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d resolves to $RESOLVED_IP but server IP is $SERVER_IP, skipping" fi done RULE="${RULE# || }" DOMAIN_LABEL="traefik.http.routers.$UUID.rule=$RULE" -echo "[DEBUG] Final Traefik label: $DOMAIN_LABEL" +echo "$(date '+%Y-%m-%d %H:%M:%S') Traefik label for $UUID: $DOMAIN_LABEL" docker exec "$UUID" mkdir -p /var/lib/odoo/.local/share/Odoo/ docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore @@ -64,9 +63,7 @@ docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/. find "$BASEURL" -type d -exec chmod 777 {} \; PORT=$((CONTAINERDBID + 2200)) -echo "PORT $PORT" mkdir -p ${ETC_DIR} -echo "GITPATH ${ETC_DIR}gitpath" touch ${ETC_DIR}gitpath mkdir -p ${GIT_DIR}keys @@ -74,13 +71,16 @@ touch ${GIT_DIR}keys/id_rsa.pub echo "git clone \"ssh://git@${UUID}.odoo4projects.com:${PORT}/git-server/repos/odoo.git\"" > "${ETC_DIR}/gitpath" +echo "$(date '+%Y-%m-%d %H:%M:%S') Wrote git clone path for $UUID to ${ETC_DIR}gitpath (SSH port $PORT)" +echo "$(date '+%Y-%m-%d %H:%M:%S') Stopping and removing existing container $UUID (if any)" docker stop "$UUID" 2>/dev/null docker rm "$UUID" 2>/dev/null EXTRA_DOCKER_PARAMETER="" +echo "$(date '+%Y-%m-%d %H:%M:%S') Starting container $UUID from docker.odoo4projects.com/4projects/odoo_18:$BRANCH (SSH port $PORT, network 4server_4projects)" docker run -d --name "$UUID" \ --network 4server_4projects \ --restart=always \ @@ -112,7 +112,9 @@ docker run -d --name "$UUID" \ --label "traefik.http.routers.$UUID.tls=true" \ --label "traefik.http.routers.$UUID.service=$UUID" \ docker.odoo4projects.com/4projects/odoo_18:$BRANCH +echo "$(date '+%Y-%m-%d %H:%M:%S') docker run for $UUID finished with exit code $?" +echo "$(date '+%Y-%m-%d %H:%M:%S') Preparing filestore and fixing ownership in container $UUID" docker exec "$UUID" mkdir -p /var/lib/odoo/.local/share/Odoo docker exec "$UUID" rm -rf /var/lib/odoo/.local/share/Odoo/filestore docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore @@ -124,4 +126,6 @@ docker exec $UUID chown -R odoo:odoo /mnt/* docker exec $UUID chown odoo:odoo /git-server/keys/id_rsa.pub +echo "$(date '+%Y-%m-%d %H:%M:%S') Checking/creating database for $UUID (user $ODOO_DB_USER)" check_and_create_db +echo "$(date '+%Y-%m-%d %H:%M:%S') START ODOO 18 finished for $UUID" diff --git a/app/sbin/start/ODOO_19 b/app/sbin/start/ODOO_19 index 33db1b7..e9919a7 100755 --- a/app/sbin/start/ODOO_19 +++ b/app/sbin/start/ODOO_19 @@ -11,10 +11,8 @@ BRANCH="${BRANCH:-release}" ODOO_DB_USER="${UUID}" #export ODOO_DB_PASSWORD=$(echo "$SECRET" | jq -r '.psql') -echo "***** $ODOO_DB_PASSWORD" -echo "ENV: $HDD $DOMAIN_SLOTS $BACKUP_SLOTS $CONTAINERDBID" -echo "DBID: $CONTAINERDBID" +echo "$(date '+%Y-%m-%d %H:%M:%S') START ODOO 19 UUID=$UUID BRANCH=$BRANCH DBID=$CONTAINERDBID DB_USER=$ODOO_DB_USER HDD=$HDD DOMAIN_SLOTS=$DOMAIN_SLOTS BACKUP_SLOTS=$BACKUP_SLOTS WORKER=$WORKER" BASEURL="${BASEURL:-/4server/data/$UUID}" DATA_DIR="$BASEURL/odoo/" @@ -38,34 +36,33 @@ if [ -f "$BASEURL/etc/domain" ]; then LABEL_DOMAINS+=("$domain") done < "$BASEURL/etc/domain" else - echo "[DEBUG] No additional domain file found at $BASEURL/etc/domain" + echo "$(date '+%Y-%m-%d %H:%M:%S') No custom domain file at $BASEURL/etc/domain, using default domain $UUID.odoo4projects.com only" fi RULE="" for d in "${LABEL_DOMAINS[@]}"; do RESOLVED_IP=$(nslookup "$d" 2>/dev/null | awk '/^Address: / { print $2 }' | head -n1 || true) if [ -z "$RESOLVED_IP" ]; then - echo "[DEBUG] Could not resolve $d, skipping" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d does not resolve, skipping" continue fi if [ "$RESOLVED_IP" = "$SERVER_IP" ]; then RULE+=" || Host(\`$d\`)" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d resolves to $RESOLVED_IP (server IP), added to Traefik rule" else - echo "[DEBUG] Skipping $d (does not match SERVER_IP $SERVER_IP)" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d resolves to $RESOLVED_IP but server IP is $SERVER_IP, skipping" fi done RULE="${RULE# || }" DOMAIN_LABEL="traefik.http.routers.$UUID.rule=$RULE" -echo "[DEBUG] Final Traefik label: $DOMAIN_LABEL" +echo "$(date '+%Y-%m-%d %H:%M:%S') Traefik label for $UUID: $DOMAIN_LABEL" find "$BASEURL" -type d -exec chmod 777 {} \; PORT=$((CONTAINERDBID + 2200)) -echo "PORT $PORT" mkdir -p ${ETC_DIR} chmod 777 ${ETC_DIR} -echo "GITPATH ${ETC_DIR}gitpath" touch ${ETC_DIR}gitpath mkdir -p ${BACKUP_DIR} @@ -77,13 +74,16 @@ touch ${GIT_DIR}keys/id_rsa.pub echo "git clone \"ssh://git@${UUID}.odoo4projects.com:${PORT}/git-server/repos/odoo.git\"" > "${ETC_DIR}/gitpath" +echo "$(date '+%Y-%m-%d %H:%M:%S') Wrote git clone path for $UUID to ${ETC_DIR}gitpath (SSH port $PORT)" +echo "$(date '+%Y-%m-%d %H:%M:%S') Stopping and removing existing container $UUID (if any)" docker stop "$UUID" 2>/dev/null docker rm "$UUID" 2>/dev/null EXTRA_DOCKER_PARAMETER="" +echo "$(date '+%Y-%m-%d %H:%M:%S') Starting container $UUID from docker.odoo4projects.com/4projects/odoo_19:$BRANCH (SSH port $PORT, network 4server_4projects)" docker run -d --name "$UUID" \ --network 4server_4projects \ --restart=always \ @@ -115,11 +115,15 @@ docker run -d --name "$UUID" \ --label "traefik.http.routers.$UUID.tls=true" \ --label "traefik.http.routers.$UUID.service=$UUID" \ docker.odoo4projects.com/4projects/odoo_19:$BRANCH +echo "$(date '+%Y-%m-%d %H:%M:%S') docker run for $UUID finished with exit code $?" +echo "$(date '+%Y-%m-%d %H:%M:%S') Fixing ownership in container $UUID" docker exec $UUID chown -R odoo:odoo /home/odoo/.local docker exec $UUID chown -R odoo:odoo /mnt/* docker exec $UUID chown -R git:git /git-server chmod 777 /4server/data/$UUID/cc +echo "$(date '+%Y-%m-%d %H:%M:%S') Checking/creating database for $UUID (user $ODOO_DB_USER)" check_and_create_db +echo "$(date '+%Y-%m-%d %H:%M:%S') START ODOO 19 finished for $UUID" diff --git a/app/sbin/start/ODOO_20 b/app/sbin/start/ODOO_20 index 4b94b27..a7e70da 100755 --- a/app/sbin/start/ODOO_20 +++ b/app/sbin/start/ODOO_20 @@ -11,10 +11,8 @@ BRANCH="${BRANCH:-release}" ODOO_DB_USER="${UUID}" #export ODOO_DB_PASSWORD=$(echo "$SECRET" | jq -r '.psql') -echo "***** $ODOO_DB_PASSWORD" -echo "ENV: $HDD $DOMAIN_SLOTS $BACKUP_SLOTS $CONTAINERDBID" -echo "DBID: $CONTAINERDBID" +echo "$(date '+%Y-%m-%d %H:%M:%S') START ODOO 20 UUID=$UUID BRANCH=$BRANCH DBID=$CONTAINERDBID DB_USER=$ODOO_DB_USER HDD=$HDD DOMAIN_SLOTS=$DOMAIN_SLOTS BACKUP_SLOTS=$BACKUP_SLOTS WORKER=$WORKER" BASEURL="${BASEURL:-/4server/data/$UUID}" DATA_DIR="$BASEURL/odoo/" @@ -38,34 +36,33 @@ if [ -f "$BASEURL/etc/domain" ]; then LABEL_DOMAINS+=("$domain") done < "$BASEURL/etc/domain" else - echo "[DEBUG] No additional domain file found at $BASEURL/etc/domain" + echo "$(date '+%Y-%m-%d %H:%M:%S') No custom domain file at $BASEURL/etc/domain, using default domain $UUID.$HOSTNAME.odoo4projects.com only" fi RULE="" for d in "${LABEL_DOMAINS[@]}"; do RESOLVED_IP=$(nslookup "$d" 2>/dev/null | awk '/^Address: / { print $2 }' | head -n1 || true) if [ -z "$RESOLVED_IP" ]; then - echo "[DEBUG] Could not resolve $d, skipping" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d does not resolve, skipping" continue fi if [ "$RESOLVED_IP" = "$SERVER_IP" ]; then RULE+=" || Host(\`$d\`)" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d resolves to $RESOLVED_IP (server IP), added to Traefik rule" else - echo "[DEBUG] Skipping $d (does not match SERVER_IP $SERVER_IP)" + echo "$(date '+%Y-%m-%d %H:%M:%S') Domain $d resolves to $RESOLVED_IP but server IP is $SERVER_IP, skipping" fi done RULE="${RULE# || }" DOMAIN_LABEL="traefik.http.routers.$UUID.rule=$RULE" -echo "[DEBUG] Final Traefik label: $DOMAIN_LABEL" +echo "$(date '+%Y-%m-%d %H:%M:%S') Traefik label for $UUID: $DOMAIN_LABEL" find "$BASEURL" -type d -exec chmod 777 {} \; PORT=$((CONTAINERDBID + 2200)) -echo "PORT $PORT" mkdir -p ${ETC_DIR} chmod 777 ${ETC_DIR} -echo "GITPATH ${ETC_DIR}gitpath" touch ${ETC_DIR}gitpath mkdir -p ${BACKUP_DIR} @@ -77,13 +74,16 @@ touch ${GIT_DIR}keys/id_rsa.pub echo "git clone \"ssh://git@${UUID}.${HOSTNAME}.odoo4projects.com:${PORT}/git-server/repos/odoo.git\"" > "${ETC_DIR}/gitpath" +echo "$(date '+%Y-%m-%d %H:%M:%S') Wrote git clone path for $UUID to ${ETC_DIR}gitpath (SSH port $PORT)" +echo "$(date '+%Y-%m-%d %H:%M:%S') Stopping and removing existing container $UUID (if any)" docker stop "$UUID" 2>/dev/null docker rm "$UUID" 2>/dev/null EXTRA_DOCKER_PARAMETER="" +echo "$(date '+%Y-%m-%d %H:%M:%S') Starting container $UUID from docker.odoo4projects.com/4projects/odoo_20:$BRANCH (SSH port $PORT, network 4server_4projects)" docker run -d --name "$UUID" \ --network 4server_4projects \ --restart=always \ @@ -115,11 +115,15 @@ docker run -d --name "$UUID" \ --label "traefik.http.routers.$UUID.tls=true" \ --label "traefik.http.routers.$UUID.service=$UUID" \ docker.odoo4projects.com/4projects/odoo_20:$BRANCH +echo "$(date '+%Y-%m-%d %H:%M:%S') docker run for $UUID finished with exit code $?" +echo "$(date '+%Y-%m-%d %H:%M:%S') Fixing ownership in container $UUID" docker exec $UUID chown -R odoo:odoo /home/odoo/.local docker exec $UUID chown -R odoo:odoo /mnt/* docker exec $UUID chown -R git:git /git-server chmod 777 /4server/data/$UUID/cc +echo "$(date '+%Y-%m-%d %H:%M:%S') Checking/creating database for $UUID (user $ODOO_DB_USER)" check_and_create_db +echo "$(date '+%Y-%m-%d %H:%M:%S') START ODOO 20 finished for $UUID" diff --git a/app/sbin/start/n8n b/app/sbin/start/n8n index acec4b1..0e07922 100755 --- a/app/sbin/start/n8n +++ b/app/sbin/start/n8n @@ -1,10 +1,11 @@ #!/usr/bin/env bash #--label "traefik.http.routers.${UUID}.middlewares=cors-headers@file" \ -echo "Start N8N container ${UUID}" # Get the hostname of the machine HOSTNAME=$(hostname) +echo "$(date '+%Y-%m-%d %H:%M:%S') START N8N UUID=${UUID} HOST=${HOSTNAME} DOMAIN=${UUID}.odoo4projects.com" + mkdir -p /4server/data/${UUID}/n8n mkdir -p /4server/data/${UUID}/data mkdir -p /4server/data/${UUID}/backup @@ -15,13 +16,14 @@ chmod 777 /4server/data/${UUID}/backup # Stop the container if it exists if docker ps -a --format '{{.Names}}' | grep -q "^${UUID}$"; then - echo "$(date '+%Y-%m-%d %H:%M') - stopping existing container $UUID" + echo "$(date '+%Y-%m-%d %H:%M:%S') Stopping and removing existing container $UUID" docker stop "$UUID" docker rm "$UUID" fi +echo "$(date '+%Y-%m-%d %H:%M:%S') Starting container $UUID from docker.odoo4projects.com/4projects/n8n:release (data in /4server/data/${UUID}, network 4server_4projects)" docker run -d \ --name "$UUID" \ -p 5678 \ @@ -59,4 +61,4 @@ docker run -d \ --network 4server_4projects \ docker.odoo4projects.com/4projects/n8n:release -echo "Started $1" +echo "$(date '+%Y-%m-%d %H:%M:%S') docker run for $UUID finished with exit code $?" diff --git a/app/update b/app/update index f29d46e..feff57b 100755 --- a/app/update +++ b/app/update @@ -35,7 +35,9 @@ prsync -h "/app/host_vars/hosts" -avz ./sbin/ /4server/sbin/ ### POSTGRESS rex mkdir -p /4server/data/postgres/etc -template templates/pq_hba.conf /4server/data/postgres/etc/ +template templates/pg_hba.conf /4server/data/postgres/etc/ +template templates/postgresql.conf /4server/data/postgres/etc/ +