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

2023-11-06

Status:已弃用

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

  • 升级到Ubuntu 14.04.
  • 从 Ubuntu 14.04 升级到 Ubuntu 16.04
  • 将服务器数据迁移到支持的版本

Reason: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL)并且不再接收安全补丁或更新。本指南不再维护。

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

介绍


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

进入亚搏体育app实验室。 GitLab 为您的 Git 存储库提供了一个简单但功能强大的基于 Web 的界面,就像 GitHub 一样,只有您可以将其托管在您自己的云服务器上,根据您的需要控制访问,并且存储库大小仅受您的服务器拥有的存储空间的限制。本教程将引导您完成将 DigitalOcean VPS 设置为 GitLab 服务器的过程。

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

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

您现在拥有 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 用户已成功创建,让我们登录mysql使用gitlab user:

mysql -u gitlab -p

如果您看到一些文本后跟:

mysql>

然后一切都成功了。继续输入:

exit;

at the 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 配置,并设置一些 GitLab 配置和目录git user:

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 file:

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

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

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

改变username and 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

Edit /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

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

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

故障排除


502 网关错误错误


在完美的世界中,GitLab 现在应该可以完美运行。不幸的是,GitLab 对内存的要求高得惊人,所以在 512MB VPS 上,第一次登录时经常会卡住。这是因为 GitLab 在第一次登录时使用了大量内存。由于 Ubuntu 12.04 VPS 没有交换空间,当内存超出时,GitLab 的部分内容将被终止。不用说,当 GitLab 的某些部分意外终止时,它就无法正常运行。

