OS X 上安装 GitLab 全程指南

本贴最后更新于 3097 天前,其中的信息可能已经渤澥桑田

其实想要安装一个GitLab(开源代码版本控制程序,基于Git)服务并没有那么容易,特别是在MAC系统上,一个月前,我在机器上安装了一个,程序能够启动,但是代码始终不能提交,我参考的是这篇文章,后来放弃;直到上周末,为了去除心头这块阴影,把安装过的痕迹清除过后,准备重新来过,终于,整个过程同样的错误百出,但是最终以成功结束,代码成功提交,速度很快。

我把GitLab服务作为系统内部的一个服务,开机后即可使用,这样,一些私有项目就可以用它来进行管理,而且还可以管理其他的内容,比如一些开发时工具的常用配置项,或者作为个人学习知识的进度控制平台等等,任你发挥。下面将安装过程完整记录下来,希望对你有用。

下面这张图是首次登录GitLab后的截图:

gitlab

安装环境

OS: OS X 10.9.4 (非server)
Ruby:  2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13] (系统自带)
Rails: 4.1.1
Git: 1.8.5.2 (Apple Git-48)
Redis: 2.8.3
Mysql: Ver 14.14 Distrib 5.6.19, for osx10.7 (x86_64) using  EditLine wrapper
GitLab: 7.1.1

安装过程

假定你使用MAC系统时已经安装了相关的命令行管理工具,包括Homebrew,Xcode,如果没有请参考互联网。 

  • git用户

在使用gitlab服务的时候,其实是通过系统的git用户的SSH连接,向服务端提交代码的,所有的git客户端都是通过服务器端的git用户,所以我们要先在本地建立一个git账号,并且让他加入git组,同时还要将其加入到sudo用户中去,这样在使用该账号登录使用过程中就可以进行一些sudo操作。

首先使用非git账户登录系统,在该账号下我们建立git用户账号,可以通过【系统偏好设置】--->【用户和群组】进行,但是其中不能建立组,所以我们可以通过命令行。

建立用户组git,并且设定唯一组编号1050

sudo dscl . -create /Groups/git
sudo dscl . -create /Groups/git PrimaryGroupID 1050

然后将git用户加入该组

sudo dscl . -create /Users/git PrimaryGroupID 1050

加入一行文本 git ALL=(ALL) ALL 即可

git用户建立好后,其主目录在/Users/git/下,下面的相关应用都会安装在这个目录下。(下面所有操作,建议全部在git账号登录OS X系统的情况下进行,这是一个强烈建议)

  • 依赖的软件

将需要的一些软件库都安装好,通过Homebrew可以一键搞定,Git和Redis也一起安装,如下:

brew install icu4c git logrotate redis libxml2 cmake

确定本机python的版本的是2.5+,不要使用3.x

python --version

做一个软链接,让Gitlab能够找到python2这个命令,这是个狗屁逻辑

sudo ln -s /usr/bin/python /usr/bin/python2

安装python的一些库

sudo easy_install pip 
sudo pip install pygments
curl -O http://heanet.dl.sourceforge.net/project/docutils/docutils/0.11/docutils-0.11.tar.gz
gunzip -c docutils-0.11.tar.gz | tar xopf -
cd docutils-0.11
sudo python setup.py install
  • Mysql

mysql的安装你可以通过源码或者brew进行或者dmg文件安装都可以,安装完毕后设为随系统启动,然后设置一下数据库。

mysql -u root -pPASSWORD_HERE
CREATE USER 'git'@'localhost' IDENTIFIED BY 'PASSWORD_HERE';
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'git'@'localhost';

下面测试下是否可以连接上mysql数据库

mysql -ugit -pPASSWORD_HERE -D gitlabhq_production
  • Ruby

使用系统自带的ruby即可,OS X默认安装的ruby是2.0.0版本,已经可以满足条件。

  • GitLab Shell

是一个支持客户端SSH访问git仓库的应用,通过它可以执行git命令,官网在这里

cd /Users/git
git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell
git checkout v1.9.7
cp config.yml.example config.yml

配置gitlab-shell,替换域名为你的域名,这里统一使用本机地址localhost(这里的sed命令,在mac上可能需要使用gsed,如果你已经安装了的话)

sed -i "" "s/localhost/domain.com/" config.yml

在替换linux系统下的主目录home为max系统下的Users,同时要修改redis-cli客户端程序的路径

