最近跑团小组吸收了新鲜的血液又开始动起来了,但是旧的骰娘却寄了,在网上搜索的时候刚好就遇到了青果核骰子,下载了 Win64 版挂在 KOOK 上玩了玩感觉还不错,于是就想着把它挂到阿里云上了。
但是当下载了 官方提供的 Linux 版 后,塞到服务器上却死活也运行不了,一直在报缺少 tkinter 组件,我寻思着服务器为啥要图形界面,于是把 OlivaDiceNativeGUI 插件给去掉了,但是还是无法运行,依旧报 tkinter 错误。
由于整个 OlivaDiceCore 实质上就是 OlivOS 的一个插件,所以干脆就按照部署 OlivOS 的方法把骰娘给架好得了,而且还可以简单打包个容器以避免污染默认 Python 环境。
容器结构
我使用 Docker Compose 来部署和构建容器,因此除了核心所需要的一些文件和文件夹,还需要专门准备一个构建文件夹:
+-- OlivaDice
+-- build # 构建文件夹
| +-- Dockerfile # Dockerfile 文件
| +-- OlivaDice.py # 启动入口文件
+-- conf # 配置文件夹
| +-- account.json # 账户数据
+-- data # 数据文件夹
+-- lib # 库文件夹
+-- logfile # 日志文件夹
+-- plugin # 插件文件夹
| +-- app
| +-- ChanceCustom.opk # OlivaDice 子模块
| +-- OlivaDiceCore.opk # OlivaDice 核心模块
| +-- OlivaDiceJoy.opk # OlivaDice 子模块
| +-- OlivaDiceLogger.opk # OlivaDice 子模块
| +-- OlivaDiceMaster.opk # OlivaDice 子模块
| +-- OlivaDiceOdyssey.opk # OlivaDice 子模块
+-- docker-compose.yml # Docker compose 文件
其中,所有的 OlivaDice 模块你都可以在 Github 或 青果核论坛 上找到,账户数据你可能需要手动填写,毕竟服务器上可没有图形界面给你玩,当然我就直接从之前在 Windows 上玩的账户数据拷贝过去了。
因此你只需要准备三个文件:build/Dockerfile
、build/OlivaDice.py
和 docker-compose.yml
。
Dockerfile
Dockerfile 是用来构建容器的,根据青果核的要求,我使用的是 Python 11,所以要从 Python 11 镜像进行构建。需要写的内容很少:
FROM python:3.11-slim
WORKDIR /app
COPY OlivaDice.py .
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple olivos
CMD ["python", "OlivaDice.py"]
这里我将工作目录设为 /app
,然后把外部的 OlivaDice.py
入口文件拷贝进镜像,然后使用 pip 安装 olivos 核心。这里我用了清华镜像源来加速,要不然不使用科学上网直接从 PYPI 拉取数据简直慢到天际……
最后使用 Python 来执行入口文件就行。
OlivaDice.py
入口文件是容器启动时执行的,同时也非常简单,因为青果核已经把能做的都帮我们做到了,直接照抄 Github 样例代码即可:
import OlivOS
if __name__ == '__main__':
OlivOSTarget = OlivOS.bootAPI.Entity()
OlivOSTarget.start()
docker-compose.yml
简单照抄即可,注意我们需要把文件夹挂载到对应的位置:
version: '3.9'
services:
oliva-dice:
build:
context: ./build
dockerfile: Dockerfile
container_name: oliva-dice
restart: always
volumes:
- ./conf:/app/conf
- ./plugin:/app/plugin
- ./data:/app/data
- ./lib:/app/lib
- ./logfile:/app/logfile
骰娘……启动!
直接在 docker-compose.yml
目录下执行:
sudo docker compose up
等待很长一段时间进行构建和启动,当你看到 OlivOS 的大 Logo 出现时,你就已经成功了!
小问题
当你使用容器化技术启动 OlivOS 之后,如果你试图使用 Docker 的 logs
命令查看日志:
sudo docker logs <你的容器 ID>
你会发现日志是残缺的!在 OlivOS 装载完账号之后,所有的信息都消失了……
这时候你需要通过 logfile
文件夹来查看青果核输出的日志:
cat logfile/OlivOS_logfile_{某一个日期}.log
因为青果核用多进程来运行机器人,但是 Docker 日志只能捕获主进程的消息,所以你只能通过文件的方式来获取完整日志。
只能说这是 Python 的缺点