From 45c537e3134b49be25a39f2886d657e2af323ae2 Mon Sep 17 00:00:00 2001 From: WJQSERVER Date: Wed, 25 Sep 2024 14:01:44 +0800 Subject: [PATCH] v1.0.0 --- .github/workflows/build-dev.yml | 2 +- .github/workflows/build.yml | 2 +- CHANGELOG.md | 116 ++++++++++++++++++++++++++++++++ DEV-VERSION | 2 +- README.md | 98 ++++++++++++++++++++++++++- VERSION | 2 +- caddyfile/dev/Caddyfile | 16 +++++ caddyfile/release/Caddyfile | 17 +++++ 8 files changed, 250 insertions(+), 5 deletions(-) create mode 100644 CHANGELOG.md diff --git a/.github/workflows/build-dev.yml b/.github/workflows/build-dev.yml index 7154038..403cb7b 100644 --- a/.github/workflows/build-dev.yml +++ b/.github/workflows/build-dev.yml @@ -59,7 +59,7 @@ jobs: runs-on: ubuntu-latest needs: build env: - IMAGE_NAME: wjqserver/ghproxy-test + IMAGE_NAME: wjqserver/ghproxy DOCKERFILE: docker/dockerfile/dev/Dockerfile steps: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b4572f8..390a560 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -58,7 +58,7 @@ jobs: runs-on: ubuntu-latest needs: build # 确保这个作业在 build 作业完成后运行 env: - IMAGE_NAME: wjqserver/ghproxy-test # 定义镜像名称变量 + IMAGE_NAME: wjqserver/ghproxy # 定义镜像名称变量 DOCKERFILE: docker/dockerfile/release/Dockerfile steps: diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..af75d71 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,116 @@ +# 更新日志 + +v1.0.0 +--- +- CHANGE: 项目正式发布, 并迁移至[WJQSERVER-STUDIO/ghproxy](https://github.com/WJQSERVER-STUDIO/ghproxy) +- CHANGE: 再次重构代码,优化性能,提升稳定性 +- CHANGE: 使用golang-temp项目作为底层构建,标准化日志与配置模块 +- CHANGE: 从原项目的Apache License Version 2.0迁移至WJQserver Studio License + +24w06a +--- +- CHANGE: 与v1.0.0版本同步 + +v0.2.0 +--- +底层核心代码重写,彻底代表着项目进入自主可控的开发阶段,彻底脱离原有实现 +- ADD: 增加多处日志记录,便于审计与排障 +- CHANGE: 优化代码结构,进一步模块化,同时提升性能 +- ADD: 使用req库重构代码,提升请求伪装能力,尽可能bypass反爬机制 + +24w05b +--- +- CHANGE: 重命名proxychrome函数 +- ADD: 增加多处日志记录,便于审计与排障 + +24w05a +--- +- FIX: 修正上一版本的req请求未继承请求方式的问题 +- CHANGE: 优化代码结构,进一步模块化,同时提升性能 + +24w04b +--- +- CHANGE: 更换Docker基础镜像为daily版本 +- ADD: 新增使用req库实现代理请求,使用chrome TLS指纹发起请求 + +24w04a +--- +- CHANGE: 调整程序结构,使用init函数初始化配置,并优化代码结构 + +v0.1.7 +--- +- CHANGE: 合入上游(wjqserver/caddy:latest)安全更新, 增强镜像安全性 + +24w03b +--- +- CHANGE: 合入上游(wjqserver/caddy:latest)安全更新, 增强镜像安全性 + +v0.1.6 +--- +- ADD: 新增跨域配置选项 +- CHANGE: 更新UA标识 + +24w03a +--- +- CHANGE: 改进Docker代理相关Caddy配置 +- ADD: 新增跨域配置选项 + +v0.1.5 +--- +- CHANGE: 更新Go版本至v1.23.1 +- CHANGE: 优化代码行为 + +24w02b +--- +- ADD: 新增Docker代理 (未并入正式版) + +24w02a +--- +- CHANGE: 更新Go版本至v1.23.1 +- CHANGE: 优化代码行为 + +v0.1.4 +--- +正式版24w01b内容更新 +- ADD: 新增外部文件配置功能 +- ADD: 新增日志功能 +- CHANGE: 优化代码结构,提升性能 +- CHANGE: 改进前端界面,加入页脚 + +24w01b +--- +标志着项目正式进入自主开发阶段 +- ADD: 新增外部文件配置功能 +- ADD: 新增日志功能 +- CHANGE: 优化代码结构,提升性能 +- CHANGE: 改进前端界面,加入页脚 + +v0.1.3 +--- +开始自行维护项目,脱离上游更新 +- CHANGE: 改进已有实现,增强程序稳定性 + +24w01a +--- +首个DEV版本 +- CHANGE: 同步更新 + +v0.1.2 +--- +- ADD: 新增项目介绍 +- CHANGE: 限制默认文件大小限制到256M + +v0.1.1 +--- +- ADD: Apache License Version 2.0 +- FIX: 改进部分代码逻辑 +- CHANGE: 将Go升级至v1.23.0 + +v0.1.0 +--- +项目的第一个版本 +- ADD: 实现速率限制 +- ADD: 实现符合[RFC 7234](https://httpwg.org/specs/rfc7234.html)的HTTP缓存机制 +- ADD: 实现action编译 +- ADD: 实现Docker部署 +- INFO: 使用Caddy作为Web服务器,通过Caddy实现了缓存与速率限制 diff --git a/DEV-VERSION b/DEV-VERSION index c853cd0..ffc5053 100644 --- a/DEV-VERSION +++ b/DEV-VERSION @@ -1 +1 @@ -24w01a \ No newline at end of file +24w06a \ No newline at end of file diff --git a/README.md b/README.md index fcff2c4..49c9d4b 100644 --- a/README.md +++ b/README.md @@ -1 +1,97 @@ -# golang-temp \ No newline at end of file +# GhProxy + +![pull](https://img.shields.io/docker/pulls/wjqserver/ghproxy.svg) +[![Go Report Card](https://goreportcard.com/badge/github.com/WJQSERVER-STUDIO/ghproxy)](https://goreportcard.com/report/github.com/WJQSERVER-STUDIO/ghproxy) + +使用Go实现的GHProxy,用于加速部分地区Github仓库的拉取,支持速率限制,用户鉴权,支持Docker部署 + +## 项目说明 + +### 项目特点 + +- 基于Go语言实现,使用[Gin框架](https://github.com/gin-gonic/gin)与[req库](https://github.com/imroc/req)] +- 支持Git clone,raw,realeases等文件拉取 +- 支持Docker部署 +- 支持速率限制 +- 支持用户鉴权 +- 使用Caddy作为Web Server +- 基于[WJQSERVER-STUDIO/golang-temp](https://github.com/WJQSERVER-STUDIO/golang-temp)模板构建,具有标准化的日志记录与构建流程 + +### 项目开发过程 + +**本项目是[WJQSERVER-STUDIO/ghproxy-go](https://github.com/WJQSERVER-STUDIO/ghproxy-go)的重构版本,实现了原项目原定功能的同时,进一步优化了性能** +本项目源于[WJQSERVER-STUDIO/ghproxy-go](https://github.com/WJQSERVER-STUDIO/ghproxy-go)与[WJQSERVER/ghproxy-go-0RTT](https://github.com/WJQSERVER/ghproxy-go-0RTT)两个项目,前者带来了实现框架与资源,后者带来了解决Git clone问题的办法,使得本项目从net/http标准库切换至Gin框架,已解决此困扰已久的问题,在此基础上,本项目进一步优化了性能,并添加了用户鉴权功能,使得部署更加安全可靠。 +关于此项目的详细开发过程,请参看Commit记录与[CHANGELOG.md](https://github.com/WJQSERVER-STUDIO/ghproxy/blob/main/CHANGELOG.md) + +- V1.0.0 迁移至本仓库,并再次重构内容实现 +- v0.2.0 重构项目实现,Git clone的实现完全自主化 + +### LICENSE + +本项目使用WSL LICENSE Version1.2 (WJQSERVER STUDIO LICENSE Version1.2) + +在v1.0.0版本之前,本项目继承于[WJQSERVER-STUDIO/ghproxy-go](https://github.com/WJQSERVER-STUDIO/ghproxy-go)的APACHE2.0 LICENSE VERSION + +## 使用示例 + +``` +https://ghproxy.1888866.xyz/raw.githubusercontent.com/WJQSERVER-STUDIO/tools-stable/main/tools-stable-ghproxy.sh + +git clone https://ghproxy.1888866.xyz/github.com/WJQSERVER-STUDIO/ghproxy.git +``` + +## 部署说明 + +### Docker部署 + +- Docker-cli + +``` +docker run -p 7210:80 -v ./ghproxy/log/run:/data/ghproxy/log -v ./ghproxy/log/caddy:/data/caddy/log --restart always wjqserver/ghproxy +``` + +- Docker-Compose + + 参看[docker-compose.yml](https://github.com/WJQSERVER-STUDIO/ghproxy/blob/main/docker/compose/docker-compose.yml) + +### 外部配置文件 + +本项目采用config.yaml作为外部配置,默认配置如下 +使用Docker部署时,慎重修改config.yaml,以免造成不必要的麻烦 + +``` +port: 8080 # 监听端口 +host: "127.0.0.1" # 监听地址 +sizelimit: 131072000 # 125MB +logfilepath: "/data/ghproxy/log/ghproxy-0rtt.log" # 日志文件路径 +CorsAllowOrigins: true # 是否允许跨域请求 +auth: true # 是否开启鉴权 +authtoken: "test" # 鉴权token +``` + +### Caddy反代配置 + +``` +example.com { + reverse_proxy { + to 127.0.0.1:7210 + header_up X-Real-IP {remote_host} + header_up X-Real-IP {http.request.header.CF-Connecting-IP} + header_up X-Forwarded-For {http.request.header.CF-Connecting-IP} + header_up X-Forwarded-Proto {http.request.header.CF-Visitor} + } + encode zstd gzip +} +``` + +## TODO & BETA + +### TODO + +- [x] 允许更多参数通过config结构传入 +- [x] 改进程序效率 +- [x] 用户鉴权 + +### BETA + +- [x] Docker Pull 代理 diff --git a/VERSION b/VERSION index 8a9ecc2..afaf360 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.1 \ No newline at end of file +1.0.0 \ No newline at end of file diff --git a/caddyfile/dev/Caddyfile b/caddyfile/dev/Caddyfile index fddd047..785df8f 100644 --- a/caddyfile/dev/Caddyfile +++ b/caddyfile/dev/Caddyfile @@ -94,6 +94,22 @@ file_server import cache 60s 24h } + handle_errors { + @redirects `{err.status_code} in [301, 302, 307]` + reverse_proxy @redirects { + header_up Location {http.response.header.Location} + } + } + + route /v2* { + reverse_proxy https://registry-1.docker.io { + header_up Host registry-1.docker.io + header_up X-Real-IP {remote} + header_up X-Forwarded-For {http.request.header.X-Forwarded-For} + header_up X-Forwarded-Proto {scheme} + header_up Authorization {http.request.header.Authorization} + } + } } import /data/caddy/config.d/* diff --git a/caddyfile/release/Caddyfile b/caddyfile/release/Caddyfile index fddd047..f2f104d 100644 --- a/caddyfile/release/Caddyfile +++ b/caddyfile/release/Caddyfile @@ -94,6 +94,23 @@ file_server import cache 60s 24h } + + handle_errors { + @redirects `{err.status_code} in [301, 302, 307]` + reverse_proxy @redirects { + header_up Location {http.response.header.Location} + } + } + + route /v2* { + reverse_proxy https://registry-1.docker.io { + header_up Host registry-1.docker.io + header_up X-Real-IP {remote} + header_up X-Forwarded-For {http.request.header.X-Forwarded-For} + header_up X-Forwarded-Proto {scheme} + header_up Authorization {http.request.header.Authorization} + } + } } import /data/caddy/config.d/*