32位系统ubuntu下安装gitlab

一、前言

    gitolite是用公钥的方式对版本仓库进行用户权限管理,和gitosis类似。权限管理可以具体细化到仓库的特定分支上。

    gitlab则是用ruby语言写的,基于rails框架(ruby的一种MVC三层架构)的web应用,并且以gitolite为基础的,很自然的理解,gitlab就成了图形化界面的用户权限控制系统。M层可以用mysql或者sqllite。V层前台可以用nginx,apache做代理,此文章用gitolite+gitlab+mysql+nginx。

    giolite,gitlab本身也是用git管理的,我们可以用git clone的方式很方便的获取gitolite,gitlab的代码并安装。

    初学者可能会觉得gitlab里的权限管理和验证方式很奇怪。可能把gitlab装好了,都不知道这里面的工作机制,至少我是这样的,经过好几天的折腾才把gitlab装好,我觉得之所以弄得这么纠结就是因为没有理解这里面的权限控制方式。我是在安装gitolite用错了密钥,gitlab本来就是基于密钥认证的,密钥都错了,gitlab肯定不会正常工作。

    gitlab搭好后,我们会发现在gitlab里用图形化方式创建的仓库的访问地址都是git@host:repository的形式。如(git clone git@localhost:testing.git)。为什么只有一个git帐号呢?因为gitolite是基于密钥访问的。打个比方:给帐号名是bob的用户授权只读testing仓库权限。

    1.bob在自己电脑(也可以和git在同一电脑)上运行ssh-keygen。一路按确定键。会在bob的家目录下/home/bob生成.ssh文件夹。里面有两个密钥id_rsa(私钥),id_rsa.pub(公钥)。

    2.bob把公钥交给git仓库管理员,也就是gitolite的属主git用户。git用户将其放在/home/git/.gitolite/keydir下
并编辑/home/git/.gitolite/conf/gitolite.conf添加

repo testing
      R=bob

    然后bob就有了对testing仓库的克隆权限,但不能推送。

    以上步骤最好是用gitlab帐号用git clone git@host:gitolite-admin的方式下载,gitolite-admin下会有conf/gitolite.conf.keydir修改然后push,会自动对/home/git/.gitolite/keydir和/home/git/.gitolite/conf/gitolite.conf进行应用。经过反复尝试发现gitlab删除仓库和删除绑定的密钥会是一种假象。

   在/home/git/repositories里还会有删除的仓库。/home/.gitolite/keydir也还有删除了的密钥。对于仓库好像是不影响使用,对于密钥,你删除了再次添加会提示已添加。还必须通过上面这种方式手动删除keydir不再使用的公钥才能在gitlab里添加。

二、安装依赖

    gitlab的依赖很多,而且不同linux发行版不一样,像ubuntu和opensuse的就不一样。opensuse64位系统下安装还会有个bug,估计是因为64位系统的原因,文章最后有解决方案。git,mysql,ssh,redis-server是比较重要的信赖,而且是需要手动启动的。如果布署好了却运行不了请检查这几个服务。

sudo apt-get install -y wget curl gcc checkinstall libxml2-dev \
libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline6-dev \
libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev libicu-dev \
redis-server openssh-server git-core python-dev python-pip libyaml-dev postfix \
mysql-server mysql-client libmysqlclient-dev

三、安装gitolite

    不要偷懒不建git,gitlab帐号,权限部分很重要,因为gitlab工作的方式就是基于公钥认证的。中间有些部分要是没用sudo -u 切换到合适的用户就可能导致gitlab运行异常!
或者除非你所有的操作都是用root或者某一个帐号操作的,这样不会有歧义而且省心,不过没那么安全,实际生产环境应该不会有人冒这个险。

useradd -m  git
su git
cd
git clone -b gl-v304 https://github.com/gitlabhq/gitolite.git /home/git/gitolite
mkdir bin
echo -e "PATH=\$PATH:/home/git/bin\nexport PATH" >> /home/git/.profile
gitolite/install -ln /home/git/bin
sudo useradd -m gitlab
sudo -u gitlab ssh-keygen
sudo cp /home/gitlab/.ssh/id_rsa.pub ~/gitlab.pub
sudo chmod 444 ~/gitlab.pub
PATH=/home/git/bin:$PATH
gitolite setup -pk /home/git/gitlab.pub

    上面这个命令小心:是用gitlab帐号进行安装,只有这样gitlab帐号才是仓库的超级管理员,才能完成gitlab和gitolite的对接。

sed -i 's/0077/0002/g' /home/git/.gitolite.rc

    注意这里要把others的unmask改成2,也就是r-x,官网上的是---,这样的话会导致在gitlab里浏览不了仓库的文件。

chmod -R g+rwX /home/git/repositories/
chown -R git:git /home/git/repositories/
sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin

    上面这一步是测试切换至gitlab帐号用git帐号进行克隆。看gitlab的公钥是不是成功的绑定在了git帐号上。注意这里访问仓库已经是用git用户了!如果没成功,先把这一步解决,不然下面的功夫都是白费。    成功就用下面这条命令把克隆的仓库删掉。这可是admin仓库,对用户权限进行管理的。

