mirror of
https://github.com/kossakovsky/n8n-install.git
synced 2026-03-07 14:23:08 +00:00
the postiz backend image uses dotenv-cli to load /app/.env, which doesn't exist when config is only passed via docker environment vars. generate postiz.env from root .env and mount it read-only. also handle edge case where docker creates the file as a directory on bind mount failure, and quote values to prevent dotenv-cli misparses.
99 lines
3.9 KiB
Bash
Executable File
99 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# =============================================================================
|
|
# restart.sh - Restart all services
|
|
# =============================================================================
|
|
# Restarts all Docker Compose services including dynamically generated
|
|
# worker/runner compose files and external service stacks.
|
|
#
|
|
# Handles compose files via build_compose_files_array() from utils.sh:
|
|
# - docker-compose.yml (main)
|
|
# - docker-compose.n8n-workers.yml (if exists and n8n profile active)
|
|
# - supabase/docker/docker-compose.yml (if exists and supabase profile active)
|
|
# - dify/docker/docker-compose.yaml (if exists and dify profile active)
|
|
# - docker-compose.override.yml (if exists, user overrides with highest precedence)
|
|
#
|
|
# Usage: bash scripts/restart.sh
|
|
# =============================================================================
|
|
|
|
set -e
|
|
|
|
# Source the utilities file and initialize paths
|
|
source "$(dirname "$0")/utils.sh"
|
|
init_paths
|
|
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# Load environment to check active profiles
|
|
load_env
|
|
|
|
PROJECT_NAME="localai"
|
|
|
|
# Time to wait for external services (Supabase, Dify) to initialize before starting main stack
|
|
EXTERNAL_SERVICE_INIT_DELAY=10
|
|
|
|
# Build compose files array (sets global COMPOSE_FILES)
|
|
build_compose_files_array
|
|
|
|
# Ensure postiz.env exists if Postiz is enabled (required for volume mount)
|
|
# This is a safety net for cases where restart runs without start_services.py
|
|
# (e.g., git pull + make restart instead of make update)
|
|
if is_profile_active "postiz"; then
|
|
if [ -d "$PROJECT_ROOT/postiz.env" ]; then
|
|
log_warning "postiz.env exists as a directory (created by Docker). Removing and recreating as file."
|
|
rm -rf "$PROJECT_ROOT/postiz.env"
|
|
touch "$PROJECT_ROOT/postiz.env"
|
|
elif [ ! -f "$PROJECT_ROOT/postiz.env" ]; then
|
|
log_warning "postiz.env not found, creating empty file. Run 'make update' to generate full config."
|
|
touch "$PROJECT_ROOT/postiz.env"
|
|
fi
|
|
fi
|
|
|
|
log_info "Restarting services..."
|
|
log_info "Using compose files: ${COMPOSE_FILES[*]}"
|
|
|
|
# Stop all services using ALL compose files (including external stacks)
|
|
# This ensures clean shutdown of everything before restart
|
|
docker compose -p "$PROJECT_NAME" "${COMPOSE_FILES[@]}" down
|
|
|
|
# Start services in correct order (matching start_services.py behavior)
|
|
# NOTE: External stacks (Supabase, Dify) must be started SEPARATELY because their
|
|
# compose files use relative paths for volumes/configs. When combined with main
|
|
# docker-compose.yml via -f flags, the relative paths resolve incorrectly.
|
|
# Solution: Start external stacks first from their own directories, then start main stack.
|
|
|
|
if is_profile_active "supabase"; then
|
|
SUPABASE_COMPOSE="$PROJECT_ROOT/supabase/docker/docker-compose.yml"
|
|
if [ -f "$SUPABASE_COMPOSE" ]; then
|
|
log_info "Starting Supabase services..."
|
|
docker compose -p "$PROJECT_NAME" -f "$SUPABASE_COMPOSE" up -d
|
|
log_info "Waiting for Supabase to initialize..."
|
|
sleep "$EXTERNAL_SERVICE_INIT_DELAY"
|
|
fi
|
|
fi
|
|
|
|
if is_profile_active "dify"; then
|
|
DIFY_COMPOSE="$PROJECT_ROOT/dify/docker/docker-compose.yaml"
|
|
if [ -f "$DIFY_COMPOSE" ]; then
|
|
log_info "Starting Dify services..."
|
|
docker compose -p "$PROJECT_NAME" -f "$DIFY_COMPOSE" up -d
|
|
log_info "Waiting for Dify to initialize..."
|
|
sleep "$EXTERNAL_SERVICE_INIT_DELAY"
|
|
fi
|
|
fi
|
|
|
|
# Build main compose files (exclude external stacks that were started separately)
|
|
MAIN_COMPOSE_FILES=("-f" "$PROJECT_ROOT/docker-compose.yml")
|
|
if path=$(get_n8n_workers_compose); then
|
|
MAIN_COMPOSE_FILES+=("-f" "$path")
|
|
fi
|
|
OVERRIDE_COMPOSE="$PROJECT_ROOT/docker-compose.override.yml"
|
|
if [ -f "$OVERRIDE_COMPOSE" ]; then
|
|
MAIN_COMPOSE_FILES+=("-f" "$OVERRIDE_COMPOSE")
|
|
fi
|
|
|
|
# Start main services
|
|
log_info "Starting main services..."
|
|
docker compose -p "$PROJECT_NAME" "${MAIN_COMPOSE_FILES[@]}" up -d
|
|
|
|
log_success "Services restarted successfully!"
|