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