# BaraDB - 部署指南 ## Docker 完整的 Docker 部署指南请参见 [Docker 指南](docker.md)。 ### 快速开始 ```bash docker build -t baradb:latest . docker compose up -d ``` ### Docker Compose 文件 | 文件 | 用途 | |------|------| | `docker-compose.yml` | 开发环境 | | `docker-compose.prod.yml` | 生产环境 | | `docker-compose.override.yml` | 开发覆盖(自动) | ### 生产环境 ```bash docker compose -f docker-compose.prod.yml up -d ``` ### Docker Swarm ```bash docker stack deploy -c docker-compose.prod.yml baradb ``` ## systemd 服务 创建 `/etc/systemd/system/baradb.service`: ```ini [Unit] Description=BaraDB Multimodal Database After=network.target [Service] Type=simple User=baradb Group=baradb WorkingDirectory=/var/lib/baradb ExecStart=/usr/local/bin/baradadb Restart=always RestartSec=5 Environment=BARADB_PORT=9472 Environment=BARADB_HTTP_PORT=9470 Environment=BARADB_DATA_DIR=/var/lib/baradb/data Environment=BARADB_LOG_LEVEL=info # 安全加固 NoNewPrivileges=true ProtectSystem=strict ProtectHome=true ReadWritePaths=/var/lib/baradb/data ProtectKernelTunables=true ProtectKernelModules=true ProtectControlGroups=true [Install] WantedBy=multi-user.target ``` 启用并启动: ```bash sudo useradd -r -s /bin/false baradb sudo mkdir -p /var/lib/baradb/data sudo chown -R baradb:baradb /var/lib/baradb sudo cp build/baradadb /usr/local/bin/ sudo systemctl daemon-reload sudo systemctl enable --now baradb ``` ## Kubernetes ### StatefulSet ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: baradb spec: serviceName: baradb replicas: 3 selector: matchLabels: app: baradb template: metadata: labels: app: baradb spec: containers: - name: baradb image: baradb:latest ports: - containerPort: 9472 name: binary - containerPort: 9470 name: http - containerPort: 9471 name: websocket env: - name: BARADB_DATA_DIR value: /data - name: BARADB_RAFT_NODE_ID valueFrom: fieldRef: fieldPath: metadata.name volumeMounts: - name: data mountPath: /data volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 100Gi --- apiVersion: v1 kind: Service metadata: name: baradb spec: selector: app: baradb ports: - port: 9472 name: binary - port: 9470 name: http - port: 9471 name: websocket clusterIP: None ``` ## 反向代理 (nginx) ```nginx upstream baradb_http { server 127.0.0.1:9470; } upstream baradb_ws { server 127.0.0.1:9471; } server { listen 80; server_name db.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name db.example.com; ssl_certificate /etc/letsencrypt/live/db.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/db.example.com/privkey.pem; location /api/ { proxy_pass http://baradb_http/; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /ws/ { proxy_pass http://baradb_ws/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` ## 高可用性 ### 3 节点 Raft 集群 ```bash # 节点 1 BARADB_RAFT_NODE_ID=node1 \ BARADB_RAFT_PEERS=node2:9001,node3:9001 \ ./build/baradadb # 节点 2 BARADB_RAFT_NODE_ID=node2 \ BARADB_RAFT_PEERS=node1:9001,node3:9001 \ ./build/baradadb # 节点 3 BARADB_RAFT_NODE_ID=node3 \ BARADB_RAFT_PEERS=node1:9001,node2:9001 \ ./build/baradadb ``` ## 云部署 ### AWS EC2 推荐实例: `m6i.2xlarge` (8 vCPU, 32 GB RAM) ```bash # User data script #!/bin/bash apt-get update apt-get install -y nim wget https://github.com/katehonz/barabaDB/releases/latest/download/baradadb-linux-amd64 chmod +x baradadb-linux-amd64 mv baradadb-linux-amd64 /usr/local/bin/baradadb mkdir -p /data/baradb cat > /etc/systemd/system/baradb.service << 'EOF' [Unit] Description=BaraDB After=network.target [Service] ExecStart=/usr/local/bin/baradadb Environment=BARADB_DATA_DIR=/data/baradb Restart=always [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now baradb ``` ### GCP Cloud Run(仅 HTTP) ```bash gcloud run deploy baradb \ --image gcr.io/PROJECT/baradb \ --port 9470 \ --memory 4Gi \ --cpu 2 \ --max-instances 10 ```