Gitlab完整搭建手册+排错
GitLab,是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
开源项目地址:https://github.com/gitlabhq/gitlabhq
1
2
3
4
5
6
7
8
# Distribution : CentOS 6.5 Minimal
# GitLab version : 7.4.5
# GitLab-shell : 2.0.1
# Ruby version : ruby 2.1.2p95 (2014-05-08 revision 45877)
# Gem version : 2.2.2
# Redis-server : Redis server version 2.4.10 (00000000:0)
# Web Server : Nginx/1.0.15
# Database : MySQL/5.5.40
一,安装源和依赖包
1
2
3
4
5
6
7
8
9
cd /usr/local/src
#增epel源,如果你是i686系统,请把x86_64修改下。
wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 https://www.fedoraproject.org/static/0608B895.txt
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
rpm -Uvh http://dl.fedoraproject.org%2Fpub%2Fepel%2F6%2Fx86_64%2Fepel-release-6-8.noarch.rpm
#确认是否安装成功
rpm -qa gpg*
gpg-pubkey-0608b895-4bd22942
二,安装依赖包
1
2
3
yum -y update
yum -y groupinstall 'Development Tools'
yum -y install readline readline-devel ncurses-devel gdbm-devel glibc-devel tcl-devel openssl-devel curl-devel expat-devel db4-devel byacc sqlite-devel libyaml libyaml-devel libffi libffi-devel libxml2 libxml2-devel libxslt libxslt-devel libicu libicu-devel system-config-firewall-tui redis sudo wget crontabs logwatch logrotate perl-Time-HiRes git cmake libcom_err-devel.i686 libcom_err-devel.x86_64
安装邮件服务
postfix或者sendmail,官网上安装是postfix,本人默认就装来sendmail,所以此步骤省略
三,安装git
默认centos的git版本是1.7.10,所以要先删除,然后再下载源码安装
1
2
3
4
5
6
7
8
9
yum remove git -y
yum install zlib-devel perl-CPAN gettext curl-devel expat-devel gettext-devel openssl-devel
mkdir /tmp/git && cd /tmp/git
curl --progress https://www.kernel.org/pub/software/scm/git/git-2.1.3.tar.gz | tar xz
cdgit-2.1.3/ && ./configure && make && make prefix=/usr/local install
完成后验证
1
2
3
4
5
which git
/usr/local/bin/git
git --version
git version 2.1.3
四,安装ruby
ruby版本需要2.0+,所以先卸载系统已存在的
1
2
3
4
5
6
7
8
9
yum remove ruby
#如果是源码安装的
cd (your-ruby-source-path) && make uninstall
mkdir /tmp/ruby && cd /tmp/ruby
curl --progress ang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz | tar xz
cd ruby-2.1.2 && ./configure --disable-install-rdoc && make && make prefix=/usr/local install
#引用淘宝ruby源gem sources --remove https://rubygems.org/gem sources -a https://ruby.taobao.org/ ##注意加httpsgem sources -l
安装bundler
1
gem install bundler --no-doc
完成后验证
1
2
3
4
5
which ruby
/usr/local/bin/ruby
ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877)
五,创建系统用户
1
adduser --system --shell /bin/bash --comment 'GitLab' --create-home --home-dir /home/git/ git
增加/usr/local/bin
1
2
3
visudo
#修改以下内容
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
六,安装mysql
官网给出两个选择,mysql、postgreSQL,我使用的mysql
centos默认会安装5.1版本的mysql,所以要源码安装,此步骤掠过。。。
1
2
3
#mysql的版本至少5.5.14或更新
mysql --version
mysqlVer 14.14 Distrib 5.5.40, for Linux (x86_64) using readline 5.1
创建数据库用户并授权
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql -u root -p
mysql> CREATE USER 'git'@'localhost' IDENTIFIED BY 'gitpwd';
mysql> show variables like "%engine";
+------------------------+--------+
| Variable_name | Value|
+------------------------+--------+
| default_storage_engine | InnoDB |
| storage_engine | InnoDB |
+------------------------+--------+
2 rows in set (0.01 sec)
#如果不是InnoDB引擎,需执行下面命令
mysql> SET storage_engine=INNODB;
创建数据库
1
mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
给用户授权
1
mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'git'@'localhost';
测试是否能够成功登录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql -ugit -pgitpwd -D gitlabhq_production
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 5.5.40-log Source distribution
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> \q
七,配置redis
1
2
3
4
5
6
7
8
9
10
11
chkconfig redis on
cp /etc/redis.conf /etc/redis.conf.orig
#修改监听端口
sed 's/^port .*/port 0/' /etc/redis.conf.orig |tee /etc/redis.conf
#增加内容
echo 'unixsocket /var/run/redis/redis.sock' |tee -a /etc/redis.conf
echo -e 'unixsocketperm 0770' |tee -a /etc/redis.conf
创建目录改权限
1
2
3
4
5
mkdir /var/run/redis
chown redis:redis /var/run/redis
chmod 755 /var/run/redis
启动服务
1
service redis restart
附加git到redis组
1
usermod -aG redis git
八,安装gitlab
1
2
3
4
cd /home/git
#下载源码
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 7-4-stable gitlab
修改配置
1
2
3
4
5
6
7
8
9
10
cd gitLab/
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
sudo -u git -H vim config/gitlab.yml
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: www.gitlab.com
port: 80
https: false
修改目录权限
1
2
3
4
5
6
7
chown -R git log/
chown -R git tmp/
chmod -R u+rwX log/
chmod -R u+rwX tmp/
chmod -R u+rwX tmp/pids/
chmod -R u+rwX tmp/sockets/
chmod -R u+rwXpublic/uploads
创建目录
1
2
sudo -u git -H mkdir /home/git/gitlab-satellites
chmod u+rwx,g=rx,o-rwx /home/git/gitlab-satellites
编辑配置文件unicorn.rb
1
2
3
4
5
6
7
8
9
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
#查看系统核心数
nproc
4
#编辑配置
sudo -u git -H vim config/unicorn.rb
worker_processes 4
拷贝配置文件rack_attack.rb
1
sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
定义全局的用户和邮箱
1
2
3
sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "example@example.com"
sudo -u git -H git config --global core.autocrlf input
编辑连接redis配置
1
2
3
4
5
#拷贝配置
sudo -u git -H cp config/resque.yml.example config/resque.yml
#连接redis配置,默认配置,未修改
sudo -u git -H vim config/resque.yml
九,配置gitlab数据库文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sudo -u git cp config/database.yml.mysql config/database.yml
#编辑配置文件
sudo -u git -H vim config/database.yml
production:
adapter: mysql2
encoding: utf8
collation: utf8_general_ci
reconnect: false
database: gitlabhq_production
pool: 10
username: git
password: "gitpwd"
host: localhost
socket: /var/lib/mysql/mysql.sock
#修改文件权限,只有git用户可读
sudo -u git -H chmod o-rwx config/database.yml
十,安装gem
1
2
3
cd /home/git/gitLab
sudo -u git -H bundle install --deployment --without development test postgres aws
#错误1:Could not fetch specs from http://ruby.taobao.org/解决:
修改Gemfile下的http://ruby.taobao.org/为:https://ruby.taobao.org/
#出现错误2:Could not find modernizr-2.6.2 in any of the sources
#解决办法:
$ vi Gemfile
第114行 gem "modernizr", "2.6.2"
更改改为:
第114行 gem "modernizr-rails","2.7.1"
$ vi Gemfile.lock
第252行 modernizr (2.6.2)
更改改为:
第252行 modernizr-rails (2.7.1)
第523行 modernizr (= 2.6.2)
更改改为:
第523行 modernizr-rails (= 2.7.1)
重新执行
su git -c "bundle install --deployment --without development test postgres"
#出现错误3:执行bundle install进行安装
十一,安装gitlab-shell
官网上给的gitlab-shell版本是2.1.0,后面会有问题(本地到远程不能连接),网上查找问题是版本问题,需要gitlab-shell的版本是2.0.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo -u git -H bundle exec rake gitlab:shell:install REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production
#编辑配置
sudo -u git -H vim /home/git/gitlab-shell/config.yml
---
user: git
gitlab_url: https://localhost/
http_settings:
self_signed_cert: true
repos_path: "/home/git/repositories/"
auth_file: "/home/git/.ssh/authorized_keys"
redis:
bin: "/usr/bin/redis-cli"
namespace: resque:gitlab
socket: "/var/run/redis/redis.sock"
log_level: INFO
audit_usernames: false
十二,初始化数据库
1
2
3
4
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
#可以设置管理员密码(此步骤可省略。。。)
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=newpassword
十三,下载服务脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
wget -O /etc/init.d/gitlabhttps://raw.githubusercontent.com/gitlabhq/gitlab-recipes/master/init/sysvinit/centos/gitlab-unicorn
chmod +x /etc/init.d/gitlab
chkconfig --add gitlab
chkconfig gitlab on
#设置logrotate
cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
#检测应用状态
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
#启动服务
service gitlab start
##如果出现报错:
Starting unicorn: bin/web: line 21: bundle: command not found
修改/etc/profile
把bundle的路径加到环境变量里
export PATH=/usr/local/mysql/bin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
十四,配置web服务
1
2
3
4
5
6
#本人使用的nginx
yum -y install nginx
chkconfig nginx on
wget -O /etc/nginx/conf.d/gitlab.conf https://gitlab.com/gitlab-org/gi ... rt/nginx/gitlab-ssl
添加nginx用户到git组
1
2
3
usermod -a -G git nginx
chmod g+rx /home/git/
#修改下server标签监听端口和域名
vim /etc/nginx/conf.d/gitlab.confserver {listen x.x.x.x:80;server_name www.gitlab.com;#..略..}
启动服务
1
2
3
4
5
service nginx start
#访问登录
#用户名:root
#密码:5iveL!fe
#问题一
#================================
1
2
3
4
5
6
7
8
9
10
11
#报错信息:
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
This will create the necessary database tables and seed the database.
You will lose any previous data stored in the database.
Do you want to continue (yes/no)? yes
Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8", "collation"=>"utf8_general_ci", "reconnect"=>false, "database"=>"gitlabhq_production", "pool"=>10, "username"=>"git", "password"=>"gitpwd"}, {:charset=>"utf8", :collation=>"utf8_general_ci"}
(If you set the charset manually, make sure you have a matching collation)
-- enable_extension("plpgsql")
rake aborted!
Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
1
2
3
4
#解决办法:
vim config/database.yml
#mysql.sock的位置指定,默认在/tmp目录下
socket: /var/lib/mysql/mysql.sock
#============================
#问题二
#============================
1
2
3
4
5
6
7
8
9
#报错信息:
Running /home/git/gitlab-shell/bin/check
Check GitLab API access: /home/git/gitlab-shell/lib/gitlab_net.rb:122:in `read': No such file or directory @ rb_sysopen - /home/git/gitlab-shell/.gitlab_shell_secret (Errno::ENOENT)
from /home/git/gitlab-shell/lib/gitlab_net.rb:122:in `secret_token'
from /home/git/gitlab-shell/lib/gitlab_net.rb:79:in `get'
from /home/git/gitlab-shell/lib/gitlab_net.rb:39:in `check'
from /home/git/gitlab-shell/bin/check:11:in `<main>''
#之前提到过的,由于gitlab-shell版本问题导致,按照我安装的版本应该没什么问题。
#============================
#问题三
#============================
遇到这类问题仔细检查几个文件
/home/git/gitlab/config/unicorn.rb:配置ruby提供的服务端口,ip/home/git/gitlab/config/gitlab.yml:配置gitlab服务的端口,ip/home/git/gitlab-shell/config.yml:配置gitlab-shell要调用的API接口unicorn.rb:第40行改成
listen ”192.168.0.210:8000″, :tcp_nopush => truegitlab.yml:第18行和第19行改成 host: 192.168.0.210
port: 8000config.yml:第5行改成gitlab_url: ”http://192.168.0.210:8000/“
specified 'mysql2' for database adapter but the gem is not loaded. add gem 'mysql2' to your gemfile
It's currently an issue with Rails 4.1.x and 4.2.x, per this bug report, it will be fixed in the next release of rails 4.2.x (credit to dcorr in comments for the link).
In the mean time you can fix by doing downgraded to version 0.3.18 of mysql2 by adding this line to your gemfile:
gem 'mysql2', '~> 0.3.18'
bundle install uninitialized constant Mys
ql2::Client::SECURE_CONNECTION (NameError)
mysql版本是5.7的mysql2组件版本必须>=3.1.8
mysql2 gem 0.3.17 and 0.2.24 and above support MySQL 5.7. Directing people to downgrade to MySQL 5.6 is not necessary. 'Could not find a JavaScript runtime' but execjs AND therubyracer are in Gemfile
解决办法:
vim Gemfile
gem 'execjs'
gem 'therubyracer'
bundle install
rails server
页:
[1]