🔧 调整 Dockerfile 以及 Bison 的运行方式 (#447)

* 🔧 调整 Dockerfile 以及 Bison的运行方式

*  不再为环境变量配置里的空值使用默认值

* 🔧 为 docker.env.prod 内的配置填写默认值
This commit is contained in:
AzideCupric 2024-02-11 21:48:51 +08:00 committed by GitHub
parent 73f0ad71e6
commit 1a96d31dbf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 1446 additions and 72 deletions

View File

@ -16,3 +16,4 @@ docs
.* .*
!pyproject.toml !pyproject.toml
!README.md

View File

@ -17,4 +17,4 @@ runs:
- name: Setup Poetry - name: Setup Poetry
uses: Gr1N/setup-poetry@v8 uses: Gr1N/setup-poetry@v8
with: with:
poetry-version: "1.3.2" poetry-version: "1.7.1"

View File

@ -127,7 +127,7 @@ jobs:
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
name: frontend name: frontend
path: ./src/plugins/nonebot_bison/admin_page/dist path: ./nonebot_bison/admin_page/dist
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@v3
@ -188,7 +188,7 @@ jobs:
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
name: frontend name: frontend
path: ./src/plugins/nonebot_bison/admin_page/dist path: ./nonebot_bison/admin_page/dist
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@v3

18
bot.py
View File

@ -1,18 +0,0 @@
from pathlib import Path
import nonebot
from nonebot.adapters.onebot.v11 import Adapter as OneBotV11Adapter
nonebot.init(command_start=[""])
app = nonebot.get_asgi()
driver = nonebot.get_driver()
driver.register_adapter(OneBotV11Adapter)
nonebot.load_builtin_plugins("echo")
# nonebot.load_plugin("nonebot_plugin_help")
nonebot.load_plugin(Path(__file__).parent / "nonebot_bison")
nonebot.load_plugins("extra_plugins")
if __name__ == "__main__":
nonebot.run()

27
docker.env.prod Normal file
View File

@ -0,0 +1,27 @@
# 该文件会上传 Git 仓库以供 docker 读取环境变量使用
# 在 dotenv 文件中声明的插件变量 nonebot2 才会读取并注入到 nonebot2 的 global_config 中
# 请勿在开发时修改该文件或者填入敏感信息!
# nonebot2
COMMAND_START=["/", ""]
DRIVER=~fastapi+~aiohttp
DATASTORE_DATA_DIR=/data
TZ=Asia/Shanghai
# nonebot-bison
BISON_CONFIG_PATH=
BISON_USE_PIC=false
BISON_INIT_FILTER=true
BISON_USE_QUEUE=true
BISON_OUTER_URL=
BISON_FILTER_LOG=false
BISON_TO_ME=true
BISON_SKIP_BROWSER_CHECK=false
BISON_USE_PIC_MERGE=0
BISON_RESEND_TIMES=0
BISON_PROXY=
BISON_UA=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
BISON_SHOW_NETWORK_WARNING=true
# nonebot-plugin-sentry
SENTRY_DSN=

View File

@ -3,13 +3,13 @@ ADD . /app
WORKDIR /app/admin-frontend WORKDIR /app/admin-frontend
RUN yarn && yarn build RUN yarn && yarn build
FROM python:3.9 FROM python:3.11
RUN python3 -m pip install poetry && poetry config virtualenvs.create false RUN python3 -m pip install poetry && poetry config virtualenvs.create false
WORKDIR /app WORKDIR /app
COPY ./pyproject.toml ./poetry.lock* /app/ COPY ./README.md ./pyproject.toml ./poetry.lock* /app/
RUN poetry install --no-root --no-dev RUN poetry install --only=main,docker
ADD src /app/src ADD src /app/src
ADD bot.py /app/ ADD bot.py /app/
COPY --from=frontend /app/nonebot_bison/admin_page/dist /app/nonebot_bison/admin_page/dist COPY --from=frontend /app/nonebot_bison/admin_page/dist /app/nonebot_bison/admin_page/dist
ENV HOST=0.0.0.0 ENV HOST=0.0.0.0
CMD ["python", "bot.py"] CMD ["nb", "run"]

View File

@ -1,11 +1,10 @@
FROM python:3.9 FROM python:3.11
RUN apt-get update && apt-get install -y fonts-wqy-microhei chromium RUN apt-get update && apt-get install -y fonts-wqy-microhei chromium nano
RUN python3 -m pip config set global.index-url https://mirrors.aliyun.com/pypi/simple RUN python3 -m pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
RUN python3 -m pip install poetry && poetry config virtualenvs.create false RUN python3 -m pip install poetry && poetry config virtualenvs.create false
WORKDIR /app WORKDIR /app
COPY ./pyproject.toml ./poetry.lock* /app/ COPY ./README.md ./pyproject.toml ./poetry.lock* /app/
RUN poetry install --no-root --no-dev RUN poetry install --only=main,docker
ENV BISON_BROWSER=local:/usr/bin/chromium ENV BISON_BROWSER=local:/usr/bin/chromium
ADD src /app/src ADD src /app/src
ADD bot.py /app/
ENV HOST=0.0.0.0 ENV HOST=0.0.0.0

View File

@ -1,10 +1,9 @@
FROM python:3.9 FROM python:3.11
RUN python3 -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple RUN python3 -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN python3 -m pip install poetry && poetry config virtualenvs.create false RUN python3 -m pip install poetry && poetry config virtualenvs.create false
WORKDIR /app WORKDIR /app
COPY ./pyproject.toml ./poetry.lock* /app/ COPY ./README.md ./pyproject.toml ./poetry.lock* /app/
RUN poetry install --no-root --no-dev RUN poetry install --only=main,docker
ADD src /app/src ADD src /app/src
ADD bot.py /app/
ENV HOST=0.0.0.0 ENV HOST=0.0.0.0
CMD ["python", "bot.py"] CMD ["nb", "run"]

View File

@ -14,16 +14,15 @@ ENV PYTHONFAULTHANDLER=1 \
PATH="$PATH:/runtime/bin" \ PATH="$PATH:/runtime/bin" \
PYTHONPATH="$PYTHONPATH:/runtime/lib/python3.10/site-packages" \ PYTHONPATH="$PYTHONPATH:/runtime/lib/python3.10/site-packages" \
# Versions: # Versions:
POETRY_VERSION=1.2.2 POETRY_VERSION=1.7.1
RUN apt-get update && apt-get install -y build-essential unzip wget python-dev git RUN apt-get update && apt-get install -y build-essential unzip wget python-dev git
RUN pip install "poetry==$POETRY_VERSION" RUN pip install "poetry==$POETRY_VERSION"
WORKDIR /src WORKDIR /src
COPY pyproject.toml poetry.lock /src/ COPY README.md pyproject.toml poetry.lock /src/
RUN poetry add "nonebot2[fastapi]" nonebot-adapter-red nonebot-adapter-qq nonebot-adapter-telegram && \ RUN poetry export --only=main,docker --without-hashes --no-interaction --no-ansi -f requirements.txt -o requirements.txt
poetry export --without-hashes --no-interaction --no-ansi -f requirements.txt -o requirements.txt
RUN pip install --prefix=/runtime --force-reinstall -r requirements.txt RUN pip install --prefix=/runtime --force-reinstall -r requirements.txt
FROM base as runtime FROM base as runtime
@ -37,13 +36,16 @@ RUN --mount=type=cache,target=/var/cache/apt \
fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 \ fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 \
libcairo2 libcups2 libdbus-1-3 libdrm2 libegl1 libgbm1 libglib2.0-0 libgtk-3-0 \ libcairo2 libcups2 libdbus-1-3 libdrm2 libegl1 libgbm1 libglib2.0-0 libgtk-3-0 \
libnspr4 libnss3 libpango-1.0-0 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \ libnspr4 libnss3 libpango-1.0-0 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \
libxdamage1 libxext6 libxfixes3 libxrandr2 libxshmfence1 libxdamage1 libxext6 libxfixes3 libxrandr2 libxshmfence1 nano
COPY --from=builder /runtime /usr/local COPY --from=builder /runtime /usr/local
RUN playwright install chromium
ADD . /app/ ADD . /app/
RUN echo 'DATASTORE_DATA_DIR=/data' > .env RUN pip install -e . && playwright install chromium
RUN mv docker.env.prod .env.prod && \
nb adapter install nonebot-adapter-red && \
nb adapter install nonebot-adapter-qq && \
nb adapter install nonebot-adapter-telegram
ENV HOST=0.0.0.0 ENV HOST=0.0.0.0
CMD ["python", "bot.py"] CMD ["nb", "run"]
# vim: ft=dockerfile # vim: ft=dockerfile

View File

@ -14,7 +14,7 @@ ENV PYTHONFAULTHANDLER=1 \
PATH="$PATH:/runtime/bin" \ PATH="$PATH:/runtime/bin" \
PYTHONPATH="$PYTHONPATH:/runtime/lib/python3.10/site-packages" \ PYTHONPATH="$PYTHONPATH:/runtime/lib/python3.10/site-packages" \
# Versions: # Versions:
POETRY_VERSION=1.2.2 POETRY_VERSION=1.7.1
RUN apt-get update && apt-get install -y build-essential unzip wget python3-dev git RUN apt-get update && apt-get install -y build-essential unzip wget python3-dev git
RUN pip install "poetry==$POETRY_VERSION" RUN pip install "poetry==$POETRY_VERSION"
@ -22,10 +22,7 @@ WORKDIR /src
COPY pyproject.toml poetry.lock /src/ COPY pyproject.toml poetry.lock /src/
RUN poetry add "nonebot2[fastapi]" \ RUN poetry export --only=main,docker --without-hashes --no-interaction --no-ansi -f requirements.txt -o requirements.txt
nonebot-adapter-red nonebot-adapter-qq nonebot-adapter-telegram \
nonebot-plugin-sentry && \
poetry export --without-hashes --no-interaction --no-ansi -f requirements.txt -o requirements.txt
RUN pip install --prefix=/runtime --force-reinstall -r requirements.txt RUN pip install --prefix=/runtime --force-reinstall -r requirements.txt
FROM base as runtime FROM base as runtime
@ -39,13 +36,17 @@ RUN --mount=type=cache,target=/var/cache/apt \
fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 \ fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 \
libcairo2 libcups2 libdbus-1-3 libdrm2 libegl1 libgbm1 libglib2.0-0 libgtk-3-0 \ libcairo2 libcups2 libdbus-1-3 libdrm2 libegl1 libgbm1 libglib2.0-0 libgtk-3-0 \
libnspr4 libnss3 libpango-1.0-0 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \ libnspr4 libnss3 libpango-1.0-0 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \
libxdamage1 libxext6 libxfixes3 libxrandr2 libxshmfence1 libxdamage1 libxext6 libxfixes3 libxrandr2 libxshmfence1 nano
COPY --from=builder /runtime /usr/local COPY --from=builder /runtime /usr/local
RUN playwright install chromium
ADD . /app/ ADD . /app/
RUN echo 'DATASTORE_DATA_DIR=/data' > .env && sed '/nonebot.load_builtin_plugins("echo")/a nonebot.load_plugin("nonebot_plugin_sentry")' -i bot.py RUN pip install -e . && playwright install chromium
RUN mv docker.env.prod .env.prod && \
nb adapter install nonebot-adapter-red && \
nb adapter install nonebot-adapter-qq && \
nb adapter install nonebot-adapter-telegram && \
nb plugin install nonebot-plugin-sentry
ENV HOST=0.0.0.0 ENV HOST=0.0.0.0
CMD ["python", "bot.py"] CMD ["nb", "run"]
# vim: ft=dockerfile # vim: ft=dockerfile

1374
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,7 @@ bs4 = ">=0.0.1,<0.0.3"
expiringdict = "^1.2.1" expiringdict = "^1.2.1"
feedparser = "^6.0.2" feedparser = "^6.0.2"
httpx = ">=0.16.1" httpx = ">=0.16.1"
nonebot2 = { version = "^2.0.0", extras = ["fastapi"] } nonebot2 = {extras = ["fastapi"], version = "^2.1.3"}
nonebot-adapter-onebot = "^2.0.0" nonebot-adapter-onebot = "^2.0.0"
nonebot-plugin-htmlrender = ">=0.2.0" nonebot-plugin-htmlrender = ">=0.2.0"
nonebot-plugin-datastore = ">=0.6.2,<2.0.0" nonebot-plugin-datastore = ">=0.6.2,<2.0.0"
@ -42,7 +42,7 @@ black = "^23.7.0"
ipdb = "^0.13.4" ipdb = "^0.13.4"
isort = "^5.10.1" isort = "^5.10.1"
nonemoji = "^0.1.4" nonemoji = "^0.1.4"
nb-cli = "^1.0.5" nb-cli = "^1.2.8"
pre-commit = "^3.3.0" pre-commit = "^3.3.0"
ruff = ">=0.0.278,<0.0.293" ruff = ">=0.0.278,<0.0.293"
@ -57,6 +57,17 @@ pytest-mock = "^3.10.0"
pytest-xdist = { extras = ["psutil"], version = "^3.1.0" } pytest-xdist = { extras = ["psutil"], version = "^3.1.0" }
respx = "^0.20.0" respx = "^0.20.0"
[tool.poetry.group.docker]
optional = true
[tool.poetry.group.docker.dependencies]
nb-cli = "^1.2.8"
nonebot2 = {extras = ["fastapi", "aiohttp"], version = "^2.1.3"}
nonebot-adapter-red = "^0.7.4"
nonebot-adapter-qq = "^1.3.4"
nonebot-adapter-telegram = "^0.1.0b14"
poetry-core = "^1.8.1"
[tool.poetry.extras] [tool.poetry.extras]
cli = ["anyio", "click", "typing-extensions"] cli = ["anyio", "click", "typing-extensions"]
yaml = ["pyyaml"] yaml = ["pyyaml"]
@ -66,8 +77,8 @@ all = ["anyio", "click", "typing-extensions", "pyyaml"]
bison = "nonebot_bison.script.cli:main" bison = "nonebot_bison.script.cli:main"
[build-system] [build-system]
requires = ["poetry>=1.0.0"] requires = ["poetry-core>=1.4.0"]
build-backend = "poetry.masonry.api" build-backend = "poetry.core.masonry.api"
[tool.pytest.ini_options] [tool.pytest.ini_options]
markers = [ markers = [
@ -102,7 +113,12 @@ src_paths = ["nonebot_bison", "tests"]
extra_standard_library = ["typing_extensions"] extra_standard_library = ["typing_extensions"]
[tool.nonebot] [tool.nonebot]
adapters = [
{ name = "OneBot V11", module_name = "nonebot.adapters.onebot.v11" },
]
plugins = ["nonebot_bison"] plugins = ["nonebot_bison"]
plugin_dirs = ["extra_plugins"]
builtin_plugins = ["echo"]
[tool.pyright] [tool.pyright]
reportShadowedImports = false reportShadowedImports = false
@ -114,3 +130,8 @@ executionEnvironments = [
] }, ] },
{ root = "./" }, { root = "./" },
] ]
[[tool.poetry.source]]
name = "offical-source"
url = "https://pypi.org/simple/"
priority="default"