gsuid_core/README.md
lilixxs 9c3b04b9b4
🚀 优化 docker 镜像构建相关代码 (#108)
* 修正 docker file 的问题

* 将国内和国外的 dockerfile 分开

* 改正 bug

* 改正挂载问题,延时挂载

* 改进,使用脚本做集中指令处理,方便后续扩展

* 在 Serverless 平台集成测试

* 更新workdir,使构建出的镜像路径与原文档一直

* 国内构建源也同步修改

* 完善版 docker 代码

* 完善文档和输出信息

* 🚨 `pre-commit-ci`修复格式错误

* 修正官方源

* 针对海外版镜像构建,删除 python 依赖的加速镜像

* 更正格式

* 测试替换功能

* 更正2

* 修正3

* 测试1

* 测试2

* 测试3

* 需要更新 lock 文件中的包地址

* lock 文件需要指定外网地址更新 lock 文件

* uv 包管理器的镜像设置也要修改
1. 删掉 uv.toml 的镜像源
2. 指定使用官方源更新 uv.lock 文件

* 针对海外构建 docker 文件的更新

* 更新海外 docker 构建文件,更新官方源

* 针对海外构建 docker 文件的更新,去掉官方镜像加速源,完善说明

* 🚨 `pre-commit-ci`修复格式错误

* 小问题😂

---------

Co-authored-by: lilixxs <lilixxs@email.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-02-23 03:41:08 +08:00

195 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ⚙️[GenshinUID](https://github.com/KimigaiiWuyi/GenshinUID) Core 0.7.1
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?&labelColor=ef8336)](https://pycqa.github.io/isort/)
[![Lint: flake8](https://img.shields.io/badge/lint-flake8-&labelColor=4C9C39)](https://flake8.pycqa.org/)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Genshin-bots/gsuid-core/master.svg)](https://results.pre-commit.ci/latest/github/Genshin-bots/gsuid-core/master)
[KimigaiiWuyi/GenshinUID](https://github.com/KimigaiiWuyi/GenshinUID) 的核心部分,平台无关,支持 HTTP/WS 形式调用,便于移植到其他平台以及框架。
**💖一套业务逻辑,多个平台支持!**
**🎉 [详细文档](https://docs.sayu-bot.com)** ( [快速开始(安装)](https://docs.sayu-bot.com/Started/InstallCore.html) | [链接Bot](https://docs.sayu-bot.com/LinkBots/AdapterList.html) | [插件市场](https://docs.sayu-bot.com/InstallPlugins/PluginsList.html) )
## 优点&特色
- 🔀 **异步优先**:异步处理~~大量~~消息流,不会阻塞任务运行
- 🔧 **易于开发**即使完全没有接触过Python也能在一小时内迅速上手 👉 [插件编写指南](https://docs.sayu-bot.com/CodePlugins/CookBook.html)
-**热重载**:修改插件配置&安装插件&更新插件,无需重启也能直接应用
- **🌎 [网页控制台](https://docs.sayu-bot.com/Advance/WebConsole.html)**集成网页控制台可以通过WEB直接操作**插件数据库/配置文件/检索日志/权限控制/数据统计/批量发送** 等超多操作
- 📄 **高度统一**:统一**所有插件**的[插件前缀](https://docs.sayu-bot.com/CodePlugins/PluginsPrefix.html)/[配置管理](https://docs.sayu-bot.com/CodePlugins/PluginsConfig.html)/[帮助图生成](https://docs.sayu-bot.com/CodePlugins/PluginsHelp.html)/权限控制/[数据库写入](https://docs.sayu-bot.com/CodePlugins/PluginsDataBase.html)/[订阅消息](https://docs.sayu-bot.com/CodePlugins/Subscribe.html),所有插件编写常见方法一应俱全,插件作者可通过简单的**继承重写**实现**高度统一**的逻辑
- 💻 **多元适配**借助上游Bot (NoneBot2 / Koishi / YunzaiBot) 适配支持QQ/QQ频道/微信/Tg/Discord/飞书/KOOK/DODO/OneBot v11(v12)等多个平台,做到**一套业务逻辑,多个平台支持**
- 🚀 **作为插件**:该项目**不能独立使用**,作为**上游Bot (NoneBot2 / Koishi / YunzaiBot)** 的插件使用无需迁移原本Bot保留之前全部的功能便于充分扩展
- 🛠 **内置命令**:借助内置命令,轻松完成**重启/状态/安装插件/更新插件/更新依赖**等操作
- 📝 **帮助系统**:通过统一适配,可按照不同**权限输出**不同帮助,并支持插件的**二级菜单注册**至主帮助目录,并支持在帮助界面使用不同的**自定义前缀**
<details><summary>主菜单帮助示例</summary><p>
<a><img src="https://s2.loli.net/2025/02/07/glxaJyS6325zvbG.jpg"></a>
</p></details>
## 感谢
- 本项目仅供学习使用,请勿用于商业用途
- [爱发电](https://afdian.com/a/KimigaiiWuyi)
- [GPL-3.0 License](https://github.com/Genshin-bots/gsuid_core/blob/master/LICENSE) ©[@KimigaiiWuyi](https://github.com/KimigaiiWuyi)
---
> [!IMPORTANT]
>
> 以下内容未经验证。
## 使用 docker 镜像部署
> 此镜像使用下文的 Github Actions 自动构建,每 12 小时更新
`请先安装好 Docker`
- 镜像地址docker hubhttps://hub.docker.com/repository/docker/lilixxs666/gsuid-core
docker hub 网站需要注册账号,并至少选择 Free Plan 才能访问
- 镜像名称:`lilixxs666/gsuid-core:dev`
- 免费用户有 1 小时 10 次拉取的限制😂
---
可通过如下指令拉取镜像并运行:
```bash
docker run -d \
--name gsuidcore \
-e TZ=Asia/Shanghai \
-e GSCORE_HOST=0.0.0.0 \
-p 18765:8765 \
-v /opt/gscore_data:/gsuid_core/data \
-v /opt/gscore_plugins:/gsuid_core/gsuid_core/plugins \
lilixxs666/gsuid-core:dev
```
在本地按照以上指令容器运行后,可直接进入`localhost:18965/genshinuid`进入核心的后台管理界面
相关文档见:
**镜像参数说明:**
| **参数** | **功能** |
|--------------------------------------|----------------------------------------------------------|
| `-d` | 服务后台运行 |
| `--name gsuidcore` | 生成的容器名称,可选,这里指定为 gsuidcore若不写则系统给随机名称 |
| `-p 18765:8765` | 端口映射,可选,默认不做映射,只有映射的端口才能被外部访问<br/>这里设置为容器内 8765 端口 → 外部 18765 端口 |
| `-e TZ=Asia/Shanghai` | 时区,可选,默认值=Asia/Shanghai |
| `-e GSCORE_HOST=0.0.0.0` | 服务监听地址:可选,默认值=localhost |
| `-v /opt/gscore_data:/gsuid_core/data ` | 文件映射,可选,只有映射的路径内的文件才能直接从外部读写:原软件的 data 文件夹<br/>可从外部的 /opt/gscore_data 位置访问 |
| `-v /opt/gscore_plugins:/gsuid_core/gsuid_core/plugins` | 文件映射,可选,只有映射的路径内的文件才能直接从外部读写:原软件的 plugins 文件夹<br/>可从外部的 /opt/gscore_plugins 位置访问 &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; |
**一些容器部署的常见问题**
详见下文【5. 容器部署的相关使用说明】
**镜像构建整体流程:**
- 主分支同步Github Actions 每 12 小时执行一次项目主分支gsuid-core:master --> fork 的分支 (gsuid-core-prci:master)
- 镜像构建Github Actions 每 12 小时执行一次fork 的分支 (gsuid-core-prci:master) --> 编译 --> 发布到 dockerhub
**用于实现以上构建流程的 fork 库地址:**
- 同步分支masterhttps://github.com/lilixxs/gsuid_core-prci/tree/master
- Github Action 构建分支docker-autobuildhttps://github.com/lilixxs/gsuid_core-prci/tree/docker-autobuild
**Github Action 配置文件:**
- master 分支自动同步:./github/workflows/master-autosync.yaml
- docker 镜像自动构建:./github/workflows/docker-autobuild.yaml
## 使用 Docker compose 从代码构建 docker 容器(可选)
`请先安装好 Docker 与Docker Compose`
1. git clone gsuid-core本体
```shell
git clone https://github.com/Genshin-bots/gsuid_core.git --depth=1 --single-branch
```
2. 安装所需插件(可选)
```shell
# cd进入插件文件夹内
cd plugins
# 安装v4 GenshinUID
git clone -b v4 https://github.com/KimigaiiWuyi/GenshinUID.git --depth=1 --single-branch
```
3. Docker Compose 启动
> 注意:根据 docker 版本及插件安装情况composer 命令可能为`docker-composer`或`docker composer`,若下面的语句执行提示指令出错,请换一个语句尝试(若两个语句都提示指令出错,则是`Docker Composer`没有安装
```shell
# 进入项目根目录(此目录下包含 Dockerfile 和 docker-compose.yaml 文件)
# 初次安装,需要编译、安装依赖,需执行以下指令:
docker-compose up -d --build
# 之后的部署配置,仅修改 docker-compose.yaml 文件,需执行以下指令:
# 先停止相关容器
docker-compose down
# 再按照新的配置部署新的容器
docker-compose up -d
# 在同一机器上多次重复构建,会出现大量无用的镜像,可使用以下指令清空未使用的镜像
docker container prune -f
```
4. Docker Compose 配置文件说明
```yaml
services:
gsuid-core:
build:
context: .
# 指定要使用的镜像构建文件
# Dockerfile = 原软件源(连到国外服务器,适用 Github CI/CD 或 Docker Hub 等外网环境)
# Dockerfile.cn = 国内镜像源(使用国内镜像源,适用于自己或国内服务器构建)
dockerfile: Dockerfile.cn
container_name: gsuidcore
privileged: true
restart: unless-stopped
environment:
# TZ = 时区设置,可选参数,默认为 Asia/Shanghai
# GSCORE_HOST = 服务监听地址 (0.0.0.0 = 监听全部地址,启动容器可直接进后台) 可选参数,默认 locaohost (只允许容器内本地访问)
- TZ=Asia/Shanghai
- GSCORE_HOST=0.0.0.0
ports:
# 端口映射可自由修改以下为容器core 中配置8765 对应外部的 18765 端口
- 18765:8765
volumes:
# 仅映射需要的文件夹,避免数据冲突
# 如需访问项目根目录,需要通过 docker exec -it <容器id> bash 进入容器内部
# 进入后默认的 /gsuid_core 即为插件根目录,路径与文档路径保持一致
- /opt/gscore_data:/gsuid_core/data
- /opt/gscore_plugins:/gsuid_core/gsuid_core/plugins
```
5. 容器部署的相关使用说明
- 如需访问容器部署的 core 的其他路径(上面 yaml 文件中没有映射的文件或路径)则需要通过`docker exec -it <容器id> bash`进入,进入后默认的`/gsuid_core`即对应文档中的 core 根目录`gsuid_core`,其他文档路径与官方文档对应
- 若不设定环境变量`GSCORE_HOST`,则 core 默认监听在`localhost`地址Docker 部署后无法直接连接
需要修改`config.json`文件中的`HOST`配置,参考 [https://docs.sayu-bot.com/Started/CoreConfig.html](https://docs.sayu-bot.com/Started/CoreConfig.html)
(以上面的 yaml 文件为例,配置文件在文档中的路径为`gsuid_core/data`,则对应在容器外部的地址为`/gscore_data/config.json`,需将其中的`host`配置修改为`0.0.0.0`
然后执行`docker restart <容器id>`重启容器
- 关于端口配置,由于 docker 容器本身会对端口做转发(对应 yaml 文件中的`port`部分,因此建议使用 docker compose 的相关配置或 docker 指令来修改端口,而不用 core 本身的配置来修改
同时每次 docker 修改端口、监听地址后都需要先删除当前容器重新执行`docker compose up -d`指令重新部署
- 如需增加插件,建议使用命令进行安装,也可进入容器项目根目录手动安装
- 如果Bot例如 NoneBot2、HoshinoBot也是Docker部署的Core或其插件更新后建议将Core和Bot的容器都重启保证修改生效