From 8c67d3c58f2c44519284b08c88389c234bd9cbcf Mon Sep 17 00:00:00 2001 From: crosscc <37495419+q123458384@users.noreply.github.com> Date: Fri, 31 Mar 2023 16:22:20 +0800 Subject: [PATCH 1/9] Create build_docker_image.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 利用github action 自动构建docker镜像: ## 1、 `workflow_dispatch:` 是需要作者在action手动点击进行构建 ``` release: types: [published] ``` 这个是发布release的时候自动构建镜像。根据作者需求启用或者删除注释掉 ## 2、 `tag: latest,${{ steps.get_version.outputs.VERSION }}`是可以镜像打标为latest和release发布的版本号 ## 3、 docker hub userid 在setting创建secrets, name=DOCKER_USERNAME value=dockerid docker hub password,在setting创建secrets, name=DOCKER_PASSWORD value=dockerpassword 这样作者就不用在自己机器上构建docker镜像,利用action 自动完成全平台镜像 速度也快。 --- .github/workflows/build_docker_image.yml | 29 ++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/workflows/build_docker_image.yml diff --git a/.github/workflows/build_docker_image.yml b/.github/workflows/build_docker_image.yml new file mode 100644 index 00000000..139add8e --- /dev/null +++ b/.github/workflows/build_docker_image.yml @@ -0,0 +1,29 @@ +name: Build Image +on: + #防止fork乱用action设置只能手动触发构建 + workflow_dispatch: + ## 发布release的时候会自动构建 + release: + types: [published] +jobs: + build: + runs-on: ubuntu-latest + name: Build image job + + steps: + - name: Checkout master + uses: actions/checkout@master + - name: Get version + id: get_version + if: startsWith(github.ref, 'refs/tags/') && startsWith(github.repository, 'RockChinQ/QChatGPT') + run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//} + - name: Build and publish image + uses: ilteoood/docker_buildx@master + if: startsWith(github.ref, 'refs/tags/') && startsWith(github.repository, 'RockChinQ/QChatGPT') + with: + publish: true + imageName: mikumifa/qchatgpt-docker # dockerid/imageName + platform: linux/386,linux/arm64,linux/amd64,linux/arm/v6,linux/arm/v7 # 你准备构建的镜像平台 + tag: latest,${{ steps.get_version.outputs.VERSION }} + dockerUser: ${{ secrets.DOCKER_USERNAME }} # docker hub userid 在setting创建secrets name=DOCKER_USERNAME value=dockerid + dockerPassword: ${{ secrets.DOCKER_PASSWORD }} # docker hub password,在setting创建secrets name=DOCKER_PASSWORD value=dockerpassword From e2b59e8efea488a4de4cd09617124e21879c816a Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Tue, 12 Sep 2023 10:21:03 +0000 Subject: [PATCH 2/9] =?UTF-8?q?ci:=20=E6=9B=B4=E6=96=B0Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 54d4c44e..8261a1fe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,14 @@ -FROM python:3.9-slim +FROM python:3.10.13-alpine3.18 WORKDIR /QChatGPT -RUN sed -i "s/deb.debian.org/mirrors.tencent.com/g" /etc/apt/sources.list \ - && sed -i 's|security.debian.org/debian-security|mirrors.tencent.com/debian-security|g' /etc/apt/sources.list \ - && apt-get clean \ - && apt-get update \ - && apt-get -y upgrade \ - && apt-get install -y git \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - COPY . /QChatGPT/ -RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple +RUN ls -CMD [ "python", "main.py" ] \ No newline at end of file +RUN pip install -r requirements.txt +RUN pip install -U websockets==10.0 + +# 生成配置文件 +RUN python main.py + +CMD [ "python", "main.py" ] \ No newline at end of file From ff9a9830f265c9c2272c8f0effe4d01a9d212c58 Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Tue, 12 Sep 2023 10:21:19 +0000 Subject: [PATCH 3/9] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0requirements.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index e3f2e625..ae01b6b0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,10 @@ -requests~=2.31.0 +requests openai~=0.28.0 dulwich~=0.21.6 colorlog~=6.6.0 yiri-mirai websockets -urllib3~=1.26.10 +urllib3 func_timeout~=4.3.5 Pillow nakuru-project-idk From 3bfce8ab510a766d801979e87c365709f774a84f Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Tue, 12 Sep 2023 10:21:40 +0000 Subject: [PATCH 4/9] =?UTF-8?q?ci:=20=E4=BC=98=E5=8C=96docker=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E6=9E=84=E5=BB=BA=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build_docker_image.yml | 41 +++++++++++++++--------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build_docker_image.yml b/.github/workflows/build_docker_image.yml index 139add8e..1af9a509 100644 --- a/.github/workflows/build_docker_image.yml +++ b/.github/workflows/build_docker_image.yml @@ -1,4 +1,4 @@ -name: Build Image +name: Build Docker Image on: #防止fork乱用action设置只能手动触发构建 workflow_dispatch: @@ -6,24 +6,33 @@ on: release: types: [published] jobs: - build: + publish-docker-image: runs-on: ubuntu-latest - name: Build image job + name: Build image steps: - - name: Checkout master - uses: actions/checkout@master + - name: Checkout + uses: actions/checkout@v2 + - name: judge has env GITHUB_REF # 如果没有GITHUB_REF环境变量,则把github.ref变量赋值给GITHUB_REF + run: | + if [ -z "$GITHUB_REF" ]; then + echo "GITHUB_REF=${{ github.ref }}" >> $GITHUB_ENV + fi + - name: Check GITHUB_REF env + run: echo $GITHUB_REF - name: Get version id: get_version - if: startsWith(github.ref, 'refs/tags/') && startsWith(github.repository, 'RockChinQ/QChatGPT') + if: startsWith(env.GITHUB_REF, 'refs/tags/') && startsWith(github.repository, 'RockChinQ/QChatGPT') run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//} - - name: Build and publish image - uses: ilteoood/docker_buildx@master - if: startsWith(github.ref, 'refs/tags/') && startsWith(github.repository, 'RockChinQ/QChatGPT') - with: - publish: true - imageName: mikumifa/qchatgpt-docker # dockerid/imageName - platform: linux/386,linux/arm64,linux/amd64,linux/arm/v6,linux/arm/v7 # 你准备构建的镜像平台 - tag: latest,${{ steps.get_version.outputs.VERSION }} - dockerUser: ${{ secrets.DOCKER_USERNAME }} # docker hub userid 在setting创建secrets name=DOCKER_USERNAME value=dockerid - dockerPassword: ${{ secrets.DOCKER_PASSWORD }} # docker hub password,在setting创建secrets name=DOCKER_PASSWORD value=dockerpassword + - name: Build # image name: rockchin/qchatgpt: + run: docker build --network=host -t rockchin/qchatgpt:${{ steps.get_version.outputs.VERSION }} -t rockchin/qchatgpt:latest . + - name: Login to Registry + run: docker login --username=${{ secrets.DOCKER_USERNAME }} --password ${{ secrets.DOCKER_PASSWORD }} + + - name: Push image + if: startsWith(env.GITHUB_REF, 'refs/tags/') && startsWith(github.repository, 'RockChinQ/QChatGPT') + run: docker push rockchin/qchatgpt:${{ steps.get_version.outputs.VERSION }} + + - name: Push image + if: startsWith(env.GITHUB_REF, 'refs/tags/') && startsWith(github.repository, 'RockChinQ/QChatGPT') + run: docker push rockchin/qchatgpt:latest From a2fc726372ee62c98f75f14f40c8a7670190a5d7 Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Tue, 12 Sep 2023 12:50:49 +0000 Subject: [PATCH 5/9] =?UTF-8?q?deploy:=20=E6=B7=BB=E5=8A=A0docker-compose.?= =?UTF-8?q?yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - docker-compose.yaml | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 docker-compose.yaml diff --git a/.gitignore b/.gitignore index 4dda62f3..7fd66d8c 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,5 @@ test_* venv/ hugchat.json qcapi -/*.yaml claude.json bard.json \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 00000000..f2dc6887 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,18 @@ +version: "3" + +services: + qchatgpt: + image: rockchin/qchatgpt:latest + volumes: + - ./config.py:/QChatGPT/config.py + - ./banlist.py:/QChatGPT/banlist.py + - ./cmdpriv.json:/QChatGPT/cmdpriv.json + - ./sensitive.json:/QChatGPT/sensitive.json + - ./tips.py:/QChatGPT/tips.py + # 目录映射 + - ./plugins:/QChatGPT/plugins + - ./scenario:/QChatGPT/scenario + - ./temp:/QChatGPT/temp + - ./logs:/QChatGPT/logs + restart: always + # 根据具体环境配置网络 \ No newline at end of file From 6575359a94c4c2a6993a211e9f745ae8c2b51ece Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Tue, 12 Sep 2023 12:51:06 +0000 Subject: [PATCH 6/9] =?UTF-8?q?doc:=20=E6=B7=BB=E5=8A=A0docker=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E6=8C=87=E5=8D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- res/docs/docker_deployment.md | 64 +++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 res/docs/docker_deployment.md diff --git a/res/docs/docker_deployment.md b/res/docs/docker_deployment.md new file mode 100644 index 00000000..dfde2910 --- /dev/null +++ b/res/docs/docker_deployment.md @@ -0,0 +1,64 @@ +# QChatGPT 容器化部署指南 + +> **Warning** +> 请您确保您**确实**需要 Docker 部署,您**必须**具有以下能力: +> - 了解 `Docker` 和 `Docker Compose` 的使用 +> - 了解容器间网络通信配置方式 +> - 了解容器文件挂载机制 +> - 了解容器调试操作 +> - 动手能力强、资料查找能力强 +> +> 若您不完全具有以上能力,请勿使用 Docker 部署,由于误操作导致的配置不正确,我们将不会解答您的问题并不负任何责任。 +> **非常不建议**您在除 Linux 之外的系统上使用 Docker 进行部署。 + +## 概览 + +QChatGPT 主程序需要连接`QQ登录框架`以与QQ通信,您可以选择 [Mirai](https://github.com/mamoe/mirai)(还需要配置mirai-api-http,请查看此仓库README中手动部署部分) 或 [go-cqhttp](https://github.com/Mrs4s/go-cqhttp),我们仅发布 QChatGPT主程序 的镜像,您需要自行配置QQ登录框架(可以参考[README.md](https://github.com/RockChinQ/QChatGPT#-%E9%85%8D%E7%BD%AEqq%E7%99%BB%E5%BD%95%E6%A1%86%E6%9E%B6)中的教程,或自行寻找其镜像)并在 QChatGPT 的配置文件中设置连接地址。 + +> **Note** +> 请先确保 Docker 和 Docker Compose 已安装 + +## 准备文件 + +> QChatGPT 目前暂不可以在没有配置模板文件的情况下自动生成文件,您需要按照以下步骤手动创建需要挂载的文件。 +> 如无特殊说明,模板文件均在此仓库中。 + +> 如果您不想挨个创建,也可以直接clone本仓库到本地,执行`python main.py`后即可自动根据模板生成所需文件。 + +现在请在一个空目录创建以下文件或目录: + +### 📄`config.py` + +复制根目录的`config-template.py`所有内容,创建`config.py`并根据其中注释进行修改。 + +### 📄`banlist.py` + +复制`res/templates/banlist-template.py`所有内容,创建`banlist.py`,这是黑名单配置文件,根据需要修改。 + +### 📄`cmdpriv.json` + +复制`res/templates/cmdpriv-template.json`所有内容,创建`cmdpriv.json`,这是各命令的权限配置文件,根据需要修改。 + +### 📄`sensitive.json` + +复制`res/templates/sensitive-template.json`所有内容,创建`sensitive.json`,这是敏感词配置,根据需要修改。 + +### 📄`tips.py` + +复制`tips-custom-template.py`所有内容,创建`tips.py`,这是部分提示语的配置,根据需要修改。 + +## 运行 + +已预先准备好`docker-compose.yaml`,您需要根据您的网络配置进行适当修改,使容器内的 QChatGPT 程序可以正常与 Mirai 或 go-cqhttp 通信。 + +将`docker-compose.yaml`复制到本目录,根据网络环境进行配置,并执行: + +```bash +docker compose up +``` + +若无报错即配置完成,您可以Ctrl+C关闭后使用`docker compose up -d`将其置于后台运行 + +## 注意 + +- 安装的插件都会保存在`plugins`(映射到本目录`plugins`),安装插件时可能会自动安装相应的依赖,此时若`重新创建`容器,已安装的插件将被加载,但所需的增量依赖并未安装,会导致引入问题。您可以删除插件目录后重启,再次安装插件,以便程序可以自动安装插件所需依赖。 \ No newline at end of file From 99d47b2fa2371b0170dd2a6e368f6792c73c61b7 Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Tue, 12 Sep 2023 12:53:03 +0000 Subject: [PATCH 7/9] =?UTF-8?q?doc:=20=E4=BF=AE=E6=94=B9Docker=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E6=8C=87=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +-- res/docs/docker_deploy.md | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1830ed0f..8dc21d18 100644 --- a/README.md +++ b/README.md @@ -225,8 +225,7 @@ > docker方式目前仅支持使用mirai登录,若您不**熟悉**docker的操作及相关知识,强烈建议您使用其他方式部署,我们**不会且难以**解决您主机上多个容器的连接问题。 -请查看[此文档](res/docs/docker_deploy.md) -由[@mikumifa](https://github.com/mikumifa)贡献 +请查看[此文档](res/docs/docker_deployment.md) #### 安装器方式 diff --git a/res/docs/docker_deploy.md b/res/docs/docker_deploy.md index 0e21a71a..0885e1ca 100644 --- a/res/docs/docker_deploy.md +++ b/res/docs/docker_deploy.md @@ -1,4 +1,6 @@ +> **Warning** +> 此文档已过时,请查看[QChatGPT 容器化部署指南](docker_deployment.md) ## 操作步骤 From 9040b37a632bf2ca5e316be10e7995cfa1e7a53b Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Tue, 12 Sep 2023 12:53:16 +0000 Subject: [PATCH 8/9] =?UTF-8?q?chore:=20=E9=BB=98=E8=AE=A4=E5=AE=89?= =?UTF-8?q?=E8=A3=85PyYaml=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ae01b6b0..dd5e24f3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,4 +9,5 @@ func_timeout~=4.3.5 Pillow nakuru-project-idk CallingGPT -tiktoken \ No newline at end of file +tiktoken +PyYaml \ No newline at end of file From 884481a4ecd5adea62695e855f5b50309caaec2e Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Tue, 12 Sep 2023 13:04:18 +0000 Subject: [PATCH 9/9] =?UTF-8?q?doc(README.md):=20=E9=95=9C=E5=83=8F?= =?UTF-8?q?=E5=BE=BD=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8dc21d18..f826a766 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,9 @@ [English](README_en.md) | 简体中文 [![GitHub release (latest by date)](https://img.shields.io/github/v/release/RockChinQ/QChatGPT)](https://github.com/RockChinQ/QChatGPT/releases/latest) + + docker pull + ![Wakapi Count](https://wakapi.dev/api/badge/RockChinQ/interval:any/project:QChatGPT) python