diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 527e502..0c44e0f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,9 +11,12 @@ on: jobs: build: runs-on: ubuntu-latest + strategy: + matrix: + goos: [linux] + goarch: [amd64, arm64] env: - OUTPUT_BINARY: ghproxy - OUTPUT_ARCHIVE: ghproxy.tar.gz + OUTPUT_BINARY: go GO_VERSION: 1.23.2 steps: @@ -31,35 +34,33 @@ jobs: go-version: ${{ env.GO_VERSION }} - name: Build run: | - CGO_ENABLED=0 go build -o ${{ env.OUTPUT_BINARY }} ./main.go + CGO_ENABLED=0 go build -o ${{ env.OUTPUT_BINARY }}-${{matrix.goos}}-${{matrix.goarch}} ./main.go - name: Package run: | - tar -czvf ${{ env.OUTPUT_ARCHIVE }} ./${{ env.OUTPUT_BINARY }} + tar -czvf ${{ env.OUTPUT_BINARY }}-${{matrix.goos}}-${{matrix.goarch}}.tar.gz ./${{ env.OUTPUT_BINARY }}-${{matrix.goos}}-${{matrix.goarch}} - name: Upload to GitHub Artifacts uses: actions/upload-artifact@v3 with: name: ${{ env.OUTPUT_BINARY }} path: | - ./${{ env.OUTPUT_ARCHIVE }} - ./${{ env.OUTPUT_BINARY }} + ./${{ env.OUTPUT_BINARY }}* - name: 上传至Release id: create_release uses: ncipollo/release-action@v1 with: name: ${{ env.VERSION }} - artifacts: ./${{ env.OUTPUT_ARCHIVE }}, ./${{ env.OUTPUT_BINARY }} + artifacts: ./${{ env.OUTPUT_BINARY }}* token: ${{ secrets.GITHUB_TOKEN }} tag: ${{ env.VERSION }} allowUpdates: true env: export PATH: $PATH:/usr/local/go/bin - docker: runs-on: ubuntu-latest needs: build # 确保这个作业在 build 作业完成后运行 env: IMAGE_NAME: wjqserver/ghproxy # 定义镜像名称变量 - DOCKERFILE: docker/dockerfile/release/Dockerfile + DOCKERFILE: docker/dockerfile/release/Dockerfile # 定义 Dockerfile 路径变量 steps: - name: Checkout @@ -70,7 +71,7 @@ jobs: echo "VERSION=$(cat VERSION)" >> $GITHUB_ENV else echo "VERSION file not found!" && exit 1 - fi + fi - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -85,10 +86,10 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: 构建镜像 - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: file: ./${{ env.DOCKERFILE }} - platforms: linux/amd64 + platforms: linux/amd64,linux/arm64 push: true tags: | ${{ env.IMAGE_NAME }}:${{ env.VERSION }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c2c16c..9900383 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,18 @@ # 更新日志 +v1.4.2 +--- +- CHANGE: 优化代码结构,提升性能 +- CHANGE: 初步引入ARM64架构支持 +- CHANGE: 对Docker镜像构建进行优化,大幅减少镜像体积,从v1.4.0的`111 MB`,到v1.4.1的`58 MB`,再到v1.4.2的`28 MB` +- CHANGE: 切换至wjqserver/caddy:2.9.0-rc-alpine作为基础镜像 + 24w13b --- - PRE-RELEASE: 此版本是v1.4.2的预发布版本,请勿在生产环境中使用 - CHANGE: 优化代码结构,提升性能 - CHANGE: 初步引入ARM64支持,但仍处于测试阶段 -- CHANGE: 对Dockerfile进行优化,减少镜像体积 +- CHANGE: 对Dockerfile进行优化,大幅减少镜像体积 24w13a --- @@ -16,7 +23,7 @@ v1.4.1 --- - CHANGE: 优化代码结构,提升性能 -- CHANGE: 引入Alpine Linux作为基础镜像,减少Docker镜像体积 +- CHANGE: 引入Alpine Linux作为基础镜像,大幅减少Docker镜像体积 - FIX: 修正部分参数错误 - CHANGE: CGO_ENABLED=0 diff --git a/docker/dockerfile/release/Dockerfile b/docker/dockerfile/release/Dockerfile index 6f7d5a0..5247449 100644 --- a/docker/dockerfile/release/Dockerfile +++ b/docker/dockerfile/release/Dockerfile @@ -1,21 +1,47 @@ -FROM wjqserver/caddy:alpine +FROM wjqserver/caddy:2.9.0-rc-alpine AS builder ARG USER=WJQSERVER-STUDIO ARG REPO=ghproxy ARG APPLICATION=ghproxy +ARG TARGETOS +ARG TARGETARCH +ARG TARGETPLATFORM +# 创建文件夹 RUN mkdir -p /data/www RUN mkdir -p /data/${APPLICATION}/config RUN mkdir -p /data/${APPLICATION}/log + +# 安装依赖 +RUN apk add --no-cache curl wget + +# 前端 RUN wget -O /data/www/index.html https://raw.githubusercontent.com/${USER}/${REPO}/main/pages/index.html RUN wget -O /data/www/favicon.ico https://raw.githubusercontent.com/${USER}/${REPO}/main/pages/favicon.ico -RUN wget -O /data/caddy/Caddyfile https://raw.githubusercontent.com/${USER}/${REPO}/main/caddyfile/release/Caddyfile + +# 后端 RUN VERSION=$(curl -s https://raw.githubusercontent.com/${USER}/${REPO}/main/VERSION) && \ - wget -O /data/${APPLICATION}/${APPLICATION} https://github.com/${USER}/${REPO}/releases/download/$VERSION/${APPLICATION} + wget -O /data/${APPLICATION}/${APPLICATION} https://github.com/${USER}/${REPO}/releases/download/$VERSION/${APPLICATION}-${TARGETOS}-${TARGETARCH} +RUN wget -O /usr/local/bin/init.sh https://raw.githubusercontent.com/${USER}/${REPO}/main/docker/dockerfile/release/init.sh + +# 拉取配置 +RUN wget -O /data/caddy/Caddyfile https://raw.githubusercontent.com/${USER}/${REPO}/main/caddyfile/release/Caddyfile RUN wget -O /data/${APPLICATION}/config.yaml https://raw.githubusercontent.com/${USER}/${REPO}/main/config/config.yaml RUN wget -O /data/${APPLICATION}/blacklist.json https://raw.githubusercontent.com/${USER}/${REPO}/main/config/blacklist.json RUN wget -O /data/${APPLICATION}/whitelist.json https://raw.githubusercontent.com/${USER}/${REPO}/main/config/whitelist.json -RUN wget -O /usr/local/bin/init.sh https://raw.githubusercontent.com/${USER}/${REPO}/main/docker/dockerfile/release/init.sh + +# 权限 +RUN chmod +x /data/${APPLICATION}/${APPLICATION} +RUN chmod +x /usr/local/bin/init.sh + +FROM wjqserver/caddy:2.9.0-rc-alpine + +COPY --from=builder /data/www /data/www +COPY --from=builder /data/caddy /data/caddy +COPY --from=builder /data/${APPLICATION} /data/${APPLICATION} +COPY --from=builder /usr/local/bin/init.sh /usr/local/bin/init.sh + +# 权限 RUN chmod +x /data/${APPLICATION}/${APPLICATION} RUN chmod +x /usr/local/bin/init.sh