本地GitLab存储库镜像到外部GitLab存储库
如果你一直在考虑为个人项目设置Git server ,但没有时间,现在就是时机。我想现在是时候建立一个本地的GitLab安装了,因为Proxmox可以为任何东西托管容器/虚拟机。
理想情况下,你希望把所有更新推送到本地的GitLab服务器上,然后再无缝转移到远程的GitLab.com 仓库。
幸运的是,GitLab免费版的仓库镜像功能使之成为可能你可以在镜像仓库的同时推送和拉取更新。
拉取更新不是免费的,但推送更新是免费的。这样做很好,因为你只需要推送更新就可以达到目的。
安装Gitlab
我们将在Proxmox的LXC容器上设置Ubuntu的区域设置并安装Gitlab。根据GitLab的说明,安装依赖关系和创建新的仓库一样简单。
在Ubuntu上使用经典的软件包仓库安装程序遵循一个相对标准的程序。
只需使用下面的命令来安装所需的依赖项、软件包仓库和GitLab。
以根用户身份登录,以便能够运行本教程中给出的命令。要以根用户身份登录ubuntu,在ubuntu终端上输入命令
sudo su,系统会提示你输入密码以验证用户。
apt-get install -y curl openssh-server ca-certificates tzdata perl
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
EXTERNAL_URL="https://gitlab.example.com" apt-get install GitLab-ee
上面的EXTERNAL URL必须被替换成访问GitLab服务器的正确URL。在设置URL之前,请仔细检查你的主机名/DNS是否配置正确,以便你在安装后能够访问你的GitLab服务器。请记住,要让你的GitLab服务器安装Let's Encrypt证书,你需要为它提供外部访问权限(这是个困难的过程)。
尽管安装过程简单明了,我还是收到了两个警告,其中一个似乎是阻止安装继续进行。
在Ubuntu中设置区域设置
第一个警告是由于没有设置locale。在容器形成过程中,它没有提示你指定locale,因为你用LXC模板在Proxmox中做了一个新的Ubuntu安装,就像传统操作系统的安装一样。
由于安装不完整,我无法访问GitLab的在线界面。
如果你在控制台使用locale命令,而你的locale没有设置,你会得到以下输出。
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_COLLATE="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_TIME="C"
LC_PAPER="C"
LC_NAME="C"
LC_MESSAGES="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_ALL=
可以用下面的命令来创建一个locale。
locale-gen en_US.UTF-8
如果你的系统不支持美国英语,你应该选择一个与下面所示不同的locale。
一旦创建了locale,对系统locale进行如下修改。
update-locale LANG=en_US.UTF-8
为了使修改生效,你需要重新启动你的容器。因为没有根密码,所以无法登录。
修复没有根密码的问题
第二个问题是在整个安装过程中出现的一个错误通知。它声称GitLab的根密码还没有建立。
第一次启动Web界面后,你就可以设置了,但必须在连接到GitLab之后;根据安装说明。
在网站上输入密码后,有必要对其他程序进行更新。我使用了常规的 apt 更新和升级程序。
由于它有一个根密码,所以完成了整个GitLab的安装程序。这个过程一开始我觉得很奇怪,但还是成功了。
GitLab的配置
为了使仓库镜像正常工作,GitLab需要进行最低限度的配置。
与其假定你已经配置好了所有东西,不如让我来介绍一下我认为一切正常工作所需的绝对最低配置。
在你的GitLab安装中配置电子邮件
安装完GitLab后,如果你还没有,请设置你的电子邮件设置。如果你希望通过电子邮件获得来自GitLab服务器的通知,就必须配置电子邮件服务器。
在GitLab的网站上,有各种设置样本。在我的设置中,我利用了Gmail来给我发送电子邮件。
我有时更喜欢使用Gmail,因为我不需要运行本地邮件服务器。
此外,由于你的服务器的邮件不是来自一个知名的邮件服务提供商,所以当它被发送到许多邮件账户时,很可能会被拒绝或被打成垃圾邮件。
在你的本地机器上创建一个GitLab用户
你的项目可能在你的GitLab服务器上没有一个用户账户。如果是这种情况,你可以使用根管理员账户来创建一个。
考虑到你不想利用根用户账户,你将需要这个用户账户来导入你的GitLab.com项目。
没有必要使用与你的GitLab.com 账户相同的用户名。
即使你的GitLab.com 身份与你的本地身份不同,在本地所做的修改也可以使用GitLab.com 用户账户发布到远程仓库。
因此,我通过在两个账户中使用相同的用户名来确保一切看起来都是来自同一个人。
如何从GitLab网站导出GitLab项目
GitLab.com 既然你的本地服务器已经启动并运行,那么就准备好导出你的项目了。在 > ,展开高级部分。Settings General tab
因此,GitLab.com 可能需要一些时间来导出你的项目。可以通过刷新页面来检查导出状态。
此外,还有 "下载导出 "和 "生成新导出 "的按钮。点击 "下载导出的项目"可以获得一份导出的项目副本。
将GitLab项目导入你的本地GitLab服务器
在服务器上创建一个用户账户后,就可以用服务器上创建的用户账户导入GitLab.com 仓库。
导入GitLab项目的步骤如下
- 转到
Projects > GitLab Import页面。必须填写项目名称和项目slug字段,这两个字是用来在仓库中唯一识别项目的。
根据你选择的GitLab安装方式,你会看到项目的URL。它的显示是为了让你能看到你的仓库的整个URL。
一旦你准备好导入,点击工具栏上的Import project 按钮就可以开始了。
在导入项目的过程中,会有一个通知说导入正在进行。
- 导入过程结束后,你会在你的
Projects菜单中看到导入的项目。
配置仓库镜像
你的本地GitLab仓库现在应该有和远程GitLab仓库一样的提交历史和数据。
为了使所有未来的提交都能通过本地GitLab仓库推送,不要对GitLab.com数据库做任何修改。
要配置镜像,请点击Settings > Repositories tab 。然后进入名为镜像仓库的部分,查看相应的镜像设置。
你需要输入你的项目的GitLab.com 仓库的URL,你可以通过点击Clone按钮获得。我将在这个方案中使用HTTPS。
此外,我改变了URL,包括我的GitLab.com 用户名和密码。如果只有一个项目,这可能不是必须的。
对于GitLab.com ,输入用户Password 。完成后,点击镜像仓库,完成设置。
切换到本地的 GitLab 仓库
在导入项目和配置镜像后,你的GitLab服务器必须切换到该仓库。
无论你用哪个IDE/编辑器来切换到你的仓库,如果你利用git命令行,这个技术都能发挥作用。
我将利用命令行的方式,而不是在不同的用户界面上展示例子,因为它应该对所有人都有效。即使你不喜欢命令行工具,这个过程也是非常简单的。
你可以从GitLab托管的项目的Clone 按钮中复制仓库的URL,并在下面的命令中使用它。
git remote set-url origin http://git.carteblanchemunene.com/carteblanhemunene/carte-blanche-munene-website.git
你可以用下面的命令检查你的远程位置是否已经改变。
git remote -v
应该出现以下输出。
origin http://git.carteblanchemunene.com/carteblanchemunene/carte-blanche-munene-website.git (fetch)
origin http://git.carteblanchemunene.com/carteblanchemunene/carte-blanche-munene-website.git (push)
而不是GitLab.com ,你的仓库现在使用的是你的GitLab服务器的URL。
镜像你的仓库就是这么简单。通过提交代码和检查GitLab.com ,测试你的本地仓库所做的修改。
验证正确的镜像配置
你可以去GitLab服务器上的Settings > Repository ,查看镜像仓库部分,来检查仓库镜像是否正常工作。
如果你看最近一次成功的更新,你应该也能看到最近一次不成功的更新尝试。
要仔细检查推送是否成功,请到 GitLab.com 的Repository > Commits 页面,看看你最近的更新是否被推送到了GitLab.com 。
如果一切顺利的话,就会显示最后一次提交。
结论
正如你所看到的,没有必要对镜像 GitLab 仓库感到恐惧。要完成这个过程,你可以导出或导入你的GitLab仓库。
你只需要使用git命令就可以将项目迁移到GitLab服务器上。
当你使用镜像设置时,这将自动使远程仓库保持最新的更新。