天天看点

Gitlab完整搭建手册+排错

GitLab,是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。

它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

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) [x86_64-linux]

# 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

一,安装源和依赖包

9

cd /usr/local/src

#增epel源,如果你是i686系统,请把x86_64修改下。

#确认是否安装成功

rpm -qa gpg*

gpg-pubkey-0608b895-4bd22942

二,安装依赖包

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,所以要先删除,然后再下载源码安装

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

cd  git-2.1.3/ && ./configure && make && make prefix=/usr/local install

完成后验证

which git

/usr/local/bin/git

git --version

git version 2.1.3

四,安装ruby

ruby版本需要2.0+,所以先卸载系统已存在的

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 -l

安装bundler

gem install bundler --no-doc

which ruby

/usr/local/bin/ruby

ruby -v

ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]

五,创建系统用户

adduser --system --shell /bin/bash --comment 'GitLab' --create-home --home-dir /home/git/ git

增加/usr/local/bin

visudo

#修改以下内容

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

六,安装mysql

官网给出两个选择,mysql、postgreSQL,我使用的mysql

centos默认会安装5.1版本的mysql,所以要源码安装,此步骤掠过。。。

#mysql的版本至少5.5.14或更新

mysql --version

mysql  Ver 14.14 Distrib 5.5.40, for Linux (x86_64) using readline 5.1

创建数据库用户并授权

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;

创建数据库

mysql> CREATE DATABASE IF NOT EXISTS gitlabhq_production DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

给用户授权

mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'git'@'localhost';

测试是否能够成功登录

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

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

创建目录改权限

mkdir /var/run/redis

chown redis:redis /var/run/redis

chmod 755 /var/run/redis

启动服务

service redis restart

附加git到redis组

usermod -aG redis git

八,安装gitlab

cd /home/git

#下载源码

修改配置

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

修改目录权限

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+rwX  public/uploads

创建目录

sudo -u git -H mkdir /home/git/gitlab-satellites

chmod u+rwx,g=rx,o-rwx /home/git/gitlab-satellites

编辑配置文件unicorn.rb

sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb

#查看系统核心数

nproc

#编辑配置

sudo -u git -H vim config/unicorn.rb

worker_processes 4

拷贝配置文件rack_attack.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 "[email protected]"

sudo -u git -H git config --global core.autocrlf input

编辑连接redis配置

#拷贝配置

sudo -u git -H cp config/resque.yml.example config/resque.yml

#连接redis配置,默认配置,未修改

sudo -u git -H vim config/resque.yml

九,配置gitlab数据库文件

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

cd /home/git/gitLab

sudo -u git -H bundle install --deployment --without development test postgres aws

#错误1:

各种安装失败

解决:

修改Gemfile下的http://ruby.taobao.org/

为:

https://ruby.taobao.org/

#出现错误3:

十一,安装gitlab-shell

官网上给的gitlab-shell版本是2.1.0,后面会有问题(本地到远程不能连接),网上查找问题是版本问题,需要gitlab-shell的版本是2.0.1

sudo -u git -H bundle exec rake gitlab:shell:install[v2.0.1] 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

十二,初始化数据库

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

十三,配置服务脚本

wget -O /etc/init.d/gitlab https://raw.github.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 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服务

#本人使用的nginx

yum -y install nginx

chkconfig nginx on

vim /etc/nginx/conf.d/gitlab.conf

# GITLAB

# Maintainer: @randx

# App Version: 5.0

upstream gitlab {

  server unix:/home/git/gitlab/tmp/sockets/gitlab.socket;

}

server {

  listen 192.168.0.210:80 default_server;         # e.g., listen 192.168.1.1:80;

  server_name www.gitlab.com;     # e.g., server_name source.example.com;

  root /home/git/gitlab/public;

  # individual nginx logs for this gitlab vhost

  access_log  /var/log/nginx/gitlab_access.log;

  error_log   /var/log/nginx/gitlab_error.log;

  location / {

    # serve static files from defined root folder;.

    # @gitlab is a named location for the upstream fallback, see below

    try_files $uri $uri/index.html $uri.html @gitlab;

  }

  # if a file, which is not found in the root folder is requested,

  # then the proxy pass the request to the upsteam (gitlab unicorn)

  location @gitlab {

    proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694

    proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694

    proxy_redirect     off;

    proxy_set_header   X-Forwarded-Proto $scheme;

    proxy_set_header   Host              $http_host;

    proxy_set_header   X-Real-IP         $remote_addr;

    proxy_pass http://gitlab;

添加nginx用户到git组

usermod -a -G git nginx

chmod g+rx /home/git/

#修改下server标签监听端口和域名

vim /etc/nginx/conf.d/gitlab.conf  

listen x.x.x.x:80;  

server_name www.gitlab.com;

#..略..

service nginx start

#访问登录

#用户名:root

#密码:5iveL!fe

Gitlab完整搭建手册+排错

#问题一

#================================

#报错信息:

    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)

#解决办法:

vim config/database.yml

    #mysql.sock的位置指定,默认在/tmp目录下

    socket: /var/lib/mysql/mysql.sock

#============================

#问题二

    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版本问题导致,按照我安装的版本应该没什么问题。

#问题三

<a href="http://s5.51cto.com/wyfs02/M00/76/1F/wKioL1ZK44TBrraEAABF2WyfJtM200.png" target="_blank"></a>

遇到这类问题仔细检查几个文件

/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 =&gt; true

gitlab.yml:第18行和第19行改成

    host: 192.168.0.210     port: 8000

config.yml:第5行改成

#问题四

编辑 <code>gitlab.yml</code> , 找到如下部分:

把 <code>plain_url</code> 的注释去掉,写成如下内容:

重启服务

如果gitlab不是新搭建的,依然会有一些头像地址会指向原先的地址,需要执行下面的命令修正缓存数据

\

本文转自 转身撞墙角 51CTO博客,原文链接:http://blog.51cto.com/chentianwang/1713433