起因是公司 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 | 1. mkdir /home/VPS/git-repo/project_name.git |
轻松几步即完成 Server 端搭建
Client 端使用
- 正常使用如
git clone VPS@(IP或example.com):/home/VPS/git-repo/project_name.git
- 若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
你需清楚的配置文件
/etc/gitweb.conf
GitWeb配置文件。其中Git仓库目录 默认是/var/lib/git/
可修改。/usr/share/gitweb
GitWeb运行目录,包含index.cgi
脚本/etc/nginx/sites-available/default
Nginx Web服务器默认站配置/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 | server { |
将在 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 | location / { |
再如上文重启或 reload Nginx。可以看到你私有带验证的GitWeb就搭建好了 XD
参考 [Debian Linux 架設使用 SSH 存取 的 Git Server][Set up Gitweb + Nginx ]