根据 Docker Compose 配置,各服务的资源限制如下:
| 服务 | CPU 预留 | CPU 限制 | 内存预留 | 内存限制 | 用途 |
|---|---|---|---|---|---|
| MySQL | 1 核 | 4 核 | 1 GB | 4 GB | 业务数据库 |
| Redis Cache | 0.5 核 | 4 核 | 512 MB | 4 GB | 业务缓存 |
| Redis Market | 0.5 核 | 4 核 | 512 MB | 2 GB | 行情数据 |
| Elasticsearch | 0.5 核 | 2 核 | 1 GB | 4 GB | K线数据存储 |
| SODOS RunServer | 0.5 核 | 6 核 | 512 MB | 4 GB | 后端服务 |
| LibreTranslate | 0.5 核 | 2 核 | 512 MB | 2 GB | 翻译服务 |
| ElasticVue | 0.1 核 | 0.5 核 | 128 MB | 512 MB | ES 管理界面 |
| 总计 | ~4 核 | ~22 核 | ~4 GB | ~20 GB | - |
支持以下操作系统:
安装方式:
# Ubuntu/Debian
curl -fsSL https://get.docker.com | bash
sudo usermod -aG docker $USER
# macOS/Windows
# 下载并安装 Docker Desktop
# https://www.docker.com/products/docker-desktop
验证安装:
docker --version
# Docker version 24.0.0 or higher
docker compose version
# Docker Compose version v2.20.0 or higher
docker compose 命令(无连字符)。如果您使用的是旧版本 docker-compose(有连字符),请升级到 V2。系统运行时会占用以下端口,请确保这些端口未被其他服务占用:
| 端口 | 服务 | 协议 | 说明 |
|---|---|---|---|
| 3306 | MySQL | TCP | 数据库服务 |
| 6380 | Redis Cache | TCP | 业务缓存 |
| 6381 | Redis Market | TCP | 行情数据缓存 |
| 9200 | Elasticsearch | HTTP | K线数据存储 |
| 9300 | Elasticsearch | TCP | ES 集群通信 |
| 8080 | ElasticVue | HTTP | ES 管理界面 |
| 9000 | LibreTranslate | HTTP | 翻译服务 |
| 9501 | SODOS RunServer | TCP | Hyperf WebSocket 服务 |
| 9510 | SODOS RunServer | TCP | Hyperf HTTP 服务 |
| 9511 | SODOS RunServer | TCP | Hyperf RPC 服务(可选) |
| 9520 | SODOS Manager | HTTP | 管理后台前端 |
| 9602 | WS Gateway | HTTP/WS | WebSocket 网关(Go 服务) |
| 80 | Nginx | HTTP | HTTP 反向代理 |
| 443 | Nginx | HTTPS | HTTPS 反向代理 |
检查端口占用:
# Linux/macOS
sudo lsof -i :3306
sudo netstat -tulnp | grep 3306
# Windows
netstat -ano | findstr :3306
为确保 Elasticsearch 和 Redis 正常运行,需要调整以下内核参数:
/etc/sysctl.conf# Elasticsearch 需要
vm.max_map_count=262144
# 网络优化
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.ip_local_port_range=1024 65535
net.ipv4.tcp_tw_reuse=1
# 文件描述符限制
fs.file-max=2097152
应用配置:
sudo sysctl -p
/etc/security/limits.conf* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
重新登录生效。
# 临时禁用
sudo swapoff -a
# 永久禁用(编辑 /etc/fstab,注释掉 swap 行)
sudo sed -i '/swap/d' /etc/fstab
建议按以下方式规划磁盘空间:
| 目录 | 用途 | 推荐空间 | 备注 |
|---|---|---|---|
/var/lib/docker | Docker 镜像和容器 | 20 GB | 存储 Docker 数据 |
./mysql/data | MySQL 数据 | 10-50 GB | 根据业务数据量调整 |
./redis_cache/data | Redis 缓存持久化 | 5-10 GB | RDB + AOF 文件 |
./redis_market/data | Redis 行情数据 | 2-5 GB | 轻量级持久化 |
./elasticsearch/data | Elasticsearch K线数据 | 20-100 GB | 根据 K 线历史数据量调整 |
./logs | 应用日志 | 5-10 GB | 建议定期清理 |
磁盘 I/O 性能:
系统默认使用 UTC+8 (Asia/Shanghai) 时区,日线、周线、月线的开盘时间基于此时区的 8:00 AM 计算。
设置时区:
# Linux
sudo timedatectl set-timezone Asia/Shanghai
# 验证
date
Docker 容器时区:
容器会从宿主机继承时区,或通过环境变量 TZ=Asia/Shanghai 设置。
以下服务是系统运行的必要组件,由 Docker Compose 自动部署:
需要开放以下端口(根据实际部署调整):
入站规则:
# HTTP/HTTPS(公网访问)
80/tcp (HTTP)
443/tcp (HTTPS)
# 管理端口(仅内网或 VPN 访问)
3306/tcp (MySQL)
6380/tcp (Redis Cache)
6381/tcp (Redis Market)
9200/tcp (Elasticsearch)
8080/tcp (ElasticVue)
9520/tcp (SODOS Manager)
出站规则:
# 允许访问 Binance API
443/tcp (HTTPS) -> stream.binance.com
443/tcp (HTTPS) -> api.binance.com
# Docker Hub(镜像拉取)
443/tcp (HTTPS) -> hub.docker.com
443/tcp (HTTPS) -> registry-1.docker.io
# Elasticsearch
9200/tcp, 9300/tcp (集群通信)
UFW 配置示例(Ubuntu):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow from 192.168.0.0/16 to any port 3306 proto tcp
sudo ufw allow from 192.168.0.0/16 to any port 6380 proto tcp
sudo ufw allow from 192.168.0.0/16 to any port 9200 proto tcp
sudo ufw enable
系统使用多个子域名,需要配置 DNS A 记录:
| 子域名 | 用途 | 示例 |
|---|---|---|
| api.* | API 接口 | api.example.com |
| manager.* | 管理后台 | manager.example.com |
| h5.* | H5 移动端 | h5.example.com |
| pc.* | PC 网页端 | pc.example.com |
| www.* 或根域名 | 官网 | www.example.com |
DNS 配置示例:
api.example.com A 1.2.3.4
manager.example.com A 1.2.3.4
h5.example.com A 1.2.3.4
pc.example.com A 1.2.3.4
www.example.com A 1.2.3.4
或使用泛域名解析(通配符):
*.example.com A 1.2.3.4
系统默认密码位于 runner-compose.yml 中,生产环境必须修改:
# MySQL
MYSQL_ROOT_PASSWORD: ********************************
MYSQL_PASSWORD: ********************************
# Redis (redis_cache/redis.conf 和 redis_market/redis.conf)
requirepass ********************************
# Elasticsearch
ELASTIC_PASSWORD: ********************************
生成强密码:
openssl rand -base64 32
data_network)# 禁用 root 登录
PermitRootLogin no
# 禁用密码登录,仅使用密钥
PasswordAuthentication no
# 修改默认 SSH 端口
Port 2222
# 根据内存调整
innodb_buffer_pool_size = 50%-70% 总内存
max_connections = 1000
# 日志优化
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2 # 高并发场景
# 内存策略
maxmemory-policy allkeys-lru
# I/O 线程(Redis 6+)
io-threads 4
io-threads-do-reads yes
# 持久化策略
appendonly yes
appendfsync everysec # 折衷性能与持久性
# JVM 堆内存(不超过 50% 总内存,最大 32GB)
ES_JAVA_OPTS: "-Xms2g -Xmx4g"
# 线程池
thread_pool.write.size: 3
thread_pool.search.size: 6
# 索引缓冲
indices.memory.index_buffer_size: 20%
// /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
在开始部署前,请确认以下事项:
vm.max_map_count=262144)ulimit -n 65536)