DatomsDBS 部署指南
版本: 1.0
日期: 2024年12月28日
目录
概述
DatomsDBS 支持多种部署方式,从本地开发环境到大规模生产环境。本指南将详细介绍每种部署方式的步骤、配置和最佳实践。
部署方式对比
| 部署方式 | 适用场景 | 复杂度 | 可扩展性 | 维护成本 |
|---|---|---|---|---|
| 本地开发 | 开发测试 | 低 | 低 | 低 |
| Docker Compose | 小型生产 | 中 | 中 | 中 |
| AWS EC2 | 云端部署 | 中 | 中 | 中 |
| Kubernetes | 大型生产 | 高 | 高 | 高 |
快速部署
一键部署脚本
最快的部署方式是使用提供的自动化脚本:
# 克隆项目
git clone <repository-url>
cd datomsDBS
# 运行一键部署
./scripts/setup_datomsdbs.sh
脚本功能
- 环境检查: 验证系统要求和依赖
- 依赖安装: 自动安装 Node.js 依赖
- 配置生成: 创建默认配置文件
- 服务启动: 启动应用程序
- 健康检查: 验证部署是否成功
预期结果
==========================================
DatomsDBS 一键设置完成!
==========================================
✅ 服务已启动: http://localhost:9000
✅ 管理界面: http://localhost:9000/admin
✅ 默认登录: admin / admin123
⚠️ 重要提醒:
- 生产环境请修改默认密码
- 配置文件位于: .env
- 数据目录位于: ./data
本地开发部署
系统要求
- Node.js: >= 14.0.0
- npm: >= 6.0.0
- 内存: >= 2GB
- 磁盘: >= 5GB 可用空间
步骤 1: 环境准备
# 检查 Node.js 版本
node --version
npm --version
# 如需升级 Node.js
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
步骤 2: 项目设置
# 克隆项目
git clone <repository-url>
cd datomsDBS
# 安装依赖
npm install
# 创建环境配置
cp .env.example .env
步骤 3: 配置文件
编辑 .env 文件:
# 基础配置
NODE_ENV=development
PORT=9000
LOG_LEVEL=debug
# 安全配置
JWT_SECRET=dev-secret-key
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin123
# 数据配置
DATA_DIR=./data
AUTO_SAVE_INTERVAL=60000
步骤 4: 启动服务
# 开发模式启动
npm run dev
# 或标准启动
npm start
步骤 5: 验证部署
# 健康检查
curl http://localhost:9000/api/health
# 访问管理界面
open http://localhost:9000/admin
Docker 容器化部署
优势
- 一致性: 环境一致性保证
- 隔离性: 服务间隔离
- 可移植性: 跨平台部署
- 扩展性: 容易水平扩展
前置要求
# 安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker --version
docker-compose --version
基础部署
docker-compose.yml
version: '3.8'
services:
datomsdbs:
build:
context: .
dockerfile: Dockerfile
ports:
- "9000:9000"
environment:
- NODE_ENV=production
- JWT_SECRET=${JWT_SECRET}
- API_TOKEN=${API_TOKEN}
volumes:
- ./data:/app/data
- ./logs:/app/logs
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
volumes:
data:
logs:
启动命令
# 构建并启动服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f datomsdbs
# 停止服务
docker-compose down
完整部署(含 AI 服务)
docker-compose.full.yml
version: '3.8'
services:
datomsdbs:
build: .
ports:
- "9000:9000"
environment:
- NODE_ENV=production
- LLM_SERVICE_URL=http://ollama:11434
- REDIS_URL=redis://redis:6379
volumes:
- ./data:/app/data
- ./logs:/app/logs
depends_on:
- redis
- ollama
restart: unless-stopped
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
restart: unless-stopped
ollama:
image: ollama/ollama:latest
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
environment:
- OLLAMA_KEEP_ALIVE=24h
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./deployment/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- datomsdbs
restart: unless-stopped
volumes:
redis_data:
ollama_data:
启动完整环境
# 使用完整配置启动
docker-compose -f docker-compose.full.yml up -d
# 初始化 Ollama 模型
docker-compose exec ollama ollama pull qwen2:1.5b
数据持久化
volumes:
# 应用数据
- ./data:/app/data
# 日志文件
- ./logs:/app/logs
# 上传文件
- ./uploads:/app/uploads
# 备份文件
- ./backups:/app/backups
AWS 云部署
自动化部署
使用提供的 AWS 自动化脚本进行一键部署:
./scripts/aws_ec2_test_deployment.sh
脚本特性
- 自动化基础设施: VPC、安全组、密钥对
- 实例配置: Ubuntu 22.04 LTS + Docker
- 应用部署: 完整的应用栈部署
- 健康检查: 自动验证部署状态
- 成本控制: 自动清理资源选项
手动 AWS 部署
步骤 1: 创建 EC2 实例
# 创建安全组
aws ec2 create-security-group \
--group-name datomsdbs-sg \
--description "DatomsDBS Security Group"
# 配置安全组规则
aws ec2 authorize-security-group-ingress \
--group-name datomsdbs-sg \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress \
--group-name datomsdbs-sg \
--protocol tcp \
--port 9000 \
--cidr 0.0.0.0/0
# 启动 EC2 实例
aws ec2 run-instances \
--image-id ami-047126e50991d067b \
--count 1 \
--instance-type t3.xlarge \
--key-name your-key-pair \
--security-groups datomsdbs-sg \
--block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":200,"VolumeType":"gp3"}}]'
步骤 2: 连接和配置实例
# SSH 连接到实例
ssh -i your-key.pem ubuntu@YOUR_INSTANCE_IP
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker ubuntu
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
步骤 3: 部署应用
# 克隆项目
git clone <repository-url>
cd datomsDBS
# 配置环境变量
cp .env.example .env
# 编辑配置文件
# 启动服务
docker-compose up -d
AWS 优化配置
实例类型选择
| 实例类型 | vCPU | 内存 | 适用场景 | 预估费用/小时 |
|---|---|---|---|---|
| t3.medium | 2 | 4GB | 开发测试 | $0.04 |
| t3.large | 2 | 8GB | 小型生产 | $0.08 |
| t3.xlarge | 4 | 16GB | 中型生产 | $0.17 |
| c5.2xlarge | 8 | 16GB | 高性能 | $0.34 |
EBS 存储优化
# GP3 存储配置(推荐)
--block-device-mappings '[
{
"DeviceName":"/dev/sda1",
"Ebs":{
"VolumeSize":200,
"VolumeType":"gp3",
"Iops":3000,
"Throughput":125,
"DeleteOnTermination":true
}
}
]'
生产环境部署
生产环境要求
硬件要求
- CPU: 4+ 核心
- 内存: 8GB+
- 存储: 100GB+ SSD
- 网络: 1Gbps+
软件要求
- 操作系统: Ubuntu 20.04+ / CentOS 8+
- Docker: 20.0+
- Docker Compose: 1.29+
- SSL 证书: 用于 HTTPS
安全配置
SSL/TLS 配置
# nginx.conf
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
location / {
proxy_pass http://datomsdbs:9000;
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;
}
}
server {
listen 80;
server_name yourdomain.com;
return 301 https://$server_name$request_uri;
}
防火墙配置
# UFW 防火墙配置
sudo ufw enable
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw deny 9000/tcp # 阻止直接访问应用端口
环境变量安全
# 生产环境 .env
NODE_ENV=production
PORT=9000
LOG_LEVEL=warn
# 强密码配置
JWT_SECRET=$(openssl rand -base64 64)
API_TOKEN=$(openssl rand -base64 32)
ADMIN_PASSWORD=$(openssl rand -base64 16)
# 数据库安全
DB_PASSWORD=$(openssl rand -base64 32)
REDIS_PASSWORD=$(openssl rand -base64 32)
高可用部署
负载均衡配置
# docker-compose.ha.yml
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- datomsdbs-1
- datomsdbs-2
- datomsdbs-3
datomsdbs-1:
build: .
environment:
- NODE_ENV=production
- INSTANCE_ID=1
volumes:
- shared_data:/app/data
datomsdbs-2:
build: .
environment:
- NODE_ENV=production
- INSTANCE_ID=2
volumes:
- shared_data:/app/data
datomsdbs-3:
build: .
environment:
- NODE_ENV=production
- INSTANCE_ID=3
volumes:
- shared_data:/app/data
redis:
image: redis:7-alpine
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- redis_data:/data
volumes:
shared_data:
redis_data:
数据备份策略
自动备份脚本
#!/bin/bash
# production-backup.sh
BACKUP_DIR="/data/backups"
S3_BUCKET="your-backup-bucket"
RETENTION_DAYS=30
# 创建备份
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="datomsdbs_prod_${DATE}.tar.gz"
# 停止写入操作(可选)
docker-compose exec datomsdbs curl -X POST http://localhost:9000/api/admin/maintenance/read-only
# 创建数据备份
tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" \
--exclude='./logs/*' \
./data
# 上传到 S3
aws s3 cp "${BACKUP_DIR}/${BACKUP_FILE}" "s3://${S3_BUCKET}/backups/"
# 恢复写入操作
docker-compose exec datomsdbs curl -X POST http://localhost:9000/api/admin/maintenance/read-write
# 清理本地旧备份
find "${BACKUP_DIR}" -name "datomsdbs_prod_*.tar.gz" -mtime +${RETENTION_DAYS} -delete
# 清理 S3 旧备份
aws s3 ls "s3://${S3_BUCKET}/backups/" | grep "datomsdbs_prod_" | head -n -${RETENTION_DAYS} | awk '{print $4}' | xargs -I {} aws s3 rm "s3://${S3_BUCKET}/backups/{}"
echo "Backup completed: ${BACKUP_FILE}"
定时备份配置
# 添加到 crontab
crontab -e
# 每天凌晨 2 点备份
0 2 * * * /path/to/production-backup.sh >> /var/log/datomsdbs-backup.log 2>&1
# 每周日凌晨 1 点进行完整系统备份
0 1 * * 0 /path/to/full-system-backup.sh >> /var/log/datomsdbs-full-backup.log 2>&1
监控和维护
系统监控
Prometheus + Grafana
# monitoring/docker-compose.monitoring.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana_data:/var/lib/grafana
- ./grafana/dashboards:/etc/grafana/provisioning/dashboards
- ./grafana/datasources:/etc/grafana/provisioning/datasources
node-exporter:
image: prom/node-exporter:latest
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
volumes:
prometheus_data:
grafana_data:
健康检查脚本
#!/bin/bash
# health-check.sh
API_URL="http://localhost:9000/api/health"
SLACK_WEBHOOK="YOUR_SLACK_WEBHOOK_URL"
# 执行健康检查
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $API_URL)
if [ "$RESPONSE" != "200" ]; then
MESSAGE="🚨 DatomsDBS Health Check Failed - Status: $RESPONSE"
# 发送告警到 Slack
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"$MESSAGE\"}" \
$SLACK_WEBHOOK
# 记录日志
echo "$(date): Health check failed - Status: $RESPONSE" >> /var/log/datomsdbs-health.log
# 尝试重启服务(可选)
# docker-compose restart datomsdbs
else
echo "$(date): Health check passed" >> /var/log/datomsdbs-health.log
fi
日志管理
日志轮转配置
# /etc/logrotate.d/datomsdbs
/var/log/datomsdbs/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 644 datomsdbs datomsdbs
postrotate
docker-compose exec datomsdbs kill -USR1 1
endscript
}
集中化日志收集
# ELK Stack for log aggregation
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.15.0
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
logstash:
image: docker.elastic.co/logstash/logstash:7.15.0
volumes:
- ./logstash/config:/usr/share/logstash/pipeline
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:7.15.0
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on:
- elasticsearch
volumes:
elasticsearch_data:
故障排除
常见部署问题
端口占用
# 检查端口占用
netstat -tulpn | grep :9000
lsof -i :9000
# 解决方案
kill -9 <PID>
# 或修改配置使用其他端口
权限问题
# Docker 权限问题
sudo usermod -aG docker $USER
newgrp docker
# 文件权限问题
sudo chown -R $USER:$USER ./data
sudo chmod -R 755 ./data
内存不足
# 检查内存使用
free -h
docker stats
# 解决方案
# 1. 增加 swap
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 2. 优化 Node.js 内存
export NODE_OPTIONS="--max-old-space-size=2048"
网络连接问题
# 检查网络连接
curl -I http://localhost:9000/api/health
telnet localhost 9000
# 检查防火墙
sudo ufw status
sudo iptables -L
# Docker 网络问题
docker network ls
docker network inspect bridge
性能优化
数据库优化
# 检查数据库性能
curl http://localhost:9000/api/admin/stats
# 优化索引
curl -X POST http://localhost:9000/api/datoms/databases/your_db/optimize
# 清理过期数据
curl -X POST http://localhost:9000/api/admin/cleanup
缓存优化
# Redis 缓存状态
docker-compose exec redis redis-cli info memory
# 清理缓存
docker-compose exec redis redis-cli flushall
恢复操作
从备份恢复
# 停止服务
docker-compose down
# 恢复数据
tar -xzf backup_file.tar.gz -C ./
# 重新启动服务
docker-compose up -d
# 验证恢复
curl http://localhost:9000/api/health
灾难恢复
# 完整系统恢复流程
# 1. 重新部署基础设施
# 2. 恢复应用代码
# 3. 恢复配置文件
# 4. 恢复数据备份
# 5. 验证系统功能
# 6. 更新 DNS 记录(如需要)
总结
本部署指南涵盖了 DatomsDBS 的各种部署场景,从简单的本地开发到复杂的生产环境。选择合适的部署方式取决于您的具体需求、技术栈和资源约束。
推荐部署路径
- 开发测试: 本地开发部署
- 概念验证: Docker Compose 部署
- 小规模生产: AWS EC2 自动化部署
- 企业级生产: 高可用 + 监控 + 备份方案
如需更多帮助,请参考主技术文档或联系支持团队。