feat: add docs pages
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
name: Deploy Docs to GitHub Pages
|
||||
|
||||
on:
|
||||
# 在推送到 main 分支时触发
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
# 允许手动触发
|
||||
workflow_dispatch:
|
||||
|
||||
# 设置 GITHUB_TOKEN 的权限,允许部署到 GitHub Pages
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# 只允许一个并发部署
|
||||
concurrency:
|
||||
group: pages
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
# 构建任务
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # 如果未启用 lastUpdated,则不需要
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: npm
|
||||
cache-dependency-path: docs/package-lock.json
|
||||
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
working-directory: docs
|
||||
|
||||
- name: Build with VitePress
|
||||
run: npm run docs:build
|
||||
working-directory: docs
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: docs/.vitepress/dist
|
||||
|
||||
# 部署任务
|
||||
deploy:
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
name: Deploy
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
@@ -0,0 +1,4 @@
|
||||
node_modules
|
||||
.vitepress/dist
|
||||
.vitepress/cache
|
||||
.DS_Store
|
||||
@@ -0,0 +1,104 @@
|
||||
import { defineConfig } from 'vitepress'
|
||||
|
||||
export default defineConfig({
|
||||
title: "Message Nest",
|
||||
description: "灵活而强大的消息推送整合平台",
|
||||
lang: 'zh-CN',
|
||||
|
||||
// 如果部署到 GitHub Pages 的子路径,需要设置 base
|
||||
// 例如:https://engigu.github.io/Message-Push-Nest/
|
||||
// base: '/Message-Push-Nest/',
|
||||
|
||||
// 如果使用自定义域名或部署到根路径,注释掉 base 或设置为 '/'
|
||||
base: '/Message-Push-Nest/',
|
||||
|
||||
themeConfig: {
|
||||
logo: '/logo.svg',
|
||||
|
||||
nav: [
|
||||
{ text: '首页', link: '/' },
|
||||
{ text: '指南', link: '/guide/introduction' },
|
||||
{ text: '部署', link: '/deployment/overview' },
|
||||
{ text: 'API', link: '/api/usage' },
|
||||
{ text: '演示站点', link: 'https://message-nest-demo-site.qwapi.eu.org/' }
|
||||
],
|
||||
|
||||
sidebar: {
|
||||
'/guide/': [
|
||||
{
|
||||
text: '开始',
|
||||
items: [
|
||||
{ text: '介绍', link: '/guide/introduction' },
|
||||
{ text: '特色功能', link: '/guide/features' },
|
||||
{ text: '更新日志', link: '/guide/changelog' }
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '配置',
|
||||
items: [
|
||||
{ text: '配置说明', link: '/guide/configuration' },
|
||||
{ text: 'EmbedHtml说明', link: '/guide/embed-html' }
|
||||
]
|
||||
},
|
||||
// {
|
||||
// text: '文档部署',
|
||||
// items: [
|
||||
// { text: '部署到 GitHub Pages', link: '/guide/deploy-to-github-pages' }
|
||||
// ]
|
||||
// }
|
||||
],
|
||||
'/deployment/': [
|
||||
{
|
||||
text: '部署方式',
|
||||
items: [
|
||||
{ text: '部署概览', link: '/deployment/overview' },
|
||||
{ text: '直接运行', link: '/deployment/direct-run' },
|
||||
{ text: '开发调试', link: '/deployment/development' },
|
||||
{ text: 'Docker部署', link: '/deployment/docker' },
|
||||
{ text: 'Docker Compose', link: '/deployment/docker-compose' }
|
||||
]
|
||||
}
|
||||
],
|
||||
'/api/': [
|
||||
{
|
||||
text: 'API文档',
|
||||
items: [
|
||||
{ text: '使用说明', link: '/api/usage' },
|
||||
{ text: '调用示例', link: '/api/examples' }
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
socialLinks: [
|
||||
{ icon: 'github', link: 'https://github.com/engigu/Message-Push-Nest' }
|
||||
],
|
||||
|
||||
footer: {
|
||||
message: 'Released under the MIT License.',
|
||||
copyright: 'Copyright © 2024-present Message Nest'
|
||||
},
|
||||
|
||||
search: {
|
||||
provider: 'local'
|
||||
},
|
||||
|
||||
outline: {
|
||||
level: [2, 3],
|
||||
label: '目录'
|
||||
},
|
||||
|
||||
docFooter: {
|
||||
prev: '上一页',
|
||||
next: '下一页'
|
||||
},
|
||||
|
||||
lastUpdated: {
|
||||
text: '最后更新于',
|
||||
formatOptions: {
|
||||
dateStyle: 'short',
|
||||
timeStyle: 'short'
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,49 @@
|
||||
# Message Nest 文档站点
|
||||
|
||||
这是 Message Nest 项目的 VitePress 文档站点。
|
||||
|
||||
## 本地开发
|
||||
|
||||
```bash
|
||||
# 安装依赖
|
||||
npm install
|
||||
|
||||
# 启动开发服务器
|
||||
npm run docs:dev
|
||||
|
||||
# 构建文档
|
||||
npm run docs:build
|
||||
|
||||
# 预览构建结果
|
||||
npm run docs:preview
|
||||
```
|
||||
|
||||
## 文档结构
|
||||
|
||||
```
|
||||
docs/
|
||||
├── .vitepress/ # VitePress 配置
|
||||
│ └── config.mts # 站点配置文件
|
||||
├── guide/ # 指南
|
||||
│ ├── introduction.md # 介绍
|
||||
│ ├── features.md # 特色功能
|
||||
│ ├── changelog.md # 更新日志
|
||||
│ ├── configuration.md # 配置说明
|
||||
│ └── embed-html.md # EmbedHtml说明
|
||||
├── deployment/ # 部署
|
||||
│ ├── overview.md # 部署概览
|
||||
│ ├── direct-run.md # 直接运行
|
||||
│ ├── development.md # 开发调试
|
||||
│ ├── docker.md # Docker部署
|
||||
│ └── docker-compose.md # Docker Compose
|
||||
├── api/ # API文档
|
||||
│ ├── usage.md # 使用说明
|
||||
│ └── examples.md # 调用示例
|
||||
├── public/ # 静态资源
|
||||
│ └── logo.svg # Logo
|
||||
└── index.md # 首页
|
||||
```
|
||||
|
||||
## 访问地址
|
||||
|
||||
开发服务器启动后,默认访问地址为:`http://localhost:5173`
|
||||
+133
@@ -0,0 +1,133 @@
|
||||
# VitePress 文档站点设置完成
|
||||
|
||||
## 已完成的工作
|
||||
|
||||
✅ 创建了完整的 VitePress 文档站点结构
|
||||
✅ 根据 README.md 拆分内容到多个文档页面
|
||||
✅ 配置了导航和侧边栏
|
||||
✅ 安装了所有必要的依赖
|
||||
✅ 创建了美观的首页
|
||||
|
||||
## 文档结构
|
||||
|
||||
```
|
||||
docs/
|
||||
├── .vitepress/
|
||||
│ └── config.mts # VitePress 配置文件
|
||||
├── guide/ # 指南部分
|
||||
│ ├── introduction.md # 项目介绍
|
||||
│ ├── features.md # 特色功能
|
||||
│ ├── changelog.md # 更新日志
|
||||
│ ├── configuration.md # 完整配置说明
|
||||
│ └── embed-html.md # EmbedHtml 配置详解
|
||||
├── deployment/ # 部署部分
|
||||
│ ├── overview.md # 部署概览
|
||||
│ ├── direct-run.md # 直接运行 Release
|
||||
│ ├── development.md # 开发调试模式
|
||||
│ ├── docker.md # Docker 部署
|
||||
│ └── docker-compose.md # Docker Compose 部署
|
||||
├── api/ # API 文档
|
||||
│ ├── usage.md # API 使用说明
|
||||
│ └── examples.md # 多语言调用示例
|
||||
├── public/
|
||||
│ └── logo.svg # 站点 Logo
|
||||
├── index.md # 首页
|
||||
├── package.json # 项目配置
|
||||
└── README.md # 文档说明
|
||||
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 启动开发服务器
|
||||
|
||||
```bash
|
||||
cd docs
|
||||
npm run docs:dev
|
||||
```
|
||||
|
||||
访问:http://localhost:5173
|
||||
|
||||
### 构建生产版本
|
||||
|
||||
```bash
|
||||
cd docs
|
||||
npm run docs:build
|
||||
```
|
||||
|
||||
构建产物在 `docs/.vitepress/dist` 目录
|
||||
|
||||
### 预览构建结果
|
||||
|
||||
```bash
|
||||
cd docs
|
||||
npm run docs:preview
|
||||
```
|
||||
|
||||
## 文档内容
|
||||
|
||||
### 指南部分
|
||||
- **介绍** - 项目背景、演示站点、效果图
|
||||
- **特色功能** - 核心特性、支持的推送方式、其他功能
|
||||
- **更新日志** - 完整的功能更新历史
|
||||
- **配置说明** - 详细的配置文件说明和示例
|
||||
- **EmbedHtml说明** - 单应用模式和前后端分离模式的详细说明
|
||||
|
||||
### 部署部分
|
||||
- **部署概览** - 各种部署方式对比和快速选择指南
|
||||
- **直接运行** - 使用 Release 可执行文件部署
|
||||
- **开发调试** - 本地开发环境搭建
|
||||
- **Docker部署** - 两种 Docker 部署方式(配置文件和环境变量)
|
||||
- **Docker Compose** - 完整的编排部署方案
|
||||
|
||||
### API 文档
|
||||
- **使用说明** - API 接口说明、参数、响应格式
|
||||
- **调用示例** - 提供 CURL、Python、Go、Java、Node.js、PHP、C#、Ruby 等多种语言的示例
|
||||
|
||||
## 主要特性
|
||||
|
||||
1. **美观的首页** - 使用 VitePress 的 home layout,展示项目特色
|
||||
2. **清晰的导航** - 顶部导航和侧边栏导航
|
||||
3. **搜索功能** - 内置本地搜索
|
||||
4. **响应式设计** - 支持移动端访问
|
||||
5. **中文优化** - 所有界面文字都已本地化
|
||||
6. **代码高亮** - 支持多种编程语言的代码高亮
|
||||
7. **自动目录** - 每个页面自动生成目录
|
||||
|
||||
## 下一步建议
|
||||
|
||||
1. 可以在 `docs/public/` 目录添加更多图片和资源
|
||||
2. 可以在配置文件中自定义主题颜色
|
||||
3. 可以添加更多的文档页面
|
||||
4. 可以配置 GitHub Pages 或其他静态站点托管服务进行部署
|
||||
|
||||
## 部署到生产环境
|
||||
|
||||
### GitHub Pages
|
||||
|
||||
1. 在 `.vitepress/config.mts` 中设置 `base`:
|
||||
```ts
|
||||
export default defineConfig({
|
||||
base: '/Message-Push-Nest/',
|
||||
// ...
|
||||
})
|
||||
```
|
||||
|
||||
2. 构建并部署:
|
||||
```bash
|
||||
npm run docs:build
|
||||
# 将 .vitepress/dist 目录部署到 GitHub Pages
|
||||
```
|
||||
|
||||
### Vercel / Netlify
|
||||
|
||||
直接连接 GitHub 仓库,设置:
|
||||
- Build Command: `npm run docs:build`
|
||||
- Output Directory: `docs/.vitepress/dist`
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 文档内容已根据 README.md 进行了合理拆分
|
||||
- 保留了所有原始信息和代码示例
|
||||
- 添加了更好的组织结构和导航
|
||||
- 使用了 VitePress 的特性(如提示框、代码块等)
|
||||
@@ -0,0 +1,305 @@
|
||||
# 调用示例
|
||||
|
||||
本页面提供各种编程语言的API调用示例。
|
||||
|
||||
## CURL
|
||||
|
||||
```bash
|
||||
curl -X POST --location 'http://127.0.0.1:8000/api/v1/message/send' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
"token": "a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e",
|
||||
"title": "message title",
|
||||
"text": "Hello World!"
|
||||
}'
|
||||
```
|
||||
|
||||
## Python
|
||||
|
||||
```python
|
||||
import requests
|
||||
|
||||
headers = {
|
||||
'Content-Type': 'application/json',
|
||||
}
|
||||
|
||||
json_data = {
|
||||
"token": "a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e",
|
||||
"title": "message title",
|
||||
"text": "Hello World!"
|
||||
}
|
||||
|
||||
response = requests.post(
|
||||
'http://127.0.0.1:8000/api/v1/message/send',
|
||||
headers=headers,
|
||||
json=json_data
|
||||
)
|
||||
|
||||
print("response:", response.json())
|
||||
```
|
||||
|
||||
### 使用 requests 库
|
||||
|
||||
首先安装依赖:
|
||||
|
||||
```bash
|
||||
pip install requests
|
||||
```
|
||||
|
||||
## Go
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
client := &http.Client{}
|
||||
var data = strings.NewReader(`{
|
||||
"token": "a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e",
|
||||
"title": "message title",
|
||||
"text": "Hello World!"
|
||||
}`)
|
||||
req, err := http.NewRequest("POST", "http://127.0.0.1:8000/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;
|
||||
|
||||
public class MessageNestExample {
|
||||
public static void main(String[] args) throws IOException, InterruptedException {
|
||||
HttpClient client = HttpClient.newBuilder()
|
||||
.followRedirects(HttpClient.Redirect.NORMAL)
|
||||
.build();
|
||||
|
||||
String jsonData = """
|
||||
{
|
||||
"token": "a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e",
|
||||
"title": "message title",
|
||||
"text": "Hello World!"
|
||||
}
|
||||
""";
|
||||
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create("http://127.0.0.1:8000/api/v1/message/send"))
|
||||
.POST(BodyPublishers.ofString(jsonData))
|
||||
.setHeader("Content-Type", "application/json")
|
||||
.build();
|
||||
|
||||
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
|
||||
System.out.println(response.body());
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Node.js
|
||||
|
||||
### 使用 request 库
|
||||
|
||||
```javascript
|
||||
var request = require('request');
|
||||
|
||||
var headers = {
|
||||
'Content-Type': 'application/json'
|
||||
};
|
||||
|
||||
var dataString = JSON.stringify({
|
||||
"token": "a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e",
|
||||
"title": "message title",
|
||||
"text": "Hello World!"
|
||||
});
|
||||
|
||||
var options = {
|
||||
url: 'http://127.0.0.1:8000/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);
|
||||
```
|
||||
|
||||
### 使用 axios 库
|
||||
|
||||
```javascript
|
||||
const axios = require('axios');
|
||||
|
||||
const data = {
|
||||
token: "a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e",
|
||||
title: "message title",
|
||||
text: "Hello World!"
|
||||
};
|
||||
|
||||
axios.post('http://127.0.0.1:8000/api/v1/message/send', data, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
.then(response => {
|
||||
console.log('response:', response.data);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('error:', error);
|
||||
});
|
||||
```
|
||||
|
||||
### 使用 fetch (Node.js 18+)
|
||||
|
||||
```javascript
|
||||
const data = {
|
||||
token: "a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e",
|
||||
title: "message title",
|
||||
text: "Hello World!"
|
||||
};
|
||||
|
||||
fetch('http://127.0.0.1:8000/api/v1/message/send', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(data)
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
console.log('response:', data);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('error:', error);
|
||||
});
|
||||
```
|
||||
|
||||
## PHP
|
||||
|
||||
```php
|
||||
<?php
|
||||
$ch = curl_init();
|
||||
|
||||
$data = array(
|
||||
"token" => "a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e",
|
||||
"title" => "message title",
|
||||
"text" => "Hello World!"
|
||||
);
|
||||
|
||||
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:8000/api/v1/message/send');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
'Content-Type: application/json',
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
|
||||
if (curl_errno($ch)) {
|
||||
echo 'Error:' . curl_error($ch);
|
||||
} else {
|
||||
echo $response;
|
||||
}
|
||||
|
||||
curl_close($ch);
|
||||
?>
|
||||
```
|
||||
|
||||
## C#
|
||||
|
||||
```csharp
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
class Program
|
||||
{
|
||||
static async Task Main(string[] args)
|
||||
{
|
||||
using var client = new HttpClient();
|
||||
|
||||
var data = new
|
||||
{
|
||||
token = "a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e",
|
||||
title = "message title",
|
||||
text = "Hello World!"
|
||||
};
|
||||
|
||||
var json = JsonSerializer.Serialize(data);
|
||||
var content = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
var response = await client.PostAsync(
|
||||
"http://127.0.0.1:8000/api/v1/message/send",
|
||||
content
|
||||
);
|
||||
|
||||
var responseString = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseString);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Ruby
|
||||
|
||||
```ruby
|
||||
require 'net/http'
|
||||
require 'json'
|
||||
require 'uri'
|
||||
|
||||
uri = URI('http://127.0.0.1:8000/api/v1/message/send')
|
||||
http = Net::HTTP.new(uri.host, uri.port)
|
||||
|
||||
request = Net::HTTP::Post.new(uri.path, {
|
||||
'Content-Type' => 'application/json'
|
||||
})
|
||||
|
||||
request.body = {
|
||||
token: 'a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e',
|
||||
title: 'message title',
|
||||
text: 'Hello World!'
|
||||
}.to_json
|
||||
|
||||
response = http.request(request)
|
||||
puts response.body
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
::: tip 提示
|
||||
- 将示例中的 `http://127.0.0.1:8000` 替换为你的实际服务地址
|
||||
- 将 `a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e` 替换为你在管理后台创建的实际 Token
|
||||
- 建议在生产环境中使用 HTTPS
|
||||
:::
|
||||
@@ -0,0 +1,106 @@
|
||||
# API 使用说明
|
||||
|
||||
Message Nest 提供统一的消息推送API接口。
|
||||
|
||||
## 接口地址
|
||||
|
||||
```
|
||||
POST /api/v1/message/send
|
||||
```
|
||||
|
||||
## 请求参数
|
||||
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| token | string | 是 | 推送令牌,在管理后台查看 |
|
||||
| title | string | 是 | 消息标题 |
|
||||
| text | string | 是 | 消息内容 |
|
||||
|
||||
## 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"token": "a3541c2f0d3e1b4a5c6d7e8f9a0b1c2d3e",
|
||||
"title": "message title",
|
||||
"text": "Hello World!"
|
||||
}
|
||||
```
|
||||
|
||||
## 响应格式
|
||||
|
||||
### 成功响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "success",
|
||||
"data": {
|
||||
"status": "sent"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 400,
|
||||
"msg": "error message",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## 获取 Token
|
||||
|
||||
1. 登录 Message Nest 管理后台
|
||||
2. 进入"发送任务"页面
|
||||
3. 创建新的发送任务
|
||||
4. 配置推送渠道(邮件、钉钉、企业微信等)
|
||||
5. 保存后获得推送令牌(Token)
|
||||
|
||||
## 支持的推送渠道
|
||||
|
||||
- **邮件** - SMTP邮件发送
|
||||
- **钉钉** - 钉钉机器人
|
||||
- **企业微信** - 企业微信应用消息
|
||||
- **微信公众号** - 微信测试公众号模板消息
|
||||
- **自定义Webhook** - 自定义HTTP请求
|
||||
- **自托管消息** - 站内消息
|
||||
|
||||
## 使用流程
|
||||
|
||||
1. **创建推送渠道**
|
||||
- 在管理后台配置各种推送渠道
|
||||
- 填写相应的配置信息(如邮箱、Webhook地址等)
|
||||
|
||||
2. **创建发送任务**
|
||||
- 选择要使用的推送渠道
|
||||
- 可以选择多个渠道同时推送
|
||||
- 获得唯一的推送令牌(Token)
|
||||
|
||||
3. **调用API发送消息**
|
||||
- 使用获得的 Token
|
||||
- 发送标题和内容
|
||||
- 消息会自动推送到配置的所有渠道
|
||||
|
||||
## 注意事项
|
||||
|
||||
::: warning 重要
|
||||
- Token 是唯一的,请妥善保管
|
||||
- 消息内容支持纯文本和Markdown格式(取决于推送渠道)
|
||||
- 建议使用异步方式调用API,避免阻塞主流程
|
||||
:::
|
||||
|
||||
## 错误码说明
|
||||
|
||||
| 错误码 | 说明 |
|
||||
|--------|------|
|
||||
| 200 | 成功 |
|
||||
| 400 | 请求参数错误 |
|
||||
| 401 | 未授权 |
|
||||
| 404 | Token不存在 |
|
||||
| 500 | 服务器内部错误 |
|
||||
|
||||
## 下一步
|
||||
|
||||
查看各语言的 [调用示例](/api/examples)。
|
||||
@@ -0,0 +1,151 @@
|
||||
# 开发调试
|
||||
|
||||
本文档介绍如何在开发环境中运行 Message Nest。
|
||||
|
||||
## 前置要求
|
||||
|
||||
- Go 1.18+
|
||||
- Node.js 16+
|
||||
- MySQL 5.7+ 或 SQLite
|
||||
|
||||
## 部署步骤
|
||||
|
||||
### 1. 克隆项目
|
||||
|
||||
```bash
|
||||
git clone https://github.com/engigu/Message-Push-Nest.git
|
||||
cd Message-Push-Nest
|
||||
```
|
||||
|
||||
### 2. 配置文件
|
||||
|
||||
重命名 `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_
|
||||
```
|
||||
|
||||
::: warning 重要配置
|
||||
- `RunMode` 必须设置为 `debug`,会自动添加跨域
|
||||
- `EmbedHtml` 必须取消注释,启用前后端分离
|
||||
- `SqlDebug` 建议启用,方便调试
|
||||
:::
|
||||
|
||||
### 3. 启动后端服务
|
||||
|
||||
```bash
|
||||
go mod tidy
|
||||
go run main.go
|
||||
```
|
||||
|
||||
服务启动后会运行在8000端口。
|
||||
|
||||
### 4. 启动前端服务
|
||||
|
||||
```bash
|
||||
cd web
|
||||
npm i
|
||||
npm run dev
|
||||
```
|
||||
|
||||
页面启动后会提示访问URL,一般是 `http://127.0.0.1:5173`。
|
||||
|
||||
### 5. 访问应用
|
||||
|
||||
访问 `http://127.0.0.1:5173`,进行调试开发。
|
||||
|
||||
接口会自动转发到go服务 `http://localhost:8000`。
|
||||
|
||||
## 开发说明
|
||||
|
||||
### 目录结构
|
||||
|
||||
```
|
||||
Message-Push-Nest/
|
||||
├── conf/ # 配置文件
|
||||
├── middleware/ # 中间件
|
||||
├── migrate/ # 数据库迁移
|
||||
├── models/ # 数据模型
|
||||
├── pkg/ # 工具包
|
||||
├── routers/ # 路由
|
||||
├── service/ # 业务逻辑
|
||||
├── web/ # 前端项目
|
||||
│ ├── src/ # 源代码
|
||||
│ ├── public/ # 静态资源
|
||||
│ └── dist/ # 构建输出
|
||||
└── main.go # 入口文件
|
||||
```
|
||||
|
||||
### 前端技术栈
|
||||
|
||||
- Vue 3
|
||||
- TypeScript
|
||||
- Vite
|
||||
- TailwindCSS
|
||||
- shadcn-vue
|
||||
|
||||
### 后端技术栈
|
||||
|
||||
- Go
|
||||
- Gin
|
||||
- GORM
|
||||
- Logrus
|
||||
|
||||
## 构建生产版本
|
||||
|
||||
### 构建前端
|
||||
|
||||
```bash
|
||||
cd web
|
||||
npm run build
|
||||
```
|
||||
|
||||
构建产物会输出到 `web/dist` 目录。
|
||||
|
||||
### 构建后端
|
||||
|
||||
```bash
|
||||
CGO_ENABLED=0 go build -o Message-Nest
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 前端无法连接后端
|
||||
|
||||
检查 `web/vite.config.ts` 中的代理配置是否正确。
|
||||
|
||||
### 热更新不生效
|
||||
|
||||
1. 检查文件是否保存
|
||||
2. 重启前端开发服务器
|
||||
3. 清除浏览器缓存
|
||||
|
||||
### 数据库连接失败
|
||||
|
||||
1. 检查数据库服务是否启动
|
||||
2. 检查配置文件中的连接信息
|
||||
3. 检查数据库用户权限
|
||||
@@ -0,0 +1,112 @@
|
||||
# 直接运行
|
||||
|
||||
使用最新的Release打包的可执行文件部署,无需部署前端页面。
|
||||
|
||||
::: tip 推荐指数
|
||||
🍀🍀🍀🍀 适合没有Docker环境的生产部署
|
||||
:::
|
||||
|
||||
## 部署步骤
|
||||
|
||||
### 1. 下载Release
|
||||
|
||||
访问 [GitHub Releases](https://github.com/engigu/Message-Push-Nest/releases) 下载最新的系统版本对应的release,然后解压。
|
||||
|
||||
### 2. 创建数据库
|
||||
|
||||
新建一个MySQL数据库(或使用SQLite)。
|
||||
|
||||
### 3. 配置文件
|
||||
|
||||
重命名 `conf/app.example.ini` 为 `conf/app.ini`,然后修改配置:
|
||||
|
||||
```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_
|
||||
```
|
||||
|
||||
::: warning 重要
|
||||
将配置中 `EmbedHtml = disable` 进行注释,以单应用方式运行。
|
||||
:::
|
||||
|
||||
### 4. 启动项目
|
||||
|
||||
直接运行可执行文件,项目会自动创建表和账号。
|
||||
|
||||
```bash
|
||||
# Windows
|
||||
./Message-Nest.exe
|
||||
|
||||
# Linux/Mac
|
||||
./Message-Nest
|
||||
```
|
||||
|
||||
### 5. 查看日志
|
||||
|
||||
INFO日志级别启动会出现如下日志:
|
||||
|
||||
```log
|
||||
[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.
|
||||
```
|
||||
|
||||
### 6. 访问服务
|
||||
|
||||
访问 `http://localhost:8000`
|
||||
|
||||
- 默认账号:`admin`
|
||||
- 默认密码:`123456`
|
||||
|
||||
## 使用SQLite
|
||||
|
||||
如果不想安装MySQL,可以使用SQLite:
|
||||
|
||||
```ini
|
||||
[database]
|
||||
Type = sqlite
|
||||
TablePrefix = message_
|
||||
```
|
||||
|
||||
SQLite数据库文件会自动创建在 `conf/database.db`。
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 启动失败
|
||||
|
||||
1. 检查端口8000是否被占用
|
||||
2. 检查数据库连接配置是否正确
|
||||
3. 查看日志输出的错误信息
|
||||
|
||||
### 无法访问页面
|
||||
|
||||
1. 确认服务已正常启动
|
||||
2. 检查防火墙设置
|
||||
3. 确认 `EmbedHtml` 配置已注释
|
||||
@@ -0,0 +1,240 @@
|
||||
# Docker Compose 部署
|
||||
|
||||
使用 Docker Compose 编排部署 Message Nest。
|
||||
|
||||
::: tip 推荐指数
|
||||
🍀🍀🍀🍀🍀 适合生产环境,便于管理
|
||||
:::
|
||||
|
||||
## 方式一:挂载配置文件
|
||||
|
||||
### 1. 准备配置文件
|
||||
|
||||
创建 `conf/app.ini`,内容参考 [Docker部署](/deployment/docker#_1-准备配置文件)。
|
||||
|
||||
### 2. 创建 docker-compose.yml
|
||||
|
||||
```yaml
|
||||
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. 文件目录结构
|
||||
|
||||
```
|
||||
.
|
||||
├── conf
|
||||
│ └── app.ini
|
||||
└── docker-compose.yml
|
||||
```
|
||||
|
||||
### 4. 启动服务
|
||||
|
||||
```bash
|
||||
# 测试运行
|
||||
docker-compose up
|
||||
|
||||
# 正式运行(后台)
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 方式二:环境变量(推荐)
|
||||
|
||||
### 使用 MySQL
|
||||
|
||||
创建 `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
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_
|
||||
```
|
||||
|
||||
### 使用 SQLite
|
||||
|
||||
创建 `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
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:
|
||||
- ./data/database.db:/app/conf/database.db
|
||||
```
|
||||
|
||||
### 启动服务
|
||||
|
||||
```bash
|
||||
# 正式运行
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 完整示例:MySQL + Message Nest
|
||||
|
||||
如果你还没有MySQL,可以使用以下配置同时部署MySQL和Message Nest:
|
||||
|
||||
```yaml
|
||||
version: "3.7"
|
||||
services:
|
||||
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
container_name: message-nest-mysql
|
||||
restart: always
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=Aa123456
|
||||
- MYSQL_DATABASE=message_nest
|
||||
volumes:
|
||||
- mysql-data:/var/lib/mysql
|
||||
ports:
|
||||
- "3306:3306"
|
||||
|
||||
message-nest:
|
||||
image: engigu/message-nest:latest
|
||||
container_name: message-nest
|
||||
restart: always
|
||||
depends_on:
|
||||
- mysql
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- MYSQL_HOST=mysql
|
||||
- MYSQL_PORT=3306
|
||||
- MYSQL_USER=root
|
||||
- MYSQL_PASSWORD=Aa123456
|
||||
- MYSQL_DB=message_nest
|
||||
- MYSQL_TABLE_PREFIX=message_
|
||||
|
||||
volumes:
|
||||
mysql-data:
|
||||
```
|
||||
|
||||
## 常用命令
|
||||
|
||||
### 启动服务
|
||||
|
||||
```bash
|
||||
# 前台启动(查看日志)
|
||||
docker-compose up
|
||||
|
||||
# 后台启动
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
# 查看所有服务日志
|
||||
docker-compose logs
|
||||
|
||||
# 查看特定服务日志
|
||||
docker-compose logs message-nest
|
||||
|
||||
# 实时查看日志
|
||||
docker-compose logs -f message-nest
|
||||
```
|
||||
|
||||
### 停止服务
|
||||
|
||||
```bash
|
||||
# 停止服务
|
||||
docker-compose stop
|
||||
|
||||
# 停止并删除容器
|
||||
docker-compose down
|
||||
|
||||
# 停止并删除容器和数据卷
|
||||
docker-compose down -v
|
||||
```
|
||||
|
||||
### 重启服务
|
||||
|
||||
```bash
|
||||
# 重启所有服务
|
||||
docker-compose restart
|
||||
|
||||
# 重启特定服务
|
||||
docker-compose restart message-nest
|
||||
```
|
||||
|
||||
### 更新镜像
|
||||
|
||||
```bash
|
||||
# 拉取最新镜像
|
||||
docker-compose pull
|
||||
|
||||
# 重新创建容器
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 访问服务
|
||||
|
||||
启动后访问 `http://localhost:8000`
|
||||
|
||||
- 默认账号:`admin`
|
||||
- 默认密码:`123456`
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 服务无法启动
|
||||
|
||||
1. 检查端口是否被占用
|
||||
2. 检查配置是否正确
|
||||
3. 查看日志:`docker-compose logs`
|
||||
|
||||
### MySQL连接失败
|
||||
|
||||
1. 确保MySQL服务已启动
|
||||
2. 检查 `MYSQL_HOST` 是否正确(使用服务名)
|
||||
3. 等待MySQL完全启动(约10-30秒)
|
||||
|
||||
### 数据持久化
|
||||
|
||||
使用volumes确保数据持久化:
|
||||
```yaml
|
||||
volumes:
|
||||
- ./data:/app/conf # 配置文件
|
||||
- mysql-data:/var/lib/mysql # MySQL数据
|
||||
```
|
||||
|
||||
### 修改配置后重启
|
||||
|
||||
```bash
|
||||
# 修改配置文件或环境变量后
|
||||
docker-compose down
|
||||
docker-compose up -d
|
||||
```
|
||||
@@ -0,0 +1,201 @@
|
||||
# Docker 部署
|
||||
|
||||
使用 Docker 部署 Message Nest,支持多种配置方式。
|
||||
|
||||
::: tip 推荐指数
|
||||
🍀🍀🍀🍀🍀 最推荐的部署方式
|
||||
:::
|
||||
|
||||
## 镜像源
|
||||
|
||||
Message Nest 提供两个镜像源:
|
||||
|
||||
- **Docker Hub**: `engigu/message-nest:latest`
|
||||
- **GitHub Container Registry**: `ghcr.io/engigu/message-nest:latest`
|
||||
|
||||
## 方式一:挂载配置文件
|
||||
|
||||
### 1. 准备配置文件
|
||||
|
||||
新建 `conf/app.ini` 文件:
|
||||
|
||||
```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_
|
||||
```
|
||||
|
||||
::: warning 端口限制
|
||||
Docker模式下,配置文件中的端口只能为8000,通过 `-p` 参数映射到宿主机端口。
|
||||
:::
|
||||
|
||||
### 2. 拉取镜像
|
||||
|
||||
```bash
|
||||
# 从 Docker Hub 拉取
|
||||
docker pull engigu/message-nest:latest
|
||||
|
||||
# 或从 GitHub Container Registry (GHCR) 拉取
|
||||
docker pull ghcr.io/engigu/message-nest:latest
|
||||
```
|
||||
|
||||
### 3. 启动容器
|
||||
|
||||
```bash
|
||||
# 测试运行(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
|
||||
```
|
||||
|
||||
## 方式二:环境变量(推荐)
|
||||
|
||||
::: tip 推荐
|
||||
这是最简单的部署方式,无需准备配置文件。
|
||||
:::
|
||||
|
||||
### 环境变量说明
|
||||
|
||||
| 变量 | 说明 |
|
||||
|------|------|
|
||||
| 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为开启 |
|
||||
|
||||
### 使用 MySQL
|
||||
|
||||
```bash
|
||||
# 正式运行(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
|
||||
|
||||
```bash
|
||||
# 正式运行(sqlite)
|
||||
docker run -d \
|
||||
-p 8000:8000 \
|
||||
-v /your/path/database.db:/app/conf/database.db \
|
||||
--name message-nest \
|
||||
engigu/message-nest:latest
|
||||
|
||||
# 或使用 GHCR 镜像(sqlite)
|
||||
docker run -d \
|
||||
-p 8000:8000 \
|
||||
-v /your/path/database.db:/app/conf/database.db \
|
||||
--name message-nest \
|
||||
ghcr.io/engigu/message-nest:latest
|
||||
```
|
||||
|
||||
## 访问服务
|
||||
|
||||
启动后访问 `http://localhost:8000`
|
||||
|
||||
- 默认账号:`admin`
|
||||
- 默认密码:`123456`
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 容器无法启动
|
||||
|
||||
1. 检查端口是否被占用
|
||||
2. 检查数据库连接配置
|
||||
3. 查看容器日志:`docker logs message-nest`
|
||||
|
||||
### 数据持久化
|
||||
|
||||
使用SQLite时,记得挂载数据库文件:
|
||||
```bash
|
||||
-v /your/path/database.db:/app/conf/database.db
|
||||
```
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
# 查看实时日志
|
||||
docker logs -f message-nest
|
||||
|
||||
# 查看最近100行日志
|
||||
docker logs --tail 100 message-nest
|
||||
```
|
||||
|
||||
### 停止和删除容器
|
||||
|
||||
```bash
|
||||
# 停止容器
|
||||
docker stop message-nest
|
||||
|
||||
# 删除容器
|
||||
docker rm message-nest
|
||||
```
|
||||
@@ -0,0 +1,53 @@
|
||||
# 部署概览
|
||||
|
||||
Message Nest 提供多种部署方式,您可以根据自己的需求选择合适的部署方案。
|
||||
|
||||
## 部署方式对比
|
||||
|
||||
| 部署方式 | 难度 | 推荐指数 | 适用场景 |
|
||||
|---------|------|---------|---------|
|
||||
| Docker环境变量 | ⭐ | ⭐⭐⭐⭐⭐ | 生产环境,快速部署 |
|
||||
| Docker Compose | ⭐ | ⭐⭐⭐⭐⭐ | 生产环境,编排部署 |
|
||||
| 直接运行Release | ⭐⭐ | ⭐⭐⭐⭐ | 生产环境,无Docker环境 |
|
||||
| 开发调试 | ⭐⭐⭐ | ⭐⭐⭐ | 开发环境 |
|
||||
|
||||
## 快速选择
|
||||
|
||||
### 我想快速体验
|
||||
推荐使用 **Docker环境变量部署**,一条命令即可启动。
|
||||
|
||||
### 我要用于生产环境
|
||||
推荐使用 **Docker Compose部署**,便于管理和维护。
|
||||
|
||||
### 我没有Docker环境
|
||||
推荐使用 **直接运行Release**,下载可执行文件即可。
|
||||
|
||||
### 我要进行开发
|
||||
推荐使用 **开发调试模式**,支持热更新。
|
||||
|
||||
## 默认账号
|
||||
|
||||
所有部署方式启动后,默认账号信息:
|
||||
- 用户名:`admin`
|
||||
- 密码:`123456`
|
||||
|
||||
::: warning 安全提示
|
||||
首次登录后请立即修改默认密码!
|
||||
:::
|
||||
|
||||
## 数据库选择
|
||||
|
||||
Message Nest 支持多种数据库:
|
||||
|
||||
- **SQLite** - 轻量级,无需额外配置,适合小规模使用
|
||||
- **MySQL 5.x / 8.x** - 成熟稳定,适合中大规模使用
|
||||
- **TiDB** - 分布式数据库,适合大规模使用
|
||||
|
||||
## 下一步
|
||||
|
||||
选择适合您的部署方式:
|
||||
|
||||
- [直接运行](/deployment/direct-run)
|
||||
- [开发调试](/deployment/development)
|
||||
- [Docker部署](/deployment/docker)
|
||||
- [Docker Compose](/deployment/docker-compose)
|
||||
@@ -0,0 +1,64 @@
|
||||
# 更新日志
|
||||
|
||||
## 2025
|
||||
|
||||
### 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
|
||||
|
||||
### 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 消息发送
|
||||
@@ -0,0 +1,170 @@
|
||||
# 配置说明
|
||||
|
||||
## 完整配置文件
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
## 配置项说明
|
||||
|
||||
### [app] 应用配置
|
||||
|
||||
| 配置项 | 说明 | 默认值 |
|
||||
|--------|------|--------|
|
||||
| JwtSecret | JWT密钥,用于token生成 | message-nest |
|
||||
| RuntimeRootPath | 运行时根路径(暂时无用) | runtime/ |
|
||||
| LogLevel | 日志级别:DEBUG/INFO/ERROR | INFO |
|
||||
|
||||
### [server] 服务器配置
|
||||
|
||||
| 配置项 | 说明 | 默认值 |
|
||||
|--------|------|--------|
|
||||
| RunMode | 运行模式:debug/release,debug模式会自动添加跨域 | release |
|
||||
| HttpPort | HTTP服务端口 | 8000 |
|
||||
| ReadTimeout | 读取超时时间(秒) | 60 |
|
||||
| WriteTimeout | 写入超时时间(秒) | 60 |
|
||||
| EmbedHtml | 是否使用embed打包的静态资源,注释则启用单应用模式 | - |
|
||||
|
||||
### [database] 数据库配置
|
||||
|
||||
| 配置项 | 说明 | 默认值 |
|
||||
|--------|------|--------|
|
||||
| Type | 数据库类型:mysql/sqlite/tidb | mysql |
|
||||
| User | 数据库用户名 | - |
|
||||
| Password | 数据库密码 | - |
|
||||
| Host | 数据库主机地址 | - |
|
||||
| Port | 数据库端口 | 3306 |
|
||||
| Name | 数据库名称 | - |
|
||||
| TablePrefix | 数据表前缀 | message_ |
|
||||
| SqlDebug | 是否打印SQL,设置enable开启 | - |
|
||||
| Ssl | 数据库连接是否开启SSL | false |
|
||||
|
||||
## Docker 环境变量
|
||||
|
||||
使用Docker部署时,可以通过环境变量进行配置:
|
||||
|
||||
| 变量 | 说明 |
|
||||
|------|------|
|
||||
| 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为开启 |
|
||||
|
||||
## 配置示例
|
||||
|
||||
### 单应用模式(推荐)
|
||||
|
||||
```ini
|
||||
[app]
|
||||
JwtSecret = message-nest
|
||||
LogLevel = INFO
|
||||
|
||||
[server]
|
||||
RunMode = release
|
||||
HttpPort = 8000
|
||||
ReadTimeout = 60
|
||||
WriteTimeout = 60
|
||||
; 注释EmbedHtml,启用单应用模式
|
||||
; EmbedHtml = disable
|
||||
|
||||
[database]
|
||||
; 关闭SQL打印
|
||||
; SqlDebug = enable
|
||||
|
||||
Type = mysql
|
||||
User = root
|
||||
Password = Aa123456
|
||||
Host = vm.server
|
||||
Port = 3308
|
||||
Name = yourDbName
|
||||
TablePrefix = message_
|
||||
```
|
||||
|
||||
### 开发调试模式
|
||||
|
||||
```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 = mysql
|
||||
User = root
|
||||
Password = Aa123456
|
||||
Host = vm.server
|
||||
Port = 3308
|
||||
Name = yourDbName
|
||||
TablePrefix = message_
|
||||
```
|
||||
|
||||
### SQLite 配置
|
||||
|
||||
```ini
|
||||
[app]
|
||||
JwtSecret = message-nest
|
||||
LogLevel = INFO
|
||||
|
||||
[server]
|
||||
RunMode = release
|
||||
HttpPort = 8000
|
||||
ReadTimeout = 60
|
||||
WriteTimeout = 60
|
||||
|
||||
[database]
|
||||
Type = sqlite
|
||||
TablePrefix = message_
|
||||
```
|
||||
@@ -0,0 +1,98 @@
|
||||
# EmbedHtml 配置说明
|
||||
|
||||
## 什么是 EmbedHtml?
|
||||
|
||||
这个配置可以理解为单应用模式(或者前后端分离)的开关。
|
||||
|
||||
## 配置方式
|
||||
|
||||
### 方式一:单应用模式(推荐)
|
||||
|
||||
**注释 EmbedHtml 配置**
|
||||
|
||||
```ini
|
||||
[server]
|
||||
RunMode = release
|
||||
HttpPort = 8000
|
||||
ReadTimeout = 60
|
||||
WriteTimeout = 60
|
||||
; 注释EmbedHtml,启用单应用模式
|
||||
; EmbedHtml = disable
|
||||
```
|
||||
|
||||
**说明:**
|
||||
- 启动go服务,会把web/dist目录下文件作为前端静态资源
|
||||
- 如果目录下没有静态资源文件,需要到web目录下,执行 `npm run build` 构建生成
|
||||
- 只需要运行一个服务即可访问完整功能
|
||||
- 适合生产环境部署
|
||||
|
||||
**适用场景:**
|
||||
- 使用 Release 打包的可执行文件
|
||||
- Docker 部署
|
||||
- 生产环境
|
||||
|
||||
### 方式二:前后端分离模式
|
||||
|
||||
**启用 EmbedHtml 配置**
|
||||
|
||||
```ini
|
||||
[server]
|
||||
RunMode = debug
|
||||
HttpPort = 8000
|
||||
ReadTimeout = 60
|
||||
WriteTimeout = 60
|
||||
; 取消注释,启用前后端分离
|
||||
EmbedHtml = disable
|
||||
```
|
||||
|
||||
**说明:**
|
||||
- go服务启动时只会有API服务
|
||||
- 需要到web目录下,执行 `npm run dev` 启动前端项目
|
||||
- 访问前端项目提示的端口服务,一般是 `http://127.0.0.1:5173`
|
||||
- 或者使用 `npm run build`,用Nginx部署前端
|
||||
|
||||
**适用场景:**
|
||||
- 开发调试
|
||||
- 需要修改前端代码
|
||||
- 前后端独立部署
|
||||
|
||||
## 两种方式对比
|
||||
|
||||
| 特性 | 单应用模式 | 前后端分离模式 |
|
||||
|------|-----------|--------------|
|
||||
| 部署复杂度 | 简单,只需一个服务 | 复杂,需要两个服务 |
|
||||
| 开发调试 | 不便,需要重新构建 | 方便,支持热更新 |
|
||||
| 资源占用 | 较少 | 较多 |
|
||||
| 适用环境 | 生产环境 | 开发环境 |
|
||||
| 推荐指数 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
|
||||
|
||||
## 推荐方案
|
||||
|
||||
综合考虑下来,推荐直接使用以下方式:
|
||||
|
||||
1. **Release 打包执行文件** - 已内置页面静态资源,开箱即用
|
||||
2. **Docker 环境变量部署** - 配置简单,一键启动
|
||||
|
||||
这两种方式都是单应用模式,只需运行一个服务即可。
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q: 为什么访问页面显示404?
|
||||
|
||||
A: 检查以下几点:
|
||||
1. 如果是单应用模式,确保 `EmbedHtml` 已注释
|
||||
2. 确保 `web/dist` 目录下有静态资源文件
|
||||
3. 如果没有,执行 `cd web && npm run build` 构建
|
||||
|
||||
### Q: 开发时如何快速调试?
|
||||
|
||||
A:
|
||||
1. 设置 `RunMode = debug`
|
||||
2. 启用 `EmbedHtml = disable`
|
||||
3. 启动后端:`go run main.go`
|
||||
4. 启动前端:`cd web && npm run dev`
|
||||
5. 访问前端提示的URL(通常是 http://127.0.0.1:5173)
|
||||
|
||||
### Q: Docker 部署需要配置 EmbedHtml 吗?
|
||||
|
||||
A: 不需要。Docker 镜像已经内置了前端静态资源,默认就是单应用模式。
|
||||
@@ -0,0 +1,77 @@
|
||||
# 特色功能
|
||||
|
||||
## 核心特性
|
||||
|
||||
### 🔄 整合性
|
||||
|
||||
提供了多种消息推送方式,包括邮件、钉钉、企业微信等,方便你集中管理和定制通知。
|
||||
|
||||
### 🎨 自定义性
|
||||
|
||||
可以根据需求定制消息推送策略,满足不同场景的个性化需求。
|
||||
|
||||
### 🛠 开放性
|
||||
|
||||
易于扩展和集成新的消息通知服务,以适应未来的变化。
|
||||
|
||||
## 支持的推送方式
|
||||
|
||||
- **邮件发送** - 支持标准SMTP邮件发送
|
||||
- **钉钉** - 支持钉钉机器人消息推送
|
||||
- **企业微信** - 支持企业微信应用消息推送
|
||||
- **微信测试公众号** - 支持微信测试公众号模板消息发送
|
||||
- **自定义 Webhook** - 支持自定义的Webhook消息发送
|
||||
- **自托管消息** - 可以将站点作为消息的接收方,登录站点查看消息
|
||||
|
||||
## 其他功能
|
||||
|
||||
### 定时任务
|
||||
|
||||
支持自定义的定时消息发送,可以设置定时推送任务。
|
||||
|
||||
### 数据统计
|
||||
|
||||
支持数据统计展示,可以查看消息发送情况和历史记录。
|
||||
|
||||
### 异步发送
|
||||
|
||||
支持异步消息发送,提高系统性能和响应速度。
|
||||
|
||||
### 日志管理
|
||||
|
||||
- 支持日志查看自动刷新
|
||||
- 支持查看定时清理日志
|
||||
- 支持登录日志记录
|
||||
|
||||
### 用户管理
|
||||
|
||||
- 支持用户密码设置
|
||||
- 支持用户定时任务清理
|
||||
- 支持更新定时时间
|
||||
|
||||
### 系统信息
|
||||
|
||||
- 支持系统信息展示
|
||||
- 支持站点信息自定义
|
||||
- 支持明暗主题切换设置
|
||||
- 支持Cookies过期天数设置
|
||||
|
||||
### 数据库支持
|
||||
|
||||
- **SQLite** - 轻量级部署,无需额外数据库服务
|
||||
- **MySQL 5.x / 8.x** - 支持主流MySQL版本
|
||||
- **TiDB** - 支持分布式数据库TiDB
|
||||
- 支持数据库SSL配置
|
||||
|
||||
### 部署方式
|
||||
|
||||
- **单应用打包** - 直接运行,无需部署前端页面
|
||||
- **Docker 部署** - 支持从环境变量启动服务
|
||||
- **Docker Compose** - 支持编排部署
|
||||
- **前后端分离** - 支持独立部署前后端
|
||||
|
||||
### 界面特性
|
||||
|
||||
- **现代化UI** - 使用shadcn-vue组件,基于TailwindCSS
|
||||
- **响应式设计** - 支持大中小屏自适应
|
||||
- **单应用的HTML浏览器自动缓存** - 提高访问速度
|
||||
@@ -0,0 +1,39 @@
|
||||
# 介绍
|
||||
|
||||
Message Nest(信息巢)是一个灵活而强大的消息推送整合平台,旨在简化并自定义多种消息通知方式。
|
||||
|
||||
## 什么是 Message Nest?
|
||||
|
||||
Message Nest 是一个拥有各种渠道信息方式的集合站点。如果你有很多消息推送方式,每次都需要调用各种接口去发送消息到各个渠道,或者不同的项目你都需要复制同样的发消息代码,这个项目可以帮你管理各种消息方式,并提供统一的发送API接入。
|
||||
|
||||
你可以自由组合各种消息渠道,一个API推送到各种渠道,帮你省去接入的繁琐步骤。
|
||||
|
||||
## 项目来由
|
||||
|
||||
自己常常写一些脚本需要消息推送,经常需要接入不同的消息发送,很不方便,于是就有了这个项目。
|
||||
|
||||
## 演示站点
|
||||
|
||||
访问 [演示站点](https://message-nest-demo-site.qwapi.eu.org/)(演示站点的服务器比较烂,见谅)
|
||||
|
||||
## 效果图
|
||||
|
||||

|
||||
|
||||
## 进度
|
||||
|
||||
项目还在不断更新中,欢迎大家提出各种建议。
|
||||
|
||||
关于日志,考虑到目前多数服务以收集控制台输出为主,暂时不支持写出日志文件。
|
||||
|
||||
## 致谢
|
||||
|
||||
该项目汲取了 [go-gin-example](https://github.com/eddycjy/go-gin-example) 项目的灵感,展示了 Go 和 Gin 在实际应用中的强大和多才多艺。
|
||||
|
||||
## 贡献
|
||||
|
||||
欢迎通过提交问题和提出改进建议。
|
||||
|
||||
## 许可证
|
||||
|
||||
[MIT License](https://github.com/engigu/Message-Push-Nest/blob/main/LICENSE)
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
layout: home
|
||||
|
||||
hero:
|
||||
name: "Message Nest"
|
||||
text: "消息推送整合平台"
|
||||
tagline: 灵活而强大的消息推送整合平台,简化并自定义多种消息通知方式
|
||||
image:
|
||||
src: /logo.svg
|
||||
alt: Message Nest
|
||||
actions:
|
||||
- theme: brand
|
||||
text: 快速开始
|
||||
link: /guide/introduction
|
||||
- theme: alt
|
||||
text: 部署指南
|
||||
link: /deployment/overview
|
||||
- theme: alt
|
||||
text: GitHub
|
||||
link: https://github.com/engigu/Message-Push-Nest
|
||||
|
||||
features:
|
||||
- icon: 🔄
|
||||
title: 整合性
|
||||
details: 提供了多种消息推送方式,包括邮件、钉钉、企业微信等,方便你集中管理和定制通知。
|
||||
- icon: 🎨
|
||||
title: 自定义性
|
||||
details: 可以根据需求定制消息推送策略,满足不同场景的个性化需求。
|
||||
- icon: 🛠
|
||||
title: 开放性
|
||||
details: 易于扩展和集成新的消息通知服务,以适应未来的变化。
|
||||
- icon: 📧
|
||||
title: 多渠道支持
|
||||
details: 支持邮件、钉钉、企业微信、微信测试公众号、自定义Webhook等多种推送方式。
|
||||
- icon: ⏰
|
||||
title: 定时任务
|
||||
details: 支持自定义的定时消息发送,满足定时推送需求。
|
||||
- icon: 🎯
|
||||
title: 自托管消息
|
||||
details: 可以将站点作为消息的接收方,登录站点查看消息。
|
||||
- icon: 🐳
|
||||
title: Docker支持
|
||||
details: 支持Docker和Docker Compose部署,快速启动服务。
|
||||
- icon: 💾
|
||||
title: 多数据库支持
|
||||
details: 支持SQLite、MySQL 5.x/8.x、TiDB等多种数据库。
|
||||
- icon: 📊
|
||||
title: 数据统计
|
||||
details: 支持数据统计展示,查看消息发送情况。
|
||||
---
|
||||
|
||||
## 快速开始
|
||||
|
||||
### Docker 部署(推荐)
|
||||
|
||||
使用环境变量快速启动:
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
### 直接运行
|
||||
|
||||
1. 下载最新的 [Release](https://github.com/engigu/Message-Push-Nest/releases)
|
||||
2. 配置 `conf/app.ini`
|
||||
3. 启动服务,访问 `http://localhost:8000`
|
||||
4. 默认账号:`admin`,密码:`123456`
|
||||
|
||||
## 项目来由
|
||||
|
||||
自己常常写一些脚本需要消息推送,经常需要接入不同的消息发送,很不方便,于是就有了这个项目。
|
||||
|
||||
如果你有很多消息推送方式,每次都需要调用各种接口去发送消息到各个渠道,或者不同的项目你都需要复制同样的发消息代码,这个项目可以帮你管理各种消息方式,并提供统一的发送API接入。你可以自由组合各种消息渠道,一个API推送到各种渠道,帮你省去接入的繁琐步骤。
|
||||
|
||||
## Star History
|
||||
|
||||
[](https://star-history.com/#engigu/Message-Push-Nest&Date)
|
||||
Generated
+2468
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "message-nest-docs",
|
||||
"version": "1.0.0",
|
||||
"description": "Message Nest Documentation",
|
||||
"scripts": {
|
||||
"docs:dev": "vitepress dev",
|
||||
"docs:build": "vitepress build",
|
||||
"docs:preview": "vitepress preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vitepress": "^1.0.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="100" height="100">
|
||||
<circle cx="50" cy="50" r="45" fill="#42b883"/>
|
||||
<path d="M50 20 L35 40 L50 35 L65 40 Z" fill="white"/>
|
||||
<ellipse cx="50" cy="55" rx="25" ry="20" fill="white"/>
|
||||
<circle cx="43" cy="52" r="3" fill="#42b883"/>
|
||||
<circle cx="57" cy="52" r="3" fill="#42b883"/>
|
||||
<path d="M40 65 Q50 70 60 65" stroke="#42b883" stroke-width="2" fill="none"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 438 B |
Reference in New Issue
Block a user