最简单的解决方案就是为您的 VPS 分配更多内存,至少在第一次登录时是如此。如果您不想这样做,另一个选择是增加交换空间。 DigitalOcean 已经提供了有关如何执行此操作的完整教程here(尽管我建议添加超过 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 安装文档here.
  2. 有关 502 bad gateway 错误的信息,请检查这个线程.

提交者:Nik van der Ploeg
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Gitlab 备份错误:包对象因信号 9 死亡

    我有一个存储库 有 2 个分支 大小为 3 5GB 每个分支大约 1 5GB git 本身就有 700MB 这是错误 备份失败 失败的 失败 opt gitlab embedded bin git git dir mountdata git
  • 如何从暂存区删除单个文件(撤消 git add)?

    情况 我有一个 Git 存储库 其中文件已在索引中 我对几个文件进行了更改 打开 Git 并使用 git add 将这些文件添加到我的暂存区域 问题 如何从暂存区域中删除这些文件之一 但不将其从索引中删除或撤消对文件本身的更改 如果我正确理
  • Git Hook - 在我推送到 github 后让服务器拉取

    我有一个本地存储库 并且我在实时服务器上设置了另一个存储库 www site com projects ProjectA 我想要实现的目标非常简单 在我推送到 GitHub 后 我想要存储库位于www site com projects P
  • 如何应用 .diff 文件

    我有一个 diff 类型文件 看起来像爆炸了 diff git a res User lua b res User lua index db8c2cc 4d2af0f 100644 a res User lua b res User lua
  • 如何将yarn add/npm install与monorepos一起使用

    我需要从 GitHub 中的私有 monorepo 下载节点包 类似于 monorepoProject subProjectA subProjectB 还有两个子项目A and 子项目B是 typescript 项目 如下图所示 subPr
  • Git worktree prune - 它有什么作用?

    我在用着git 版本 2 14 2 windows 2并调用 git worktree add
  • 如何存储和计算版本控制历史记录?

    考虑这个简单的 python 代码 它演示了一个非常简单的字典版本控制设计 def build current history current for action key value in history assert action in
  • 简单的openGL程序无法在ubuntu中链接

    我正在尝试进入 opengl 编程 但无法编译我的第一个非常非常简单的程序 链接过程每次都会失败 我发现这个答案 https stackoverflow com questions 859501 learning opengl in ubu
  • 核心中的 find_by() 和 FinderMethods 中的 find_by() 有什么区别?

    目前我正在开发一个 gem 它会覆盖 ActiveRecordswhere 通过研究 我偶然发现了两种不同的find by实施 一个是在core https github com rails rails blob 5 0 stable ac
  • 显示其 diff 包含特定字符串的所有提交

    正如标题所说 我想找到每个差异包含特定字符串的提交 目前 我使用 git log p filename 它显示了不太像每个差异的界面 我在其中搜索字符串 然后我回溯以找到实际的提交消息 简单的替代方案可能是将 git log p 通过管道传
  • 本地提交推送到中央服务器

    在工作中 我们使用 perforce 并被鼓励定期对其进行承诺 我对此很满意 然而 我想运行像 Mercurial 这样的东西 这样我就可以在本地提交正在进行的工作并且不一定编译 运行的东西 然后从中定期提交到中央 perforce 服务器
  • Ruby 空白:{ :a => 1 } 比 {:a => 1} 更好吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 看看其他人的代码 在花括号块内包含额外的空格似乎很常见 这是有原因的吗 对我来说 这似乎增加了额外的击键 从而增加了丑陋 特别是当事情嵌套时 l
  • 机架测试失败:JSON 请求尚未响应

    我正在尝试为我的 Ruby 项目创建一个 JSON API 如下所示Ticketee https github com rails3book ticketeeYehuda Katz 书中提供的示例Rails 3 实际应用 http www
  • Capybara::ElementNotFound:无法找到字段“标题”

    我无法解决这个问题 请帮我 它给了我找不到元素的错误 规格 功能 todos create spec rb require spec helper describe Creating todos do let user FactoryGir
  • 在 Ruby Net::HTTP.start 中为服务调用设置 read_timeout

    我想在我的 ruby 代码中覆盖服务调用的默认超时 我打开连接如下 res Net HTTP start task url host task url port do http http get tasks task id end 我尝试将
  • 帮助重构这个讨厌的 Ruby if/else 语句

    所以我有这个大而多毛的 if else 语句 我将跟踪号码传递给它 然后它确定它是什么类型的跟踪号码 我怎样才能简化这件事 具体来说就是想减少代码行数 if num length lt 8 tracking service false el
  • 测量大型源树中的“接近度”

    作为我之前提出的问题的一部分找到两个来源之间的最佳匹配 https stackoverflow com questions 13898659 finding what git commit some code spawned from 其中
  • 检查数组元素的大小是否相同

    有没有最好 最有效的方法来检查数组元素的大小是否相同 1 2 3 4 5 gt false 1 2 3 4 5 6 gt true 我有什么 def element of same size arr arr map size uniq si
  • git 查找胖提交

    是否可以获取有关每次提交中的更改浪费了多少空间的信息 以便我可以找到添加了大文件或大量文件的提交 这一切都是为了尝试减少 git repo 的大小 变基并可能过滤提交 你可以这样做 git ls tree r t l full name H
  • 包括来自raw.github.com的js

    我有一个 github com 演示页面 链接到https raw github com master file js https raw github com master file js这样我就不需要总是复制 js文件转移到gh pag

随机推荐

  • Java 集合 sort()

    今天我们将研究Java集合的排序方法 在与java中的集合 我们经常需要对数据进行排序 Java 集合 sort Java Collections类为我们提供了非常方便的方法Collections sort 对所有进行排序List实施例如链
  • 提高 React 应用程序性能的 5 个技巧

    您的 React 应用程序是否感觉有点迟缓 您是否因为可能看到的内容而害怕打开 Chrome DevTools 中的 paint flash 试试这 5 个性能技巧 本文包含 React 开发的 5 个性能技巧 您可以使用此目录快速浏览本文
  • 如何在 Linux 上读取和设置环境变量和 Shell 变量

    介绍 当通过 shell 会话与服务器交互时 shell 会编译许多信息来确定其行为和对资源的访问 其中一些设置包含在配置设置中 而其他设置则由用户输入确定 shell 跟踪所有这些设置和详细信息的一种方法是通过它维护的一个称为环境 环境是
  • Python 当前日期时间

    我们可以使用Python datetime模块来获取本地系统的当前日期和时间 from datetime import datetime Current date time in local system print datetime no
  • 如何在 CentOS 7 上安装和使用 Docker

    介绍 Docker 是一个应用程序 可以让在容器中运行应用程序进程变得简单 容易 就像虚拟机一样 只是更便携 更资源友好 更依赖于主机操作系统 有关 Docker 容器的不同组件的详细介绍 请查看Docker 生态系统 常用组件简介 在 C
  • 如何在 Ubuntu 18.04 上安装/卸载 NodeJS

    NodeJS 是一个 JavaScript 框架 可让您轻松构建快速的网络应用程序 在本指南中 我们将深入研究如何在 Ubuntu 18 04 上安装 NodeJS 步骤 1 将 NodeJS PPA 添加到 Ubuntu 18 04 首先
  • 在 C/C++ 中使用 getch() 函数

    在本文中 我们将了解在 C C 中使用 getch 函数 如果您想读取从键盘输入的字符 getch 函数非常有用 虽然这不是 C 标准的一部分 但这仍然是 POSIX C 函数 因此 我们仍然可以在 Windows Linux Mac 上使
  • 如何保护 Ubuntu 14.04 上的 Redis 安装

    介绍 Redis 是一种内存中 NoSQL 键值缓存和存储 也可以持久保存到磁盘上 本教程展示如何实现 Redis 服务器的基本安全性 但是 请记住 Redis 是为以下用户而设计的 值得信赖的客户 in a 可信环境 本身没有强大的安全功
  • Python 漂亮打印 JSON

    我们可以使用Python json 模块漂亮地打印 JSON 数据 建议使用 json 模块来处理 JSON 文件 我们可以使用dumps 方法来获取格式漂亮的 JSON 字符串 1 Python漂亮打印JSON字符串 import jso
  • 如何在 JavaScript 中使用运算符进行数学运算

    介绍 数学运算是任何编程语言最基本和通用的功能之一 在 JavaScript 中 数字经常用于常见任务 例如查找浏览器窗口大小 获取货币交易的最终价格以及计算网站文档中元素之间的距离 尽管对数学的高度理解并不是成为一名有能力的开发人员的先决
  • 如何实现SQL INSTR()函数?

    嘿伙计 在这篇文章中 我们将了解SQL INSTR 函数详细 SQL INSTR 的工作原理 SQL 作为一种查询语言 包含各种内置函数来处理数据库的字符串数据值 SQL INSTR 函数就是这样一个有趣的函数 SQL INSTR func
  • Java 从 URL 下载文件

    今天我们将学习如何用java从URL下载文件 我们可以用java net URL openStream java程序中从URL下载文件的方法 我们可以使用Java NIO Channels或Java IO InputStream从URL打开
  • 如何在Java中合并两个列表?

    在 Java 中合并两个列表通常是一个有用的操作 这些列表可以是 ArrayList 或 LinkedList 如何在 Java 中合并两个列表 在 Java 中 我们可以通过多种方式合并两个列表 让我们探索一些简单的方法来完成您的工作 1
  • 如何在 Ubuntu 18.04 上使用 Let's Encrypt 保护 Apache

    介绍 Let s Encrypt 是一个证书颁发机构 CA 提供免费获取和安装的方法TLS SSL 证书 从而在 Web 服务器上启用加密的 HTTPS 它通过提供软件客户端简化了流程 Certbot 它尝试自动化大多数 如果不是全部 所需
  • 如何在 CentOS 6 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈

    Status 已弃用 本文介绍不再受支持的 CentOS 版本 如果您当前运行的服务器运行 CentOS 6 我们强烈建议您升级或迁移到受支持的 CentOS 版本 Reason CentOS 6 于 2020 年 11 月 30 日达到生
  • 如何在 Ubuntu 16.04 上安装 Docker Compose

    介绍 Docker是一个很好的工具 用于在软件容器内自动部署 Linux 应用程序 但要充分利用其潜力 应用程序的每个组件都应该在自己的单独容器中运行 对于具有大量组件的复杂应用程序 编排所有容器一起启动 通信和关闭可能很快就会变得笨拙 D
  • 如何在 Ubuntu 12.04 上安装 IonCube Loader

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • 如何在 Ubuntu 12.04 上安装 Git

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • Android 日期时间选择器对话框

    Android 日期时间选择器在 Android 应用程序中被大量使用 在本教程中 我们将演示如何使用日期选择器 and 定时器选择器我们的 Android 应用程序中的对话框 这些组件用于在自定义用户界面中选择日期和时间 我们将使用Dat
  • 如何将 GitLab 设置为您自己的私有 GitHub 克隆

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级