GitWeb+Nginx搭建微型代码库
安装组件:
# 安装 nginx+扩展功能
sudo apt install nginx nginx-extras
# 安装 git/gitweb/fcgi
sudo apt install git gitweb fcgiwrap
默认创建
git用户, 所有功能基于git用户操作
创建项目信息和权限:
# 设置全局用户/邮箱
git config --global user.name 'MeteorCat'
git config --global user.email '[email protected]'
# 加入权限组, 把 nginx 默认组追加到 git
sudo usermod -a -G git www-data
# 创建代码仓库目录, 这里创建根目录
sudo mkdir /projects
sudo chown -R git:git /projects
# 部署配置, 用于测试
cd /projects
sudo -u git git init --bare mix-game.git
# 创建 http 设置支持
cd mix-game.git
sudo -u git git config --file config http.receivepack true
修改 GitWeb 配置内容:
# 安装之后会追加该配置文件
sudo vim /etc/gitweb.conf
# 内部内容基本上只需要单个配置
## path to git projects (<project>.git)
## $projectroot = "/projects";
启用 fcgiwrap, 让其启动并设置开机启动:
sudo systemctl restart fcgiwrap.service
sudo systemctl enable fcgiwrap.service
配置 Nginx 服务文件( /etc/nginx/conf.d/gitweb.conf ), 内容如下:
server {
listen 11111;
server_name _;
# 默认静态文件
location ~* ^.+\.(css|js|png|jpg|jpeg)$ {
root /usr/share/gitweb;
access_log off;
expires 24h;
}
# 挂起GitWeb服务
location / {
root /var/www;
fastcgi_param SCRIPT_FILENAME /usr/share/gitweb/gitweb.cgi;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
}
# 静态文件展示
location ~ ^.*\.git/objects/([0-9a-f]+/[0-9a-f]+|pack/pack-[0-9a-f]+.(pack|idx))$ {
root /projects;
}
# 转发 git-http-backend, 内部转发到 gitweb.cgi 对象
location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ {
# 代码仓库目录
root /projects;
# 引入默认 fastcgi 变量
include /etc/nginx/fastcgi_params;
# 通知调用 git-http-backend
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
# 如果不设置该参数, 则仅能访问明确标记为导出的git目录. 默认可以访问任何git目录
fastcgi_param GIT_HTTP_EXPORT_ALL "";
# 表示git仓库的地址, 这里直接设置 `root` 目录
fastcgi_param GIT_PROJECT_ROOT $document_root;
# 表示请求的用户
fastcgi_param REMOTE_USER $remote_user;
# 表示请求的git路径
fastcgi_param PATH_INFO $uri;
# 转发给管道通讯
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
}
之后访问局域网就能看到挂起的服务对象:
如果想拉取代码直接常规 clone 即可:
# 拉取代码, 这里没有设置安全加密提交代码也不需要账号密码, 公网切勿这样处理
git clone http://192.168.1.111:11111/mix-game.git