This commit is contained in:
Oliver
2025-08-16 21:06:27 +02:00
parent 2d3da5da96
commit 6de8bd9564
6 changed files with 56 additions and 46 deletions

View File

@@ -1,51 +1,48 @@
#!/usr/bin/env bash #!/usr/bin/env bash
exec > /4server/data/startContainer.log 2>&1
echo "$(date '+%Y-%m-%d %H:%M') - startContainer $1"
CONTAINER_NAME="$1" echo "Start N8N container ${UUID}"
# Get the hostname of the machine # Get the hostname of the machine
HOSTNAME=$(hostname) HOSTNAME=$(hostname)
mkdir -p /4server/data/${CONTAINER_NAME}/n8n mkdir -p /4server/data/${UUID}/n8n
mkdir -p /4server/data/${CONTAINER_NAME}/data mkdir -p /4server/data/${UUID}/data
sudo chmod 777 /4server/data/${CONTAINER_NAME}/n8n chmod 777 /4server/data/${UUID}/n8n
sudo chmod 777 /4server/data/${CONTAINER_NAME}/data chmod 777 /4server/data/${UUID}/data
# Stop the container if it exists # Stop the container if it exists
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then if docker ps -a --format '{{.Names}}' | grep -q "^${UUID}$"; then
echo "$(date '+%Y-%m-%d %H:%M') - stopping existing container $CONTAINER_NAME" echo "$(date '+%Y-%m-%d %H:%M') - stopping existing container $UUID"
docker stop "$CONTAINER_NAME" docker stop "$UUID"
docker rm "$CONTAINER_NAME" docker rm "$UUID"
fi fi
docker run -d \ docker run -d \
--name "$CONTAINER_NAME" \ --name "$UUID" \
-p 5678 \ -p 5678 \
--cap-add=SYS_ADMIN \ --cap-add=SYS_ADMIN \
--security-opt seccomp=unconfined \ --security-opt seccomp=unconfined \
--restart=always \ --restart=always \
-e N8N_HOST="${CONTAINER_NAME}.od8n.com" \ -e N8N_HOST="${UUID}.od8n.com" \
-e N8N_PORT=5678 \ -e N8N_PORT=5678 \
-e N8N_PROTOCOL=https \ -e N8N_PROTOCOL=https \
-e NODE_ENV=production \ -e NODE_ENV=production \
-e WEBHOOK_URL="https://${CONTAINER_NAME}.od8n.com/" \ -e WEBHOOK_URL="https://${UUID}.od8n.com/" \
-e GENERIC_TIMEZONE="UTC-3" \ -e GENERIC_TIMEZONE="UTC-3" \
-v "/4server/data/${CONTAINER_NAME}/n8n:/home/node/.n8n" \ -v "/4server/data/${UUID}/n8n:/home/node/.n8n" \
-v "/4server/data/${CONTAINER_NAME}/data:/data" \ -v "/4server/data/${UUID}/data:/data" \
--label "traefik.enable=true" \ --label "traefik.enable=true" \
--label "traefik.http.routers.${CONTAINER_NAME}.rule=Host(\`${CONTAINER_NAME}.od8n.com\`)" \ --label "traefik.http.routers.${UUID}.rule=Host(\`${UUID}.od8n.com\`)" \
--label "traefik.http.routers.${CONTAINER_NAME}.entrypoints=web,websecure" \ --label "traefik.http.routers.${UUID}.entrypoints=web,websecure" \
--label "traefik.http.routers.${CONTAINER_NAME}.tls=true" \ --label "traefik.http.routers.${UUID}.tls=true" \
--label "traefik.http.routers.${CONTAINER_NAME}.tls.certresolver=production" \ --label "traefik.http.routers.${UUID}.tls.certresolver=production" \
--label "traefik.http.services.${CONTAINER_NAME}.loadbalancer.server.port=5678" \ --label "traefik.http.services.${UUID}.loadbalancer.server.port=5678" \
--network docker-compose_4projects \ --network 4server_4projects \
n8nio/n8n:latest n8nio/n8n:latest

43
app/sbin/startContainer Normal file → Executable file
View File

