diff --git a/app/sbin/restartAll b/app/sbin/restartAll new file mode 100755 index 0000000..71eed01 --- /dev/null +++ b/app/sbin/restartAll @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +set -e + +DB_PATH="/4server/data/contracts.db" +COMPOSE_FILE="/4server/docker-compose.yml" +START_CONTAINER="/4server/sbin/startContainer" + +echo "$(date '+%Y-%m-%d %H:%M:%S') Stopping and removing all Docker containers..." + +# Remove all containers, including running containers +containers=$(doas docker ps -a -q) + +if [ -n "$containers" ]; then + doas docker rm -f $containers +else + echo "No containers to remove." +fi + +echo "$(date '+%Y-%m-%d %H:%M:%S') Starting infrastructure..." + +# Start infrastructure +doas docker compose -f "$COMPOSE_FILE" up -d + +echo "$(date '+%Y-%m-%d %H:%M:%S') Infrastructure started." + +# Get all non-expired container UUIDs +echo "$(date '+%Y-%m-%d %H:%M:%S') Loading active containers from database..." + +uuids=$(sqlite3 "$DB_PATH" " + SELECT UUID + FROM containers + WHERE expires > date('now'); +") + +# Start each active container +for uuid in $uuids; do + echo "$(date '+%Y-%m-%d %H:%M:%S') Starting $uuid" + + "$START_CONTAINER" "$uuid" +done + +echo "$(date '+%Y-%m-%d %H:%M:%S') Restart complete." diff --git a/app/sbin/start/ODOO_20 b/app/sbin/start/ODOO_20 new file mode 100755 index 0000000..4b94b27 --- /dev/null +++ b/app/sbin/start/ODOO_20 @@ -0,0 +1,125 @@ +#!/bin/bash + +# Load functions +source /4server/sbin/ODOO_19/ODOO_19.lib +source /4server/sbin/helpers +get_contract_info + +# Config variables +UUID="${UUID:-default}" +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" + +BASEURL="${BASEURL:-/4server/data/$UUID}" +DATA_DIR="$BASEURL/odoo/" +CUSTOM_DIR="$BASEURL/git/$UUID/custom/" +ENTERPRISE_DIR="$BASEURL/git/$UUID/enterprise/" +LOGS_DIR="$BASEURL/logs/" +CONFIG_DIR="$BASEURL/config/" +CC_DIR="$BASEURL/cc/" +BACKUP_DIR="/BACKUP/$UUID" +GIT_DIR="$BASEURL/git-server/" +INSTALL_DIR="$BASEURL/install/" +SSH_DIR="$BASEURL/.ssh/" +ETC_DIR="$BASEURL/etc/" + +SERVER_IP=$(ip -4 addr show eth0 | awk '/inet/ {print $2}' | cut -d/ -f1 | head -n1) + +LABEL_DOMAINS=("$UUID.$HOSTNAME.odoo4projects.com") +if [ -f "$BASEURL/etc/domain" ]; then + while IFS= read -r domain || [[ -n $domain ]]; do + [ -z "$domain" ] && continue + LABEL_DOMAINS+=("$domain") + done < "$BASEURL/etc/domain" +else + echo "[DEBUG] No additional domain file found at $BASEURL/etc/domain" +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" + continue + fi + if [ "$RESOLVED_IP" = "$SERVER_IP" ]; then + RULE+=" || Host(\`$d\`)" + else + echo "[DEBUG] Skipping $d (does not match SERVER_IP $SERVER_IP)" + fi +done +RULE="${RULE# || }" +DOMAIN_LABEL="traefik.http.routers.$UUID.rule=$RULE" +echo "[DEBUG] Final Traefik label: $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} +chmod 777 ${BACKUP_DIR} + +mkdir -p ${GIT_DIR}keys +chmod 777 ${GIT_DIR} +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" + + +docker stop "$UUID" 2>/dev/null +docker rm "$UUID" 2>/dev/null + +EXTRA_DOCKER_PARAMETER="" + +docker run -d --name "$UUID" \ + --network 4server_4projects \ + --restart=always \ + $EXTRA_DOCKER_PARAMETER \ + -v "$DATA_DIR/odoo-web-data:/home/odoo/.local/share/Odoo" \ + -v "$CUSTOM_DIR:/mnt/addons/custom" \ + -v "$ENTERPRISE_DIR:/mnt/addons/enterprise" \ + -v "$LOGS_DIR:/mnt/logs" \ + -v "$CC_DIR:/mnt/cc" \ + -v "$BACKUP_DIR:/mnt/backup" \ + -v "$GIT_DIR:/git-server" \ + -v "$INSTALL_DIR:/mnt/install" \ + -v "$SSH_DIR:/etc/sshkey" \ + -v "$ETC_DIR:/mnt/etc" \ + -p "$PORT:22" \ + -e HOST="beedb" \ + -e USER="$ODOO_DB_USER" \ + -e PASSWORD="$ODOO_DB_PASSWORD" \ + -e UUID="$UUID" \ + -e HDD="$HDD" \ + -e DOMAIN_SLOTS="$DOMAIN_SLOTS" \ + -e BACKUP_SLOTS="$BACKUP_SLOTS" \ + -e WORKER="$WORKER" \ + -e GIT="$GIT" \ + --label "$DOMAIN_LABEL" \ + --label "traefik.http.services.$UUID.loadbalancer.server.port=8069" \ + --label "traefik.http.routers.$UUID.entrypoints=web, websecure" \ + --label "traefik.http.routers.$UUID.tls.certresolver=production" \ + --label "traefik.http.routers.$UUID.tls=true" \ + --label "traefik.http.routers.$UUID.service=$UUID" \ + docker.odoo4projects.com/4projects/odoo_20:$BRANCH + + +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 + +check_and_create_db diff --git a/app/sbin/startContainer b/app/sbin/startContainer index a2687fb..91b6bd6 100755 --- a/app/sbin/startContainer +++ b/app/sbin/startContainer @@ -56,7 +56,9 @@ case "$SECOND_PART" in "$BIN_PATH/start/ODOO_17" ;; - + 005) + "$BIN_PATH/start/ODOO_20" + ;; *) echo "$(date '+%Y-%m-%d %H:%M:%S') Unknown UUID type: $SECOND_PART" diff --git a/app/templates/docker-compose.yml b/app/templates/docker-compose.yml index e653b6b..22d386f 100644 --- a/app/templates/docker-compose.yml +++ b/app/templates/docker-compose.yml @@ -38,4 +38,4 @@ networks: config: - subnet: 10.5.0.0/16 gateway: 10.5.0.1 - ip_range: 10.5.1.0/20 + ip_range: 10.5.16.0/20