sudo -u rm -rf /tmp/gitolite-admin

四、配置mysql

mysql安装后默认空密码,提示输入密码直接按enter键

sudo mysql -u root -p
mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password';
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';

五、安装giltab

sudo gem install charlock_holmes --version '0.6.8'
sudo pip install pygments
sudo gem install bundler
su gitlab
cd
git clone -b stable https://github.com/gitlabhq/gitlabhq.git gitlab
cd gitlab
cp config/gitlab.yml.example config/gitlab.yml
cp config/database.yml.example config/database.yml 

   编辑config/database.yml修改mysql访问的帐号密码为上面配置的。

bundle install --without development test --deployment
bundle exec rake gitlab:app:setup RAILS_ENV=production
cp lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
chown git:git /home/git/.gitolite/hooks/common/post-receive
bundle exec rake gitlab:app:status RAILS_ENV=production

    上面这条命令检查gitlab的安装是正确。

    正确的话可以用下面这条命令启动独立gitlab,不是通过代理的。

bundle exec rails s -e production

    帐号:[email protected] 

   密码:5iveL!fe

   但是还没完,我们还要做nginx代理。

cp config/unicorn.rb.example config/unicorn.rb
bundle exec unicorn_rails -c config/unicorn.rb -E production -D

    上面这条语句运行gitlab后台处理服务

sudo apt-get install nginx
sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab -P /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
sudo vim /etc/nginx/sites-enabled/gitlab

    修改监听端口和servername

    在用下面的命令将gitlab后台服务设置成自启动

sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab -P /etc/init.d/sudo
 chmod +x /etc/init.d/gitlab
sudo update-rc.d gitlab defaults 

   使用方法:

sudo server gitlab start
sudo server gitlab stop
sudo server gitlab restart

六、开始使用gitlab

1.创建一个用于开发的帐号

sudo useradd -m devel
su devel
cd
ssh-keygen
cat .ssh/id_rsa.pub 

   将显示出来的结果(公钥)记下来

2.绑定公钥    用默认的gitlab管理员帐号登录

    帐号:[email protected] 

   密码:5iveL!fe

    鼠标移动到右上角的图标->点击profile->add ssh keys    把上面显示的公钥复制进来,保存。

3.创建工程

    点击+project按钮,输入工程名,提示创建成功,把访问的字符串记下来,如:git@loalhost:test.git

    此时还不能查看文件,也没有显示相应的界面(之前在这里纠结了很久)。要用devel帐号把仓库克隆下来,做些修改push,才可以看到files view。

    创建工程后切换成devel用户。使用如下的方式克隆,git clone后面的地址填上面记下的。

    初次commit需要设置email,username,如下,不然commit不成功

git config --global user.email '[email protected]'
git config --global user.name 'admin'
git clone git@localhost:test.gitecho 'test'>test
git add .
git commit -m 'test'
git push git@localhost:git master 

   这时你在占击gitlab上面test仓库的主页图标,就可以看到files view了。

七、我碰到的问题

1.ubuntu下ruby版本太低,把1.8,1.9.1,1.9.2全卸载了,下载最新版编译安装在/usr/local/ruby下居然还是说版本低.可能是没卸载干净,直接覆盖安装在/usr下通过。

wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz
tar ruby-1.9.3-p194.tar.gz
cd ruby-1.9.3-p194
./configure --prefix=/usr
make && make install

2.忘记了mysql用户、密码,用如下方法将mysql管理员root的密码重置为root123

sudo mysqld_safe --skip-grant-tables
mysql>update user set password=password("root123") where user="root" 

3.git clone@localhost:gitolite-admin失败,ssh服务未开启service ssh start

4.开机启动    使用如下方法检查服务是否为开机启动,如gitlabchkconfig  --list gitlab

    使用如下方法设置开机启动,如gitlab

sudo update-rc.d gitlab defaults

5.opensuse 64位的系统安装到bundle install时始终通不过。需要手动安装修改并本地安装charlock_holmes-0.6.8.gem

sudo gem fetch charlock_holmes --version="0.6.8"
sudo gem unpack charlock_holmes-0.6.8.gem
cd charlock_holmes-0.6.8
sudo vim ext/charlock_holmes/extconf.rb

    将

FileUtils.cp "#{CWD}/dst/lib/libmagic.a", "#{CWD}/libmagic_ext.a" 

   改成

FileUtils.cp "#{CWD}/dst/lib64/libmagic.a", "#{CWD}/libmagic_ext.a"

sudo bundle gem .  

  这一步一路选no

sudo gem build charlock_holmes.gemspec
sudo gem install charlock_holmes-0.6.8.gem 

参考官方WIKI:https://github.com/gitlabhq/gitlabhq/blob/stable/doc/installation.md


你可能感兴趣的:(运维)