其实想要安装一个
我把 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 用户建立好后,其主目录在
依赖的软件
将需要的一些软件库都安装好,通过 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 installMysql
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_productionRuby
使用系统自带的 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/installGitLab
主程序,开源,官网地址在
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把下面这行注释掉,在
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 "[email protected]"设置连接 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 文件的地址为国内的
数据库初始化 (需要先将 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 应用就已经可以访问了,打开浏览器输入
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 行