From f94a4bcfc73ab1dc4d176cce5fb8f5c6f6a8f0cd Mon Sep 17 00:00:00 2001 From: enKl03b Date: Fri, 21 Mar 2025 21:27:16 +0800 Subject: [PATCH] =?UTF-8?q?doc:=E9=83=A8=E5=88=86=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + docs/fast_q_a.md | 178 ++++++++++++++++++++++- docs/linux_deploy_guide_for_beginners.md | 11 +- docs/manual_deploy_linux.md | 3 - docs/pic/compass_downloadguide.png | Bin 0 -> 15412 bytes 5 files changed, 186 insertions(+), 8 deletions(-) create mode 100644 docs/pic/compass_downloadguide.png diff --git a/README.md b/README.md index 3ff2548d7..b005bc189 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,8 @@ MaiMBot是一个开源项目,我们非常欢迎你的参与。你的贡献, - [🐳 Docker部署指南](docs/docker_deploy.md) +- [🖥️群晖 NAS 部署指南](docs/synology_deploy.md) + ### 配置说明 - [🎀 新手配置指南](docs/installation_cute.md) - 通俗易懂的配置教程,适合初次使用的猫娘 diff --git a/docs/fast_q_a.md b/docs/fast_q_a.md index 92800bad2..abec69b40 100644 --- a/docs/fast_q_a.md +++ b/docs/fast_q_a.md @@ -38,6 +38,9 @@ ### MongoDB相关问题 - 我应该怎么清空bot内存储的表情包 ❓ +>需要先安装`MongoDB Compass`,[下载链接](https://www.mongodb.com/try/download/compass),软件支持`macOS、Windows、Ubuntu、Redhat`系统 +>以Windows为例,保持如图所示选项,点击`Download`即可,如果是其他系统,请在`Platform`中自行选择: +> >打开你的MongoDB Compass软件,你会在左上角看到这样的一个界面: > @@ -68,7 +71,9 @@ - 为什么我连接不上MongoDB服务器 ❓ >这个问题比较复杂,但是你可以按照下面的步骤检查,看看具体是什么问题 -> + + +>#### Windows > 1. 检查有没有把 mongod.exe 所在的目录添加到 path。 具体可参照 > >  [CSDN-windows10设置环境变量Path详细步骤](https://blog.csdn.net/flame_007/article/details/106401215) @@ -112,4 +117,173 @@ >MONGODB_HOST=127.0.0.1 >MONGODB_PORT=27017 #修改这里 >DATABASE_NAME=MegBot ->``` \ No newline at end of file +>``` + +
+Linux(点击展开) + +#### **1. 检查 MongoDB 服务是否运行** +- **命令**: + ```bash + systemctl status mongod # 检查服务状态(Ubuntu/Debian/CentOS 7+) + service mongod status # 旧版系统(如 CentOS 6) + ``` +- **可能结果**: + - 如果显示 `active (running)`,服务已启动。 + - 如果未运行,启动服务: + ```bash + sudo systemctl start mongod # 启动服务 + sudo systemctl enable mongod # 设置开机自启 + ``` + +--- + +#### **2. 检查 MongoDB 端口监听** +MongoDB 默认使用 **27017** 端口。 +- **检查端口是否被监听**: + ```bash + sudo ss -tulnp | grep 27017 + 或 + sudo netstat -tulnp | grep 27017 + ``` +- **预期结果**: + ```bash + tcp LISTEN 0 128 0.0.0.0:27017 0.0.0.0:* users:(("mongod",pid=123,fd=11)) + ``` + - 如果无输出,说明 MongoDB 未监听端口。 + + +--- +#### **3. 检查防火墙设置** +- **Ubuntu/Debian(UFW 防火墙)**: + ```bash + sudo ufw status # 查看防火墙状态 + sudo ufw allow 27017/tcp # 开放 27017 端口 + sudo ufw reload # 重新加载规则 + ``` +- **CentOS/RHEL(firewalld)**: + ```bash + sudo firewall-cmd --list-ports # 查看已开放端口 + sudo firewall-cmd --add-port=27017/tcp --permanent # 永久开放端口 + sudo firewall-cmd --reload # 重新加载 + ``` +- **云服务器用户注意**:检查云平台安全组规则,确保放行 27017 端口。 + +--- + +#### **4. 检查端口占用** +如果 MongoDB 服务无法监听端口,可能是其他进程占用了 `27017` 端口。 +- **检查端口占用进程**: + ```bash + sudo lsof -i :27017 # 查看占用 27017 端口的进程 + 或 + sudo ss -ltnp 'sport = :27017' # 使用 ss 过滤端口 + ``` +- **结果示例**: + ```bash + COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME + java 1234 root 12u IPv4 123456 0t0 TCP *:27017 (LISTEN) + ``` + - 输出会显示占用端口的 **进程名** 和 **PID**(此处 `PID=1234`)。 + +- **解决方案**: + 1. **终止占用进程**(谨慎操作!确保进程非关键): + ```bash + sudo kill 1234 # 正常终止进程 + sudo kill -9 1234 # 强制终止(若正常终止无效) + ``` + 2. **修改端口**: + 编辑麦麦目录里的`.env.dev`文件,修改端口号: + ```ini + MONGODB_HOST=127.0.0.1 + MONGODB_PORT=27017 #修改这里 + DATABASE_NAME=MegBot + ``` + + +##### **注意事项** +- 终止进程前,务必确认该进程非系统关键服务(如未知进程占用,建议先排查来源),如果你不知道这个进程是否关键,请更改端口使用。 + +
+ +
+macOS(点击展开) + +### **1. 检查 MongoDB 服务状态** +**问题原因**:MongoDB 服务未启动 +**操作步骤**: +```bash +# 查看 MongoDB 是否正在运行(Homebrew 安装的默认服务名) +brew services list | grep mongodb + +# 如果状态为 "stopped" 或 "error",手动启动 +brew services start mongodb-community@8.0 +``` +✅ **预期结果**:输出显示 `started` 或 `running` +❌ **失败处理**: +- 若报错 `unrecognized service`,可能未正确安装 MongoDB,建议[重新安装](https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-os-x/#install-mongodb-community-edition)。 + +--- + +### **2. 检查端口是否被占用** +**问题原因**:其他程序占用了 MongoDB 的默认端口(`27017`),导致服务无法启动或连接 +**操作步骤**: +```bash +# 检查 27017 端口占用情况(需 sudo 权限查看完整信息) +sudo lsof -i :27017 + +# 或使用 netstat 快速检测 +netstat -an | grep 27017 +``` +✅ **预期结果**: +- 若无 MongoDB 运行,应无输出 +- 若 MongoDB 已启动,应显示 `mongod` 进程 + +❌ **发现端口被占用**: +#### **解决方案1:终止占用进程** +1. 从 `lsof` 输出中找到占用端口的 **PID**(进程号) +2. 强制终止该进程(谨慎操作!确保进程非关键): + ```bash + kill -9 PID # 替换 PID 为实际数字(例如 kill -9 12345) + ``` +3. 重新启动 MongoDB 服务: + ```bash + brew services start mongodb-community@8.0 + ``` + +#### **解决方案2:修改端口** + 编辑麦麦目录里的`.env.dev`文件,修改端口号: + ```ini + MONGODB_HOST=127.0.0.1 + MONGODB_PORT=27017 #修改这里 + DATABASE_NAME=MegBot + ``` + +--- + +### **3. 检查防火墙设置** +**问题原因**:macOS 防火墙阻止连接 +**操作步骤**: +1. 打开 **系统设置 > 隐私与安全性 > 防火墙** +2. 临时关闭防火墙测试连接 +3. 若需长期开放,添加 MongoDB 到防火墙允许列表(通过终端或 GUI)。 + + +--- +### **4. 重置 MongoDB 环境** +***仅在以上步骤都无效时使用*** +**适用场景**:配置混乱导致无法修复 +```bash +# 停止服务并删除数据 +brew services stop mongodb-community@8.0 +rm -rf /usr/local/var/mongodb + +# 重新初始化(确保目录权限) +sudo mkdir -p /usr/local/var/mongodb +sudo chown -R $(whoami) /usr/local/var/mongodb + +# 重新启动 +brew services start mongodb-community@8.0 +``` + +
\ No newline at end of file diff --git a/docs/linux_deploy_guide_for_beginners.md b/docs/linux_deploy_guide_for_beginners.md index 1f1b0899f..f254cf665 100644 --- a/docs/linux_deploy_guide_for_beginners.md +++ b/docs/linux_deploy_guide_for_beginners.md @@ -2,7 +2,7 @@ ## 事前准备 -为了能使麦麦不间断的运行,你需要一台一直开着的主机。 +为了能使麦麦不间断的运行,你需要一台一直开着的服务器。 ### 如果你想购买服务器 华为云、阿里云、腾讯云等等都是在国内可以选择的选择。 @@ -12,6 +12,8 @@ ### 如果你不想购买服务器 你可以准备一台可以一直开着的电脑/主机,只需要保证能够正常访问互联网即可 +**下文将统称它们为`服务器`** + 我们假设你已经有了一台Linux架构的服务器。举例使用的是Ubuntu24.04,其他的原理相似。 ## 0.我们就从零开始吧 @@ -120,6 +122,7 @@ sudo apt install python-is-python3 ``` ## 3.MongoDB的安装 +*如果你是参考[官方文档](https://www.mongodb.com/zh-cn/docs/manual/administration/install-on-linux/#std-label-install-mdb-community-edition-linux)进行安装的,可跳过此步* ``` bash cd /moi/mai @@ -156,6 +159,7 @@ sudo systemctl enable mongod curl -o napcat.sh https://nclatest.znin.net/NapNeko/NapCat-Installer/main/script/install.sh && sudo bash napcat.sh ``` 执行后,脚本会自动帮你部署好QQ及Napcat +*注:如果你已经手动安装了Napcat和QQ,可忽略此步* 成功的标志是输入``` napcat ```出来炫酷的彩虹色界面 @@ -225,7 +229,8 @@ bot └─ bot_config.toml ``` -你要会vim直接在终端里修改也行,不过也可以把它们下到本地改好再传上去: +你可以使用vim、nano等编辑器直接在终端里修改这些配置文件,但如果你不熟悉它们的操作,也可以使用带图形界面的编辑器。 +如果你的麦麦部署在远程服务器,也可以把它们下载到本地改好再传上去 ### step 5 文件配置 @@ -244,7 +249,7 @@ bot - [⚙️ 标准配置指南](./installation_standard.md) - 简明专业的配置说明,适合有经验的用户 -**step # 6** 运行 +### step 6 运行 现在再运行 diff --git a/docs/manual_deploy_linux.md b/docs/manual_deploy_linux.md index 653284bf5..5a8806771 100644 --- a/docs/manual_deploy_linux.md +++ b/docs/manual_deploy_linux.md @@ -24,9 +24,6 @@ --- -## 一键部署 -请下载并运行项目根目录中的run.sh并按照提示安装,部署完成后请参照后续配置指南进行配置 - ## 环境配置 ### 1️⃣ **确认Python版本** diff --git a/docs/pic/compass_downloadguide.png b/docs/pic/compass_downloadguide.png new file mode 100644 index 0000000000000000000000000000000000000000..06a08b52d0a19cdb0c0368315bbed6c595cb4af0 GIT binary patch literal 15412 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