惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
MyScale Blog
MyScale Blog
量子位
月光博客
月光博客
J
Java Code Geeks
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
U
Unit 42
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
G
Google Developers Blog
博客园 - 【当耐特】
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
IT之家
IT之家
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
博客园 - 叶小钗
B
Blog
Martin Fowler
Martin Fowler
P
Proofpoint News Feed
B
Blog RSS Feed

寒夏摸鱼站

影评《诺曼底72小时》 - 寒夏摸鱼站 Rust 的那些内置 Trait - 寒夏摸鱼站 教你造一台光棱坦克 - 寒夏摸鱼站 Vite 与 Rust 的 Monorepo 前后端联合开发 - 寒夏摸鱼站 Rust 中的全局对象实现 - 寒夏摸鱼站 Stable Diffusion 拆解分析笔记 #2 - 寒夏摸鱼站 Stable Diffusion 拆解分析笔记 #1 - 寒夏摸鱼站 加密博客测试 - 寒夏摸鱼站 FUTURE 甜点谜题 —— 出题人杂谈 Vol.1 - 寒夏摸鱼站 JS 模块系统 - 寒夏摸鱼站 教你造一台幻影坦克 - 寒夏摸鱼站 随机迷宫生成算法 - 寒夏摸鱼站 Lambda 演算 - 寒夏摸鱼站 博客搭建Log #5 - 寒夏摸鱼站 留言板 - 寒夏摸鱼站 SZTU NEW STAR CTF 游记 - 寒夏摸鱼站 Rust 下的 Shell 管道调用 - 寒夏摸鱼站 柏林噪声与地形生成 - 寒夏摸鱼站 PHP 序列化的生成与解析 - 寒夏摸鱼站 猴子都能明白的 Typecho 建站教程 #4 - 寒夏摸鱼站 猴子都能明白的 Typecho 建站教程 #3 - 寒夏摸鱼站 猴子都能明白的 Typecho 建站教程 #2 - 寒夏摸鱼站 猴子都能明白的 Typecho 建站教程 #1 - 寒夏摸鱼站 博客搭建Log #4 - 寒夏摸鱼站 后缀自动机&广义后缀自动机 - 寒夏摸鱼站 字符串基础与 KMP 算法 - 寒夏摸鱼站 博客搭建Log #3 - 寒夏摸鱼站 快速傅里叶算法 - 寒夏摸鱼站 博客搭建Log #2 - 寒夏摸鱼站 关于地址重写与路由分发的研究 - 寒夏摸鱼站
使用容器化技术在 Linux 服务器上部署 OlivaDice - 寒夏摸鱼站
2023-08-04 · via 寒夏摸鱼站
目录
  • 容器结构
  • Dockerfile
  • OlivaDice.py
  • docker-compose.yml
  • 骰娘……启动!
  • 小问题
  • 最近跑团小组吸收了新鲜的血液又开始动起来了,但是旧的骰娘却寄了,在网上搜索的时候刚好就遇到了青果核骰子,下载了 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 的缺点