在Ubuntu 14.04上安装GitLab(Trusty Tahr)

GitLab是一个基于Ruby on Rails的免费git存储库管理应用程序。假如您想托管自己的git存储库,这是一个很好的替代方案,因为在编写私有代码或则闭源软件的时候,使用第三方托管并不总是最佳选择。

GitLab提供了一个.deb包,其中包含GitLab社区版及其已编译的所有依赖项(Ruby,PostgreSQL,Redis,Nginx,Unicorn和其他gem)。安装GitLab非常简单。但是由于它会自己安装必要的包依赖项(Nginx,PostgreSQL等),如果所用服务器专用于管理git存储库,那么这种安装方法是很合适的。但如果您希望GitLab使用您现有的资源(即:您已经安装了Nginx和PostgreSQL等依赖项),那么您就需要手动安装GitLab。

本指南将帮助您在安装了Ubuntu 14.04(Trusty Tahr)操作系统的 Linode主机上安装和配置GitLab。在撰写本文时,我们将使用最新版本的Ruby和GitLab,因此请检查当前安装包是否为最新版本。我们假设您会在git.example.com所指向的站点主机上安装GitLab,并且您已经正确地配置了主机DNS。假如您不熟悉Linux操作系统的基本操作,那您可能需要参考下“ Linux基本概念简介和“ Linux系统管理入门”这两篇文章的入门指南。如果您的服务器可以托管自己的软件项目的话,服务器应该会拥有大容量的磁盘空间,因此请考虑使用我们的区块存储服务进行服务器的磁盘设置。

注意

本指南是为非root用户编写的。需要提升权限的命令请以sudo为前缀。如果您不熟悉sudo命令,可以查看我们的“ 用户和组”说明指南。

系统配置要求

GitLab是一个庞大而又繁重的应用程序。为了充分利用GitLab,我们推荐的硬件配置如下:

CPU: 双核,最多可支持500个用户并发。

内存: 2GB,最多可支持500个用户并发。

部署系统的准备工作

在开始安装GitLab之前,请确保系统的软件包数据库是最新的,并且所有已安装的软件都是最新版本。

登录shell终端,输入以下命令更新系统到最新版本:

sudo apt-get update 
sudo apt-get upgrade

然后为GitLab创建一个git用户:

sudo adduser --disabled-login --gecos 'GitLab' git

安装GitLab的依赖关系

在本节中,将为您介绍如何安装GitLab的开发工具和所需的依赖软件。

安装所需的软件包来编译Ruby及Ruby gems(Ruby 的一个包管理器)的原生扩展:

sudo apt-get install build-essential cmake zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate

安装Git:

sudo apt-get install git

为了接收邮件通知,您需要安装一个邮件服务器。执行以下命令安装来Postfix邮件服务器:

sudo apt-get install postfix

选择Internet site并输入您的主机名,完成安装。如果您需要设置一个完整的SMTP / IMAP / POP3服务器,请参阅Postfix、Dovecot和MySQL邮件指南这篇文章。

安装Ruby

虽然GitLab是基于Ruby on Rails实现的应用程序,但其并不支持ruby版本管理器软件,例如RVMrbenv这两款软件均不支持GitLab的版本控制。举例来说,我们一般通过OpenSSH来调用GitLab shell,而版本管理器则可以通过调用openSSH的功能来防止越过SSH进行推送和拉取的操作(由此会带来许多疑难杂症)。因此只能用系统范围的Ruby来安装GitLab。此外,GitLab需要Ruby 最低版本为2.0或者更高版本,而Ubuntu 14.04上的ruby的默认版本是1.9.3。

删除旧的Ruby(如果存在):

sudo apt-get remove ruby

在撰写本文时,目前稳定的Ruby版本是2.1.2。如果需要安装Ruby,请下载源代码并编译软件包:

mkdir /tmp/ruby && cd /tmp/ruby 
wget http://ftp.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz 
tar xvzf ruby-2.1.2.tar.gz 
cd ruby-2.1.2 
./configure --disable-install-rdoc --prefix=/usr/local 
make 
sudo make install

通过检查Ruby版本验证安装是否成功:

ruby -v

为GitLab配置PostgreSQL数据库

GitLab同时支持MySQL和PostgreSQL作为后端数据库,但我们建议使用后者。此外由于GitLab需要使用其扩展,所以要保证PostgreSQL 的版本为 9.1或更高。

如果尚未安装PostgreSQL,请安装该软件:

sudo apt-get install postgresql postgresql-client libpq-dev

通过执行以下命令来创建一个数据库及拥有该数据库权限的用户:

sudo -u postgres createuser --createdb git sudo -u postgres createdb --owner=git gitlabhq_production

尝试使用新建用户连接到新建数据库并显示PostgreSQL版本,以方便测试:

sudo -u git -H psql -d gitlabhq_production -c "SELECT VERSION()"

如果一切正常,您应该会在控制台上看到如下信息:

                                                   version
    ------------------------------------------------------------------------------------------------------
     PostgreSQL 9.3.4 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-16ubuntu6) 4.8.2, 64-bit
    (1 row)

