Unibot Docker 部署
首先拉取 Ubuntu 镜像:
docker pull ubuntu:20.04 # 这里以 Ubuntu 20.04 为例
用浏览器访问unibot-api.unipjsk.com
并导出证书,放在 Unibot 根目录下。
参考 分布式客户端使用文档 | Unibot 使用文档,在 Unibot 根目录下新建Dockerfile
:
FROM ubuntu:20.04 # 使用上面拉取的 Ubuntu 镜像
COPY bot-3.1.0-cpython-38-x86_64-linux-gnu /usr/local/bin/ # 复制 Unibot 可执行文件
COPY token.yaml / # 复制配置
COPY _.unipjsk.com.crt /usr/local/share/ca-certificates/ # 复制并更新证书
RUN apt-get update && apt-get install -y ca-certificates
RUN update-ca-certificates
ENTRYPOINT ["/usr/local/bin/bot-3.1.0-cpython-310-x86_64-linux-gnu"]
设置镜像时区,在ENTRYPOINT
前追加:
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone && apt install -y tzdata
构建镜像并运行容器:
docker build -t unibot .
docker run -itd --name unibot --network=host unibot
查看运行日志:
docker logs unibot
NoneBot Docker 部署
以下为使用nb-cli
启动的例子。
可以使用nb docker generate
快速生成配置,请确保已安装nb-cli
及其 Docker 插件。
nb self install nb-cli-plugin-docker
根目录下新建Dockerfile
:
FROM python:3.10 as requirements_stage
WORKDIR /wheel
RUN python -m pip install --user pipx
COPY ./pyproject.toml \
./poetry.lock \
/wheel/
RUN python -m pipx run --no-cache poetry export -f requirements.txt --output requirements.txt --without-hashes
RUN python -m pip wheel --wheel-dir=/wheel --no-cache-dir --requirement ./requirements.txt
COPY ./bot.py /tmp/
FROM ubuntu:22.04
RUN apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install -y ca-certificates tzdata python3.10 python3.10-gdbm python3-pip python3.10-dev locales locales-all fonts-noto
RUN update-ca-certificates
ENV LANG zh_CN.UTF-8
ENV LANGUAGE zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8
WORKDIR /app
ENV TZ Asia/Shanghai
ENV PYTHONPATH=/app
RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone
ENV APP_MODULE __main__:app
ENV MAX_WORKERS 1
COPY --from=requirements_stage /tmp/bot.py /app
COPY ./docker/_main.py /app
COPY --from=requirements_stage /wheel /wheel
RUN pip install --no-cache-dir gunicorn uvicorn[standard] nonebot2 \
&& pip install --no-cache-dir --no-index --force-reinstall --find-links=/wheel -r /wheel/requirements.txt && rm -rf /wheel
COPY ./start_exec.sh /app/
RUN python3 -m playwright install firefox
ENTRYPOINT ["/app/start_exec.sh"]
根目录下新建docker-compose.yml
:
version: "3"
x-config-host: &config-host ${HOST:-0.0.0.0}
x-config-port: &config-port ${PORT:-1919}
services:
nonebot:
build: .
ports:
- *config-port
env_file:
- .env.dev
environment:
ENVIRONMENT: dev
HOST: *config-host
PORT: *config-port
restart: always
volumes:
- .:/app # 挂载bot根目录到容器下
nb-cli
Docker 插件常用命令:
nb docker up # 构建镜像并启动容器
nb docker down # 停止正在运行的容器
nb docker generate # 构建镜像
nb docker logs # 输出容器日志
Docker 清理
docker system prune -a
清理无用镜像及构建缓存。