如何设置GitLab作为您自己的私人GitHub克隆

GitLab为您的Git仓库提供了一个简单但强大的基于Web的界面。只有您可以将它托管在您自己的云服务器上,控制访问,因为您认为合适,并且repo大小只受您的服务器有多少存储空间的限制。这个

介绍


Git和GitHub是令人敬畏的工具,使管理和管理大量的Git仓库及其相关的权限变得轻而易举。 这是非常好的,如果你写的开源软件,但当写封闭源代码软件,你可能不想相信你的代码到第三方服务器。 那么如何才能获得Github或BitBucket之类的东西的控制,灵活性和易用性,而无需在您的控制之外的服务器上托管您的git存储库呢?

输入GitLab。 GitLab为您的Git仓库提供了一个简单但强大的基于Web的界面,只有您可以将其托管在您自己的云服务器上,根据您的需要控制访问,并且repo大小仅受您的服务器有多少存储空间的限制。 本教程将引导您将DigitalOcean VPS设置为GitLab服务器。

注:本教程介绍了如何从源代码安装GitLab。 当最初写的时候,这是唯一的选择。 今天,它是更简单使用运行得到它,并GitLab的“综合性”包 您也可以发动对DigitalOcean一个GitLabDroplet的点击与我们的应用图像

本教程假设您使用的是全新的Ubuntu 12.04 VPS。 我们将安装使GitLab工作所需的所有必要软件。 如果你使用一个现有的VPS(Droplet)或不同的Linux发行版,你可能有问题,特别是与不兼容的Python和Ruby版本。 确保在开始之前安装了Ruby 2.0和Python 2.7。

第一步是安装一些必需的软件包:

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

确保你没有安装Ruby 1.8(在默认的Ubuntu 12.04 VPS它不会)。

安装Ruby 2.0(这将需要一段时间):

mkdir /tmp/ruby && cd /tmp/ruby
curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz | tar xz
cd ruby-2.0.0-p247
./configure
make
sudo make install

当它完成后,你可以检查,以确保你有Ruby 2(不是1.8)安装通过做:

ruby --version

如果输出看起来像下面那么你是好的:

ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]

现在我们需要安装BundlerGem:

sudo gem install bundler --no-ri --no-rdoc

并创建一个Git用户GitLab使用:

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

安装GitLab Shell


使用以下命令下载GitLab shell:

cd /home/git
sudo -u git -H git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell
sudo -u git -H git checkout v1.7.0
sudo -u git -H cp config.yml.example config.yml

你现在有GitLabShell1.7.0的副本,示例config.yml已经准备就绪。

如果你有一个域名在这个VPS指出,那么你应该花时间来编辑config.yml使用该域名。

nano config.yml

在顶部附近将有一条线看起来像:

gitlab_url: "http://localhost/"

更改http://localhost/部分匹配您的域名。 所以,如果您的域名是www.YOURDOMAIN.com行应该是这样的:

gitlab_url: "http://www.YOURDOMAIN.com/"

现在你可以运行GitLab shell安装程序:

sudo -u git -H ./bin/install

数据库设置


我们将设置GitLab来使用MySQL后端。 第一步是使用下面的命令安装MySQL。 在安装过程中,它会要求您设置一个MySQL root密码。 设置为任何你喜欢的,但记下它,因为你将需要它为后续步骤。

sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev

现在安装MySQL,并将root密码设置为您在上一步中选择的值。 我们现在需要创建一个MySQL用户,供GitLab使用。 为此,我们首先将必要的SQL查询保存到临时文件。 类型:

nano tempfile

粘贴在下面,改变$password上的第一行到真正的密码。 跟踪此密码,因为这将是您的GitLab的数据库密码。

CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password';
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 'gitlab'@'localhost';

现在保存文件并执行以下命令(从提示的第一步输入MySQL root密码)让MySQL执行您的查询:

cat tempfile | mysql -u root -p

为了确保您的新的MySQL用户已成功创建,让我们登录到mysql使用gitlab用户:

mysql -u gitlab -p

如果您看到一些文字后跟一个:

mysql>

然后一切工作成功。 前往并输入:

exit;

mysql>提示符下退出MySQL和删除tempfile文件,因为它包含一个密码:

rm tempfile

在这一点上,我们有一切配置成成功安装GitLab,所以让我们继续安装:

cd /home/git
sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd /home/git/gitlab
sudo -u git -H git checkout 6-0-stable
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

就像我们与GitLab外壳确实成立,如果你有一个域配置为您的VPS,我们需要编辑config.yml使用该域名。

sudo -u git -H nano config/gitlab.yml

在文件顶部附近应该有一个文本块,如下所示:

  gitlab:
## Web server settings
host: localhost
port: 80
https: false

更改host:项匹配您的域名。 如果您的域名是www.YOURDOMAIN.com ,那么就应该是这样的:

  gitlab:
## Web server settings
host: www.YOURDOMAIN.com
port: 80
https: false

