CentOS6.5 安装gitlab以及gitolite迁移gitlab
gitlab 的安装使用以及数据结构
安装
环境:
- CentOS6.5
- 基于 nignx + unicorn 搭建的应用环境, 如果想要换成passenger,可以参考网上的文档
- ruby环境是基于rbenv搭建的
1: install vim
yum install -y vim
2: install git > 1.7.10
- install git
$ rpm -i 'http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm'
$ rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt $ vim /etc/yum.repos.d/rpmforge.repo
# 将[rpmforge-extras] 下的enabled = 0 => enabled = 1 $ yum install -y git
$ git --version git version 1.7.12.4 $ yum clean all
reference: http://tecadmin.net/how-to-upgrade-git-version-1-7-10-on-centos-6/#
- git config
git config --global user.name 'jerry'
git config --global user.email 'jerrery520@gmail.com'
git config --global color.branch 'auto'
git config --global color.diff 'auto'
git config --global color.interactive 'auto'
git config --global color.interactive 'auto'
git config --global core.editor '/usr/bin/vim'
3: install dependent rpm
- first: replace yum repo
rpm -Uvh http://mirrors.sohu.com/fedora-epel/6/i386/epel-release-6-8.noarch.rpm
- second: install
yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml libyaml-devel libffi libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel git-core libxml libxml-devel libxslt libxslt-devel wget pcre-devel openssl openssl-devel tcl tcl-devel libaio-devel ntpdate libicu-devel
4: install rbenv && Ruby
- add users: git
adduser --comment 'GitLab' --create-home --home-dir /home/git git
- use rbenv-installer install rbenv
cd /home/git/ sudo -u git sh -c "curl https://raw.github.com/fesplugas/rbenv-installer/master/bin/rbenv-installer > rbenv-installer" su - git -c '/bin/bash rbenv-installer' sudo -u git -H echo '
export RBENV_ROOT="${HOME}/.rbenv" if [ -d "${RBENV_ROOT}" ]; then
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
fi
' >> /home/git/.bashrc
- install Ruby
su - git -c 'rbenv install 2.0.0-p353'
su - git -c 'rbenv global 2.0.0-p353'
- install bundler
su - git -c 'gem install bundler --no-ri --no-rdoc'
5: install gitlab
- install gitlab shell
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-shell.git cd gitlab-shell
sudo -u git -H cp config.yml.example config.yml
# 注:将下面的 your_git_domain替换成你的域名
sudo -u git -H sed -i 's/localhost/your_git_domain/g' config.yml
su - git -c '/home/git/gitlab-shell/bin/install'
- install mysql, redis, nginx
refer: http://blog.58share.com/?p=291
- install gitlab
cd /home/git
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 6-6-stable gitlab cd /home/git/gitlab sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml # Make sure to change "localhost" to the fully-qualified domain name of your
# If you installed Git from source, change the git bin_path to /usr/local/bin/git
# 这里修改host(域名), email_from: (邮件), support_email(邮件)
sudo -u git -H vim config/gitlab.yml chown -R git log/
chown -R git tmp/
chmod -R u+rwX log/
chmod -R u+rwX tmp/
sudo -u git -H mkdir /home/git/gitlab-satellites
sudo -u git -H mkdir tmp/pids/
sudo -u git -H mkdir tmp/sockets/
chmod -R u+rwX tmp/pids/
chmod -R u+rwX tmp/sockets/
sudo -u git -H mkdir public/uploads
chmod -R u+rwX public/uploads sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb # Ex. change amount of workers to 3 for 2GB RAM server
sudo -u git -H vim config/unicorn.rb sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "jerrery520@gmail.com"
sudo -u git -H git config --global core.autocrlf input # mysql
sudo -u git cp config/database.yml.mysql config/database.yml # 修改配置文件 config/database.yml
- install gem
su - git
cd /home/git/gitlab # NOTES: RAM must be > 512M if your mysql on bundle install --deployment --without development test postgres aws # 确认数据库配置正确
# 创建数据库
bundle exec rake db:create RAILS_ENV=production # 初始化gitlab数据 NOTES: need redis
bundle exec rake gitlab:setup RAILS_ENV=production
# 这里会执行清空数据库的操作,第一次请输入 yes # install script cp lib/support/init.d/gitlab /etc/init.d/gitlab
- start server
/etc/init.d/gitlab start
- check env
# 检测gitlab执行的环境
bundle exec rake gitlab:env:info RAILS_ENV=production # 检测gitlab所依赖的东西
bundle exec rake gitlab:check RAILS_ENV=production
- 编译静态文件配置nginx配置
# 编译静态文件
bundle exec rake assets:precompile RAILS_ENV=production # 配置nginx
# 注意: nginx的配置的用户为 git cp lib/support/nginx/gitlab /usr/local/nginx/conf/conf.d/gitlab.conf
- 绑定host
vim /etc/hosts 127.0.0.1 your_domain
- 部署成功
按照上面的部署:最终部署成功后: 访问域名 # that's all
# username: admin@local.host
# password: 5iveL!fe # 第一次进入后,需要重设密码,设置成功后部署成功
- 安装文档refer:
http://www.digitalsanctuary.com/tech-blog/general/installing-gitlab-on-redhat-enterprise-5-rhel-5.html
https://gitlab.com/gitlab-org/gitlab-ce/blob/6-6-stable/doc/install/installation.md
将gitolite迁移到gitlab步骤
1. 初始化mysql 配置
bundle exec rake gitlab:setup RAILS_ENV=production
初始化后:即可以登陆超级管理员账户:
username: admin@local.host
password: 5iveL!fe
2. 将现有的项目导入到gitlab中
bundle exec rake gitlab:import:repos RAILS_ENV=production
3. 获取root的api密钥token 并写如客户端配置并执行api相关操作
- 创建用户并塞入对应的 ssh-key, 新创建的用户无创建分组的权限。
- 获取已经创建的 分组, 并根据分组,将用户写入不同的分组中
- 将admin 管理员加入所有的分组中, 手动将对应的用户设置为管理员,并允许创建分组
- 有邮箱的用户操作,涉及到线上数据库的更新,线上测试机器的拉取,手动创建虚拟用户并添加对应的权限
线下机器是没有push权限的,设置为Reporter
- 合并人员需要设置为master 针对该项目
- 管理员账户,并修改他们对应的权限控制以及创建的项目数
4. 写脚本将所有通过api创建的用户的确认状态修改为已确认状态,并在项目下执行操作
$ vim lib/task/gitlab/user.rake
namespace :gitlab do
desc "Update all users'confirmed is true"
task :update_confirmed => :environment do.
User.find_each do |user|
user.confirmation_token = nil
user.confirmed_at = Time.now
user.save
end
end
end
执行操作
bundle exec rake gitlab:updateconfirmed RAILSENV=production
其他的相关配置
- 配置smtp 邮件服务
cd /home/git/gitlab
$ vim config/environments/production.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.smtp_settings = {
:address => 'smtp.exmail.qq.com',
:port => 465,
:domain => 'qq.com',
:user_name => 'email_address',
:password => 'password',
:authentication => :plain,
:enable_starttls_auto => true
}
- 配置ldap
cd /home/git/gitlab
$ vim config/gitlab.yml
ldap:
enabled: true
host: your_ldap_host
base: 'ou=Accounts,dc=domain,dc=com'
port: your_port
uid: 'uid'
method: 'plain' # "tls" or "ssl" or "plain"
bind_dn: 'cn=binder,dc=domain,dc=com'
password: 'your_password'
allow_username_or_email_login: true # 是否允许使用username或者email登陆,设置为false,登陆入口只会显示ldap入口
NOTES: 迁移项目遇到的坑
1. 通过接口获取用户数据,默认只能获取20条, 可以分页,每页最多100条数据
2. 通过接口获取项目,默认只能获取20条
3. 如果是迁移项目,若以前的git项目是有多层级接口,需要修正为一层,比如 java/abc/aaa.git => java/abc_aaa.git, 因为gitlab是不支持多层级结构的
4. 项目创建中有些带有关键字的项目是不能创建成功的,比如 java/admin.git , ruby/services.git
5. gitlab clone项目无论是ssh, http 都会调用http请求,通过http请求判断用户的权限等操作。而我们的http请求是做了ldap访问权限设置的,因此需要对将本机(gitlab服务器)的IP加入ldap的白名单中
相关命令参考
- 将现有的项目导入到gitlab中去
bundle exec rake gitlab:import:repos RAILS_ENV=production
* 添加所有的用户到所有的分组中(admin的角色是owner)
bundle exec rake gitlab:import:all_users_to_all_groups RAILS_ENV=production
* 添加所有的用户到所有的项目中(admin的角色是master)
bundle exec rake gitlab:import:all_users_to_all_projects RAILS_ENV=production
* 添加一个特殊的用户到所有的分组中(角色为developer)
bundle exec rake gitlab:import:user_to_groups[email] RAILS_ENV=production
* 添加一个特殊的用户到所有的项目中(角色为developer)
bundle exec rake gitlab:import:user_to_projects[email] RAILS_ENV=production
## gitlab 其他相关参考 #### API相关 如果gitlab中有你的公钥,你就可以通过authentication_token来调用api
curl --header "PRIVATE-TOKEN: ArTMXVSWjFEYn9DQrL7f" "http://git.tuan800-inc.com/api/v3/user/keys"
gitlab api gem
refere: https://github.com/NARKOZ/gitlab
问题: 这个gem包的接口是v2的,但是gitlab 现在稳定版的是 V3了,但是部分功能能用,有些接口中描述的功能是需要自己去写的
other helps
refer:http://mrk1869.com/blog/gitlab_installation/
git升级解决方案
How to Upgrade Git version >= 1.7.10 on CentOS 6
refer:http://tecadmin.net/how-to-upgrade-git-version-1-7-10-on-centos-6/#
git clone项目时报无环境变量
refer:http://thoughtpointers.net/2013/04/18/using-rbenv-with-gitlab-shell-on-os-x/
git push error
test [master] % ggpush
Counting objects: 3, done.
Writing objects: 100% (3/3), 229 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: GitLab: An unexpected error occurred (redis-cli returned 127).
remote: error: hook declined to update refs/heads/master
To git@git.58share.com:huhongda/test.git
! [remote rejected] master -> master (hook declined)
error: failed to push some refs to 'git@git.58share.com:huhongda/test.git'
解决: 修改 gitlab-shell/config/gitlab.yml 中的redis-cli 的路径为正确的路径
#### 检测gitlab运行环境是否正确 bundle exec rake gitlab:check RAILS_ENV=production #### errors All migrations up? ... rake aborted!
Cannot allocate memory - git log --pretty=format:'%h' -n 1
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.3/lib/active_support/core_ext/kernel/agnostics.rb:7:in ``'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.3/lib/active_support/core_ext/kernel/agnostics.rb:7:in ``'
/home/git/gitlab/config/initializers/2_app.rb:3:in `'
/home/git/gitlab/config/initializers/2_app.rb:1:in `'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:223:in `load'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:223:in `block in load'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:214:in `load_dependency'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:223:in `load'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/engine.rb:609:in `block (2 levels) in '
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/engine.rb:608:in `each'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/engine.rb:608:in `block in '
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/initializable.rb:30:in `instance_exec'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/initializable.rb:30:in `run'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/initializable.rb:55:in `block in run_initializers'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/initializable.rb:44:in `each'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/initializable.rb:44:in `tsort_each_child'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/initializable.rb:54:in `run_initializers'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/application.rb:215:in `initialize!'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
/home/git/gitlab/config/environment.rb:5:in `'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:229:in `require'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:229:in `block in require'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:214:in `load_dependency'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:229:in `require'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/application.rb:189:in `require_environment!'
/home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-4.0.3/lib/rails/application.rb:250:in `block in run_tasks_blocks'
Tasks: TOP => db:migrate:status => environment
(See full trace by running task with --trace)
解决: 是由于缺少内存导致的,如果用的是vps的话,用free -m 看看是否是内存太少,或者是没有使用swap内存,如果没有swap,需要加swap,一般是内存的1倍或者1.5倍
# 加swap mkdir -p /data/swapdir
cd /data/swapdir dd if=/dev/zero of=swapfile bs=1024 count=1024000 mkswap /data/swapdir/swapfile swapon swapfile # 开启swap swapoff swapfile # 关闭swap # 可以使用free -m 查看内存情况 # 加入开启重启 echo '/data/swapdir/swapfile swap swap defaults 0 0' >> /etc/fstab
Reference
http://mrk1869.com/blog/gitlab_installation/ http://www.digitalsanctuary.com/tech-blog/general/installing-gitlab-on-redhat-enterprise-5-rhel-5.html https://gitlab.com/gitlab-org/gitlab-ce/blob/6-6-stable/doc/install/installation.md http://git.58share.com/help/api/README
this is a project for gitlab api
https://github.com/NARKOZ/gitlab
https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/groups.md