CoolFace
Apppublic

gcodec/ain8n

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
run.sh281 linesDownload Raw Back to root
1#!/bin/bash2set -eo pipefail3 4# 导入环境变量5source /home/pn/.env6 7# 错误处理函数8handle_error() {9    echo "错误发生在第 $1 行"10    exit 111}12trap 'handle_error $LINENO' ERR13 14# 超时处理函数15timeout_handler() {16    echo "操作超时"17    exit 118}19 20# 等待服务就绪的通用函数21wait_for_service() {22    local service=$123    local host=$224    local port=$325    local timeout=${4:-$WAIT_TIMEOUT}26    27    echo "等待 $service 就绪..."28    local end=$((SECONDS + timeout))29    30    while [ $SECONDS -lt $end ]; do31        if nc -z "$host" "$port" >/dev/null 2>&1; then32            echo "$service 已就绪"33            return 034        fi35        echo "尝试连接 $service at $host:$port..."36        sleep 137    done38    39    echo "$service 启动超时"40    exit 141}42 43# 启动 Redis 服务44start_redis() {45    echo "Starting Redis server..."46    redis-server --daemonize yes47    sleep 148    if ! redis-cli ping > /dev/null 2>&1; then49        echo "Failed to start Redis server"50        exit 151    fi52    53    # 设置 Redis 配置54    redis-cli config set maxmemory 512mb55    redis-cli config set maxmemory-policy allkeys-lru56    echo ""57    echo "Redis server started successfully"58    echo ""59}60 61# 启动 Qdrant 服务62start_qdrant() {63    echo "Starting Qdrant server..."64    65    # 确保目录存在并有正确的权限66    mkdir -p /home/pn/.n8n/qdrant/storage67    mkdir -p /home/pn/.n8n/qdrant/config68    mkdir -p /home/pn/.n8n/qdrant/snapshots69    mkdir -p /home/pn/.n8n/qdrant/logs70    71    # 设置正确的权限72    chmod -R 755 /home/pn/.n8n/qdrant73    chown -R pn:pn /home/pn/.n8n/qdrant74    75    # 创建 Qdrant 配置文件76    cat > /home/pn/.n8n/qdrant/config/config.yaml <<EOF77service:78  host: 0.0.0.079  http_port: 633380  grpc_port: 633481  enable_cors: true82  enable_tls: false83  max_request_size_mb: 6484  max_workers: 085 86storage:87  storage_path: /home/pn/.n8n/qdrant/storage88  snapshots_path: /home/pn/.n8n/qdrant/snapshots89  on_disk_payload: true90  91  performance:92    max_search_threads: 093    max_optimization_threads: 094    95  optimizers:96    deleted_threshold: 0.297    vacuum_min_vector_number: 100098    default_segment_number: 099    max_segment_size_kb: null100    indexing_threshold_kb: 20000101    flush_interval_sec: 5102    103  hnsw_index:104    m: 16105    ef_construct: 100106    full_scan_threshold_kb: 10000107    max_indexing_threads: 0108    on_disk: false109 110logger:111  on_disk:112    enabled: true113    log_file: /home/pn/.n8n/qdrant/logs/qdrant.log114    log_level: INFO115 116telemetry_disabled: true117EOF118 119    # 确保配置文件有正确的权限120    chmod 644 /home/pn/.n8n/qdrant/config/config.yaml121    122    # 使用配置文件启动 Qdrant123    qdrant --config-path /home/pn/.n8n/qdrant/config/config.yaml > /home/pn/.n8n/qdrant/logs/startup.log 2>&1 &124    125    # 等待 Qdrant 启动126    local timeout=30127    local end=$((SECONDS + timeout))128    129    while [ $SECONDS -lt $end ]; do130        if curl -s http://localhost:6333/health >/dev/null; then131            echo "Qdrant server started successfully"132            133            # 预创建常用集合134            echo "Creating default collections..."135            136            # 创建文本向量集合 (768维,适用于多数文本嵌入模型)137            curl -X PUT 'http://localhost:6333/collections/text_vectors' \138                -H 'Content-Type: application/json' \139                -d '{140                    "vectors": {141                        "size": 768,142                        "distance": "Cosine",143                        "on_disk": true144                    },145                    "optimizers_config": {146                        "default_segment_number": 2,147                        "indexing_threshold": 20000,148                        "memmap_threshold": 10000149                    },150                    "hnsw_config": {151                        "m": 16,152                        "ef_construct": 100,153                        "full_scan_threshold": 10000,154                        "max_indexing_threads": 0,155                        "on_disk": true156                    },157                    "init_from": {158                        "collection_name": "text_vectors"159                    }160                }'161            162            # 创建图像向量集合 (512维,适用于多数图像嵌入模型)163            curl -X PUT 'http://localhost:6333/collections/image_vectors' \164                -H 'Content-Type: application/json' \165                -d '{166                    "vectors": {167                        "size": 512,168                        "distance": "Cosine"169                    },170                    "optimizers_config": {171                        "default_segment_number": 2,172                        "indexing_threshold": 20000173                    },174                    "hnsw_config": {175                        "m": 16,176                        "ef_construct": 100,177                        "full_scan_threshold": 10000178                    }179                }'180            181            # 创建通用向量集合 (1536维,适用于 OpenAI 的嵌入模型)182            curl -X PUT 'http://localhost:6333/collections/openai_vectors' \183                -H 'Content-Type: application/json' \184                -d '{185                    "vectors": {186                        "size": 1536,187                        "distance": "Cosine"188                    },189                    "optimizers_config": {190                        "default_segment_number": 2,191                        "indexing_threshold": 20000192                    },193                    "hnsw_config": {194                        "m": 16,195                        "ef_construct": 100,196                        "full_scan_threshold": 10000197                    }198                }'199                200            # 验证集合创建状态并输出详细信息201            echo -e "\nVerifying collections:"202            curl -s 'http://localhost:6333/collections' | jq '.'203            204            # 测试连接205            echo -e "\nTesting Qdrant connection:"206            curl -v http://localhost:6333/health207            208            return 0209        fi210        echo "Waiting for Qdrant to start..."211        sleep 1212        213        # 检查是否有错误日志214        if grep -i "error" /home/pn/.n8n/qdrant/logs/startup.log >/dev/null 2>&1; then215            echo "Error found in Qdrant logs:"216            tail -n 10 /home/pn/.n8n/qdrant/logs/startup.log217        fi218    done219    220    echo "Failed to start Qdrant server"221    echo "Last 10 lines of Qdrant log:"222    tail -n 10 /home/pn/.n8n/qdrant/logs/startup.log223    exit 1224}225 226# 检查服务状态227check_services() {228    echo "检查服务状态..."229    230    # 检查 Redis231    echo "Redis 状态:"232    redis-cli info | grep 'used_memory\|connected_clients\|total_connections_received'233       234    # 检查 Qdrant235    echo "Qdrant 状态:"236    if curl -s http://localhost:6333/metrics >/dev/null; then237        echo "Qdrant 运行正常"238        curl -s http://localhost:6333/metrics239        240        # 显示集合信息241        echo "Qdrant 集合列表:"242        curl -s http://localhost:6333/collections243    else244        echo "Qdrant 服务异常"245        tail -n 10 /home/pn/.n8n/qdrant/qdrant.log246    fi247}248 249# 主流程250main() {251    current_time=$(date +"%Y-%m-%d %H:%M:%S")252    echo "Starting services at $current_time"253    254    # 输出配置信息255    echo "Database Configuration:"256    echo "Host: ${DB_POSTGRESDB_HOST}"257    echo "Port: ${DB_POSTGRESDB_PORT}"258    echo "User: ${DB_POSTGRESDB_USER}"259    echo "Database: ${DB_POSTGRESDB_DATABASE}"260    echo "Type: ${DB_TYPE}"261    262    # 启动服务263    wait_for_service "PostgreSQL" "${DB_POSTGRESDB_HOST}" "${DB_POSTGRESDB_PORT}"264    echo ""265    start_redis266    echo ""267    start_qdrant268    echo ""269    check_services270    271    # 设置 N8N 环境变量272    source /home/pn/n8n/config/n8n_env.sh273    274    echo ""275    echo "Starting n8n..."276    exec n8n start277}278 279# 执行主流程280main "$@"281