如何将GitLab设置为您自己的私有GitHub克隆

来自菜鸟教程
跳转至:导航、​搜索

状态: 已弃用

本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:

原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.

请参阅: 本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。


介绍


Git 和 GitHub 是很棒的工具,它们使管理大量 Git 存储库及其相关权限变得轻而易举。 如果您正在编写开源软件,这非常棒,但是在编写闭源软件时,您可能不想将您的代码信任给第三方服务器。 那么,如何在不将 git 存储库托管在不受控制的服务器上的情况下,获得对 Github 或 BitBucket 之类的控制、灵活性和易用性?

进入 GitLab。 GitLab 为您的 Git 存储库(例如 GitHub)提供了一个简单但功能强大的基于 Web 的界面,只有您可以将其托管在您自己的云服务器上,控制您认为合适的访问,并且存储库大小仅受服务器拥有多少存储空间的限制。 本教程将引导您将 DigitalOcean VPS 设置为 GitLab 服务器。

注意: 本教程介绍如何从源代码安装 GitLab。 最初编写时,这是唯一的选择。 今天,使用 GitLab 的“omnibus”包 启动和运行它要简单得多。 您还可以使用我们的应用程序图像 一键在 DigitalOcean 上启动 GitLab 液滴。

本教程假设您使用的是全新的 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]

现在我们需要安装 Bundler gem:

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

并创建一个 git 用户供 GitLab 使用:

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

安装 GitLab 外壳


使用以下命令下载 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

您现在有了 GitLab Shell 1.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 用户已成功创建,让我们使用 gitlab 用户登录到 mysql

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 shell 一样,如果您为 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 配置,并为 git 用户设置一些 GitLab 配置和目录:

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

让我们安装更多需要的 gem(此步骤可能需要一些时间):

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),则这些步骤不适用。 查看 这些食谱 了解如何使用其他 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

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

如果您使用的是 512MB VPS,那么由于 GitLab 的内存要求,您很可能会遇到 502 Bad Gateway 错误。 如果是这种情况,请继续阅读……

故障排除


502 错误网关错误


在一个完美的世界里,GitLab 现在可以完美运行。 不幸的是,GitLab 的内存要求高得惊人,因此在 512MB VPS 上,它经常在第一次登录时阻塞。 这是因为 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 bad gateway 错误的信息,请查看 此线程

提交人: Nik van der Ploeg