如何将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:
的部分,其中将包含 username
和 password
条目。 默认情况下,它看起来像这样:
production: adapter: mysql2 encoding: utf8 reconnect: false database: gitlabhq_production pool: 10 username: root password: "secure password"
更改 username
和 password
条目以匹配我们之前设置的 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 登录页面。
参考:
- 在这里查看优秀的 Gitlab 安装文档 。
- 有关 502 bad gateway 错误的信息,请查看 此线程 。