first commit
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
config.yaml
|
||||
209
README.md
Normal file
209
README.md
Normal 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
11
caddy/Caddyfile
Normal 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
44
config.example.yaml
Normal 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
60
docker-compose.yaml
Normal 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
0
site/.gitkeep
Normal file
Reference in New Issue
Block a user