首页
斐讯设备
疯言疯语
系统运维
编程语言
网站建设
友情连接
推荐
autojs
Search
1
charles破解注册码(含windows和mac)最新安装教程「亲测有效」
65 阅读
2
mac下的好用工具小身材大本领-NeatDownloadManager-ndm下载器
57 阅读
3
docker更新现有容器为自动重启
44 阅读
4
【N1和Armbian】一、N1刷Linux系统armbian
43 阅读
5
aris常用命令收集
39 阅读
登录
Search
标签搜索
JAVA
JAVA学习系列
docker
Linux
js
N1
git
模块二
模块一
端口
模块五
数据库
模块九
模块四
镜像
模块三
模块六
MySQL
百度网盘
nginx
DaiMaFengZi
累计撰写
598
篇文章
累计收到
15
条评论
首页
栏目
斐讯设备
疯言疯语
系统运维
编程语言
网站建设
页面
友情连接
推荐
autojs
搜索到
2
篇与
的结果
2026-09-11
悟空 AI CRM 部署指南,与宝塔共存解决端口占用,重置管理密码
悟空 AI CRM 部署指南,与宝塔共存解决端口占用,重置管理密码本文档介绍如何在服务器上快速部署悟空 AI CRM,支持 Docker 一键启动,也可与宝塔面板共存。一、环境要求Docker ≥ 20.10Docker Compose ≥ 2.0最少 2C4G 内存,10G 磁盘空间国内服务器推荐搭配华为云 SWR 镜像源(已内置)二、克隆仓库并启动git clone https://github.com/WuKongOpenSource/Wukong-AICRM.git cd Wukong-AICRM/docker docker-compose up -d启动完成后访问 http://localhost 即可。三、初始密码重置首次登录后请立即修改默认密码。方式一:动态生成 BCrypt Hash(推荐)HASH=$(docker run --rm httpd:2.4 htpasswd -bnBC 10 "" admin123 | tr -d ':\n' | sed 's/\$2y/\$2a/') echo "Generated hash: $HASH" docker exec -it WeKnora-postgres psql -U postgres -d WeKnora \ -c "UPDATE manager_user SET password='$HASH' WHERE username='admin';"方式二:硬编码固定 Hash如果上面的命令因 $ 转义问题执行失败,可直接使用以下命令:docker exec -it WeKnora-postgres psql -U postgres -d WeKnora \ -c "UPDATE manager_user SET password='\$2a\$10\$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy' WHERE username='admin';"验证密码是否更新成功docker exec -it WeKnora-postgres psql -U postgres -d WeKnora \ -c "SELECT username, password FROM manager_user WHERE username='admin';"看到新的 $2a$10$... 格式的 hash 即表示成功。无需重启容器。用户名密码adminadmin123四、Docker Compose 配置以下为与宝塔面板共存的完整 docker-compose.yaml。services: frontend: image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/wechatopenai/weknora-ui:v0.3.6 container_name: WeKnora-frontend volumes: - ./nginx/default.conf.template:/etc/nginx/templates/default.conf.template - ./nginx/cert:/etc/nginx/cert ports: - "${FRONTEND_PORT:-80}:80" environment: - MAX_FILE_SIZE_MB=${MAX_FILE_SIZE_MB:-50} - BASE_PATH=${CRM_BASE_PATH:-/} depends_on: app: condition: service_healthy crm: condition: service_healthy networks: - crm-network restart: unless-stopped app: image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/wechatopenai/weknora-app:v0.3.6 container_name: WeKnora-app ports: - "${APP_PORT:-8080}:8080" volumes: - data-files:/data/files healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s environment: - COS_SECRET_ID=${COS_SECRET_ID:-} - COS_SECRET_KEY=${COS_SECRET_KEY:-} - COS_REGION=${COS_REGION:-} - COS_BUCKET_NAME=${COS_BUCKET_NAME:-} - COS_APP_ID=${COS_APP_ID:-} - COS_PATH_PREFIX=${COS_PATH_PREFIX:-} - COS_ENABLE_OLD_DOMAIN=${COS_ENABLE_OLD_DOMAIN:-} - GIN_MODE=${GIN_MODE:-release} - DISABLE_REGISTRATION=${DISABLE_REGISTRATION:-false} - DB_DRIVER=postgres - DB_HOST=postgres - DB_PORT=5432 - DB_USER=${DB_USER:-} - DB_PASSWORD=${DB_PASSWORD:-} - DB_NAME=${DB_NAME:-} - TZ=Asia/Shanghai - OTEL_EXPORTER_OTLP_ENDPOINT=jaeger:4317 - OTEL_SERVICE_NAME=WeKnora - OTEL_TRACES_EXPORTER=otlp - OTEL_METRICS_EXPORTER=none - OTEL_LOGS_EXPORTER=none - OTEL_PROPAGATORS=tracecontext,baggage - RETRIEVE_DRIVER=${RETRIEVE_DRIVER:-} - DOCREADER_ADDR=docreader:50051 - STORAGE_TYPE=${STORAGE_TYPE:-} - LOCAL_STORAGE_BASE_DIR=${LOCAL_STORAGE_BASE_DIR:-} - AUTO_RECOVER_DIRTY=${AUTO_RECOVER_DIRTY:-true} - MINIO_ENDPOINT=minio:9000 - MINIO_ACCESS_KEY_ID=${MINIO_ACCESS_KEY_ID:-minioadmin} - MINIO_SECRET_ACCESS_KEY=${MINIO_SECRET_ACCESS_KEY:-minioadmin} - MINIO_BUCKET_NAME=${MINIO_BUCKET_NAME:-} - OLLAMA_BASE_URL=${OLLAMA_BASE_URL:-http://host.docker.internal:11434} - STREAM_MANAGER_TYPE=${STREAM_MANAGER_TYPE:-} - REDIS_ADDR=redis:6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-} - REDIS_DB=${REDIS_DB:-} - REDIS_PREFIX=${REDIS_PREFIX:-} - ENABLE_GRAPH_RAG=${ENABLE_GRAPH_RAG:-} - CONCURRENCY_POOL_SIZE=${CONCURRENCY_POOL_SIZE:-5} - JWT_SECRET=${JWT_SECRET:-} - INIT_LLM_MODEL_NAME=${INIT_LLM_MODEL_NAME:-} - INIT_LLM_MODEL_BASE_URL=${INIT_LLM_MODEL_BASE_URL:-} - INIT_LLM_MODEL_API_KEY=${INIT_LLM_MODEL_API_KEY:-} - INIT_EMBEDDING_MODEL_NAME=${INIT_EMBEDDING_MODEL_NAME:-} - INIT_EMBEDDING_MODEL_BASE_URL=${INIT_EMBEDDING_MODEL_BASE_URL:-} - INIT_EMBEDDING_MODEL_API_KEY=${INIT_EMBEDDING_MODEL_API_KEY:-} - INIT_EMBEDDING_MODEL_DIMENSION=${INIT_EMBEDDING_MODEL_DIMENSION:-} - INIT_EMBEDDING_MODEL_ID=${INIT_EMBEDDING_MODEL_ID:-} - INIT_RERANK_MODEL_NAME=${INIT_RERANK_MODEL_NAME:-} - INIT_RERANK_MODEL_BASE_URL=${INIT_RERANK_MODEL_BASE_URL:-} - INIT_RERANK_MODEL_API_KEY=${INIT_RERANK_MODEL_API_KEY:-} - MAX_FILE_SIZE_MB=${MAX_FILE_SIZE_MB:-50} depends_on: redis: condition: service_started postgres: condition: service_healthy docreader: condition: service_healthy networks: - crm-network restart: unless-stopped extra_hosts: - "host.docker.internal:host-gateway" docreader: image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/wechatopenai/weknora-docreader:v0.3.6 build: context: . dockerfile: docker/Dockerfile.docreader container_name: WeKnora-docreader ports: - "${DOCREADER_PORT:-50051}:50051" environment: - MINIO_ENDPOINT=minio:9000 - MINIO_PUBLIC_ENDPOINT=http://${HOST_IP}:${MINIO_PORT:-9000} - MINERU_ENDPOINT=${MINERU_ENDPOINT:-} - MAX_FILE_SIZE_MB=${MAX_FILE_SIZE_MB:-} healthcheck: test: ["CMD", "grpc_health_probe", "-addr=:50051"] interval: 30s timeout: 10s retries: 3 start_period: 60s networks: - crm-network restart: unless-stopped extra_hosts: - "host.docker.internal:host-gateway" postgres: image: paradedb/paradedb:v0.21.4-pg17 container_name: WeKnora-postgres environment: - POSTGRES_USER=${DB_USER} - POSTGRES_PASSWORD=${DB_PASSWORD} - POSTGRES_DB=${DB_NAME} ports: - "15432:5432" volumes: - postgres-data:/var/lib/postgresql/data - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql networks: - crm-network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"] interval: 10s timeout: 10s retries: 3 start_period: 30s restart: unless-stopped stop_grace_period: 1m redis: image: redis:7.0-alpine container_name: WeKnora-redis command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD} restart: always healthcheck: test: [ "CMD-SHELL", "redis-cli -a ${REDIS_PASSWORD} ping | grep -q PONG", ] interval: 10s timeout: 30s retries: 5 start_period: 10s networks: - crm-network minio: image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/minio/minio:RELEASE.2024-10-02T17-50-41Z container_name: WeKnora-minio ports: - "${MINIO_PORT:-9000}:9000" - "${MINIO_CONSOLE_PORT:-9001}:9001" environment: - MINIO_ROOT_USER=${MINIO_ACCESS_KEY_ID:-minioadmin} - MINIO_ROOT_PASSWORD=${MINIO_SECRET_ACCESS_KEY:-minioadmin} - MINIO_IDENTITY_OPENID_CONFIG_URL=http://${HOST_IP}/.well-known/openid-configuration - MINIO_IDENTITY_OPENID_CLIENT_ID=minio-console - MINIO_IDENTITY_OPENID_CLIENT_SECRET=minio-console-secret-key-2024 - MINIO_IDENTITY_OPENID_CLAIM_NAME=policy - MINIO_IDENTITY_OPENID_SCOPES=openid,profile,email - MINIO_IDENTITY_OPENID_REDIRECT_URI=http://${HOST_IP}:9001/oauth_callback - MINIO_IDENTITY_OPENID_DISPLAY_NAME=AI CRM Login command: server --console-address ":9001" /data volumes: - minio_data:/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 depends_on: crm: condition: service_healthy frontend: condition: service_started networks: - crm-network crm: build: context: .. dockerfile: Dockerfile.crm image: wk_ai_crm:local container_name: crm platform: linux/amd64 ports: - "8088:8088" restart: always volumes: - ./aicrm/logs:/opt/wk_ai_crm/logs - ./aicrm/config:/opt/wk_ai_crm/config depends_on: redis: condition: service_healthy postgres: condition: service_healthy environment: - LANG=zh_CN.UTF-8 - LANGUAGE=zh_CN:zh - LC_ALL=zh_CN.UTF-8 - HOST_IP=${HOST_IP} - BASE_PATH=${CRM_BASE_PATH:-/} - MAIL_CREDENTIAL_ENCRYPTION_KEY=${MAIL_CREDENTIAL_ENCRYPTION_KEY:-aicrm-single-mail-key-change-me} - MAIL_PROXY_ENABLED=${MAIL_PROXY_ENABLED:-false} - MAIL_PROXY_URL=${MAIL_PROXY_URL:-} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8088/"] interval: 30s timeout: 60s retries: 3 networks: - crm-network networks: crm-network: driver: bridge volumes: postgres-data: data-files: minio_data:五、环境变量配置 (.env)在 docker/ 目录下创建 .env 文件:# ========== 基础配置 ========== GIN_MODE=debug # debug(开发) / release(生产) DISABLE_REGISTRATION=false # 生产环境建议设为 true # Ollama(可选,本地大模型) OLLAMA_BASE_URL=http://host.docker.internal:11434 # ========== 存储配置 ========== DB_DRIVER=postgres RETRIEVE_DRIVER=postgres # 向量存储:postgres / elasticsearch_v7 / qdrant STORAGE_TYPE=local # 文件存储:local / minio / cos STREAM_MANAGER_TYPE=redis # ========== 端口配置 ========== APP_PORT=8080 FRONTEND_PORT=8082 DOCREADER_PORT=50051 # ========== 数据库 ========== DB_USER=postgres DB_PASSWORD=postgres123!@# DB_NAME=WeKnora # ========== Redis ========== REDIS_PASSWORD=redis123!@# REDIS_DB=0 REDIS_PREFIX=stream: # ========== 存储路径 ========== LOCAL_STORAGE_BASE_DIR=/data/files AUTO_RECOVER_DIRTY=true TENANT_AES_KEY=weknorarag-api-key-secret-secret # ========== 功能开关 ========== ENABLE_GRAPH_RAG=false # 知识图谱(构建耗时较长,需调用大模型) # ========== 安全配置 ========== JWT_SECRET=weknora-jwt-secret CONCURRENCY_POOL_SIZE=5 # Embedding 并发(429 错误时调小) HOST_IP=127.0.0.1 CRM_BASE_PATH=/六、与宝塔面板共存(Nginx 反向代理配置)若服务器已部署宝塔,将以下配置加入站点 Nginx 配置即可。server { listen 80; server_name abc.dxw123.top abc.dacaishen.eu.cc; index index.html index.htm; root /www/wwwroot/abc.dxw123.top; #CERT-APPLY-CHECK--START include /www/server/panel/vhost/nginx/well-known/abc.dxw123.top.conf; #CERT-APPLY-CHECK--END include /www/server/panel/vhost/nginx/extension/abc.dxw123.top/*.conf; error_page 404 /404.html; #REWRITE-START include /www/server/panel/vhost/rewrite/abc.dxw123.top.conf; #REWRITE-END # ========== 悟空 AI CRM 反向代理 START ========== # AI CRM 后端 API location ^~ /api/ { proxy_pass http://127.0.0.1:8088; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; proxy_cache off; proxy_read_timeout 300s; proxy_send_timeout 300s; client_max_body_size 100m; } # WeKnora App API location ^~ /weknora/ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; proxy_cache off; proxy_read_timeout 300s; client_max_body_size 100m; } # 全局上传限制(配合 MAX_FILE_SIZE_MB=50) client_max_body_size 60m; # AI CRM 前端 location / { proxy_pass http://127.0.0.1:8082; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # ========== 悟空 AI CRM 反向代理 END ========== # 禁止访问敏感文件 location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*|\.gitignore|\.DS_Store|\.bashrc|README\.md|Dockerfile|docker-compose\.yml|\.sql(\.gz)?)$ { return 404; } # 禁止访问敏感目录 location ~* /(\.git|\.svn|\.vscode|\.idea|\.ssh|\.github|node_modules|runtime)/ { return 404; } # SSL 证书验证 location ~ \.well-known { allow all; } if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) { return 403; } access_log /www/wwwlogs/abc.dxw123.top.log; error_log /www/wwwlogs/abc.dxw123.top.error.log; }代理路径说明路径代理目标说明/api/127.0.0.1:8088AI CRM 后端 API/weknora/127.0.0.1:8080WeKnora App API/127.0.0.1:8082AI CRM 前端七、登录用户名密码adminadmin123直接访问绑定的域名或 IP 即可登录管理系统。
2026年09月11日
0 阅读
0 评论
0 点赞
2026-04-13
2026 最新实战:在单卡 48GB GPU 上部署 Qwen3.5-35B-A3B MoE 模型(vLLM + Open WebUI 完整指南)
一、为什么选择 Qwen3.5-35B-A3B?Qwen3.5-35B-A3B 是阿里通义千问团队于 2026 年初发布的 混合专家(MoE)模型,具备以下优势:小体积,大能力:总参数量 35B,但每次推理仅激活约 3B 参数,显存占用远低于同级别 Dense 模型。超长上下文:原生支持 262,144 tokens,轻松处理长文档、代码库。开源免费:采用 Apache 2.0 协议,可商用,权重已在 ModelScope 魔搭社区 公开。性能卓越:在多项基准测试中超越前代 Qwen3-235B-A22B,推理成本更低。对于拥有 单张 48GB GPU(如 A6000、RTX 6000 Ada)的用户,它是目前能本地部署的 最强 MoE 模型。二、环境配置(无需虚拟环境,全局安装即可)重要提示:经大量用户反馈,vLLM 与 Open WebUI 必须在同一 Python 环境中运行,否则会出现模块缺失或 API 不兼容问题。因此,直接使用全局环境是最简单可靠的方案。# 升级 pip(避免旧版 pip 的编译问题) pip install --upgrade pip #安装魔塔社区的包 pip install modelscope # 安装 vLLM(自动匹配 CUDA 版本) pip install vllm # 安装 FlashAttention(加速注意力计算) pip install flash-attn --no-build-isolation # 安装webui聊天界面 pip install open-webui三、单卡部署:Qwen3.5-35B-A3B 快速启动1. 下载模型(以 Qwen3.5-35B-A3B 为例)#模型下载 from modelscope import snapshot_download model_dir = snapshot_download('Qwen3.5-35B-A3B',cache_dir='./')四、单卡部署:启动 vLLM 服务vllm serve ./Qwen3.5-35B-A3B \ --dtype bfloat16 \ --port 5000 \ --max_model_len 262144 \ --gpu_memory_utilization 0.85参数详解(针对 MoE 模型优化):参数推荐值说明--dtypebfloat16MoE 模型必须用 bfloat16,auto 可能导致精度下降--port5000API 服务端口(可自定义)--max_model_len262144启用模型最大上下文长度(爆显存时可降至 131072)--gpu_memory_utilization0.8548GB 显存安全值(若爆显存,逐步降至 0.8 → 0.75)显存占用参考(48GB GPU):上下文 262K:~41GB上下文 131K:~38GB上下文 65K:~35GB五、集成 Open WebUI(图形化聊天界面)# 启用网络加速(AutoDL 用户必备) source /etc/network_turbo # 设置环境变量(关键!) export HF_ENDPOINT=https://hf-mirror.com # Hugging Face 镜像加速 export ENABLE_OLLAMA_API=False # 禁用 Ollama 兼容层 export OPENAI_API_BASE_URL=http://127.0.0.1:5000/v1 # 指向 vLLM API export DEFAULT_MODELS="Qwen3.5-35B-A3B" # 必须与模型文件夹名一致 # 启动 WebUI(默认端口 8080,此处改为 6006) open-webui serve --port 6006访问界面浏览器打开:👉 http://你的服务器IP:6006六、多卡部署(扩展参考)注意:Qwen3.5-35B-A3B 仅支持张量并行(Tensor Parallelism),不支持流水线并行。# 2 卡示例(如 2×A6000) vllm serve ./Qwen3.5-35B-A3B \ --dtype bfloat16 \ --port 5000 \ --tensor-parallel-size 2 \ --gpu_memory_utilization 0.8 \ --max_model_len 262144并行策略:--tensor-parallel-size N:必须等于 GPU 数量(如 2 卡设为 2)。不要设置 --pipeline-parallel-size:MoE 模型不兼容。七、OpenAI 格式 API 调用启动兼容 API 服务(等效于 vllm serve)python -m vllm.entrypoints.openai.api_server \ --served-model-name Qwen3.5-35B-A3B \ --model ./Qwen3.5-35B-A3B \ --dtype bfloat16 \ --port 5000 \ --max_model_len 262144 \ --gpu_memory_utilization 0.85Python 调用示例from openai import OpenAI client = OpenAI( base_url="http://localhost:5000/v1", api_key="not-needed" ) response = client.chat.completions.create( model="Qwen3.5-35B-A3B", messages=[{"role": "user", "content": "请用 262K 上下文分析以下代码库..."}], max_tokens=500 ) print(response.choices[0].message.content)
2026年04月13日
28 阅读
0 评论
0 点赞