使用 Gitolite 架设 Git Server,并安装 Gitweb
总共参考了大约四篇文章的教学,最后总算成功的搞定
1. Linux 架设使用 SSH 共享存取的 Git Server
2. Linux 使用 Gitolite 架设 Git Server
3. [Linux] 使用 Git + Gitolite + Gitweb 架设 Git Server @ Ubuntu 12.04
4. Install git/gitolite/gitweb on Ubuntu 14.04
底下就稍微纪录一下自己的操作步骤:
第一步,在 Linux 环境下架设共享存取的 Git Server
系统套件安装
- sudo -s (切换帐号为root)
- apt-get install git git-core
协同开发人员产生 SSH public key
- mkdir .ssh
- cd .ssh
- ssh-keygen
- cat ~/.ssh/id_rsa.pub or 上传到 Server /tmp/目录下统一保存
Git Server 的设定
- ssh 连线到 Server 上
- sudo -s (切换帐号为root)
- useradd -s /bin/bash -m -G sudo -d /home/git git (建立名为 git 的使用者,并给予 sudo 权限)
- su - git (切换到 git user,以下动作以 git 权限操作)
- 将开发人员的 public key 加入认证档
- cat /tmp/user1.pub >> ~/.ssh/authorized_keys
- cat /tmp/user2.pub >> ~/.ssh/authorized_keys
- 或是将上一步,每位开发人员 cat 到的 public key 自行增加到 ~/.ssh/authorized_keys 档案中
建立 Git Repository
- ssh 连线到 Server 上
- su git (切换到 git user,以下动作以 git 权限操作)
- mkdir -p ~/project_name.git
- cd ~/project_name.git
- git init --bare --shared
开发人员 clone 程式码
- git clone git@<网址 or IP>:/home/git/project_name.git
以上作法是最基本的以 git 帐号来建立 Git Server,优点是适合人少的专案,架设步骤简单快速;缺点是无法针对不同专案给予不同开发者存取权限,所以需要往下一步
第二步,使用 Gitolite 管理 Git Server
系统套件安装
- apt-get install gitolite
产生/收集 SSH Public Key
- ssh 连线到 Server 上
- su - git (切换到 git user,以下动作以 git 权限操作)
- cd .ssh (若没有该目录,请先自行建立)
- ssh-keygen -t rsa -f admin (产生名为 admin 的 public key)
- 请所有人将各自的 public key 放到 /tmp/ 下,并且已各自名称命名 (e.g. alex.pub, ben.pub, john.pub …)
- 请注意,这里有别于第一步是将开发人员的 public key 通通加入 authozied_keys 内,如果之后想改用 Gitolite 来控制,可以先把 authozied_keys 另行更名备份,避免与接下来安装步骤有抵触
Gitolite Server 架设
- ssh 连线到 Server 上
- su - git (切换到 git user,以下动作以 git 权限操作)
- gl-setup ~/.ssh/admin.pub (汇入管理者的 Public key)
- 这里是将 git 这个帐号当作 Gitolite 的管理者,所以后续管理 repository 主要也是透过 git 这个帐号来管理
.
├── .gitolite/
├── .gitolite.rc
├── repositories/
│ ├── gitolite-admin.git
│ └── testing.git
├── .ssh
├── .vim
└── .vimrc
这时 git 帐号的 $HOME(家目录)下,会产生
- .gitolite/ 目录
- repositories/ 目录
- .gitolite.rc 设定档
repositories/ 目录下,有两个专案
- gitolite-admin.git (用来管理所有专案的主要专案)
- testing.git (测试用专案)
建立专案
因为gitolite的专案管理,是透过在主专案(gitolite-admin.git)里,改写 config 档案来设定,所以需要以管理者帐号
(刚刚使用 git 帐号,因为产生的 admin.pub,被设定为 gitolite 管理者的认证)
- ssh 连线到 Server 上
- su - git (切换到 git user,以下动作以 git 权限操作)
- git clone git@localhost:gitolite-admin.git (抓主专案来修改设定)
- cd gitolite-admin/
- vim conf/gitolite.conf
范例:增加一个名为 ios_test 的专案,并设定 alex 为可存取的使用者,john 为可读,加入以下几行到 conf 档中
※ 这边需要先加入开发人缘,可以先参考下方教学来加入开发人缘
repo ios_test
RW = alex
R = john
|
- 修改完毕后,以一般 git 上 code 的流程处理
- git add .
- git commit -m "add ios_test project"
- git push
顺利的话,可以看到画面上出现类似下面,建立 project 的讯息
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 423 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: creating ios_test...
remote: Initialized empty Git repository in /home/git/repositories/ios_test.git/
remote:
To git@localhost:gitolite-admin.git
a37d282..62dffa9 master -> master
|
加入开发人员
在主专案中,加入开发人员的 public key 档
- ssh 连线到 Server 上
- su - git (切换到 git user)
- cd gitolite-admin/
- cp -r /tmp/*.pub keydir/ (将之前收集的pub档,复制到keydir目录下)
- git add -A
- git commit -m "add developers public key"
- git push
第三步,安装 Gitweb 并整合 Gitolite
系统套件安装
- sudo apt-get install gitweb apache2
- sudo usermod -a G git www-data (将 www-data 使用者加入git group)
Apache 2.4 与 Gitweb 设定
gitweb 安装后,产生的设定是 Apache 2.2 的设定写法,所以在2.4版需要做些修正
- 调整 gitweb 设定档位置
|
- 修正 gitweb conf 内容
- sudo vim /etc/apache2/conf-enabled/gitweb.conf
Alias /gitweb /usr/share/gitweb
<Directory /usr/share/gitweb>
Options +FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
</Directory>
|
- sudo a2enmod cgi (Apache 载入 cgi model)
- sudo service apache2 restart
修正 Gitweb conf
- sudo vim /etc/gitweb.conf , 修改下列黑字,增加蓝字
$projectroot = "/home/git/repositories";
# Syntax highlighting
$feature{'highlight'}{'default'} = [1];
# 提供系统 loadavg check,若系统繁忙,逛 gitweb 只会看到 503 - The load average on the server is too high 讯息
$masload = 500;
$projects_list = $projectroot; # unmark this line
|
修正 Gitolite 部分
- ssh 连线到 Server 上
- su - git (切换到 git user)
- vim .gitolite.rc
$REPO_UMASK = 0027; # change this value
$WEB_INTERFACE = "gitweb”; # unmark this line
$GL_GITCONFIG_KEYS = "gitweb.owner gitweb.description .*”; # change this value
|
建立专案设定档修改部分 gitolite-admin/conf/gitolite.conf
- 将所有专案加入 gitweb 与 daemon 两个帐户的读取权限,才能让 gitweb 读取到专案资料
- 原有的专案可以添加一些资讯,来透过 gitweb 显示出来
加入部分
repo @all
R = gitweb daemon
专案描述部份
repo testing
RW+ = @all
config gitweb.owner = "Project Owner Name"
config gitweb.description = "Project brief description"
config gitweb.url = git@<IP or 网址>:testing.git
|
- 检查 repositories 目录权限可被读取
- sudo service apache2 restart (重启 Apache)
- 连线到 http://IP or 网址/gitweb