diff --git a/.dockerignore b/.dockerignore index fac1bf99a..e1f125bd5 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,4 +4,6 @@ __pycache__ *.pyd .DS_Store mongodb -napcat \ No newline at end of file +napcat +docs/ +.github/ \ No newline at end of file diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index f9b5e6658..47fdf5b7f 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -12,18 +12,20 @@ on: - "*.*.*" - "*.*.*-*" +# Workflow's jobs jobs: build-amd64: name: Build AMD64 Image runs-on: ubuntu-latest - env: - DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USERNAME }} + outputs: + digest: ${{ steps.build.outputs.digest }} steps: - - name: Checkout code + - name: Check out git repository uses: actions/checkout@v4 with: fetch-depth: 0 + # Clone required dependencies - name: Clone maim_message run: git clone https://github.com/MaiM-with-u/maim_message maim_message @@ -35,106 +37,93 @@ jobs: with: buildkitd-flags: --debug - - name: Login to Docker Hub + # Log in docker hub + - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + # Generate metadata for Docker images - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: ${{ secrets.DOCKERHUB_USERNAME }}/maibot - tags: | - type=ref,event=branch - type=ref,event=tag - type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - type=sha - - name: Build and Push AMD64 Docker Image + # Build and push AMD64 image by digest + - name: Build and push AMD64 + id: build uses: docker/build-push-action@v5 with: context: . - file: ./Dockerfile platforms: linux/amd64 - tags: ${{ secrets.DOCKERHUB_USERNAME }}/maibot:amd64-${{ github.sha }} - push: true + labels: ${{ steps.meta.outputs.labels }} + file: ./Dockerfile cache-from: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/maibot:amd64-buildcache cache-to: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/maibot:amd64-buildcache,mode=max - labels: ${{ steps.meta.outputs.labels }} - provenance: true - sbom: true + outputs: type=image,name=${{ secrets.DOCKERHUB_USERNAME }}/maibot,push-by-digest=true,name-canonical=true,push=true build-args: | BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') VCS_REF=${{ github.sha }} - outputs: type=image,push=true build-arm64: name: Build ARM64 Image runs-on: ubuntu-latest - env: - DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USERNAME }} + outputs: + digest: ${{ steps.build.outputs.digest }} steps: - - name: Checkout code + - name: Check out git repository uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - + # Clone required dependencies - name: Clone maim_message run: git clone https://github.com/MaiM-with-u/maim_message maim_message - name: Clone lpmm run: git clone https://github.com/MaiM-with-u/MaiMBot-LPMM.git MaiMBot-LPMM + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm64 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: buildkitd-flags: --debug - - name: Login to Docker Hub + # Log in docker hub + - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + # Generate metadata for Docker images - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: ${{ secrets.DOCKERHUB_USERNAME }}/maibot - tags: | - type=ref,event=branch - type=ref,event=tag - type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - type=sha - - name: Build and Push ARM64 Docker Image + # Build and push ARM64 image by digest + - name: Build and push ARM64 + id: build uses: docker/build-push-action@v5 with: context: . + platforms: linux/arm64/v8 + labels: ${{ steps.meta.outputs.labels }} file: ./Dockerfile - platforms: linux/arm64 - tags: ${{ secrets.DOCKERHUB_USERNAME }}/maibot:arm64-${{ github.sha }} - push: true cache-from: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/maibot:arm64-buildcache cache-to: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/maibot:arm64-buildcache,mode=max - labels: ${{ steps.meta.outputs.labels }} - provenance: true - sbom: true + outputs: type=image,name=${{ secrets.DOCKERHUB_USERNAME }}/maibot,push-by-digest=true,name-canonical=true,push=true build-args: | BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') VCS_REF=${{ github.sha }} - outputs: type=image,push=true create-manifest: name: Create Multi-Arch Manifest @@ -143,12 +132,17 @@ jobs: - build-amd64 - build-arm64 steps: - - name: Login to Docker Hub + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # Log in docker hub + - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - + + # Generate metadata for Docker images - name: Docker meta id: meta uses: docker/metadata-action@v5 @@ -161,7 +155,7 @@ jobs: type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - type=sha + type=sha,prefix=${{ github.ref_name }}-,enable=${{ github.ref_type == 'branch' }} - name: Create and Push Manifest run: | @@ -169,6 +163,6 @@ jobs: for tag in $(echo "${{ steps.meta.outputs.tags }}" | tr '\n' ' '); do echo "Creating manifest for $tag" docker buildx imagetools create -t $tag \ - ${{ secrets.DOCKERHUB_USERNAME }}/maibot:amd64-${{ github.sha }} \ - ${{ secrets.DOCKERHUB_USERNAME }}/maibot:arm64-${{ github.sha }} + ${{ secrets.DOCKERHUB_USERNAME }}/maibot@${{ needs.build-amd64.outputs.digest }} \ + ${{ secrets.DOCKERHUB_USERNAME }}/maibot@${{ needs.build-arm64.outputs.digest }} done \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index b2ce0a31e..bcc8a57a8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,7 +17,6 @@ services: restart: always networks: - maim_bot - core: container_name: maim-bot-core #### prod #### @@ -40,7 +39,6 @@ services: restart: always networks: - maim_bot - napcat: environment: - NAPCAT_UID=1000 @@ -57,8 +55,8 @@ services: image: mlikiowa/napcat-docker:latest networks: - maim_bot - sqlite-web: + # 注意:coleifer/sqlite-web 镜像不支持arm64 image: coleifer/sqlite-web container_name: sqlite-web restart: always @@ -70,7 +68,19 @@ services: - SQLITE_DATABASE=MaiMBot/MaiBot.db # 你的数据库文件 networks: - maim_bot - + + # chat2db占用相对较高但是功能强大 + # 内存占用约600m,内存充足推荐选此 + # chat2db: + # image: chat2db/chat2db:latest + # container_name: maim-bot-chat2db + # restart: always + # ports: + # - "10824:10824" + # volumes: + # - ./data/MaiMBot:/data/MaiMBot + # networks: + # - maim_bot networks: maim_bot: driver: bridge