GhProxy介绍及部署教程,基于Go的Github加速项目

GHProxy 详细部署教程

项目简介

GhProxy 是一个基于 Go 语言的工具,旨在加速部分地区对 GitHub 仓库的访问。它支持速率限制和用户鉴权,并且可以通过 Docker 进行部署。GhProxy 使用 Gin 框架和 req 库构建,并采用 Caddy 作为 Web 服务器。

GitHub 项目地址

Demo

前端界面: ghproxy-demo-v1.5.0.png

项目特点

  • 前端界面: 加入前端界面,以便用户快速转换链接。同时在前端页面显示本站点的部分配置信息。
  • 外部配置文件: 支持外部配置文件,可以方便地进行配置修改。
  • 速率限制: 支持速率限制,限制每个 IP 的访问频率。在一定程度上避免滥用。
  • 黑白名单: 支持黑白名单,可以对特定GitHub仓库进行访问限制。
  • 高效实现:基于 Go 语言,使用 Gin 框架,通过req库请求,性能优化显著。
  • 多功能支持:支持 Git clone、raw、releases 等文件的拉取。
  • Docker 部署:支持通过 Docker 快速部署,简化安装过程。
  • 用户鉴权:支持用户鉴权功能,确保访问安全。在一定程度上避免滥用。
  • 标准化流程:基于 WJQSERVER-STUDIO 的golang-temp 模板构建,拥有标准化的日志记录和构建流程。

开发背景

本项目是 WJQSERVER-STUDIO/ghproxy-go 的重构版本,解决了之前版本中的一些问题,并新增若干新功能。项目的开发历程详见 Commit 记录及 CHANGELOG.md

使用示例

GhProxy 提供了简单的使用方式,可以通过以下格式进行文件拉取:

# 拉取 raw 文件
https://ghproxy.1888866.xyz/raw.githubusercontent.com/WJQSERVER-STUDIO/tools-stable/main/tools-stable-ghproxy.sh

# 克隆 Git 仓库
git clone https://ghproxy.1888866.xyz/github.com/WJQSERVER-STUDIO/ghproxy.git

部署教程

本项目支持 Docker 部署,可以快速部署并运行。也可自行下载release内的二进制文件自定义运行。

Docker 部署

若要使用 Docker 部署 GhProxy,请确保 Docker 环境已经安装并运行。若还未安装 Docker,可以使用以下脚本内的 主菜单 > Docker管理 > Docker一键安装&更新 以安装 Docker。

您也可以使用以下脚本部署 GhProxy, 请使用主菜单 -> 项目部署 -> GhProxy进行部署。注意,使用此脚本部署的GHProxy不会对外映射端口,请反代172.20.20.35:80,谢谢。

wget -O tools-stable.sh https://raw.githubusercontent.com/WJQSERVER-STUDIO/tools-stable/main/tools-stable.sh && chmod +x tools-stable.sh && clear && ./tools-stable.sh

使用 Docker CLI

在终端中运行以下命令即可启动 GhProxy:

docker run -d \
  --name ghproxy \
  --restart always \
  -v ./ghproxy/log/run:/data/ghproxy/log \
  -v ./ghproxy/log/caddy:/data/caddy/log \
  -v ./ghproxy/config:/data/ghproxy/config \
  -p 7210:80 \
  wjqserver/ghproxy:latest

使用 Docker Compose

可以参考项目中的 docker-compose.yml 文件,进行更复杂的部署配置。

在自定义目录创建docker-compose.yml文件后,执行docker compose up -d命令即可

二进制文件部署(不推荐)

若使用二进制文件部署,您会失去部分防滥用功能,如速率限制等。同时也会失去部分重要功能,如符合 RFC 7234 的HTTP缓存与支持Zstandard,Brotli,Gzip的压缩。

部署一键脚本:

wget -O install.sh https://raw.githubusercontent.com/WJQSERVER-STUDIO/ghproxy/main/deploy/install.sh && chmod +x install.sh &&./install.sh

配置文件

GhProxy 使用 config.toml 作为外部配置文件。默认配置如下:

[server]
host = "127.0.0.1" # 监听地址(小白请勿修改)
port = 8080 #监听端口(小白请勿修改)
sizelimit = 131072000 # 125MB

[log]
logfilepath = "/data/ghproxy/log/ghproxy.log"  # 日志文件路径(小白请勿修改)
maxlogsize = 5 # MB

[cors]
enabled = true # 是否开启CORS

[auth]
authtoken = "test"  # 鉴权Token
enabled = false  # 是否开启鉴权

[blacklist]
blacklistfile = "/data/ghproxy/config/blacklist.json" # 黑名单文件路径
enabled = false  # 是否开启黑名单

[whitelist]
enabled = false  # 是否开启白名单
whitelistfile = "/data/ghproxy/config/whitelist.json" # 白名单文件路径

注意:使用 Docker 部署时,非必要请勿修改serverlog部分的配置。

功能详解

黑白名单

GHProxy 支持黑白名单功能,可以对特定 GitHub 仓库进行访问限制。

需要提醒的是,黑白名单功能是不冲突的,程序内执行顺序为白名单检查 -> 黑名单检查 -> 正常处理。即使在白名单中也会被黑名单屏蔽。

黑名单

请将[blacklist]内的enabled设置为true开启黑名单功能。

黑名单文件 blacklist.json 格式如下:

{
  "blacklist": [
    "black/list",
    "test/test1",
    "example/*"
  ]
}

在此文件中,使用owner/repo格式指定需要屏蔽的仓库,owner/*表示屏蔽该用户下所有仓库,*是通配符,表示匹配所有仓库。

白名单

请将[whitelist]内的enabled设置为true开启白名单功能。

白名单文件 whitelist.json 格式如下:

{
  "whitelist": [
    "white/list",
    "white/test1",
    "example/*"
  ]
}

在此文件中,使用owner/repo格式指定需要放行的仓库,owner/*表示白名单该用户下所有仓库,*是通配符,表示匹配所有仓库。

用户鉴权

请将[auth]内的enabled设置为true开启用户鉴权功能。使用[auth]内的authtoken字段设置鉴权 Token。

GhProxy 支持简单用户鉴权,可对请求进行鉴权。

开启鉴权后,URL后需加上?auth_token=your_token参数,才能访问。

结语

我们感谢所有用户的支持与反馈,并期待 GhProxy 能为您的开发工作带来更大的便利和效率!若此项目对您有所帮助,请不要忘记 star 本项目 ,您的支持是我们前进的动力!

本文最初发表于 WJQSERVER的博客 ;WJQserver-Studio旗下所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载需注明出处!