sed -i "" "s/\/home\//\/Users\//g" config.yml
sed -i "" "s/\/usr\/bin\/redis-cli/\/usr\/local\/bin\/redis-cli/" config.yml

开始安装gitlab-shell

./bin/install
  • GitLab

主程序,开源,官网地址在这里,我们选择的版本是当前的稳定版7.1.1。

cd /Users/git 
git clone https://github.com/gitlabhq/gitlabhq.git  gitlab 
cd gitlab
git checkout 7-1-stable

配置gitlab

cp config/gitlab.yml.example config/gitlab.yml
sed -i "" "s/\/usr\/bin\/git/\/usr\/local\/bin\/git/g" config/gitlab.yml
sed -i "" "s/\/home/\/Users/g" config/gitlab.yml
sed -i "" "s/localhost/domain.com/g" config/gitlab.yml

设置当前目录下log/和tmp/目录的可读写属性(sudo设置终于派上用处了)

sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX  log/
sudo chmod -R u+rwX  tmp/

创建仓库目录repositories,这个目录就是用来存放你的工程代码的地方,同时确定该目录可以被gitlab读写

mkdir /Users/git/repositories
sudo chmod -R u+rwX  /Users/git/repositories/

创建gitlab-satellites目录,也是用于存放工程代码相关的地方

mkdir /Users/git/gitlab-satellites

创建存放进程号和socket连接的目录

mkdir tmp/pids/
mkdir tmp/sockets/
sudo chmod -R u+rwX  tmp/pids/
sudo chmod -R u+rwX  tmp/sockets/

创建公共文件上传目录,可以先检查下,如果已经存在就不用在建立了

mkdir public/uploads
sudo chmod -R u+rwX  public/uploads

再将仓库目录的归属重新设置一次,放入git组中

sudo chown -R git:git /Users/git/repositories/
sudo chmod -R ug+rwX,o-rwx /Users/git/repositories/
sudo chmod -R ug-s /Users/git/repositories/
sudo find /Users/git/repositories/ -type d -print0 | sudo xargs -0 chmod g+s

下面需要对unicorn的配置文件进行修改,主要还是修改home目录为max下的Users目录 (unicorn是rails应用的web容器,类似于webrick)

cp config/unicorn.rb.example config/unicorn.rb
sudo -u git sed -i "" "s/\/home/\/Users/g" config/unicorn.rb

把下面这行注释掉,在config/unicorn.rb文件中

listen "/Users/git/gitlab/tmp/sockets/gitlab.socket", :backlog => 64

设置rack_attack中间件,这个东西是用于保护你的web应用,防止一些攻击请求

cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb

设置logrotate配置文件,用于整理你的web应用的log日志的

sudo mkdir /etc/logrotate.d/
sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
sudo sed -i "" "s/\/home/\/Users/g" /etc/logrotate.d/gitlab

设置git的全局变量,用户名和邮箱设置你自己常用的即可

git config --global user.name "GitLab"
git config --global user.email "gitlab@domain.com"

设置连接mysql数据库的配置

cp config/database.yml.mysql config/database.yml
sed -i "" "s/secure password/PASSWORD_HERE/g" config/database.yml
  • 安装Gem包

gitlab配置好后,如果整个ruby没有gem包,gitlab也没有办法跑起来。rails3.0版本后使用bundle进行管理gem,不在是原来的所有gem都安装在系统目录中(/Library/Ruby/Gems/2.0.0/gems),而是通过bundle,依赖配置文件进行安装,安装后的目录是在工程目录下,不会在污染系统目录,但是首先我们需要使用传统方式来安装bundler这个gem包。

sudo gem install bundler

你可以用gem list查看下是否以及安装好bundler。不要使用rvm来管理你的ruby版本,因为在gitlab启动时,可能无法识别rvm中的那个版本ruby。另外,需要将bundle所依赖的配置文件Gemfile和Gemfile.lock中的underscore-rails版本修改为1.5.2。下面开始安装。

sudo bundle install --deployment --without development test postgres aws

如果一切ok,那么恭喜你了,这一步很重要。安装gem包过程可能由于网络原因失败,那么可以修改下Gemfile文件的第一行gem文件的地址为国内的淘宝镜像https://ruby.taobao.org/。如果发生了nokogiri相关的安装错误,请参考这里

  • 数据库初始化(需要先将redis服务启动,端口默认6379,不要修改)
