CoreStack
项目简介
CoreStack 是一个集成了多种服务组件的基础架构平台,为项目提供核心支持服务,包括数据库、缓存、消息队列和 基础功能 RPC 服务等功能。
服务组件
CoreStack 包含以下核心服务组件:
- Caddy: HTTP/HTTPS 反向代理服务器,提供TLS证书自动管理
- MySQL: 关系型数据库服务
- Redis: 内存缓存服务
- NSQ: 高可用的分布式消息队列系统(包含nsqlookupd、nsqd、nsqadmin)
- Connect: 神仙盒 Connect RPC 服务,负责各种基础 RPC 功能(如账户管理)
环境要求
- Docker 和 Docker Compose
快速开始
1. 克隆项目
git clone https://git.0yue.com/shenxianhe/corestack.git
cd corestack
2. 完成配置文件设置
配置分为两部分:
第一部分:修改配置文件
- 复制配置文件示例:
cp config.example.yaml config.yaml
- 根据您的实际环境修改
config.yaml文件中的配置项。
第二部分:域名配置(线上环境)
如果您是在线上环境部署,请修改 ./caddy/Caddyfile 文件,移除所有域名中的 .localhost 后缀。例如:
- 将
nsqadmin.shenxianhe.cn.localhost修改为nsqadmin.shenxianhe.cn - 将
connect.shenxianhe.cn.localhost修改为connect.shenxianhe.cn
3. 启动服务
使用 Docker Compose 一键启动所有服务:
docker compose up -d
查看服务状态:
docker compose ps
4. 停止服务
docker compose down
MySQL 配置
- 用户名:
root - 密码:
123456
Caddy 配置
Caddy 配置文件位于 ./caddy/Caddyfile,当前配置了两个域名代理,后续可根据需要自行扩展更多:
nsqadmin.shenxianhe.cn.localhost- 代理到 NSQ 管理界面connect.shenxianhe.cn.localhost- 代理到 Connect 服务
site 目录用法
./site 目录用于存放静态网站文件。您可以在该目录下创建多个子目录,每个子目录对应一个独立的静态网站,从而支持多个静态网站共存。
多静态网站配置示例:
- 首先在
./site目录下创建子目录:
mkdir -p ./site/app1 ./site/app2
-
将不同网站的静态文件分别放入对应的子目录
-
在
./caddy/Caddyfile中添加以下配置:
app1.shenxianhe.cn.localhost {
root * /site/app1
file_server
}
app2.shenxianhe.cn.localhost {
root * /site/app2
file_server
}
- 重启Caddy服务后,即可通过
https://app1.shenxianhe.cn.localhost和https://app2.shenxianhe.cn.localhost分别访问两个静态网站。
访问服务
NSQ 管理界面
访问地址:https://nsqadmin.shenxianhe.cn.localhost
- 用户名:
sky - 密码:
hiccup
安全提示:使用默认账户密码是不安全的行为,建议部署后立即修改密码。请参考安全注意事项章节。
Connect 服务
访问地址:https://connect.shenxianhe.cn.localhost
注意:
- 如果是本地部署,请将域名添加到
/etc/hosts文件中,格式为127.0.0.1 域名(例如127.0.0.1 nsqadmin.shenxianhe.cn.localhost)
HTTPS 证书配置
当使用 Docker 进行本地开发并启用 HTTPS 时,Caddy 会使用本地 CA 颁发证书。外部 HTTP 客户端默认不会信任这些证书。要解决这个问题,您可以在主机的信任存储中安装 Caddy 的根 CA 证书:
Linux
docker compose cp \
caddy:/data/caddy/pki/authorities/local/root.crt \
/usr/local/share/ca-certificates/root.crt \
&& sudo update-ca-certificates
macOS
docker compose cp \
caddy:/data/caddy/pki/authorities/local/root.crt \
/tmp/root.crt \
&& sudo security add-trusted-cert -d -r trustRoot \
-k /Library/Keychains/System.keychain /tmp/root.crt
Windows
docker compose cp \
caddy:/data/caddy/pki/authorities/local/root.crt \
%TEMP%/root.crt \
&& certutil -addstore -f "ROOT" %TEMP%/root.crt
常见问题
服务启动失败
如果服务启动失败,请检查:
- Docker 是否正常运行
- 端口是否被占用
- 查看日志获取详细错误信息:
docker compose logs <服务名称>
如何重置 MySQL 数据
警告:此操作会永久删除所有数据库数据,请谨慎操作!
方法一:使用 -v 参数删除所有数据卷(包括MySQL、Caddy等)
docker compose down -v
# 重新启动服务后会自动创建空的数据卷
docker compose up -d
方法二:仅删除MySQL数据卷(保留其他数据卷)
docker compose down
# 列出所有数据卷,找到MySQL数据卷名称(通常为 corestack_mysql)
docker volume ls
# 删除MySQL数据卷
docker volume rm corestack_mysql
# 重新启动服务后会自动创建空的MySQL数据卷
docker compose up -d
安全注意事项
修改NSQ管理界面的默认密码
当前Caddyfile中配置了NSQ管理界面的默认用户名和密码,这在生产环境中是不安全的。请按照以下步骤修改密码:
- 使用Caddy提供的
hash-password命令生成密码哈希:
docker run --rm caddy:2.10.0 hash-password -plaintext "your-new-password"
-
将生成的哈希值复制下来
-
编辑
./caddy/Caddyfile文件,替换basic_auth部分的密码哈希:
nsqadmin.shenxianhe.cn {
basic_auth {
# 修改为您的用户名和新的密码哈希
your-username $2a$14$...(生成的哈希值)
}
reverse_proxy nsqadmin:4171
}
- 重启Caddy服务:
docker compose restart caddy
维护与更新
更新服务镜像:
docker compose pull
重新构建并启动服务:
docker compose up -d --build