一个相对较详细的docker部署教程(本地镜像构建)

pull/607/head
infinitycat 2025-03-29 01:09:36 +08:00
parent 256bfcf5c2
commit cb50ffce95
1 changed files with 511 additions and 0 deletions

View File

@ -0,0 +1,511 @@
# 麦麦的docker本地部署教程
> **适用系统**Debian系LinuxUbuntu/Debian及其衍生系统
> **系统要求**推荐2核2G内存
> **测试环境**Ubuntu Server 24.04 LTS全新安装
> **部署方式**:本地构建
## 1 更新系统并安装docker
### 更新系统
> apt换源(可选)
>
> ```shell
> cat <<'EOF' > /etc/apt/sources.list.d/ubuntu.sources
> Types: deb
> URIs: https://mirror.nju.edu.cn/ubuntu
> Suites: noble noble-updates noble-backports
> Components: main restricted universe multiverse
> Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
>
> Types: deb
> URIs: http://security.ubuntu.com/ubuntu/
> Suites: noble-security
> Components: main restricted universe multiverse
> Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
> EOF
> ```
更新系统
```shell
sudo apt-get update
sudo apt-get upgrade -y
```
安装一些基础软件包
```shell
sudo apt-get install ca-certificates wget curl gnupg vim -y
```
### 安装docker
使用脚本安装docker
```shell
# 此处使用了GitHub镜像代理
wget https://gh-proxy.net/https://raw.githubusercontent.com/docker/docker-install/master/install.sh
# 赋权
chmod +x install.sh
# 使用镜像源安装
./install.sh --mirror Aliyun
```
出现docker信息即为成功
```shell
+ sudo -E sh -c docker version
Client: Docker Engine - Community
Version: 28.0.4
API version: 1.48
Go version: go1.23.7
Git commit: b8034c0
Built: Tue Mar 25 15:07:16 2025
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 28.0.4
API version: 1.48 (minimum version 1.24)
Go version: go1.23.7
Git commit: 6430e49
Built: Tue Mar 25 15:07:16 2025
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.26
GitCommit: 753481ec61c7c8955a23d6ff7bc8e4daed455734
runc:
Version: 1.2.5
GitCommit: v1.2.5-0-g59923ef
docker-init:
Version: 0.19.0
GitCommit: de40ad0
================================================================================
To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:
dockerd-rootless-setuptool.sh install
Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.
To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/
WARNING: Access to the remote API on a privileged Docker daemon is equivalent
to root access on the host. Refer to the 'Docker daemon attack surface'
documentation for details: https://docs.docker.com/go/attack-surface/
================================================================================
```
docker跟换镜像源
```shell
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
EOF
```
重载docker
```shell
sudo systemctl daemon-reload
sudo systemctl restart docker
```
## 2 开始安装麦麦
选择分支:
> 稳定版: `main`
> 开发版:`main-fix`
### 克隆麦麦
稳定版执行:
```shell
git clone -b main https://gh-proxy.net/https://github.com/MaiM-with-u/MaiBot.git
```
开发版执行:
```shell
git clone -b main-fix https://gh-proxy.net/https://github.com/MaiM-with-u/MaiBot.git
```
克隆完成后会出现 `MaiBot`文件夹
成功执行示例
***非命令请勿执行***
```shell
test@test:~$ git clone -b main https://gh-proxy.net/https://github.com/MaiM-with-u/MaiBot.git
Cloning into 'MaiBot'...
remote: Enumerating objects: 6876, done.
remote: Counting objects: 100% (2139/2139), done.
remote: Compressing objects: 100% (328/328), done.
remote: Total 6876 (delta 1972), reused 1848 (delta 1807), pack-reused 4737 (from 2)
Receiving objects: 100% (6876/6876), 3.51 MiB | 120.00 KiB/s, done.
Resolving deltas: 100% (4701/4701), done.
test@test:~$ ll
total 60
drwxr-x--- 5 test test 4096 Mar 28 15:01 ./
drwxr-xr-x 3 root root 4096 Mar 28 14:17 ../
-rw-r--r-- 1 test test 220 Mar 31 2024 .bash_logout
-rw-r--r-- 1 test test 3771 Mar 31 2024 .bashrc
drwx------ 2 test test 4096 Mar 28 14:17 .cache/
-rwxrwxr-x 1 test test 22577 Mar 28 14:36 install.sh*
drwxrwxr-x 9 test test 4096 Mar 28 15:01 MaiBot/
-rw-r--r-- 1 test test 807 Mar 31 2024 .profile
drwx------ 2 test test 4096 Mar 28 14:17 .ssh/
-rw-r--r-- 1 test test 0 Mar 28 14:29 .sudo_as_admin_successful
-rw-rw-r-- 1 test test 167 Mar 28 14:36 .wget-hsts
```
然后进入到 `MaiBot`中并创建配置文件文件夹
```shell
# 进入到 MaiBot
cd MaiBot
# 创建文件夹docker-config
mkdir docker-config
```
### 配置文件
创建配置文件
```shell
# bot_config.toml
cp template/bot_config_template.toml docker-config/bot_config.toml
# .env.prod
cp template.env docker-config/.env.prod
```
修改配置文件
- 请前往 [🎀 新手配置指南](./installation_cute.md) 或 [⚙️ 标准配置指南](./installation_standard.md) 完成`.env.prod`与`bot_config.toml`配置文件的编写
```shell
vim docker-config/bot_config.toml
vim docker-config/.env.prod
```
> `vim`基础使用:
>
> `:w`保存
>
> `:wq` 保存退出
>
> `:q`退出
>
> `:q!`强制退出
#### docker的额外配置
配置 `.env.prod`
执行
```shell
vim docker-config/.env.prod
```
```env
HOST=0.0.0.0 # 修改此处为0.0.0.0
PORT=8080
ENABLE_ADVANCE_OUTPUT=false
# 插件配置
PLUGINS=["src2.plugins.chat"]
# 默认配置
# 如果工作在Docker下请改成 MONGODB_HOST=mongodb
MONGODB_HOST=mongodb # 修改此处为mongodb
MONGODB_PORT=27017
DATABASE_NAME=MegBot
# 也可以使用 URI 连接数据库(优先级比上面的高)
# MONGODB_URI=mongodb://127.0.0.1:27017/MegBot
# MongoDB 认证信息,若需要认证,请取消注释以下三行并填写正确的信息 # 启用mongodb密码
MONGODB_USERNAME=maimbot
MONGODB_PASSWORD=maimbot@123
MONGODB_AUTH_SOURCE=admin
#key and url
CHAT_ANY_WHERE_BASE_URL=https://api.chatanywhere.tech/v1
SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1/
DEEP_SEEK_BASE_URL=https://api.deepseek.com/v1
# 定义你要用的api的key(需要去对应网站申请哦)
DEEP_SEEK_KEY=
CHAT_ANY_WHERE_KEY=
SILICONFLOW_KEY=
# 定义日志相关配置
CONSOLE_LOG_LEVEL=INFO # 自定义日志的默认控制台输出日志级别
FILE_LOG_LEVEL=DEBUG # 自定义日志的默认文件输出日志级别
DEFAULT_CONSOLE_LOG_LEVEL=SUCCESS # 原生日志的控制台输出日志级别nonebot就是这一类
DEFAULT_FILE_LOG_LEVEL=DEBUG # 原生日志的默认文件输出日志级别nonebot就是这一类
```
`bot_config.toml`根据需要自行配置
执行
```shell
vim docker-config/bot_config.toml
```
修改 `docker-compose.yml`
执行
```shell
vim docker-compose.yml
```
```yaml
services:
napcat:
container_name: napcat
environment:
- TZ=Asia/Shanghai
- NAPCAT_UID=${NAPCAT_UID}
- NAPCAT_GID=${NAPCAT_GID} # 让 NapCat 获取当前用户 GID,UID防止权限问题
ports:
- 6099:6099
restart: unless-stopped
volumes:
- napcatQQ:/app/.config/QQ # 持久化 QQ 本体
- napcatCONFIG:/app/napcat/config # 持久化 NapCat 配置文件
- ./docker-data:/MaiMBot/data # NapCat 和 NoneBot 共享此卷,否则发送图片会有问题 # 修改此处卷为直接挂载目录
image: mlikiowa/napcat-docker:latest
mongodb:
container_name: mongodb
environment:
- TZ=Asia/Shanghai
- MONGO_INITDB_ROOT_USERNAME=maimbot # 此处设置用户
- MONGO_INITDB_ROOT_PASSWORD=maimbot@123 # 此处设置密码
expose:
- "27017"
ports: # 此处新增port (可选) | 注意映射此端口需注意安全问题非常推荐去给mongo设置一个用户密码
- 27017:27017
restart: unless-stopped
volumes:
- mongodb:/data/db # 持久化 MongoDB 数据库
- mongodbCONFIG:/data/configdb # 持久化 MongoDB 配置文件
image: mongo:latest
maimbot:
container_name: maimbot
environment:
- TZ=Asia/Shanghai
- EULA_AGREE=35362b6ea30f12891d46ef545122e84a # 此处增加eula哈希填写这两行即为同意eula
- PRIVACY_AGREE=2402af06e133d2d10d9c6c643fdc9333 # 此处增加eula哈希填写这两行即为同意eula
expose:
- "8080"
restart: unless-stopped
depends_on:
- mongodb
- napcat
volumes:
- napcatCONFIG:/MaiMBot/napcat # 自动根据配置中的 QQ 号创建 ws 反向客户端配置
- ./docker-config/bot_config.toml:/MaiMBot/config/bot_config.toml # Toml 配置文件映射 # 修改此处卷映射到./docker-config/bot_config.toml
- ./docker-data:/MaiMBot/data # NapCat 和 NoneBot 共享此卷,否则发送图片会有问题 # 修改此处卷映射和napcat保持一致
- ./docker-config/.env.prod:/MaiMBot/.env.prod # Toml 配置文件映射 # 修改此处卷映射到./docker-config/.env.prod
image: maimbot:local # 修改镜像为本地构建maimbot:local
volumes:
maimbotCONFIG:
maimbotDATA:
napcatQQ:
napcatCONFIG:
mongodb:
mongodbCONFIG:
```
修改Dockerfile
执行
```shell
vim Dockerfile
```
```Dockerfile
FROM nonebot/nb-cli:latest
# 设置工作目录
WORKDIR /MaiMBot
# 先复制依赖列表
COPY requirements.txt .
# 安装依赖这层会被缓存直到requirements.txt改变
RUN pip install --upgrade -r requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple # 此处使用pipy清华源
# 然后复制项目代码
COPY . .
VOLUME [ "/MaiMBot/config" ]
VOLUME [ "/MaiMBot/data" ]
EXPOSE 8080
ENTRYPOINT [ "nb","run" ]
```
### 构建和启动麦麦
拉取镜像
执行
```shell
sudo docker pull nonebot/nb-cli:latest
```
构建镜像
执行
```shell
# 注意不要漏了最后的点
sudo docker build -t maimbot:local .
```
成功执行示例
***非命令请勿执行***
```shell
test@test:~/MaiBot$ sudo docker pull nonebot/nb-cli:latest
latest: Pulling from nonebot/nb-cli
2f44b7a888fa: Pull complete
3f00b3697662: Pull complete
9f2fc8d8f9bd: Pull complete
4ea8b799d366: Pull complete
1adff455ff8c: Pull complete
753ba2fdde1a: Pull complete
3a27ebb4ce99: Pull complete
55c18539212d: Pull complete
Digest: sha256:53400b4e5ae9cb5bb516e0b002b05cffe8d3af7b79bd88398734077a1100376c
Status: Downloaded newer image for nonebot/nb-cli:latest
docker.io/nonebot/nb-cli:latest
test@test:~/MaiBot$ sudo docker build -t maimbot:local .
[+] Building 95.9s (10/10) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 457B 0.0s
=> [internal] load metadata for docker.io/nonebot/nb-cli:latest 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 99B 0.0s
=> [1/5] FROM docker.io/nonebot/nb-cli:latest 0.1s
=> [internal] load build context 0.1s
=> => transferring context: 2.08MB 0.1s
=> [2/5] WORKDIR /MaiMBot 1.6s
=> [3/5] COPY requirements.txt . 0.0s
=> [4/5] RUN pip install --upgrade -r requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 78.8s
=> [5/5] COPY . . 0.2s
=> exporting to image 15.0s
=> => exporting layers 15.0s
=> => writing image sha256:6e1a6a83b50ae921d79f2dbe73fcc850c07612bcd88db811e76c0e1b8823ccef 0.0s
=> => naming to docker.io/library/maimbot:local
```
启动麦麦
执行
```shell
sudo NAPCAT_UID=$(id -u) NAPCAT_GID=$(id -g) docker compose up -d
```
成功执行示例
***非命令请勿执行***
```shell
test@test:~/MaiBot$ sudo NAPCAT_UID=$(id -u) NAPCAT_GID=$(id -g) docker compose up -d
[+] Running 16/16
✔ napcat Pulled 156.1s
✔ 6414378b6477 Pull complete 15.8s
✔ 490f82e472ca Pull complete 78.5s
✔ d4e6c35d58ce Pull complete 78.5s
✔ f382006ebcb6 Pull complete 78.6s
✔ 60f813bb54e0 Pull complete 79.1s
✔ 34e85b395e26 Pull complete 155.8s
✔ mongodb Pulled 95.6s
✔ 5a7813e071bf Pull complete 22.3s
✔ cf12757b6444 Pull complete 22.4s
✔ 20cfb5e922d1 Pull complete 27.1s
✔ d11968535d8a Pull complete 29.4s
✔ c711ee204b1d Pull complete 31.1s
✔ 4fc65ca4253f Pull complete 33.7s
✔ dacd77ad2ef6 Pull complete 95.3s
✔ 5fa69bd3db1e Pull complete 95.3s
[+] Running 8/8
✔ Network maibot_default Created 0.2s
✔ Volume "maibot_napcatCONFIG" Created 0.0s
✔ Volume "maibot_napcatQQ" Created 0.0s
✔ Volume "maibot_mongodb" Created 0.0s
✔ Volume "maibot_mongodbCONFIG" Created 0.0s
✔ Container napcat Started 3.0s
✔ Container mongodb Started 3.1s
✔ Container maimbot Started 1.2s
```
查看麦麦状态
执行
```shell
sudo docker compose ps
```
成功执行示例
***非命令请勿执行***
```shell
test@test:~/MaiBot$ sudo docker compose ps
WARN[0000] The "NAPCAT_UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "NAPCAT_GID" variable is not set. Defaulting to a blank string.
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
maimbot maimbot:local "nb run" maimbot 4 minutes ago Up 4 minutes
mongodb mongo:latest "docker-entrypoint.s…" mongodb 4 minutes ago Up 4 minutes 0.0.0.0:27017->27017/tcp, [::]:27017->27017/tcp
napcat mlikiowa/napcat-docker:latest "bash entrypoint.sh" napcat 4 minutes ago Up 4 minutes 0.0.0.0:6099->6099/tcp, [::]:6099->6099/tcp
```
然后进入napcat的web页面进行配置
地址为:`<你的ip>:6099`
websocket地址为`ws://maimbot:8080/onebot/v11/ws`
## 3. 常用管理命令
| 功能 | 命令 |
| -------- | --------------------------------------------------- |
| 查看状态 | `sudo docker compose ps` |
| 查看日志 | `sudo docker compose logs -f maimbot --tail=1000` |
| 停止麦麦 | `sudo docker compose down` |
| 重启麦麦 | `sudo docker compose restart` |