结论:小皮面板本身不是 Git 服务器,它只提供 Nginx/Apache、PHP、MySQL 和计划任务这套运行环境;要搭本地 Git,需要装额外组件。想要 Web 界面、Issue、Pull Request 和团队权限,用「Gitea 单文件二进制 + 小皮反向代理」,一台 Windows 机器 30 分钟就能跑通;只在局域网内推拉代码、不需要网页界面,用 Apache + git-http-backend 或 OpenSSH 裸仓库更省资源。
小皮面板能直接当 Git 服务器用吗?
结论:不能。小皮面板的定位是 PHP 集成环境管理面板,负责建站、绑域名、管数据库、配 SSL、跑计划任务,它不包含 Git 服务端进程。
Git 服务端本质只有两类实现方式:一类是「裸仓库 + 传输协议」(SSH 的 git-receive-pack、HTTP 的 git-http-backend),一类是「带 Web 界面的 Git 平台」(Gitea、GitLab、Gogs)。小皮面板能帮上忙的是前者里的 HTTP 传输(借 Apache/Nginx),以及给后者提供一个域名和反向代理入口。
所以标题里的问题可以拆成两个具体问题:要不要网页管理界面。要,就走 Gitea;不要,就走裸仓库。
Gitea 怎么在小皮面板的机器上跑起来?
结论:Gitea 是 Go 写的单文件程序,不依赖 PHP、不依赖额外运行时,把它放在网站根目录之外,用命令行启动即可。
具体步骤(以 Windows 版小皮面板为例):
- 先起环境:打开小皮面板,启动 Nginx(或 Apache)和 MySQL。Gitea 支持 SQLite、MySQL、PostgreSQL 三种数据库,本地面板环境用 MySQL 5.7/8.0 最顺手。
- 建库:在面板「数据库」里新建库
gitea,字符集选 utf8mb4,记下用户名密码。
- 放程序:下载
gitea-1.22.x-windows-4.0-amd64.exe,重命名为 gitea.exe,放到 D:\gitea\。同目录手动建好 custom\conf\、data\、log\、repositories\ 四个目录。
- 先裸跑一次:命令行执行
D:\gitea\gitea.exe web,浏览器打开 http://127.0.0.1:3000,进入首次安装页。数据库填 127.0.0.1:3306、库名 gitea;「应用 URL」填你准备用的域名(如 http://git.local/);SSH 端口改成 2222(22 端口通常被系统或面板占用);最后创建管理员账号。
- 设成开机自启:
sc create gitea binPath= "D:\gitea\gitea.exe web --config D:\gitea\custom\conf\app.ini" start= auto,注意 binPath= 后面必须留一个空格。也可以用 nssm 把 gitea.exe web 注册成服务。
启动前先用 netstat -ano | findstr :3000 确认 3000 端口空闲,被占用就改 app.ini 里的 HTTP_PORT。
怎么把域名反代到 Gitea,用起来像正常网站?
结论:在小皮面板建一个网站绑定 git.local,再用 Nginx 反向代理把请求转给 3000 端口,用户就不用记端口号了。
在 C:\Windows\System32\drivers\etc\hosts 加一行 127.0.0.1 git.local,面板里建站点绑定该域名,然后把站点配置改成反向代理:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 512m;
}
两个容易翻车的点:
app.ini 里的 ROOT_URL 必须和访问地址一致,写成 http://git.local/。不一致的话,仓库首页显示的克隆地址会是 127.0.0.1:3000,同事复制过去直接报错。
- 数据目录绝对不能放在网站根目录下。小皮面板默认站点根是
D:\phpstudy_pro\WWW,把 repositories\ 放进去等于把所有人的代码和历史公开在浏览器里,还可能被 hooks 目录执行。程序统一放 D:\gitea\,站点根留空目录即可。
另外建议在 app.ini 里设 DISABLE_REGISTRATION = true,内网自用不需要开放注册。
不装 Gitea,纯 Git 裸仓库怎么搭?
结论:只是想 git push / git pull,一个裸仓库加一条 Apache 配置就够了,资源占用比 Gitea 小一个量级。
HTTP 方式(小皮面板切到 Apache 模式):
- 建裸仓库:
git init --bare D:\gitrepo\demo.git
- 在裸仓库里允许推送:
git config http.receivepack true
- 站点配置里追加:
SetEnv GIT_PROJECT_ROOT D:/gitrepo
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ "C:/Program Files/Git/mingw64/libexec/git-core/git-http-backend.exe/"
<Directory "C:/Program Files/Git/mingw64/libexec/git-core">
Require all granted
</Directory>
- 客户端克隆:
git clone http://git.local/git/demo.git
SSH 方式:Windows 设置 → 应用 → 可选功能里添加 OpenSSH 服务器,启动 sshd 服务,然后 git clone ssh://用户名@192.168.1.10/D:/gitrepo/demo.git。SSH 方式免去 Apache 配置,但每个使用者都要在服务器上开系统账号并配公钥,人一多就麻烦。
两种方案怎么选,有哪些必须注意的事项?
结论:单人自用或两人小团队走裸仓库,三人以上、需要代码评审和权限管理直接上 Gitea,别在裸仓库上折腾。
几个通用注意点:
- 备份只备两样:Gitea 是
data\(含 gitea.db 里的 SQLite 或 MySQL 导出)+ repositories\;裸仓库直接复制整个 gitrepo 目录。小皮面板的定时任务可以配每日压缩打包,比手抄靠谱。
- 大文件必调
client_max_body_size,默认 1M,上传超过 1M 的仓库包会直接 413。
- MySQL 连接串写
127.0.0.1 而不是 localhost,部分环境下 localhost 会走 socket 导致连不上。
- 面板和 Git 服务分开管:小皮面板负责域名、SSL、反代,Gitea 自己管账号和数据,升级 Gitea 时只替换
gitea.exe,不动面板。
小皮面板解决的是「环境一键起」,Git 服务解决的是「代码怎么存」,两者分工明确。搭建过程中卡在反向代理或者 Apache 的 ScriptAlias 上,可以去 GJ 站长论坛的「运维 ⚙️」或「后端开发」版块发帖,把报错日志和配置片段贴出来,一般比在通用搜索引擎里翻半小时更快;站点正式对外前记得顺手过一遍服务条款和隐私政策,自建 Git 服务里存的可都是自家代码。