安装GitLab

在本节中,将为您介绍如何安装GitLab,以及如何配置。

我们将GitLab安装到用户git的主目录中。首先进入当前工作目录:

cd /home/git

下载GitLab源代码:

sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 6-9-stable gitlab cd gitlab

执行上面的命令,我们将会从GitLab存储库中下载6-9-stable(稳定版)代码分支。一般来说,我们可以随意选择其他稳定分支,但永远不要在生产服务器上安装主干。

创建GitLab配置文件:

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

打开该配置文件:

    sudo nano config/gitlab.yml

在这一步,您需要将host的对应值更改为服务器的完全限定域。同时将email_fromsupport_email的值设置为GitLab的电子邮件地址。

production: &base
  gitlab:
    host: git.example.com
    port: 80
    https: false
    ...
    email_from: gitlab@example.com
    ...
    support_email: support@example.com

备注:

在上一节中,如果您在创建PostgreSQL数据库gitlabhq_production的同时,还指定了其他的数据库。那您就需要编辑config/database.yml并将指定的其他数据库填入对应位置。

保存文件并退出。

确保GitLab可以写入log /tmp /目录(即GitLab用户拥有这两个目录的权限):

sudo chown -R git {log,tmp}
sudo chmod -R u+rwX {log,tmp,tmp/pids,tmp/sockets,public/uploads}

创建gitlab-satellites目录:

sudo -u git -H mkdir /home/git/gitlab-satellites
sudo chmod u+rwx,g+rx,o-rwx /home/git/gitlab-satellites

创建UnicornRack攻击和PostgreSQL配置文件:

sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
sudo -u git cp config/database.yml.postgresql config/database.yml

请确保config / database.yml仅对git用户来说可读:

sudo -u git -H chmod o-rwx config/database.yml

安装gems(Ruby Gems,一个ruby包管理工具):

sudo gem install bundler
sudo -u git -H bundle install --deployment --without development test mysql aws

安装GitLab shell,这是个存储库管理软件,一般通过GitLab的SSH访问:

sudo -u git -H bundle exec rake gitlab:shell:install[v1.9.4] REDIS_URL=redis://localhost:6379 RAILS_ENV=production

打开GitLab shell配置文件:

sudo nano /home/git/gitlab-shell/config.yml

检查值是否gitlab_url与服务器的URL匹配。

user: git
gitlab_url: http://git.example.com/
http_settings:
  self_signed_cert: false
repos_path: "/home/git/repositories/"
auth_file: "/home/git/.ssh/authorized_keys"
redis:
  bin: "/usr/bin/redis-cli"
  host: localhost
  port: 6379
  namespace: resque:gitlab
log_level: INFO
audit_usernames: false

初始化数据库并激活其高级功能:

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,按回车键继续。

安装init脚本并在启动时启动GitLab:

sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
sudo update-rc.d gitlab defaults 21

设置logrotate(一个日志管理工具):

sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab

检查申请状态:

sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production

样本输出

System information
System:         Ubuntu 14.04
Current User:   git
Using RVM:      no
Ruby Version:   2.1.2p95
Gem Version:    2.2.2
Bundler Version:1.6.3
Rake Version:   10.3.1
Sidekiq Version:2.17.0

GitLab information
Version:        6.9.2
Revision:       e46b644
Directory:      /home/git/gitlab
DB Adapter:     postgresql
URL:            http://git.example.com
HTTP Clone URL: http://git.example.com/some-project.git
SSH Clone URL:  git@git.example.com:some-project.git
Using LDAP:     no
Using Omniauth: no

GitLab Shell
Version:        1.9.4
Repositories:   /home/git/repositories/
Hooks:          /home/git/gitlab-shell/hooks/
Git:            /usr/bin/git

编译静态资源:

sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production

为git用户配置全局属性:

sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "gitlab@example.com"
sudo -u git -H git config --global core.autocrlf input

注意:

请根据config/gitlab.yml文件中的值为git用户配置邮箱地址

启动GitLab:

sudo service gitlab start

为GitLab设置Nginx虚拟主机

Nginx是唯一支持GitLab的web服务器。在本节中,将为您介绍如何为GitLab部署一个全新的虚拟机环境并激活该站点。

如果你没有安装nginx的话,先安装这个软件:

sudo apt-get install nginx

复制一份GitLab的全局配置文件,并将其放到nginx的站点配置目录下:

sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab

打开这个配置文件:

sudo nano /etc/nginx/sites-available/gitlab

将server_name的值修改为服务器的完全限定域名(是指主机名加上全路径,全路径中列出了序列中所有域成员。全域名可以从逻辑上准确地表示出主机在什么地方,也可以说全域名是主机名的一种完全表示形式):

listen 80;
server_name git.example.com;
server_tokens off;
root /home/git/gitlab/public;

禁用默认的虚拟站点

sudo rm /etc/nginx/sites-enabled/default

