first commit

This commit is contained in:
sky
2025-08-23 07:30:51 +08:00
commit 60b36366d0
6 changed files with 325 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
config.yaml

209
README.md Normal file
View File

@@ -0,0 +1,209 @@
# 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
```

11
caddy/Caddyfile Normal file
View File

@@ -0,0 +1,11 @@
nsqadmin.shenxianhe.cn.localhost {
basic_auth {
# 用户名 sky密码 hiccup
sky $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG
}
reverse_proxy nsqadmin:4171
}
connect.shenxianhe.cn.localhost {
reverse_proxy h2c://shenxianhe:8080
}

44
config.example.yaml Normal file
View File

@@ -0,0 +1,44 @@
# 配置文件示例
# 请将此文件复制为config.yaml并根据实际环境修改
# 服务器配置
server:
worker_id: 1 # 工作节点ID用于雪花算法范围0-1023
# 数据库配置
mysql:
max_open_conns: 100 # 最大打开连接数
max_idle_conns: 20 # 最大空闲连接数
conn_max_lifetime: "30m" # 连接最大生命周期
# Redis配置
redis:
db: 0 # Redis数据库编号
pool_size: 10 # 连接池大小
dial_timeout: "5s" # 拨号超时时间
read_timeout: "3s" # 读取超时时间
write_timeout: "3s" # 写入超时时间
# 日志配置
logging:
level: "info" # 日志级别debug, info, warn, error, dpanic, panic, fatal
development: true # 开发模式
encoding: "console" # 日志编码console, json
output_paths: ["stdout"] # 输出路径
error_output_paths: ["stderr"] # 错误输出路径
# 功能模块配置
feature:
# 阿里云短信服务配置
sms:
access_key_id: "your_access_key_id"
access_key_secret: "your_access_key_secret"
# 账户服务配置
account:
sms_credential:
sign_name: "your_sign_name"
template_code: "your_template_code"
# NSQ配置
nsq:
topics:
user_register: "user_register"

60
docker-compose.yaml Normal file
View File

@@ -0,0 +1,60 @@
services:
caddy:
image: caddy:2.10.0
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./caddy:/etc/caddy
- ./site:/site
- caddy_data:/data
- caddy_config:/config
mysql:
image: mysql:lts
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: connect
volumes:
- mysql:/var/lib/mysql
redis:
image: redis:alpine
restart: unless-stopped
nsqlookupd:
image: nsqio/nsq
restart: unless-stopped
command: /nsqlookupd
nsqd:
image: nsqio/nsq
restart: unless-stopped
command: /nsqd --lookupd-tcp-address=nsqlookupd:4160
depends_on:
- nsqlookupd
nsqadmin:
image: nsqio/nsq
restart: unless-stopped
command: /nsqadmin --lookupd-http-address=nsqlookupd:4161
depends_on:
- nsqlookupd
connect:
image: git.0yue.com/shenxianhe/connect
restart: unless-stopped
volumes:
- ./config.yaml:/app/config.yaml
depends_on:
- mysql
- redis
- nsqd
volumes:
mysql:
caddy_data:
caddy_config:

0
site/.gitkeep Normal file
View File