使用cgit和gitolite搭建个人git服务器
posts/%E4%BD%BF%E7%94%A8cgit%E5%92%8Cgitolite%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8最近有打算使用私有 Git 服务器并且可提供以对外部公共访问的需求,本文将简单记录如何配置一个属于自己的私有 Git 服务器。
安装
创建 Git 用户
添加一个 Git 的专属用户:
$ sudo adduser --system --group --disabled-password --home /var/lib/git git
指定 Git 的 shell:
$ sudo chsh -s /bin/fish git:
切换到新建的 Git 用户并跳转至其家目录:
$ sudo su - git
构建 gitolite
其他具体细节可以查看 Gitolite README。
clone gitolite 的源码:
$ git clone https://github.com/sitaramc/gitolite
$ mkdir -p $HOME/bin
$ gitolite/install -to $HOME/bin
添加自己的公钥:
$ HOME/bin/gitolite setup -pk YourName.pub
构建 cgit
安装一些基本的构建需要的工具:
$ apt install build-essential
clone cgit 的源码:
$ git clone https://git.zx2c4.com/cgit
初始化 git 子模块并进行源码拉取:
$ git submodule init
$ git submodule update
如果网速过慢的话手动进行深度为 1 的 clone:
$ git clone https://git.kernel.org/pub/scm/git/git.git --depth 1
安装 fcgiwrap
$ sudo apt install fcgiwrap
将 www-data 添加至 git 组:
$ sudo usermod -aG git www-data
配置
nginx 配置
将下列 snippet 插入到 Nginx 配置中,其他细节可按需修改。
server {
server_name git.cyunrei.moe;
listen [::]:80;
listen 80;
access_log /var/log/nginx/cgit-access.log;
error_log /var/log/nginx/cgit-error.log;
root /var/www/html/cgit/cgi;
try_files $uri @cgit;
location @cgit {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/html/cgit/cgi/cgit.cgi;
fastcgi_pass unix:/run/fcgiwrap.socket;
fastcgi_param PATH_INFO $uri;
fastcgi_param QUERY_STRING $args;
fastcgi_param HTTP_HOST $server_name;
}
}
gitolite 配置
生成默认的配置文件,并修改 UMASK 权限:
$ bin/gitolite print-default-rc > .gitolite.rc
$ vim .gitolite.rc
找到 UMASK 将其改为 0027 ,这样就可以将新建的文件赋予组可读权限,方便 fastcgi 通过 www-data 组访问。
cgit 配置
编辑 cgit 的配置:
$ cd /var/www/html/cgit/
$ sudo vim cgitrc
下面是我个人的测试配置,有其他的需求可以到这个网站上查看。
# Page config
virtual-root=/
root-title=Cyunrei’s Git
root-desc=
footer=
# Ban robots index
robots=noindex, nofollow
# HTTPS clone
clone-prefix=https://git.cyunrei.moe
enable-http-clone=1
# Enable snapshots
snapshots=tar.gz zip
# Disable owner index
enable-index-owner=0
# Caching
cache-dynamic-ttl=60
cache-static-ttl=44640
cache-root-ttl=6
cache-repo-ttl=120
# README
readme=:README.md
readme=:readme.md
# Git projects
# scan-path=/var/lib/git/repositories
# project-list=/var/lib/git/projects.list
section=Miscellaneous
repo.url=testing.git
repo.desc=This repo is used for testing git clone :)
repo.path=/var/lib/git/repositories/testing.git
总结
使用 Cgit 和 gitolite 托管代码时大致流程如下。
浏览器浏览 cgit:
nginx -> fastcgi -> cgit [(www-data) read repo]
提交 git 请求:
git -> ssh -> gitotlite [(git) write repo]
参考链接
- Cgit, Nginx & Gitolite: A Personal Git Server « Bryan Brattlof
- sitaramc/gitolite: Hosting git repositories – Gitolite allows you to setup git hosting on a central server, with very fine-grained access control and many (many!) more powerful features.
- the “rc” file - Gitolite
- cgit - ArchWiki
- cgitrc(5): runtime config for cgit - Linux man page