将配置文件复制软连接到生效目录下来激活站点,重启nginx后生效

sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
sudo service nginx restart

如果nginx重启失败并显示以下信息

Restarting nginx: nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32

打开/etc/nginx/nginx.conf并取消注释以下行

server_names_hash_bucket_size 64;

重启Nginx。

在浏览器上打开GitLab

再次检查应用的运行状态:

cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production

如果大多数的选项都是绿色的,只有个别选项是紫色的(这是因为您还没有创建任何git项目,所以这是允许的),那就证明您已经成功安装了GitLab。下面是示例输出:

Checking Environment ...

    Git configured for git user? ... yes

    Checking Environment ... Finished

    Checking GitLab Shell ...

    GitLab Shell version >= 1.9.4 ? ... OK (1.9.4)
    Repo base directory exists? ... yes
    Repo base directory is a symlink? ... no
    Repo base owned by git:git? ... yes
    Repo base access is drwxrws---? ... yes
    Satellites access is drwxr-x---? ... yes
    update hook up-to-date? ... yes
    update hooks in repos are links: ... can't check, you have no projects
    Running /home/git/gitlab-shell/bin/check
    Check GitLab API access: OK
    Check directories and files:
        /home/git/repositories/: OK
        /home/git/.ssh/authorized_keys: OK
    Test redis-cli executable: redis-cli 2.8.4
    Send ping to redis server: PONG
    gitlab-shell self-check successful

    Checking GitLab Shell ... Finished

    Checking Sidekiq ...

    Running? ... yes
    Number of Sidekiq processes ... 1

    Checking Sidekiq ... Finished

    Checking LDAP ...

    LDAP is disabled in config/gitlab.yml

    Checking LDAP ... Finished

    Checking GitLab ...

    Database config exists? ... yes
    Database is SQLite ... no
    All migrations up? ... yes
    Database contains orphaned UsersGroups? ... no
    GitLab config exists? ... yes
    GitLab config outdated? ... no
    Log directory writable? ... yes
    Tmp directory writable? ... yes
    Init script exists? ... yes
    Init script up-to-date? ... yes
    projects have namespace: ... can't check, you have no projects
    Projects have satellites? ... can't check, you have no projects
    Redis version >= 2.0.0? ... yes
    Your git bin path is "/usr/bin/git"
    Git version >= 1.7.10 ? ... yes (1.9.1)

    Checking GitLab ... Finished

现在您就可以在浏览器中查看这个网址 http://git.example.com了. GitLab会向您展示如图所示的登录页面。

您可以使用root作为用户名登录,使用5iveL!fe作为密码登录。

保护GitLab

现在您已在服务器上运行GitLab,您可能希望添加SSL支持以保护您的GitLab站点。请参阅Nginx的SSL证书配置的指南,这样您就可以使用SSL保护您的站点了。

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

GitLab社区版

GitLab文档

GitLab要求

GitLab手动安装

本文的版权归 白加黑大人 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SpringBoot 核心技术

SpringBoot核心技术:你了解Actuator开放指定监控节点吗?

之前章节SpringBoot核心技术:探究Actuator的默认开放节点 & 详细健康状态讲解了spring-boot-actuator默认开放的节点以及如何修...

1742
来自专栏建站达人秀

如何搭建 Django 网站

Django是一个非常受欢迎的全功能服务器端Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发人员构建。Django负责处理Web开发大...

8185
来自专栏向治洪

基于XMPP协议的Android即时通信系

设计基于开源的XMPP即时通信协议,采用C/S体系结构,通过GPRS无线网络用TCP协议连接到服务器,以架设开源的Openfn'e服务器作为即时通讯平台。  ...

34510
来自专栏小樱的经验随笔

mount命令详解及常见问题汇总

一 、mount命令(用来挂载硬盘或镜像等) 用法:mount [-t vfstype] [-o options] device dir 1、-t vfstyp...

9005
来自专栏代码世界

Linux常用命令大全

2599
来自专栏SDNLAB

ONOS编程系列(二)命令行命令与服务开发

此文章承接ONOS编程系列(一) Application Tutorial ,如果尚未看过上一篇,请先看完上一篇,再回过头来看此篇。 本文章的目的在于让读者明白...

3459
来自专栏Android机动车

Android开发环境搭建

因此,我们这篇文章将从JDK和AndroidStudio两个方面来讲解Android开发环境的搭建。

1874
来自专栏MoeLove

CentOS7上安装Python3.6

当前最新的 CentOS 7.3 默认安装的是 Python 2 ,并且默认的官方 yum 源中不提供 Python 3 的安装包。有些用户想要升级使用 Pyt...

4282
来自专栏积累沉淀

Linux常用命令大全

系统信息  arch 显示机器的处理器架构(1)  uname -m 显示机器的处理器架构(2)  uname -r 显示正在使用的内核版本  dmide...

26310
来自专栏待你如初见

Zookeeper与Solr 概述 部署 Solr Cloud

4835

扫码关注云+社区

领取腾讯云代金券