diff --git a/.github/workflows/docs_pages.yml b/.github/workflows/deploy_docs_pages.yml
similarity index 100%
rename from .github/workflows/docs_pages.yml
rename to .github/workflows/deploy_docs_pages.yml
diff --git a/README.md b/README.md
index 8b446cb..690243f 100644
--- a/README.md
+++ b/README.md
@@ -20,53 +20,10 @@ Message Nest 是一个灵活而强大的消息推送整合平台,旨在简化
项目还在不断更新中,欢迎大家提出各种建议。
-关于日志,考虑到目前多数服务以收集控制台输出为主,暂时不支持写出日志文件。
+关于运行日志,考虑到目前多数服务以收集控制台输出为主,暂时不支持写出日志文件。
-## 功能更新日志
-- **2025.10.12**
- - 增加cookies过期天数设置
-- **2025.09.30**
- - 支持页面的明暗主题切换设置,增加登录日志
-- **2025.09.14**
- - 支持系统信息展示更多的运行信息
-- **2025.08.10**
- - **重大升级,重构web页面,样式更加美观友好**
- - UI组件使用shadcn-vue,基于tailwindcss,现在支持大中小屏自适应
-- **2025.04.28**
- - 支持tidb作为存储,支持数据库ssl配置
- - docker运行指定环境变量SSL=true
- - ini配置文件运行指定数据库连接参数Ssl=true
-- **2025.01.01**
- - 支持自托管消息,现在可以将站点作为消息的接受,登录站点查看消息
-- **2024.04.29**
- - 支持 SQLite 部署
- - 支持MySQL 5.x 8.x
-- **2024.04.11**
- - 支持自定义的定时消息发送
-- **2024.03.05**
- - 支持微信测试公众号模板消息发送
-- **2024.01.28**
- - 支持 Docker 部署,从环境变量启动服务
-- **2024.01.24**
- - 支持数据统计展示
-- **2024.01.20**
- - 添加日志查看自动刷新
-- **2024.01.07**
- - 支持站点信息自定义
-- **2024.01.03**
- - 支持企业微信
- - 单应用打包,直接运行,无需部署前端页面
- - 支持邮件发送
- - 用户密码设置
- - 支持用户定时任务清理,更新定时时间
- - 查看定时清理日志
- - 单应用的 HTML 浏览器自动缓存
- - Gin 的日志使用 Logrus
- - 支持异步发送
- - 支持邮件发送
- - 支持钉钉
- - 支持自定义的 Webhook 消息发送
- - 企业微信支持
+## 更新日志 ☕
+[点我转跳](https://engigu.github.io/Message-Push-Nest/guide/changelog.html)
## 项目来由 💡
@@ -77,599 +34,9 @@ Message Nest 是一个灵活而强大的消息推送整合平台,旨在简化

-## 使用方法 🚀
-
-
- 1. 直接运行最新的release打包的可执行文件(推荐,不用部署前端页面🍀🍀)
-
-1. 下载最新的系统版本对应的release, 解压
-2. 新建一个数据库
-3. 重命名conf/app.example.ini为conf/app.ini
-4. 修改app.ini对应的配置
-5. 将配置中`EmbedHtml = disable`, 进行注释,以单应用方式运行,完整配置参考如下:
-
-```ini
-[app]
-JwtSecret = message-nest
-LogLevel = INFO
-
-[server]
-RunMode = release
-HttpPort = 8000
-ReadTimeout = 60
-WriteTimeout = 60
-; 注释EmbedHtml,启用单应用模式
-; EmbedHtml = disable
-
-[database]
-; 关闭SQL打印
-; SqlDebug = enable
-
-; Type = sqlite
-Type = mysql
-User = root
-Password = Aa123456
-Host = vm.server
-Port = 3308
-Name = yourDbName
-TablePrefix = message_
-
-```
-
-6. 启动项目会自动创建表和账号
-
-```shell
-# INFO日志级别启动回出现如下日志
-
-[2024-01-13 13:40:09.075] INFO [migrate.go:70 Setup] [Init Data]: Migrate table: message_auth
-[2024-01-13 13:40:11.778] INFO [migrate.go:70 Setup] [Init Data]: Migrate table: message_send_tasks
-[2024-01-13 13:40:16.518] INFO [migrate.go:70 Setup] [Init Data]: Migrate table: message_send_ways
-[2024-01-13 13:40:23.300] INFO [migrate.go:70 Setup] [Init Data]: Migrate table: message_send_tasks_logs
-[2024-01-13 13:40:28.715] INFO [migrate.go:70 Setup] [Init Data]: Migrate table: message_send_tasks_ins
-[2024-01-13 13:40:39.538] INFO [migrate.go:70 Setup] [Init Data]: Migrate table: message_settings
-[2024-01-13 13:40:46.299] INFO [migrate.go:74 Setup] [Init Data]: Init Account data...
-[2024-01-13 13:40:46.751] INFO [migrate.go:77 Setup] [Init Data]: All table data init done.
-
-```
-
-7. 启动项目,访问8000端口,初始账号为admin,密码为123456
-
-
-
-
-
- 2. 前后端分离部署(待更新)
-
-
-
-[//]: # (1. 前端项目构建)
-
-[//]: # (```shell)
-
-[//]: # (cd web && npm i && npm run build)
-
-[//]: # (```)
-
-[//]: # (2. 配置配置文件,参考上面,需要注意将配置中`EmbedHtml = disable`取消注释)
-
-[//]: # (3. 启动go服务)
-
-[//]: # (```shell)
-
-[//]: # (go mod tidy)
-
-[//]: # (CGO_ENABLED=0 go build -o Message-Nest)
-
-[//]: # (./Message-Nest)
-
-[//]: # (```)
-
-[//]: # (4. 配置Nginx,将静态文件)
-
-[//]: # (5. 配置Nginx,将后端接口转发)
-
-
- 3. 开发调试运行
-
-1. 重命名conf/app.example.ini为conf/app.ini, 关键配置如下
-
-```ini
-[app]
-JwtSecret = message-nest
-LogLevel = INFO
-
-[server]
-; RunMode务必设置成debug,会自动添加跨域
-RunMode = debug
-HttpPort = 8000
-ReadTimeout = 60
-WriteTimeout = 60
-; 取消EmbedHtml的注释(启用前后端分离),然后到web目录下面,npm run dev启动前端页面
-EmbedHtml = disable
-
-[database]
-; 开启SQL打印
-SqlDebug = enable
-
-; Type = sqlite
-Type = mysql
-User = root
-Password = Aa123456
-Host = vm.server
-Port = 3308
-Name = yourDbName
-TablePrefix = message_
-
-```
-
-2. 运行main.go,服务启动后会运行在8000端口
-
-```shell
-go mod tidy
-go run main.go
-```
-
-3. 启动前端页面,页面启动后会提示访问url,一般是`http://127.0.0.1:5173`
-
-```shell
-cd web
-npm i
-npm run dev
-```
-
-4. 访问`http://127.0.0.1:5173`,进行调试开发,接口会自动转发到go服务`http://localhost:8000`
-
-
-
-
- 4. docker/docker-compose部署(推荐指数🍀🍀🍀🍀🍀)
-
-
- docker挂载app.ini部署
-
-1. 新建一个数据库,准备一个conf文件夹
-2. 新增conf/app.ini
-3. 修改app.ini对应的配置
-4. 将配置中`EmbedHtml = disable`, 进行注释,以单应用方式运行,完整配置参考如下:
-
-```ini
-[app]
-JwtSecret = message-nest
-LogLevel = INFO
-
-[server]
-RunMode = release
-; docker模式下端口配置文件中只能为8000
-HttpPort = 8000
-ReadTimeout = 60
-WriteTimeout = 60
-; 注释EmbedHtml,启用单应用模式
-; EmbedHtml = disable
-
-[database]
-; 关闭SQL打印
-; SqlDebug = enable
-
-; Type = sqlite
-Type = mysql
-User = root
-Password = Aa123456
-Host = vm.server
-Port = 3308
-Name = yourDbName
-TablePrefix = message_
-
-```
-
-6. 使用命令启动,端口使用`-p`自定义
-
-```shell
-# 从 Docker Hub 拉取
-docker pull engigu/message-nest:latest
-
-# 或从 GitHub Container Registry (GHCR) 拉取
-docker pull ghcr.io/engigu/message-nest:latest
-
-# 测试运行(Docker Hub 镜像)
-docker run --rm -ti \
- -p 8000:8000 \
- -v /your/path/conf:/app/conf \
- engigu/message-nest:latest
-
-# 测试运行(GHCR 镜像)
-docker run --rm -ti \
- -p 8000:8000 \
- -v /your/path/conf:/app/conf \
- ghcr.io/engigu/message-nest:latest
-
-# 正式运行(Docker Hub 镜像)
-docker run -d \
- -p 8000:8000 \
- -v /your/path/conf:/app/conf \
- engigu/message-nest:latest
-
-# 正式运行(GHCR 镜像)
-docker run -d \
- -p 8000:8000 \
- -v /your/path/conf:/app/conf \
- ghcr.io/engigu/message-nest:latest
-```
-
-7. 启动项目,访问8000端口,初始账号为admin,密码为123456
-
-
-
-
- docker-compose挂载app.ini部署
-
-1. 准备app.ini,文件内容如上docker部署
-2. 准备docker-compose.yml,内容如下:
-
-```yml
-version: "3.7"
-services:
-
- message-nest:
- image: engigu/message-nest:latest
- # 或使用 GHCR 镜像
- # image: ghcr.io/engigu/message-nest:latest
- container_name: message-nest
- restart: always
- volumes:
- - ./conf:/app/conf
- ports:
- - "8000:8000"
-```
-
-3. 文件目录结构
-
-```shell
-.
-├── conf
-│ └── app.ini
-├── docker-compose.yml
-
-```
-
-4. 启动项目
-
-```shell
-# 测试运行
-docker-compose up
-# 正式运行
-docker-compose up -d
-```
-
-
-
-
- docker/docker-compose环境变量部署(推荐指数🍀🍀🍀🍀🍀🍀🍀🍀🍀)
-
-环境变量介绍
-
-| 变量 | 说明 |
-|--------------------|----------------------------------------------------|
-| JWT_SECRET | jwt秘钥,可选,默认为message-nest |
-| LOG_LEVEL | 日志等级,可选,默认为INFO,DEBUG/INFO/ERROR |
-| RUN_MODE | 运行模式,可选,默认release,为debug将自动添加跨域 |
-| | |
-| DB_TYPE | 数据库类型,sqlite/mysql。默认为sqlite,存储路径为conf/database.db |
-| | |
-| MYSQL_HOST | mysql-host,DB_TYPE=mysql必填 |
-| MYSQL_PORT | mysql端口,DB_TYPE=mysql必填 |
-| MYSQL_USER | mysql用户名,DB_TYPE=mysql必填 |
-| MYSQL_PASSWORD | mysql数据库密码,DB_TYPE=mysql必填 |
-| MYSQL_DB | mysql数据库名字,DB_TYPE=mysql必填 |
-| MYSQL_TABLE_PREFIX | mysql数据表前缀,DB_TYPE=mysql必填 |
-| SSL | 是否开启SSL |
-| | |
-| SQL_DEBUG | 是否打印SQL,可选,默认关,设置enable为开启 |
-
-docker运行
-
-```shell
-
-# 正式运行(mysql)
-docker run -d \
- -p 8000:8000 \
- -e MYSQL_HOST=192.168.64.133 \
- -e MYSQL_PORT=3308 \
- -e MYSQL_USER=root \
- -e MYSQL_PASSWORD=Aa123456 \
- -e MYSQL_DB=test_11 \
- -e MYSQL_TABLE_PREFIX=message_ \
- --name message-nest \
- engigu/message-nest:latest
-
-# 或使用 GHCR 镜像(mysql)
-docker run -d \
- -p 8000:8000 \
- -e MYSQL_HOST=192.168.64.133 \
- -e MYSQL_PORT=3308 \
- -e MYSQL_USER=root \
- -e MYSQL_PASSWORD=Aa123456 \
- -e MYSQL_DB=test_11 \
- -e MYSQL_TABLE_PREFIX=message_ \
- --name message-nest \
- ghcr.io/engigu/message-nest:latest
-
-# 正式运行(sqlite)
-docker run -d \
- -p 8000:8000 \
- -v you/path/database.db=conf/database.db \
- --name message-nest \
- engigu/message-nest:latest
-
-# 或使用 GHCR 镜像(sqlite)
-docker run -d \
- -p 8000:8000 \
- -v you/path/database.db=conf/database.db \
- --name message-nest \
- ghcr.io/engigu/message-nest:latest
-```
-
-docker-compose运行(mysql)
-
-```yml
-version: "3.7"
-services:
-
- message-nest:
- image: engigu/message-nest:latest
- # 或使用 GHCR 镜像
- # image: ghcr.io/engigu/message-nest:latest
- container_name: message-nest
- restart: always
- ports:
- - "8000:8000"
- environment:
- - MYSQL_HOST=192.168.64.133
- - MYSQL_PORT=3308
- - MYSQL_USER=root
- - MYSQL_PASSWORD=Aa123456
- - MYSQL_DB=test_11
- - MYSQL_TABLE_PREFIX=message_
-```
-
-docker-compose运行(sqlite)
-
-```yml
-version: "3.7"
-services:
-
- message-nest:
- image: engigu/message-nest:latest
- # 或使用 GHCR 镜像
- # image: ghcr.io/engigu/message-nest:latest
- container_name: message-nest
- restart: always
- ports:
- - "8000:8000"
- volumes:
- - you/path/database.db:conf/database.db
-```
-
-```shell
-# 正式运行
-docker-compose -up -d
-```
-
-
-
-
-
-#### 关于EmbedHtml配置的说明
-
-> 这个配置可以理解为单应用模式(或者前后端分离)的开关
-> 1. 打开这个配置,表示前后端分离,表示go服务启动的时候只会有api服务,需要到web目录下,npm run
- dev启动前端项目。然后访问前端项目提示的端口服务,一般是127.0.0.1:5173。
- 或者使用npm run build,用Nginx部署前端。
->
-> 2. 注释这个配置,表示单应用,启动go服务,会把web/dist目录下文件作为前端静态资源。
- 如果目录下没有静态资源文件,需要到web目录下,npm run build构建生成。
->
-> 两种方式各有优缺点,综合考虑下来,推荐直接使用release的打包执行文件(或者docker环境变量进行部署),其中已经内置了页面静态资源,只用运行一个服务。
-
-## 完整配置说明 ⚙️
-
-
- 点击展开
-
-```ini
-[app]
-JwtSecret = message-nest
-; 暂时无用
-RuntimeRootPath = runtime/
-LogLevel = INFO
-
-[server]
-; debug or release
-; debug模式下会自动添加跨域headers
-RunMode = release
-HttpPort = 8000
-ReadTimeout = 60
-WriteTimeout = 60
-; use embed html static file
-; 是否使用embed打包的静态资源
-; 如果运行release打包后的应用,请注释这个设置。
-; 如果取消这个注释,只会单独运行api服务,前端页面需要到web目录手动npm run dev, 运行前端服务
-; EmbedHtml = disable
-
-[database]
-; 配置使用什么数据库,支持:mysql、sqlite、tidb
-Type = mysql
-User = root
-Password = password
-Host = 123.1.1.1
-Name = db_name
-Port = 3306
-; -- 其他配置
-; 表前缀
-TablePrefix = message_
-; -- 是否打开sql打印
-; SqlDebug = enable
-; 数据库连接是否开启ssl, value: [false | true]
-Ssl = true
-
-```
-
-
-
-## 客户端调用示例 💻️
-
-
- CURL
-
-```shell
-curl -X POST --location 'http://127.0.0.1:5173/api/v1/message/send' \
- --header 'Content-Type: application/json' \
- --data '{
- "task_id": "T-JiXpO8EO7u",
- "title": "message title",
- "text": "Hello World!"
-}'
-```
-
-
-
- Python
-
-```python
-import requests
-
-headers = {
- 'Content-Type': 'application/json',
-}
-json_data = {
- "task_id": "T-JiXpO8EO7u",
- "title": "message title",
- "text": "Hello World!"
-}
-response = requests.post('http://127.0.0.1:5173/api/v1/message/send', headers=headers, json=json_data)
-
-print("response:", response.json())
-
-```
-
-
-
- Go
-
-```golang
-package main
-
-import (
- "fmt"
- "io"
- "log"
- "net/http"
- "strings"
-)
-
-func main() {
- client := &http.Client{}
- var data = strings.NewReader(`{
- "task_id": "T-JiXpO8EO7u",
- "title": "message title",
- "text": "Hello World!"
-}`)
- req, err := http.NewRequest("POST", "http://127.0.0.1:5173/api/v1/message/send", data)
- if err != nil {
- log.Fatal(err)
- }
- req.Header.Set("Content-Type", "application/json")
- resp, err := client.Do(req)
- if err != nil {
- log.Fatal(err)
- }
- defer resp.Body.Close()
- bodyText, err := io.ReadAll(resp.Body)
- if err != nil {
- log.Fatal(err)
- }
- fmt.Printf("%s\n", bodyText)
-}
-
-```
-
-
-
- Java
-
-```java
-import java.io.IOException;
-import java.net.URI;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpRequest.BodyPublishers;
-import java.net.http.HttpResponse;
-
-HttpClient client = HttpClient.newBuilder()
- .followRedirects(HttpClient.Redirect.NORMAL)
- .build();
-
-HttpRequest request = HttpRequest.newBuilder()
- .uri(URI.create("http://127.0.0.1:5173/api/v1/message/send"))
- .POST(BodyPublishers.ofString("{\n \"task_id\": \"T-JiXpO8EO7u\",\n \"title\": \"message title\",\n \"text\": \"Hello World!\"\n}"))
- .setHeader("Content-Type", "application/json")
- .build();
-
-HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
-
-```
-
-
-
- Node
-
-```JavaScript
-var request = require('request');
-
-var headers = {
- 'Content-Type': 'application/json'
-};
-
-var dataString = "{\n \"task_id\": \"T-JiXpO8EO7u\",\n \"title\": \"message title\",\n \"text\": \"Hello World!\"\n}";
-
-var options = {
- url: 'http://127.0.0.1:5173/api/v1/message/send',
- method: 'POST',
- headers: headers,
- body: dataString
-};
-
-function callback(error, response, body) {
- if (!error && response.statusCode == 200) {
- console.log(body);
- }
-}
-
-request(options, callback);
-```
-
-
-
- PHP
-
-```php
-
+## 文档 📝
+[点我跳转](https://engigu.github.io/Message-Push-Nest/)
## 贡献 🤝