Linux架设GitServer、GitWeb

起因是公司 SVN 服务器老歇机,有些代码放GitHub 又不怎么合适,且近来 GitHub被墙的贼厉害。只需要简单几步即可搭建自己私有的 Git Server,并通过 Git Web 进行浏览查看。

环境: Debian 9 ,Nginx/1.10.3

搭建 Git Server

Git 可以通过 git://、http[s]://、ssh://、file:// 等方式实现跨仓库传输数据。相比较使用 http 需要设置 cgi ,而使用自带 git-daemon 没有安全验证,所有此处我们选择使用 ssh 传输的Git Server。

准备工作

因使用 ssh,那么在开始前你需要有产生好的 ssh key ,并在 Server/Client 放置好,不熟悉的话可参考:(当然你也可选择每次使用时输入密码。)

先声明一下内容:

  • Server : 服务器需公网IP或域名(IP 、example.com)
  • Linux:可登录用户及用户群组(VPS:VPS)
  • Project name : 项目名(Project_name)
  • Git-Repo-Dir:仓库目录(/home/VPS/git-repo)

    开始搭建

    Server 端
1
2
3
4
1. mkdir /home/VPS/git-repo/project_name.git
2. cd /home/VPS/git-repo/project_name.git
3. git init --bare
4. chown VPS:VPS -R /home/VPS/git-repo/project_name.git

轻松几步即完成 Server 端搭建

Client 端使用

  1. 正常使用如 git clone VPS@(IP或example.com):/home/VPS/git-repo/project_name.git
  2. Client 端已存在 project_name 的仓库,可通过 git remote add private VPS@(IP或example.com):/home/VPS/git-repo/project_name.git ,然后调用git push private 将本地仓库推送到远端空的同名库中。(需是同名且Server端库需为空库)

搭建GitWeb

其实单纯 Git Server就能满足对远端仓库的需求,搭建 GitWeb 只是提供 HTTP 接口服务方便浏览查看。步骤也很简单

本文是通过 Nginx 搭建,若想换成 Apache 可参考 Debian Linux 架设 Gitweb

准备工作

安装需要的软件:

apt-get install -t wheezy-backports nginx nginx-common git gitweb fcgiwrap

你需清楚的配置文档

  1. /etc/gitweb.conf GitWeb配置文档。其中Git仓库目录 默认是/var/lib/git/可修改。
  2. /usr/share/gitweb GitWeb运行目录,包含 index.cgi 脚本
  3. /etc/nginx/sites-available/default Nginx Web服务器默认站配置
  4. /var/run/fcgiwrap.socket Nginx与FastCGI通信Socket

在运行时如果遇到错误都可以参看 Nginx log 文档:/var/log/nginx/error.log and /var/log/nginx/access.log

配置 Nginx

创建新文档 /etc/nginx/sites-available/gitweb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 4321 default;
server_name example.com; # Server 域名
location /index.cgi {
root /usr/share/gitweb/;
include fastcgi_params;
gzip off;
fastcgi_param SCRIPT_NAME $uri;
fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
location / {
root /usr/share/gitweb/;
index index.cgi;
}
}

将在 site-enable 中创建配置文档软链接

ln -s /etc/nginx/sites-available/gitweb /etc/nginx/sites-enabled/gitweb

然后你可以先测试 Nginx 配置

sudo nginx -t 
#若显示成功,重启以加载设置,失败则回去检测;分号是否正确
sudo nginx -s reload
#或
sudo systemctl restart nginx

搭建好啦!在 http://example.com:4321/ 你将看到你的仓库,没有则为”No projects found”

验证

如果不希望谁都能在公网上看到自己的仓库,也可以通过简单几步加上一个验证。

安装apache2-utils

sudo apt-get install apache2-utils

/usr/share/gitweb/下创建用户密码文档

sudo htpasswd -c htpasswd Username
#Username 为用户名,之后按提示输入密码

完成后修改上面 Nginx 配置文档中第二个 location 部分为:

1
2
3
4
5
6
location / {
auth_basic "Git Login"; # 加上这两行
auth_basic_user_file "/usr/share/gitweb/htpasswd";# 文档
root /usr/share/gitweb/;
index index.cgi;
}

再如上文重启或 reload Nginx。可以看到你私有带验证的GitWeb就搭建好了 XD

参考 [Debian Linux 架设使用 SSH 存取 的 Git Server][Set up Gitweb + Nginx ]