@@ -1,6 +1,9 @@
#!/bin/bash #!/bin/bash
# Usage: ./start_by_uuid.sh <uuid> # Usage: ./start_by_uuid.sh <uuid>
# Example: ./start_by_uuid.sh abc-001-xxxx-xxxx-xxxx # Example: ./start_by_uuid.sh abc-001-xxxx-xxxx-xxxx
exec > /4server/data/log/startContainer.log 2>&1
echo "$(date '+%Y-%m-%d %H:%M') Start container $1"
DB_PATH="/4server/data/contracts.db" DB_PATH="/4server/data/contracts.db"
BIN_PATH="/4server/sbin" BIN_PATH="/4server/sbin"
@@ -12,25 +15,31 @@ if [[ -z "$UUID" ]]; then
exit 1 exit 1
fi fi
# Fetch all info from SQLite and export as environment variables while IFS="=" read -r key value; do
eval $(sqlite3 -separator "=" "$DB_PATH" \ export "$key=$value"
"SELECT 'UUID=' || UUID, done < <(sqlite3 "$DB_PATH" "
'EMAIL=' || email, SELECT 'UUID=' || UUID FROM containers WHERE UUID='$UUID'
'EXPIRES=' || expires, UNION ALL SELECT 'EMAIL=' || email FROM containers WHERE UUID='$UUID'
'TAGS=' || tags, UNION ALL SELECT 'EXPIRES=' || expires FROM containers WHERE UUID='$UUID'
'ENV=' || env, UNION ALL SELECT 'TAGS=' || tags FROM containers WHERE UUID='$UUID'
'AFFILIATE=' || affiliate, UNION ALL SELECT 'ENV=' || env FROM containers WHERE UUID='$UUID'
'IMAGE=' || image, UNION ALL SELECT 'AFFILIATE=' || affiliate FROM containers WHERE UUID='$UUID'
'HISTORY=' || history, UNION ALL SELECT 'IMAGE=' || image FROM containers WHERE UUID='$UUID'
'COMMENT=' || comment, UNION ALL SELECT 'HISTORY=' || history FROM containers WHERE UUID='$UUID'
'DOMAINS=' || domains, UNION ALL SELECT 'COMMENT=' || comment FROM containers WHERE UUID='$UUID'
'STATUS=' || status, UNION ALL SELECT 'DOMAINS=' || domains FROM containers WHERE UUID='$UUID'
'CREATED=' || created, UNION ALL SELECT 'STATUS=' || status FROM containers WHERE UUID='$UUID'
'BUMP=' || bump UNION ALL SELECT 'CREATED=' || created FROM containers WHERE UUID='$UUID'
FROM containers WHERE UUID='$UUID';" | sed 's/ /\\ /g') UNION ALL SELECT 'BUMP=' || bump FROM containers WHERE UUID='$UUID';
")
# Debug: print loaded environment variables # Debug: print loaded environment variables
# env | grep -E 'UUID|EMAIL|EXPIRES|TAGS|ENV|AFFILIATE|IMAGE|HISTORY|COMMENT|DOMAINS|STATUS|CREATED|BUMP' env | grep -E 'UUID|EMAIL|EXPIRES|TAGS|ENV|AFFILIATE|IMAGE|HISTORY|COMMENT|DOMAINS|STATUS|CREATED|BUMP'
echo "UUID ${UUID}"
# Extract the second part of UUID (split by "-") # Extract the second part of UUID (split by "-")
SECOND_PART=$(echo "$UUID" | cut -d'-' -f2) SECOND_PART=$(echo "$UUID" | cut -d'-' -f2)

View File

@@ -25,7 +25,7 @@ services:
- /run/docker.sock:/run/docker.sock:ro - /run/docker.sock:/run/docker.sock:ro
- /4server/data/traefik/etc:/etc/traefik - /4server/data/traefik/etc:/etc/traefik
- /4server/data/traefik/certs:/certs - /4server/data/traefik/certs:/certs
- /4server/data/traefik/traefik-logs:/var/log/traefik - /4server/data/log/traefik-logs:/var/log/traefik
networks: networks:
- 4projects - 4projects
restart: unless-stopped restart: unless-stopped

View File

@@ -16,8 +16,8 @@ if [ -f /etc/od8n ]; then
fi fi
# Logs # Logs
output_log="/4server/data/api.log" output_log="/4server/data/log/api.log"
error_log="/4server/data/api.log" error_log="/4server/data/log/api.log"
depend() { depend() {
need net need net

View File

@@ -6,7 +6,7 @@
# ========= CONFIG ========= # ========= CONFIG =========
API_KEY="your-secret-api-key" API_KEY="your-secret-api-key"
BASE_URL="https://dev.local" BASE_URL="https://dev.local"
CONTAINER_ID="123e4567-e89b-12d3-a456-426614174000" # sample UUID CONTAINER_ID="001-001-123e4567-e89b-12d3-a456-426614174000" # sample UUID
# ========================== # ==========================
# --- Functions for each endpoint --- # --- Functions for each endpoint ---
@@ -24,7 +24,11 @@ update_container() {
"email": "user@example.com", "email": "user@example.com",
"expires": "2025-12-31", "expires": "2025-12-31",
"status": "active", "status": "active",
"created": "2025-08-16" "created": "2025-08-16",
"tags": "N8N, SQLITE",
"affiliate": "OLIVER",
"domains": "N8N.local",
"status":"hot"
}' }'
} }

View File

@@ -3,7 +3,7 @@
### SYSTEM SETUP ### SYSTEM SETUP
rex doas mkdir -p /4server rex doas mkdir -p /4server
rex doas chmod 777 /4server rex doas chmod 777 /4server
rex mkdir -p /4server/data rex mkdir -p /4server/data/log
template templates/hosts /etc/hosts template templates/hosts /etc/hosts