bundle exec rake gitlab:setup RAILS_ENV=production

执行成功后,会提示出现gitlab系统登录的默认用户名和密码。

login………root 
password......5iveL!fe 
  • 预编译assets
bundle exec rake assets:precompile RAILS_ENV=production
  • 启动gitlab

通过以上漫长的操作后,如果没有倒下的话,说明你成功在望了,下面就可以启动gitlab应用了,为了方便,我们将gitlab的启动和一些后台服务设置为系统服务项,自动启动。上文中有提过unicorn这个web服务器的,启动它就可以启动gitlab服务了。

sudo curl --output /Library/LaunchDaemons/gitlab.web.plist https://raw.githubusercontent.com/CiTroNaK/Installation-guide-for-GitLab-on-OS-X/master/gitlab.web.plist 
sudo launchctl load /Library/LaunchDaemons/gitlab.web.plist 
sudo curl --output /Library/LaunchDaemons/gitlab.background_jobs.plist https://raw.githubusercontent.com/CiTroNaK/Installation-guide-for-GitLab-on-OS-X/master/gitlab.background_jobs.plist 
sudo launchctl load /Library/LaunchDaemons/gitlab.background_jobs.plist

以上命令成功执行后,如果没有问题,那么你的gitlab应用就已经可以访问了,打开浏览器输入http://localhost:8080,按下回车,你的爱机给了你一个如下提示(后台输出的错误):

app error: Missing `secret_key_base` for 'production’ environment 

这是Rails4.1的新功能导致的,解决方案如下:

cd /Users/git/gitlab
cp vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/generators/rails/app/templates/config/secrets.yml     config/ 

拷贝secret_token.rb文件中已经存在的secret_key到该文件下,看看这里的建议:

you can simply copy the existing secret_key_base from the secret_token.rb initializer to secrets.yml under the production section, replacing '<%= ENV["SECRET_KEY_BASE"] %>'

然后在该secrets.yml文件中,将development和test模式下的secret_key_base置为空即可。再次通过浏览器访问,用root用户登录,一切OK!

  • 最后的检查

你以为你已经安装好了,其实,其实未必,我们使用命令给gitlab-shell做个全面的体检

cd /Users/git/gitlab-shell/
./bin/check

控制台提示如下:

Check GitLab API access: 
Network is unreachable - connect(2) (Errno::ENETUNREACH)   

解决方案是,有三个配置文件的ip地址端口要保持一致。

/Users/git/gitlab/config/unicorn.rb:配置ruby提供的服务端口,ip     //40行
/Users/git/gitlab/config/gitlab.yml:配置gitlab服务的端口,ip            //18行
/Users/git/gitlab-shell/config.yml:配置gitlab-shell要调用的API接口  //5行

再次检查,成功提示如下图:

gitlabcheck

最后对gitlab应用做个彻底检查。

bundle exec rake gitlab:check RAILS_ENV=production

会给出一些关于脚本的错误提示信息,忽略掉,因为我们修改了home目录为Users目录。至此,GitLab安装完毕。 

 

附录:SSH登录相关

  • 所有gitlab用户都是通过同一个git用户进行ssh登陆gitlab服务器的,不同的只是各自的ssh key不同而已,进行区分,gitlab应用的注册用户和ssh登陆gitlab服务器的git用户,完全是2个不同的用户
  • gitlab中的用户ssh key的内容其实是你本机上面的对应的公钥内容,这样的话,你用git用户通过ssh登录gitlab服务器时,就会拿ssh key和你本机上的对应的私钥进行匹配,以区分用户,成功的话就可以进行git相关操作了,另外,本机上的ssh登录时设置的域名要对应上服务器设置的localhost
  • 不能在一台机器上面同时存在2个用户登陆同一个gitlab服务,没有办法区分他们ssh的密钥文件,并且不好区分gitlab服务器地址
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 1 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    166 引用 • 595 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 30 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖
  • OneDrive
    2 引用 • 3 关注
  • Excel
    31 引用 • 28 回帖
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 407 回帖 • 485 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 753 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 1 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    170 引用 • 513 回帖
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 2 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 2 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 207 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖 • 1 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 2 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 177 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 437 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 30 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • 印象笔记
    3 引用 • 16 回帖
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 600 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    179 引用 • 996 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 72 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 780 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