#!/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 "$(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/" 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 "$(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 "$(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 "$(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 "$(date '+%Y-%m-%d %H:%M:%S') Traefik label for $UUID: $DOMAIN_LABEL" find "$BASEURL" -type d -exec chmod 777 {} \; PORT=$((CONTAINERDBID + 2200)) mkdir -p ${ETC_DIR} chmod 777 ${ETC_DIR} 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" 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 \ $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 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"