From 60d6fb2525122673f266df1c8db4afaee8b5d4b6 Mon Sep 17 00:00:00 2001 From: engigu Date: Fri, 6 Feb 2026 21:37:35 +0800 Subject: [PATCH] feat: add more image tag --- .github/workflows/build-base.yml | 55 ++++++++++++++++--- .github/workflows/deploy.yml | 9 +-- .github/workflows/docker-amd64.yml | 1 + .github/workflows/docker-arm64.yml | 1 + .github/workflows/release.yml | 1 + .gitignore | 1 + .stignore | 3 + Makefile | 6 +- Dockerfile => docker/Dockerfile | 2 +- docker/Dockerfile.alpine.base | 24 ++++++++ Dockerfile.base => docker/Dockerfile.base | 0 docker/Dockerfile.debian13.base | 15 +++++ .../docker-compose.ghcr.yml | 0 .../docker-compose.yml | 0 .../docker-entrypoint.sh | 0 15 files changed, 102 insertions(+), 16 deletions(-) create mode 100644 .stignore rename Dockerfile => docker/Dockerfile (99%) create mode 100644 docker/Dockerfile.alpine.base rename Dockerfile.base => docker/Dockerfile.base (100%) create mode 100644 docker/Dockerfile.debian13.base rename docker-compose.ghcr.yml => docker/docker-compose.ghcr.yml (100%) rename docker-compose.yml => docker/docker-compose.yml (100%) rename docker-entrypoint.sh => docker/docker-entrypoint.sh (100%) diff --git a/.github/workflows/build-base.yml b/.github/workflows/build-base.yml index fa98005..24c63d0 100644 --- a/.github/workflows/build-base.yml +++ b/.github/workflows/build-base.yml @@ -6,7 +6,7 @@ on: branches: - main paths: - - 'Dockerfile.base' + - 'docker/Dockerfile.base' env: REGISTRY: ghcr.io @@ -17,10 +17,39 @@ jobs: runs-on: ubuntu-latest strategy: matrix: + base_type: [debian, alpine, debian13] platform: - linux/amd64 - linux/arm64 - - linux/arm/v7 + include: + - base_type: debian + platform: linux/arm/v7 + dockerfile: docker/Dockerfile.base + tag_suffix: "" + - base_type: debian + platform: linux/amd64 + dockerfile: docker/Dockerfile.base + tag_suffix: "" + - base_type: debian + platform: linux/arm64 + dockerfile: docker/Dockerfile.base + tag_suffix: "" + - base_type: alpine + platform: linux/amd64 + dockerfile: docker/Dockerfile.alpine.base + tag_suffix: "-alpine" + - base_type: alpine + platform: linux/arm64 + dockerfile: docker/Dockerfile.alpine.base + tag_suffix: "-alpine" + - base_type: debian13 + platform: linux/amd64 + dockerfile: docker/Dockerfile.debian13.base + tag_suffix: "-debian13" + - base_type: debian13 + platform: linux/arm64 + dockerfile: docker/Dockerfile.debian13.base + tag_suffix: "-debian13" permissions: contents: read @@ -34,7 +63,7 @@ jobs: id: platform run: | platform=${{ matrix.platform }} - echo "pair=${platform//\//-}" >> $GITHUB_OUTPUT + echo "pair=${platform//\//-}-${{ matrix.base_type }}" >> $GITHUB_OUTPUT - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -56,14 +85,14 @@ jobs: images: | ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }} tags: | - type=raw,value=base + type=raw,value=base${{ matrix.tag_suffix }} - name: Build and push by digest id: build uses: docker/build-push-action@v6 with: context: . - file: ./Dockerfile.base + file: ${{ matrix.dockerfile }} platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} outputs: type=image,name=${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true @@ -88,6 +117,16 @@ jobs: merge: runs-on: ubuntu-latest needs: build + strategy: + matrix: + base_type: [debian, alpine, debian13] + include: + - base_type: debian + tag: base + - base_type: alpine + tag: base-alpine + - base_type: debian13 + tag: base-debian13 permissions: contents: read @@ -101,7 +140,7 @@ jobs: uses: actions/download-artifact@v4 with: path: /tmp/digests - pattern: digests-* + pattern: digests-*-${{ matrix.base_type }} merge-multiple: true - name: Set up Docker Buildx @@ -121,7 +160,7 @@ jobs: images: | ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }} tags: | - type=raw,value=base + type=raw,value=${{ matrix.tag }} - name: Create manifest list and push working-directory: /tmp/digests @@ -131,4 +170,4 @@ jobs: - name: Inspect image run: | - docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:base + docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:${{ matrix.tag }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 03d33f0..9eda06e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -51,6 +51,7 @@ jobs: uses: docker/build-push-action@v6 with: context: . + file: ./docker/Dockerfile platforms: linux/amd64 push: true tags: ${{ steps.meta.outputs.tags }} @@ -71,8 +72,8 @@ jobs: port: ${{ secrets.DEPLOY_PORT }} script: | cd ${{ secrets.DEPLOY_PATH }} - docker-compose pull - docker-compose up -d + docker-compose -f docker/docker-compose.yml pull + docker-compose -f docker/docker-compose.yml up -d - name: Deploy to X server uses: appleboy/ssh-action@v1.2.0 @@ -83,5 +84,5 @@ jobs: port: ${{ secrets.DEPLOY_PORT }} script: | cd ${{ secrets.DEPLOY_X_PATH }} - docker-compose pull - docker-compose up -d \ No newline at end of file + docker-compose -f docker/docker-compose.yml pull + docker-compose -f docker/docker-compose.yml up -d \ No newline at end of file diff --git a/.github/workflows/docker-amd64.yml b/.github/workflows/docker-amd64.yml index 551210a..5d4a30d 100644 --- a/.github/workflows/docker-amd64.yml +++ b/.github/workflows/docker-amd64.yml @@ -50,6 +50,7 @@ jobs: uses: docker/build-push-action@v6 with: context: . + file: ./docker/Dockerfile platforms: linux/amd64 push: true tags: ${{ steps.meta.outputs.tags }} diff --git a/.github/workflows/docker-arm64.yml b/.github/workflows/docker-arm64.yml index 967ae83..084fe99 100644 --- a/.github/workflows/docker-arm64.yml +++ b/.github/workflows/docker-arm64.yml @@ -53,6 +53,7 @@ jobs: uses: docker/build-push-action@v6 with: context: . + file: ./docker/Dockerfile platforms: linux/arm64 push: true tags: ${{ steps.meta.outputs.tags }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6cbfacd..4ce69d4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -62,6 +62,7 @@ jobs: uses: docker/build-push-action@v6 with: context: . + file: ./docker/Dockerfile platforms: ${{ matrix.platform }} build-args: | VERSION=${{ github.ref_name }} diff --git a/.gitignore b/.gitignore index 8f6ede5..7688636 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ configs/config.local.json __pycache__/ # Misc +.stfolder \ No newline at end of file diff --git a/.stignore b/.stignore new file mode 100644 index 0000000..4e8e3b7 --- /dev/null +++ b/.stignore @@ -0,0 +1,3 @@ +.git/ +web/node_modules +web/dist \ No newline at end of file diff --git a/Makefile b/Makefile index d7ee9d7..dbfa3d0 100644 --- a/Makefile +++ b/Makefile @@ -66,7 +66,7 @@ deps: # Docker build docker-build: - docker build -t $(BINARY) . + docker build -t $(BINARY) -f docker/Dockerfile . # Docker run docker-run: @@ -74,11 +74,11 @@ docker-run: # Docker compose up docker-up: - docker-compose up -d + docker-compose -f docker/docker-compose.yml up -d # Docker compose down docker-down: - docker-compose down + docker-compose -f docker/docker-compose.yml down # Help help: diff --git a/Dockerfile b/docker/Dockerfile similarity index 99% rename from Dockerfile rename to docker/Dockerfile index c6d41ef..c29a99d 100644 --- a/Dockerfile +++ b/docker/Dockerfile @@ -130,7 +130,7 @@ COPY --from=frontend-builder /app/web/dist ./internal/static/dist # Copy configs and entrypoint COPY --from=backend-builder /app/configs ./configs -COPY docker-entrypoint.sh . +COPY docker/docker-entrypoint.sh . # Copy sync.py to /opt COPY custom/sync.py /opt/sync.py diff --git a/docker/Dockerfile.alpine.base b/docker/Dockerfile.alpine.base new file mode 100644 index 0000000..7fb9a8c --- /dev/null +++ b/docker/Dockerfile.alpine.base @@ -0,0 +1,24 @@ +FROM alpine:3.19 + +ENV TZ=Asia/Shanghai +ENV PATH="/app/envs/node/bin:/app/envs/python/bin:$PATH" +ENV NODE_PATH="/app/envs/node/lib/node_modules" + +# 安装必要系统工具 + Node + Python +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \ + && apk add --no-cache \ + tzdata \ + git \ + gcc \ + musl-dev \ + curl \ + wget \ + vim \ + nodejs \ + npm \ + python3 \ + py3-pip \ + htop \ + && cp /usr/share/zoneinfo/${TZ} /etc/localtime \ + && echo "${TZ}" > /etc/timezone \ + && rm -rf /var/cache/apk/* diff --git a/Dockerfile.base b/docker/Dockerfile.base similarity index 100% rename from Dockerfile.base rename to docker/Dockerfile.base diff --git a/docker/Dockerfile.debian13.base b/docker/Dockerfile.debian13.base new file mode 100644 index 0000000..d37c4a1 --- /dev/null +++ b/docker/Dockerfile.debian13.base @@ -0,0 +1,15 @@ +FROM debian:trixie-slim + +ENV TZ=Asia/Shanghai +ENV PATH="/app/envs/node/bin:/app/envs/python/bin:$PATH" +ENV NODE_PATH="/app/envs/node/lib/node_modules" + +# 安装必要系统工具 + Node + Python +RUN sed -i 's@deb.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \ + && sed -i 's@security.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \ + && echo "${TZ}" > /etc/timezone \ + && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + tzdata git gcc curl wget vim nodejs htop npm python3 python3-venv python3-pip \ + && rm -rf /var/lib/apt/lists/* diff --git a/docker-compose.ghcr.yml b/docker/docker-compose.ghcr.yml similarity index 100% rename from docker-compose.ghcr.yml rename to docker/docker-compose.ghcr.yml diff --git a/docker-compose.yml b/docker/docker-compose.yml similarity index 100% rename from docker-compose.yml rename to docker/docker-compose.yml diff --git a/docker-entrypoint.sh b/docker/docker-entrypoint.sh similarity index 100% rename from docker-entrypoint.sh rename to docker/docker-entrypoint.sh