寒夏摸鱼站

使用容器化技术在 Linux 服务器上部署 OlivaDice

2023年08月04日(已修改)

最近跑团小组吸收了新鲜的血液又开始动起来了,但是旧的骰娘却寄了,在网上搜索的时候刚好就遇到了青果核骰子,下载了 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/Dockerfilebuild/OlivaDice.pydocker-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 的缺点

文章标题:使用容器化技术在 Linux 服务器上部署 OlivaDice

文章链接:https://blog.rainiar.top/posts/19/

最近修改:2024年01月31日

分享协议:CC BY-NC-SA 4.0 | 署名-非商业使用-相同方式共享