Create linux_deploy_guide_for_beginners.md
This commit is contained in:
444
docs/linux_deploy_guide_for_beginners.md
Normal file
444
docs/linux_deploy_guide_for_beginners.md
Normal file
@@ -0,0 +1,444 @@
|
|||||||
|
# 面向纯新手的Linux服务器麦麦部署指南
|
||||||
|
|
||||||
|
## 你得先有一个服务器
|
||||||
|
|
||||||
|
为了能使麦麦在你的电脑关机之后还能运行,你需要一台不间断开机的主机,也就是我们常说的服务器。
|
||||||
|
|
||||||
|
华为云、阿里云、腾讯云等等都是在国内可以选择的选择。
|
||||||
|
|
||||||
|
你可以去租一台最低配置的就足敷需要了,按月租大概十几块钱就能租到了。
|
||||||
|
|
||||||
|
我们假设你已经租好了一台Linux架构的云服务器。我用的是阿里云ubuntu24.04,其他的原理相似。
|
||||||
|
|
||||||
|
## 0.我们就从零开始吧
|
||||||
|
|
||||||
|
### 网络问题
|
||||||
|
|
||||||
|
为访问github相关界面,推荐去下一款加速器,新手可以试试watttoolkit。
|
||||||
|
|
||||||
|
### 安装包下载
|
||||||
|
|
||||||
|
#### MongoDB
|
||||||
|
|
||||||
|
对于ubuntu24.04 x86来说是这个:
|
||||||
|
|
||||||
|
https://repo.mongodb.org/apt/ubuntu/dists/noble/mongodb-org/8.0/multiverse/binary-amd64/mongodb-org-server_8.0.5_amd64.deb
|
||||||
|
|
||||||
|
如果不是就在这里自行选择对应版本
|
||||||
|
|
||||||
|
https://www.mongodb.com/try/download/community-kubernetes-operator
|
||||||
|
|
||||||
|
#### Napcat
|
||||||
|
|
||||||
|
在这里选择对应版本。
|
||||||
|
|
||||||
|
https://github.com/NapNeko/NapCatQQ/releases/tag/v4.6.7
|
||||||
|
|
||||||
|
对于ubuntu24.04 x86来说是这个:
|
||||||
|
|
||||||
|
https://dldir1.qq.com/qqfile/qq/QQNT/ee4bd910/linuxqq_3.2.16-32793_amd64.deb
|
||||||
|
|
||||||
|
#### 麦麦
|
||||||
|
|
||||||
|
https://github.com/SengokuCola/MaiMBot/archive/refs/tags/0.5.8-alpha.zip
|
||||||
|
|
||||||
|
下载这个官方压缩包。
|
||||||
|
|
||||||
|
### 路径
|
||||||
|
|
||||||
|
我把麦麦相关文件放在了/moi/mai里面,你可以凭喜好更改,记得适当调整下面涉及到的部分即可。
|
||||||
|
|
||||||
|
文件结构:
|
||||||
|
|
||||||
|
```
|
||||||
|
moi
|
||||||
|
└─ mai
|
||||||
|
├─ linuxqq_3.2.16-32793_amd64.deb
|
||||||
|
├─ mongodb-org-server_8.0.5_amd64.deb
|
||||||
|
└─ bot
|
||||||
|
└─ MaiMBot-0.5.8-alpha.zip
|
||||||
|
```
|
||||||
|
|
||||||
|
### 网络
|
||||||
|
|
||||||
|
你可以在你的服务器控制台网页更改防火墙规则,允许6099,8080,27017这几个端口的出入。
|
||||||
|
|
||||||
|
## 1.正式开始!
|
||||||
|
|
||||||
|
远程连接你的服务器,你会看到一个黑框框闪着白方格,这就是我们要进行设置的场所——终端了。以下的bash命令都是在这里输入。
|
||||||
|
|
||||||
|
## 2. Python的安装
|
||||||
|
|
||||||
|
- 导入 Python 的稳定版 PPA:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo add-apt-repository ppa:deadsnakes/ppa
|
||||||
|
```
|
||||||
|
|
||||||
|
- 导入 PPA 后,更新 APT 缓存:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt update
|
||||||
|
```
|
||||||
|
|
||||||
|
- 在「终端」中执行以下命令来安装 Python 3.12:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install python3.12
|
||||||
|
```
|
||||||
|
|
||||||
|
- 验证安装是否成功:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3.12 --version
|
||||||
|
```
|
||||||
|
|
||||||
|
- 在「终端」中,执行以下命令安装 pip:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install python3-pip
|
||||||
|
```
|
||||||
|
|
||||||
|
- 检查Pip是否安装成功:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip --version
|
||||||
|
```
|
||||||
|
|
||||||
|
- 安装必要组件
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo apt install python-is-python3
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3.MongoDB的安装
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
cd /moi/mai
|
||||||
|
```
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
dpkg -i mongodb-org-server_8.0.5_amd64.deb
|
||||||
|
```
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
mkdir -p /root/data/mongodb/{data,log}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4.MongoDB的运行
|
||||||
|
|
||||||
|
```bash
|
||||||
|
service mongod start
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl status mongod #通过这条指令检查运行状态
|
||||||
|
```
|
||||||
|
|
||||||
|
有需要的话可以把这个服务注册成开机自启
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl enable mongod
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5.napcat的安装
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
curl -o napcat.sh https://nclatest.znin.net/NapNeko/NapCat-Installer/main/script/install.sh && sudo bash napcat.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
上面的不行试试下面的
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
dpkg -i linuxqq_3.2.16-32793_amd64.deb
|
||||||
|
apt-get install -f
|
||||||
|
dpkg -i linuxqq_3.2.16-32793_amd64.deb
|
||||||
|
```
|
||||||
|
|
||||||
|
成功的标志是输入``` napcat ```出来炫酷的彩虹色界面
|
||||||
|
|
||||||
|
## 6.napcat的运行
|
||||||
|
|
||||||
|
此时你就可以根据提示在```napcat```里面登录你的QQ号了。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
napcat start <你的QQ号>
|
||||||
|
napcat status #检查运行状态
|
||||||
|
```
|
||||||
|
|
||||||
|
然后你就可以登录napcat的webui进行设置了:
|
||||||
|
|
||||||
|
```http://<你服务器的公网IP>:6099/webui?token=napcat```
|
||||||
|
|
||||||
|
第一次是这个,后续改了密码之后token就会对应修改。你也可以使用```napcat log <你的QQ号>```来查看webui地址。把里面的```127.0.0.1```改成<你服务器的公网IP>即可。
|
||||||
|
|
||||||
|
登录上之后在网络配置界面添加websocket客户端,名称随便输一个,url改成`ws://127.0.0.1:8080/onebot/v11/ws`保存之后点启用,就大功告成了。
|
||||||
|
|
||||||
|
## 7.麦麦的安装
|
||||||
|
|
||||||
|
### step 1 安装解压软件
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt-get install unzip
|
||||||
|
```
|
||||||
|
|
||||||
|
### step 2 解压文件
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /moi/mai/bot # 注意:要切换到压缩包的目录中去
|
||||||
|
unzip MaiMBot-0.5.8-alpha.zip
|
||||||
|
```
|
||||||
|
|
||||||
|
### step 3 进入虚拟环境安装库
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /moi/mai/bot
|
||||||
|
python -m venv venv
|
||||||
|
source venv/bin/activate
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### step 4 试运行
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /moi/mai/bot
|
||||||
|
python -m venv venv
|
||||||
|
source venv/bin/activate
|
||||||
|
python bot.py
|
||||||
|
```
|
||||||
|
|
||||||
|
肯定运行不成功,不过你会发现结束之后多了一些文件
|
||||||
|
|
||||||
|
```
|
||||||
|
bot
|
||||||
|
├─ .env.prod
|
||||||
|
└─ config
|
||||||
|
└─ bot_config.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
你要会vim直接在终端里修改也行,不过也可以把它们下到本地改好再传上去:
|
||||||
|
|
||||||
|
### step 5 文件配置
|
||||||
|
|
||||||
|
本项目需要配置两个主要文件:
|
||||||
|
|
||||||
|
1. `.env.prod` - 配置API服务和系统环境
|
||||||
|
2. `bot_config.toml` - 配置机器人行为和模型
|
||||||
|
|
||||||
|
#### API
|
||||||
|
|
||||||
|
你可以注册一个硅基流动的账号,通过邀请码注册有14块钱的免费额度:https://cloud.siliconflow.cn/i/7Yld7cfg。
|
||||||
|
|
||||||
|
#### 在.env.prod中定义API凭证:
|
||||||
|
|
||||||
|
```
|
||||||
|
# API凭证配置
|
||||||
|
SILICONFLOW_KEY=your_key # 硅基流动API密钥
|
||||||
|
SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1/ # 硅基流动API地址
|
||||||
|
|
||||||
|
DEEP_SEEK_KEY=your_key # DeepSeek API密钥
|
||||||
|
DEEP_SEEK_BASE_URL=https://api.deepseek.com/v1 # DeepSeek API地址
|
||||||
|
|
||||||
|
CHAT_ANY_WHERE_KEY=your_key # ChatAnyWhere API密钥
|
||||||
|
CHAT_ANY_WHERE_BASE_URL=https://api.chatanywhere.tech/v1 # ChatAnyWhere API地址
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 在bot_config.toml中引用API凭证:
|
||||||
|
|
||||||
|
```
|
||||||
|
[model.llm_reasoning]
|
||||||
|
name = "Pro/deepseek-ai/DeepSeek-R1"
|
||||||
|
base_url = "SILICONFLOW_BASE_URL" # 引用.env.prod中定义的地址
|
||||||
|
key = "SILICONFLOW_KEY" # 引用.env.prod中定义的密钥
|
||||||
|
```
|
||||||
|
|
||||||
|
如需切换到其他API服务,只需修改引用:
|
||||||
|
|
||||||
|
```
|
||||||
|
[model.llm_reasoning]
|
||||||
|
name = "Pro/deepseek-ai/DeepSeek-R1"
|
||||||
|
base_url = "DEEP_SEEK_BASE_URL" # 切换为DeepSeek服务
|
||||||
|
key = "DEEP_SEEK_KEY" # 使用DeepSeek密钥
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 配置文件详解
|
||||||
|
|
||||||
|
##### 环境配置文件 (.env.prod)
|
||||||
|
|
||||||
|
```
|
||||||
|
# API配置
|
||||||
|
SILICONFLOW_KEY=your_key
|
||||||
|
SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1/
|
||||||
|
DEEP_SEEK_KEY=your_key
|
||||||
|
DEEP_SEEK_BASE_URL=https://api.deepseek.com/v1
|
||||||
|
CHAT_ANY_WHERE_KEY=your_key
|
||||||
|
CHAT_ANY_WHERE_BASE_URL=https://api.chatanywhere.tech/v1
|
||||||
|
|
||||||
|
# 服务配置
|
||||||
|
HOST=127.0.0.1 # 如果使用Docker部署,需要改成0.0.0.0,否则QQ消息无法传入
|
||||||
|
PORT=8080
|
||||||
|
|
||||||
|
# 数据库配置
|
||||||
|
MONGODB_HOST=127.0.0.1 # 如果使用Docker部署,需要改成数据库容器的名字,默认是mongodb
|
||||||
|
MONGODB_PORT=27017
|
||||||
|
DATABASE_NAME=MegBot
|
||||||
|
MONGODB_USERNAME = "" # 数据库用户名
|
||||||
|
MONGODB_PASSWORD = "" # 数据库密码
|
||||||
|
MONGODB_AUTH_SOURCE = "" # 认证数据库
|
||||||
|
|
||||||
|
# 插件配置
|
||||||
|
PLUGINS=["src2.plugins.chat"]
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 机器人配置文件 (bot_config.toml)
|
||||||
|
|
||||||
|
```
|
||||||
|
[bot]
|
||||||
|
qq = "机器人QQ号" # 必填
|
||||||
|
nickname = "麦麦" # 机器人昵称(你希望机器人怎么称呼它自己)
|
||||||
|
|
||||||
|
[personality]
|
||||||
|
prompt_personality = [
|
||||||
|
"曾经是一个学习地质的女大学生,现在学习心理学和脑科学,你会刷贴吧",
|
||||||
|
"是一个女大学生,你有黑色头发,你会刷小红书"
|
||||||
|
]
|
||||||
|
prompt_schedule = "一个曾经学习地质,现在学习心理学和脑科学的女大学生,喜欢刷qq,贴吧,知乎和小红书"
|
||||||
|
|
||||||
|
[message]
|
||||||
|
min_text_length = 2 # 最小回复长度
|
||||||
|
max_context_size = 15 # 上下文记忆条数
|
||||||
|
emoji_chance = 0.2 # 表情使用概率
|
||||||
|
ban_words = [] # 禁用词列表
|
||||||
|
|
||||||
|
[emoji]
|
||||||
|
auto_save = true # 自动保存表情
|
||||||
|
enable_check = false # 启用表情审核
|
||||||
|
check_prompt = "符合公序良俗"
|
||||||
|
|
||||||
|
[groups]
|
||||||
|
talk_allowed = [] # 允许对话的群号
|
||||||
|
talk_frequency_down = [] # 降低回复频率的群号
|
||||||
|
ban_user_id = [] # 禁止回复的用户QQ号
|
||||||
|
|
||||||
|
[others]
|
||||||
|
enable_advance_output = true # 启用详细日志
|
||||||
|
enable_kuuki_read = true # 启用场景理解
|
||||||
|
|
||||||
|
# 模型配置
|
||||||
|
[model.llm_reasoning] # 推理模型
|
||||||
|
name = "Pro/deepseek-ai/DeepSeek-R1"
|
||||||
|
base_url = "SILICONFLOW_BASE_URL"
|
||||||
|
key = "SILICONFLOW_KEY"
|
||||||
|
|
||||||
|
[model.llm_reasoning_minor] # 轻量推理模型
|
||||||
|
name = "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B"
|
||||||
|
base_url = "SILICONFLOW_BASE_URL"
|
||||||
|
key = "SILICONFLOW_KEY"
|
||||||
|
|
||||||
|
[model.llm_normal] # 对话模型
|
||||||
|
name = "Pro/deepseek-ai/DeepSeek-V3"
|
||||||
|
base_url = "SILICONFLOW_BASE_URL"
|
||||||
|
key = "SILICONFLOW_KEY"
|
||||||
|
|
||||||
|
[model.llm_normal_minor] # 备用对话模型
|
||||||
|
name = "deepseek-ai/DeepSeek-V2.5"
|
||||||
|
base_url = "SILICONFLOW_BASE_URL"
|
||||||
|
key = "SILICONFLOW_KEY"
|
||||||
|
|
||||||
|
[model.vlm] # 图像识别模型
|
||||||
|
name = "deepseek-ai/deepseek-vl2"
|
||||||
|
base_url = "SILICONFLOW_BASE_URL"
|
||||||
|
key = "SILICONFLOW_KEY"
|
||||||
|
|
||||||
|
[model.embedding] # 文本向量模型
|
||||||
|
name = "BAAI/bge-m3"
|
||||||
|
base_url = "SILICONFLOW_BASE_URL"
|
||||||
|
key = "SILICONFLOW_KEY"
|
||||||
|
|
||||||
|
|
||||||
|
[topic.llm_topic]
|
||||||
|
name = "Pro/deepseek-ai/DeepSeek-V3"
|
||||||
|
base_url = "SILICONFLOW_BASE_URL"
|
||||||
|
key = "SILICONFLOW_KEY"
|
||||||
|
```
|
||||||
|
|
||||||
|
**step # 6** 运行
|
||||||
|
|
||||||
|
现在再运行
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /moi/mai/bot
|
||||||
|
python -m venv venv
|
||||||
|
source venv/bin/activate
|
||||||
|
python bot.py
|
||||||
|
```
|
||||||
|
|
||||||
|
应该就能运行成功了。
|
||||||
|
|
||||||
|
## 8.事后配置
|
||||||
|
|
||||||
|
可是现在还有个问题:只要你一关闭终端,bot.py就会停止运行。那该怎么办呢?我们可以把bot.py注册成服务。
|
||||||
|
|
||||||
|
重启服务器,打开MongoDB和napcat服务。
|
||||||
|
|
||||||
|
新建一个文件,名为`bot.service`,内容如下
|
||||||
|
|
||||||
|
```
|
||||||
|
[Unit]
|
||||||
|
Description=maimai bot
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/moi/mai/bot
|
||||||
|
ExecStart=/moi/mai/bot/venv/bin/python /moi/mai/bot/bot.py
|
||||||
|
Restart=on-failure
|
||||||
|
User=root
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
里面的路径视自己的情况更改。
|
||||||
|
|
||||||
|
把它放到`/etc/systemd/system`里面。
|
||||||
|
|
||||||
|
重新加载 `systemd` 配置:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
```
|
||||||
|
|
||||||
|
启动服务:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl start bot.service # 启动服务
|
||||||
|
sudo systemctl restart bot.service # 或者重启服务
|
||||||
|
```
|
||||||
|
|
||||||
|
检查服务状态:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl status bot.service
|
||||||
|
```
|
||||||
|
|
||||||
|
现在再关闭终端,检查麦麦能不能正常回复QQ信息。如果可以的话就大功告成了!
|
||||||
|
|
||||||
|
## 9.命令速查
|
||||||
|
|
||||||
|
```bash
|
||||||
|
service mongod start # 启动mongod服务
|
||||||
|
napcat start <你的QQ号> # 登录napcat
|
||||||
|
cd /moi/mai/bot # 切换路径
|
||||||
|
python -m venv venv # 创建虚拟环境
|
||||||
|
source venv/bin/activate # 激活虚拟环境
|
||||||
|
|
||||||
|
sudo systemctl daemon-reload # 重新加载systemd配置
|
||||||
|
sudo systemctl start bot.service # 启动bot服务
|
||||||
|
sudo systemctl enable bot.service # 启动bot服务
|
||||||
|
|
||||||
|
sudo systemctl status bot.service # 检查bot服务状态
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
python bot.py
|
||||||
|
```
|
||||||
|
|
||||||
Reference in New Issue
Block a user