我们还设置了一些Linux的文件权限,配置git用户的Git的配置,并设置了一些GitLab配置和目录为git用户:

cd /home/git/gitlab
sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX  log/
sudo 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/
sudo chmod -R u+rwX  tmp/pids/
sudo chmod -R u+rwX  tmp/sockets/
sudo -u git -H mkdir public/uploads
sudo chmod -R u+rwX  public/uploads
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "gitlab@localhost"
sudo -u git -H git config --global core.autocrlf input
sudo -u git cp config/database.yml.mysql config/database.yml

现在,我们需要告诉GitLab使用gitlab之前设置MySQL用户。 要做到这一点,编辑config/database.yml文件:

sudo -u git -H nano config/database.yml

靠近顶部会有一段名为production:其中将包含usernamepassword的条目。 默认情况下,它看起来像这样:

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: gitlabhq_production
  pool: 10
  username: root
  password: "secure password"

更改usernamepassword输入到我们之前设置的GitLab数据库用户匹配。 因此,如果您用于GitLab的MySQL用户的密码是$password编辑的文件应该是这样的:

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: gitlabhq_production
  pool: 10
  username: gitlab
  password: "$password"

保存文件,我们会保护该文件,以便服务器的其他用户看不到密码:

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

让我们安装一些更多需要的gems(这一步可能需要一段时间):

cd /home/git/gitlab
sudo gem install charlock_holmes --version '0.6.9.4'
sudo -u git -H bundle install --deployment --without development test postgres aws

并运行一些最终设置(当它询问您是否要继续时输入yes):

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

在此之后完成,将屏幕打印大量的信息,并在年底将显示Administrator account created并给你的管理员凭据。 它应该看起来像下面:

Administrator account created:

login.........admin@local.host
password......5iveL!fe

现在让我们设置GitLab在服务器启动时启动:

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

运行以下操作以确保一切正常:

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

如果没有错误消息,并且该命令输出的数据看起来正确,那么您的GitLab安装正在工作。 就快结束了! 使用此命令启动GitLab:

sudo service gitlab start

设置NGINX


默认情况下,GitLab与nginx Web服务器配合使用。 如果您已经有自己的Web服务器(如Apache),那么这些步骤不适用。 看看这些Recipe ,了解如何与其他Web服务器配置GitLab信息。 否则,请按照以下说明安装和配置nginx以使用GitLab:

sudo apt-get -y install nginx
cd /home/git/gitlab
sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

编辑/etc/nginx/sites-available/gitlab使用你的域名:

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

从文件的顶部一个小方法,你会看到一个条目server_name被设置为YOUR_SERVER_FQDN 由于在前面的步骤,更换YOUR_SERVER_FQDN与您的域名。 原文件如下:

server {
  listen *:80 default_server;     # e.g., listen 192.168.1.1:80; In most cases *:80 is a good idea
  server_name YOUR_SERVER_FQDN;       #

如果您的域名是www.YOURDOMAIN.com那么你应该改变它看起来像这样:

server {
  listen *:80 default_server;         # e.g., listen 192.168.1.1:80; In most cases *:80 is a good idea
  server_name www.YOURDOMAIN.com;     #

并重启nginx:

sudo service nginx restart

Voila! 你完成了。 通过使用管理员登录Web浏览器和密码从上面连接到GitLab(默认用户: admin@local.host ,道: 5iveL!fe )和享受GitLab。

如果您使用的是512MB的VPS则由于GitLab的内存要求它很可能你会碰到一个502 Bad Gateway错误。 如果是这样,请阅读...

故障排除


502网关错误


在一个完美的世界GitLab现在将完美运行。 不幸的是,GitLab具有令人惊讶的高内存需求,所以在第一次登录时经常窒息的512MB VPSs。这是因为GitLab在第一次登录时使用了大量内存。 由于Ubuntu 12.04 VPS没有交换空间,当超过内存时,GitLab的部分被终止。 不用说,当GitLab的一部分意外终止时,它运行不好。

最简单的解决方案只是为您的VPS分配更多的内存,至少对于第一次登录。如果您不想这样做,另一个选项是增加交换空间。 DigitalOcean已经对如何做到这一点提供一个完整的教程在这里 (虽然我会建议将不仅仅是512MB交换的更多)。 快速修复是运行以下:

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024k
sudo mkswap /swapfile
sudo swapon /swapfile

您的交换文件现在正在运行和积极的,但设置它,以便它在我们需要编辑每次开机启动/etc/fstab

sudo nano /etc/fstab

将以下内容粘贴到文件的底部:

/swapfile       none    swap    sw      0       0 

现在重新启动您的VPS:

sudo restart

等待一两分钟,让VPS重新启动,然后再次尝试GitLab。 如果它第一次不工作,刷新Bad Gateway页面几次,您很快就会看到GitLab登录页面。

参考文献:

  1. 检查出的优秀Gitlab安装文档在这里
  2. 而对于在502网关错误信息,请检查此线程
提交者:Nik van der Ploeg