写在前面
我是某口腔医院的运营总监。在过去的一个月里,我利用一台阿里云服务器,从零搭建了一套完整的AI运营平台。
这篇文章记录了整个过程——包括踩过的坑、走过的弯路,以及最终的解决方案。如果你也是医疗行业的运营人员,或者想在自己的服务器上部署AI应用,这篇文章应该能帮你省下至少一周的摸索时间。
下面是AI自动话盘点的数据,可以自动找寻重点客户,给出回访话术,和应对点.测试效果非常有效
客户激活执行方案
一、数据总*
分层人数占比说明:本次针对评分最高的TOP客户进行激活,模拟样本共15人。
- A类(急需跟进/未完成治疗)
:5人(占比33%),主要涉及种植二期、根管治疗未冠修复等。 - B类(高意向/咨询未成交)
:4人(占比27%),主要涉及正畸、种植咨询。 - C类(VIP/高消费维护)
:3人(占比20%),主要涉及高客单价项目维护。 - D类(定期保养/洗牙)
:3人(占比20%),主要涉及长期未回访洗牙客户*
二、TOP激活名单
第1位:王**(评分:98分)
分层:A层 | 标签:⭐🔧💎末次就诊: 2025-12-15(距今120天)累计消费: 28000元 | 就诊3次主要项目: 下颌种植一期手术未完成: 种植二期修复切入点: 复查关怀切入(有未完成种植)A版话术(主推-关怀型):"王姐您好,我是京熙口腔的小李。您去年做的种植一期到现在4个月多了,张院长特意嘱咐我联系您,这时候骨结合应该长好了,千万别错过最佳修复期,这周您看哪天方便过来拍个片子?"B版话术(备用-活动型):"王姐您好,我是京熙口腔的小李。最近我们引进了新款的氧化锆牙冠,美观度提升很多,想到您马上要做二期修复了,特意给您申请了一个免费升级体验名额,您看要不要留给您?"拒绝应对:
如果说"不需要"→ "理解的姐,那主要还是怕您骨头吸收影响效果,我先帮您留意着,您什么时候有空随时联系我,我微信就是手机号。" 如果说"考虑一下"→ "好的没问题,那您先忙着,我下周再提醒您一下,毕竟牙齿还是早点用起来好。"预约成功后确认信息:"王姐您好,已为您预约2月20日下午3点张院长的种植复查号,地址:京熙口腔2楼。如需改约请提前联系我,祝您生活愉快!——京熙口腔小李"
# 🔍 完整评估 + 精准部署方案
---
## 第一部分:现状分析和风险评估
### 你的服务器现状
```
已有服务(非容器化):
├── OpenClaw(CLI方式运行,非Docker)
│ ├── 位置:/home/admin/.local/share/pnpm/openclaw
│ ├── 配置:/home/admin/.openclaw/
│ ├── 工作空间:lingshu
│ └── 飞书插件:gateway本地模式
│
├── 源雀SCRM(企业微信客服)
│ └── 语言:Python
│
├── 京熙CRM(自研)
│ └── 语言:Python
│
└── searxng(唯一容器化服务)
Docker版本:26.1.3 ✅ 版本够用
```
### 关键风险点
```
⚠️ 风险1:端口冲突
OpenClaw 本地运行会占用某些端口
部署新服务前必须确认端口占用情况
⚠️ 风险2:Python环境冲突
源雀SCRM + 京熙CRM 用Python运行
新Docker服务有独立网络,不影响Python进程
但需要确认Python服务的端口不和新服务冲突
⚠️ 风险3:OpenClaw飞书gateway
gateway本地模式说明飞书消息走本机进程
n8n对接飞书需要通过OpenClaw的API而非直连
✅ 好消息:
Docker已安装,searxng已在跑
说明你对Docker有基础,部署会顺利
```
---
## 第二部分:部署前必做的检查
### 立刻执行这些命令,把结果发给我
```bash
# ===== 检查1:端口占用情况 =====
ss -tlnp | sort
# ===== 检查2:OpenClaw运行状态 =====
ps aux | grep -E 'openclaw|node|pnpm'
# ===== 检查3:Python服务运行状态 =====
ps aux | grep python
# ===== 检查4:现有容器情况 =====
docker ps -a
# ===== 检查5:磁盘空间 =====
df -h
# ===== 检查6:内存使用 =====
free -h
# ===== 检查7:OpenClaw配置 =====
cat /home/admin/.openclaw/config.yml 2>/dev/null || \
cat /home/admin/.openclaw/config.json 2>/dev/null || \
ls /home/admin/.openclaw/
# ===== 检查8:源雀SCRM运行端口 =====
ps aux | grep python | grep -v grep
netstat -tlnp 2>/dev/null | grep python
```
---
## 第三部分:端口规划(避免冲突)
### 新服务端口分配
```
端口分配方案(选用高位端口避免冲突):
服务 端口 访问地址
─────────────────────────────────────────
Dify Web界面 18080 :18080
Dify API 15001 内部
PostgreSQL 15432 内部(不对外)
Redis 16379 内部(不对外)
MinIO 存储 19000 内部
MinIO 控制台 19001 :19001
n8n 自动化 15678 :15678
Metabase(后期) 13000 :13000
─────────────────────────────────────────
searxng(已有) 保持不变
说明:
✅ 所有新服务用1XXXX端口
✅ 不会和OpenClaw/Python服务冲突
✅ 内部服务不对外暴露,更安全
```
---
## 第四部分:完整部署步骤
### Step 1:创建目录结构
```bash
# 创建统一目录
mkdir -p /opt/ai-platform/{postgres,redis,minio,n8n,nginx,dify,configs}
mkdir -p /opt/ai-platform/postgres/init
mkdir -p /opt/ai-platform/nginx/conf.d
mkdir -p /opt/ai-platform/minio/data
cd /opt/ai-platform
echo "✅ 目录创建完成"
tree /opt/ai-platform 2>/dev/null || ls -la /opt/ai-platform
```
---
### Step 2:创建环境变量文件
```bash
cat > /opt/ai-platform/.env << 'EOF'
# ================================================
# 全局配置文件 - 所有密码在这里统一管理
# ================================================
# PostgreSQL
POSTGRES_USER=aiuser
POSTGRES_PASSWORD=AiPlatform2024!Secure
POSTGRES_HOST=ai-postgres
POSTGRES_PORT=5432
# Redis
REDIS_PASSWORD=Redis2024!Secure
# MinIO
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=Minio2024!Secure
# n8n
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=N8n2024!Secure
N8N_ENCRYPTION_KEY=n8n-encryption-key-2024-oral-hospital
# Dify
DIFY_SECRET_KEY=dify-secret-key-2024-oral-hospital-secure
# 服务器IP(修改成你的实际IP)
SERVER_IP=你的服务器IP
EOF
echo "✅ 环境变量文件创建完成"
cat /opt/ai-platform/.env
```
---
### Step 3:创建数据库初始化脚本
```bash
cat > /opt/ai-platform/postgres/init/01-init.sql << 'EOF'
-- ================================================
-- 数据库初始化脚本
-- ================================================
-- 启用 pgvector 扩展(在默认数据库)
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
-- 创建 Dify 专用数据库
CREATE DATABASE dify
WITH OWNER = aiuser
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.utf8'
LC_CTYPE = 'en_US.utf8';
-- 创建 n8n 专用数据库
CREATE DATABASE n8n
WITH OWNER = aiuser
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.utf8'
LC_CTYPE = 'en_US.utf8';
-- 创建 Metabase 数据库(后期用)
CREATE DATABASE metabase
WITH OWNER = aiuser
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.utf8'
LC_CTYPE = 'en_US.utf8';
-- 创建口腔业务数据库(存你的患者分析数据)
CREATE DATABASE oral_crm
WITH OWNER = aiuser
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.utf8'
LC_CTYPE = 'en_US.utf8';
-- 授权
GRANT ALL PRIVILEGES ON DATABASE dify TO aiuser;
GRANT ALL PRIVILEGES ON DATABASE n8n TO aiuser;
GRANT ALL PRIVILEGES ON DATABASE metabase TO aiuser;
GRANT ALL PRIVILEGES ON DATABASE oral_crm TO aiuser;
EOF
# 在dify库中启用pgvector(需要第二个脚本)
cat > /opt/ai-platform/postgres/init/02-extensions.sql << 'EOF'
-- 在 dify 库中启用扩展
\c dify
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
-- 在 oral_crm 库中启用扩展
\c oral_crm
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
-- 创建患者数据基础表(供后续分析用)
CREATE TABLE IF NOT EXISTS patient_analysis_records (
id SERIAL PRIMARY KEY,
analysis_date TIMESTAMP DEFAULT NOW(),
total_patients INTEGER,
layer_a_count INTEGER,
layer_b_count INTEGER,
layer_c_count INTEGER,
layer_d_count INTEGER,
layer_e_count INTEGER,
top_activate_list JSONB,
full_report JSONB,
created_by VARCHAR(50)
);
EOF
echo "✅ 数据库初始化脚本创建完成"
```
---
### Step 4:创建主 docker-compose.yml
```bash
cat > /opt/ai-platform/docker-compose.yml << 'EOF'
version: '3.8'
# ================================================
# 口腔医院 AI 平台 - 完整服务编排
# ================================================
networks:
ai-network:
driver: bridge
name: ai-platform-network
volumes:
postgres_data:
driver: local
redis_data:
driver: local
minio_data:
driver: local
n8n_data:
driver: local
services:
# ================================================
# PostgreSQL 16 + pgvector
# 端口:15432(外部),5432(内部)
# ================================================
postgres:
image: pgvector/pgvector:pg16
container_name: ai-postgres
restart: always
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: aiplatform
PGDATA: /var/lib/postgresql/data/pgdata
TZ: Asia/Shanghai
volumes:
- postgres_data:/var/lib/postgresql/data
- ./postgres/init:/docker-entrypoint-initdb.d
ports:
- "15432:5432"
networks:
- ai-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 10s
timeout: 5s
retries: 5
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 512M
# ================================================
# Redis 7
# 端口:16379(外部),6379(内部)
# ================================================
redis:
image: redis:7-alpine
container_name: ai-redis
restart: always
command: >
redis-server
--requirepass ${REDIS_PASSWORD}
--maxmemory 512mb
--maxmemory-policy allkeys-lru
--save 60 1
--loglevel warning
volumes:
- redis_data:/data
ports:
- "16379:6379"
networks:
- ai-network
healthcheck:
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
interval: 10s
timeout: 3s
retries: 5
deploy:
resources:
limits:
memory: 512M
# ================================================
# MinIO 对象存储
# 端口:19000(API),19001(控制台)
# ================================================
minio:
image: minio/minio:latest
container_name: ai-minio
restart: always
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
MINIO_BROWSER_REDIRECT_URL: http://${SERVER_IP}:19001
TZ: Asia/Shanghai
volumes:
- minio_data:/data
ports:
- "19000:9000"
- "19001:9001"
networks:
- ai-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 10s
retries: 3
deploy:
resources:
limits:
memory: 512M
# ================================================
# n8n 自动化工作流
# 端口:15678
# 连接飞书/微信/Dify的关键枢纽
# ================================================
n8n:
image: n8nio/n8n:latest
container_name: ai-n8n
restart: always
environment:
# 基础配置
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: http
WEBHOOK_URL: http://${SERVER_IP}:15678
GENERIC_TIMEZONE: Asia/Shanghai
TZ: Asia/Shanghai
# 认证
N8N_BASIC_AUTH_ACTIVE: "true"
N8N_BASIC_AUTH_USER: ${N8N_BASIC_AUTH_USER}
N8N_BASIC_AUTH_PASSWORD: ${N8N_BASIC_AUTH_PASSWORD}
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
# 数据库(使用PostgreSQL)
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: ${POSTGRES_USER}
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
# 功能开关
N8N_METRICS: "false"
EXECUTIONS_DATA_PRUNE: "true"
EXECUTIONS_DATA_MAX_AGE: 720
N8N_EDITOR_BASE_URL: http://${SERVER_IP}:15678
volumes:
- n8n_data:/home/node/.n8n
ports:
- "15678:5678"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
networks:
- ai-network
deploy:
resources:
limits:
memory: 1G
EOF
echo "✅ docker-compose.yml 创建完成"
```
---
### Step 5:启动基础服务
```bash
cd /opt/ai-platform
# 加载环境变量
export $(cat .env | grep -v '#' | xargs)
# 启动服务
docker compose up -d
# 等待数据库初始化
echo "等待服务启动..."
sleep 45
# 检查状态
docker compose ps
``
**预期输出:**
```
NAME STATUS PORTS
ai-postgres running 0.0.0.0:15432->5432/tcp
ai-redis running 0.0.0.0:16379->6379/tcp
ai-minio running 0.0.0.0:19000-19001->9000-9001/tcp
ai-n8n running 0.0.0.0:15678->5678/tcp
```
### Step 6:安装 Dify
```bash
cd /opt/ai-platform
# 克隆 Dify
git clone https://github.com/langgenius/dify.git
cd dify/docker
# 复制配置
cp .env.example .env
# 用sed批量修改配置(不用手动vim)
sed -i "s|SECRET_KEY=.*|SECRET_KEY=dify-secret-key-2024-oral-hospital-secure|g" .env
sed -i "s|DB_USERNAME=.*|DB_USERNAME=aiuser|g" .env
sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=AiPlatform2024!Secure|g" .env
sed -i "s|DB_HOST=.*|DB_HOST=ai-postgres|g" .env
sed -i "s|DB_PORT=.*|DB_PORT=5432|g" .env
sed -i "s|DB_DATABASE=.*|DB_DATABASE=dify|g" .env
sed -i "s|REDIS_HOST=.*|REDIS_HOST=ai-redis|g" .env
sed -i "s|REDIS_PASSWORD=.*|REDIS_PASSWORD=Redis2024!Secure|g" .env
sed -i "s|STORAGE_TYPE=.*|STORAGE_TYPE=s3|g" .env
sed -i "s|S3_ENDPOINT=.*|S3_ENDPOINT=http://ai-minio:9000|g" .env
sed -i "s|S3_BUCKET_NAME=.*|S3_BUCKET_NAME=dify-storage|g" .env
sed -i "s|S3_ACCESS_KEY=.*|S3_ACCESS_KEY=minioadmin|g" .env
sed -i "s|S3_SECRET_KEY=.*|S3_SECRET_KEY=Minio2024!Secure|g" .env
sed -i "s|EXPOSE_NGINX_PORT=.*|EXPOSE_NGINX_PORT=18080|g" .env
echo "✅ Dify 配置修改完成"
# 让Dify使用已有的网络和服务
cat >> docker-compose.yaml << 'DIFY_NETWORK'
# 使用已有的外部网络
networks:
default:
name: ai-platform-network
external: true
DIFY_NETWORK
# 注释掉Dify自带的db和redis(用我们已有的)
# (如果Dify compose里有db和redis,需要注释)
```
**创建MinIO的bucket:**
```bash
# 先创建 dify-storage bucket
docker exec ai-minio mc alias set local http://localhost:9000 minioadmin Minio2024!Secure 2>/dev/null || true
# 用Python创建bucket(更可靠)
docker exec ai-minio sh -c "
mc alias set local http://localhost:9000 minioadmin 'Minio2024!Secure' &&
mc mb local/dify-storage --ignore-existing &&
mc mb local/excel-uploads --ignore-existing &&
mc mb local/analysis-results --ignore-existing &&
echo 'Buckets created successfully'
"
```
**启动 Dify:**
```bash
cd /opt/ai-platform/dify/docker
# 启动
docker compose up -d
# 等待启动完成(Dify比较慢,等2分钟)
echo "Dify启动中,请等待120秒..."
sleep 120
# 检查状态
docker compose ps | grep -E 'Up|Exit|Error'
```
### Step 7:验证全部服务
bash
# 一键检查所有服务
echo "===== 检查所有服务状态 ====="
echo ""
echo "【基础服务】"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -E 'ai-|dify'
echo ""
echo "【端口监听】"
ss -tlnp | grep -E '18080|15432|16379|19000|19001|15678'
echo ""
echo "【内存使用】"
free -h
echo ""
echo "【磁盘使用】"
df -h /
echo ""
echo "===== 访问地址 ====="
SERVER_IP=$(curl -s ifconfig.me 2>/dev/null || hostname -I | awk '{print $1}')
echo "Dify: http://$SERVER_IP:18080"
echo "n8n: http://$SERVER_IP:15678"
echo "MinIO: http://$SERVER_IP:19001"
```-
## 第五部分:OpenClaw 对接 Dify
### 架构说明
```
你的OpenClaw(本地进程)
├── 飞书插件(gateway本地模式)
│ └── 接收飞书消息
│
└── 如何调用Dify?
方案A:OpenClaw内置HTTP工具 → 直接POST到Dify API
方案B:OpenClaw → n8n Webhook → n8n调用Dify
推荐:方案B(n8n作为中间层,更灵活,可记录日志)
```
### OpenClaw Agent 配置(在 lingshu 工作空间)
```bash
# 查看当前Agent配置
ls /home/admin/.openclaw/workspaces/lingshu/
cat /home/admin/.openclaw/workspaces/lingshu/agents.json 2>/dev/null || \
ls /home/admin/.openclaw/workspaces/lingshu/agents/ 2>/dev/null
```
**在 OpenClaw 的 Agent 里添加 HTTP 工具:**
```yaml
# 在你的Agent配置里添加工具
# 工具名称:调用患者分析
# 工具类型:HTTP请求
name: 患者激活分析
type: http
config:
method: POST
url: http://localhost:15678/webhook/patient-analysis
headers:
Content-Type: application/json
body: |
{
"patient_info": "{{input}}",
"source": "openclaw_feishu"
}
```
---
## 第六部分:n8n 核心工作流配置
### 工作流1:飞书消息 → Dify分析 → 回复
```
在 n8n 界面(http://服务器IP:15678)创建:
节点1:Webhook触发器
├── 路径:/webhook/feishu-message
├── 方法:POST
└── 认证:无(内网调用)
节点2:Switch(判断意图)
├── 条件1:消息含"激活客户" → 走分支A
├── 条件2:消息含"营销方案" → 走分支B
├── 条件3:消息含"数据分析" → 走分支C
└── 默认:返回"请说明需要什么分析"
节点3A:HTTP Request(调用Dify客户盘点工作流)
├── URL:http://dify-api:5001/v1/workflows/run
├── Method:POST
├── Header:Authorization: Bearer {{Dify工作流密钥}}
└── Body:{"inputs":{"content":"{{消息内容}}"}}
节点4:格式化输出
└── 将Dify返回结果格式化为飞书消息格式
节点5:HTTP Request(回复飞书)
└── 调用飞书API发送回复消息
```
### 工作流2:Excel上传 → 自动分析
```
节点1:Webhook(接收Excel上传)
节点2:上传到MinIO
节点3:调用Dify数据分析工作流
节点4:获取分析结果
节点5:保存到PostgreSQL
节点6:通知飞书(分析完成)
```
---
## 第七部分:源雀SCRM + 京熙CRM 对接
### 京熙CRM(Python)→ 接入n8n
```python
# 在你的京熙CRM Python代码里添加
# 当需要AI分析时,调用n8n的Webhook
import requests
def call_ai_analysis(patient_data: dict) -> dict:
"""
调用AI平台分析患者数据
"""
n8n_webhook_url = "http://localhost:15678/webhook/crm-analysis"
payload = {
"source": "jingxi_crm",
"action": "patient_analysis",
"data": patient_data,
"timestamp": datetime.now().isoformat()
}
try:
response = requests.post(
n8n_webhook_url,
json=payload,
timeout=30,
headers={"Content-Type": "application/json"}
)
return response.json()
except Exception as e:
return {"error": str(e), "status": "failed"}
def call_marketing_suggestion(patient_id: str) -> dict:
"""
为指定患者获取营销建议
"""
n8n_webhook_url = "http://localhost:15678/webhook/marketing-suggest"
payload = {
"source": "jingxi_crm",
"patient_id": patient_id
}
response = requests.post(n8n_webhook_url, json=payload, timeout=30)
return response.json()
```
### 源雀SCRM → 对接n8n
```
对接思路:
源雀SCRM → 企业微信事件 → n8n Webhook → Dify分析
具体配置:
1. 在源雀SCRM后台找到"消息回调/Webhook配置"
2. 填入 n8n 的 Webhook 地址:
http://你的服务器IP:15678/webhook/scrm-event
3. 在n8n创建对应工作流处理SCRM事件
```
---
## 第八部分:完整的服务管理脚本
```bash
# 创建统一管理脚本
cat > /opt/ai-platform/manage.sh << 'EOF'
#!/bin/bash
# AI平台统一管理脚本
# 使用方法:./manage.sh [start|stop|restart|status|logs]
PLATFORM_DIR="/opt/ai-platform"
DIFY_DIR="/opt/ai-platform/dify/docker"
case "$1" in
start)
echo "🚀 启动所有服务..."
cd $PLATFORM_DIR && docker compose up -d
sleep 10
cd $DIFY_DIR && docker compose up -d
echo "✅ 所有服务已启动"
;;
stop)
echo "🛑 停止所有服务..."
cd $DIFY_DIR && docker compose down
cd $PLATFORM_DIR && docker compose down
echo "✅ 所有服务已停止"
;;
restart)
echo "🔄 重启所有服务..."
$0 stop
sleep 5
$0 start
;;
status)
echo "📊 服务状态:"
echo ""
echo "【基础服务】"
cd $PLATFORM_DIR && docker compose ps
echo ""
echo "【Dify服务】"
cd $DIFY_DIR && docker compose ps
echo ""
echo "【资源使用】"
docker stats --no-stream --format \
"table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
;;
logs)
SERVICE=${2:-"ai-n8n"}
echo "📋 查看 $SERVICE 日志..."
docker logs $SERVICE --tail 100 -f
;;
backup)
echo "💾 备份数据库..."
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/opt/ai-platform/backups"
mkdir -p $BACKUP_DIR
docker exec ai-postgres pg_dump -U aiuser dify \
> $BACKUP_DIR/dify_$BACKUP_DATE.sql
docker exec ai-postgres pg_dump -U aiuser oral_crm \
> $BACKUP_DIR/oral_crm_$BACKUP_DATE.sql
echo "✅ 备份完成:$BACKUP_DIR"
ls -lh $BACKUP_DIR
;;
*)
echo "使用方法:"
echo " ./manage.sh start - 启动所有服务"
echo " ./manage.sh stop - 停止所有服务"
echo " ./manage.sh restart - 重启所有服务"
echo " ./manage.sh status - 查看服务状态"
echo " ./manage.sh logs [服务名] - 查看日志"
echo " ./manage.sh backup - 备份数据库"
;;
esac
EOF
chmod +x /opt/ai-platform/manage.sh
echo "✅ 管理脚本创建完成"
echo "使用方法:/opt/ai-platform/manage.sh status"
```
---
## 第九部分:部署后配置清单
```
Dify 初始化配置(浏览器操作):
□ 1. 访问 http://服务器IP:18080
□ 2. 注册管理员账号(邮箱+密码)
□ 3. 设置 → 模型供应商 → 添加智谱AI
API Key:你的GLM密钥
测试连接成功
□ 4. 设置 → 模型供应商 → 添加阿里百炼
API Key:你的百炼密钥
测试连接成功
□ 5. 设置 → 默认模型
对话:qwen-max 或 glm-4
Embedding:text-embedding-v2
□ 6. 工作室 → 创建应用 → 工作流
名称:口腔客户盘点系统
按第三条回复里的节点逐步搭建
n8n 初始化配置:
□ 7. 访问 http://服务器IP:15678
□ 8. 登录(admin / YourN8nPassword123!)
□ 9. 创建 Webhook 工作流
□ 10. 测试飞书消息触发
MinIO 初始化:
□ 11. 访问 http://服务器IP:19001
□ 12. 登录(minioadmin / Minio2024!Secure)
□ 13. 确认 bucket 已创建:
dify-storage
excel-uploads
analysis-results
```
写在最后
这套平台从开始部署到完全跑通,我花了大约两周的碎片时间。中间踩了不少坑,但也学到了很多东西。
如果你也在考虑搭建类似的系统,我的建议是:
先跑通核心流程:不要追求一步到位,先把Dify跑起来,能做一个简单的分析工作流
逐步添加功能:稳定后再加n8n、加飞书对接、加CRM同步
做好备份:数据库定期备份,配置文件用Git管理
记录踩坑过程:遇到的问题和解决方案记下来,以后用得上
希望这篇文章对你有帮助。如果有问题,欢迎交流。
最后,给自己打个广告:
如果你也想在医疗行业用AI提升运营效率,但不知道从哪开始,或者遇到了具体的技术问题,可以找我聊聊。我踩过的坑,你可以不用再踩一遍。
夜雨聆风