git,  linux

gitlab安装、备份、恢复、更新

引言

GitLab社区版简介

GitLab社区版是一个开源的代码托管平台,为团队提供了全面的协作工具,涵盖了代码管理、问题跟踪、持续集成等功能。其开源性质使其成为许多开发团队和个人开发者的首选工具之一。

GitLab社区版的主要特点包括:

  1. 版本控制系统(VCS)整合: GitLab支持Git作为其主要的版本控制系统,为用户提供了强大的代码管理功能。用户可以方便地跟踪代码的变更、合并请求等。
  2. 全面的协作工具: 除了版本控制,GitLab还提供了问题跟踪、代码审查、Wiki等协作工具,使团队成员之间能够更轻松地合作,提高开发效率。
  3. 持续集成与持续交付(CI/CD): GitLab内置了CI/CD功能,允许用户在代码提交后自动构建、测试和部署应用程序,帮助确保代码质量和加速交付。
  4. 灵活的部署选项: GitLab支持本地安装和托管服务两种部署方式,使用户能够根据团队需求选择最适合的部署方式。

为什么选择GitLab社区版

  1. 开源和免费: GitLab社区版是开源的,并且提供免费使用,这使得小型团队和个人开发者能够充分利用其功能而无需支付高昂的费用。
  2. 综合性功能: GitLab不仅仅是一个代码仓库托管工具,它还集成了许多其他开发工具,如问题跟踪、CI/CD等,为团队提供了全面的解决方案。
  3. 强大的性能: GitLab通过优化和增强功能,提供了稳定且高性能的服务,使得大规模项目也能够轻松应对。
  4. 活跃的社区支持: GitLab有一个庞大且活跃的社区,用户可以在社区中获取支持、分享经验,以及参与对平台的改进。

安装准备

  1. 硬件要求:
    • 至少4GB RAM,推荐8GB或更多,以确保系统能够处理GitLab的工作负载。
    • 多核处理器,以提高并发性能。
  2. 操作系统:
    • GitLab 支持多种 Linux 发行版,包括 Ubuntu、Debian、CentOS、Red Hat Enterprise Linux(RHEL)等。选择一个你熟悉并且在你的环境中稳定运行的发行版。本文介绍Ubuntu安装方式。
  3. 存储空间:
    • 至少20GB的可用磁盘空间。具体的需求可能会因项目数量和仓库大小而变化。
  4. 网络配置:
    • 确保服务器能够访问互联网,以便下载和安装依赖项和 GitLab 软件包。
    • 配置防火墙以允许 GitLab 使用的端口,通常是80(HTTP)和443(HTTPS)。
  5. 域名和主机名:
    • 配置服务器的域名和主机名,确保它们正确解析,并且你的 SSL 证书(如果使用 HTTPS)与域名匹配。
  6. 数据库:
    • 如果使用内置 PostgreSQL 数据库,确保系统上没有其他进程使用 PostgreSQL 默认端口(5432)。
    • 如果使用外部数据库,确保数据库服务器可从 GitLab 服务器访问。
  7. 邮件服务器:
    • 配置邮件服务器,以便 GitLab 能够发送通知邮件。你可以选择使用本地邮件服务器或者集成外部邮件服务。
  8. Swap 分区:
    • 建议设置 Swap 分区,以便在系统内存不足时提供额外的虚拟内存支持。具体的大小根据系统配置和需求而定。

安装gitlab

安装依赖包

apt install ca-certificates curl openssh-server postfix tzdata perl

添加gitlab-ce源

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

查看可安装版本

apt-cache madison gitlab-ce

安装指定版本的gitlab-ce

apt-get install gitlab-ce=16.6.2-ce.0

修改gitlab-ce配置文件

vim /etc/gitlab/gitlab.rb

1)如果你只想通过ip访问,只需要配置

external_url 'http://xxx.xxx.xxx.xxx'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
nginx['listen_addresses'] = ['*', '[::]']
prometheus['enable'] = false
prometheus_monitoring['enable'] = false

配置讲解:

  • external_url:访问地址
  • gitlab_rails[‘time_zone’]:时区
  • nginx[‘listen_addresses’]:nginx同时监听ipv4和ipv6
  • prometheus[‘enable’]:启用或禁用 GitLab 内置的 Prometheus 服务
  • prometheus_monitoring[‘enable’]:启用或禁用 GitLab 的监控功能,该功能使用 Prometheus 进行度量和监控

2)如果你想通过域名(http)访问,只需要配置

external_url 'http://域名'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
nginx['listen_addresses'] = ['*', '[::]']
prometheus['enable'] = false
prometheus_monitoring['enable'] = false

配置讲解:

  • external_url:访问地址
  • gitlab_rails[‘time_zone’]:时区
  • nginx[‘listen_addresses’]:nginx同时监听ipv4和ipv6
  • prometheus[‘enable’]:启用或禁用 GitLab 内置的 Prometheus 服务
  • prometheus_monitoring[‘enable’]:启用或禁用 GitLab 的监控功能,该功能使用 Prometheus 进行度量和监控

3)如果你想通过域名(https)访问,只需要配置

external_url 'https://域名'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/privkey.pem"
nginx['listen_addresses'] = ['*', '[::]']
prometheus['enable'] = false
prometheus_monitoring['enable'] = false

配置讲解:

  • external_url:访问地址
  • gitlab_rails[‘time_zone’]:时区
  • nginx[‘redirect_http_to_https’]:是否开启http跳转到https
  • nginx[‘ssl_certificate’]:域名对应的ssl证书文件
  • nginx[‘ssl_certificate_key’]:域名对应的ssl证书文件
  • nginx[‘listen_addresses’]:nginx同时监听ipv4和ipv6
  • prometheus[‘enable’]:启用或禁用 GitLab 内置的 Prometheus 服务
  • prometheus_monitoring[‘enable’]:启用或禁用 GitLab 的监控功能,该功能使用 Prometheus 进行度量和监控

4)如果你想gitlab能发邮件,你需要配置

gitlab_rails['smtp_enable'] =
gitlab_rails['smtp_address'] =
gitlab_rails['smtp_port'] = 
gitlab_rails['smtp_user_name'] =
gitlab_rails['smtp_password'] = 
gitlab_rails['smtp_domain'] = 
gitlab_rails['smtp_authentication'] =
gitlab_rails['smtp_enable_starttls_auto'] =
gitlab_rails['smtp_tls'] =
gitlab_rails['gitlab_email_from'] = 
gitlab_rails['gitlab_email_reply_to'] =

使配置生效

gitlab-ctl reconfigure

默认账号密码

  • 默认账号:root
  • 密码:/etc/gitlab/initial_root_password

备份gitlab

实现每天凌晨2点进行一次自动备份:

vim /root/gitlab_backup.sh
#!/bin/bash

# 定义备份目录和其他配置
BACKUP_DIR="/var/opt/gitlab/backups"
RETENTION_PERIOD=3  # 保留期限(天)

# 创建 GitLab 仓库备份
/opt/gitlab/bin/gitlab-rake gitlab:backup:create


# 删除过期备份
find "$BACKUP_DIR" -type f -mtime +$RETENTION_PERIOD -exec rm {} \;

echo "Backup and clean-up process complete."

脚本赋予执行权限

chmod +x /root/gitlab_backup.sh

添加计划任务

crontab -e
0 2 * * * /root/gitlab_backup.sh

恢复gitlab

前提条件:
新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同. 比如新服务器安装的是最新的16.6.2版本的Gitlab, 那么迁移之前, 最好将老服务器的Gitlab 升级为16.6.2在进行备份,否则在新服务器上恢复不了。

1)停止 GitLab 的 Web 服务器(Puma)和后台作业处理器(Sidekiq)

gitlab-ctl stop puma
gitlab-ctl stop sidekiq

2)配置文件保持一致

/etc/gitlab/gitlab.rb
/etc/gitlab/gitlab-secrets.json
/var/opt/gitlab/.ssh/authorized_keys
  • /etc/gitlab/gitlab.rb(配置文件):

这个文件包含了 GitLab 的主要配置设置,如数据库配置、外部服务连接信息、各种服务的配置参数等。
保持一致性确保在恢复后的 GitLab 实例中,所有的服务、特性和设置都将与备份时的状态相匹配,这对于系统的稳定运行至关重要。

  • /etc/gitlab/gitlab-secrets.json(密钥文件):

该文件存储了用于加密的密钥,包括用于保护敏感数据如用户密码、两因素认证、CI/CD 变量等的密钥。
保持一致性是必要的,因为在恢复数据时,这些加密的数据需要用相同的密钥进行解密,以保证数据的可访问性和完整性。

  • /var/opt/gitlab/.ssh/authorized_keys(SSH 访问控制文件):

这个文件包含了允许通过 SSH 访问 GitLab 仓库的用户的公钥。
保持一致性意味着在备份和恢复之间,用户的 SSH 访问权限保持不变,从而保证了用户在恢复的系统上仍能以相同的方式访问 GitLab 仓库。

3)使用 GitLab 提供的 gitlab-rake 命令来恢复备份。替换 [BACKUP_FILE] 为你的备份文件名(不包括 _gitlab_backup.tar 部分)。

chown git:git 备份文件
gitlab-rake gitlab:backup:restore BACKUP=[BACKUP_FILE]

举例说明:
备份文件名为:1702836025_2023_12_18_16.6.2_gitlab_backup.tar
恢复备份命令:gitlab-rake gitlab:backup:restore BACKUP=1702836025_2023_12_18_16.6.2

4)如果恢复过程中遇到下面的报错,请忽略
可参考:https://docs.gitlab.com/ee/administration/backup_restore/restore_gitlab.html

Restoring PostgreSQL database gitlabhq_production ... ERROR:  must be owner of extension pg_trgm
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension pg_trgm

5)重置配置

gitlab-ctl reconfigure

6)启动gitlab相关服务,并查看状态

gitlab-ctl start
gitlab-ctl start puma 
gitlab-ctl start sidekiq
gitlab-ctl status

7)执行 GitLab 系统完整性检查

gitlab-rake gitlab:check SANITIZE=true

至此你已经恢复备份

更新gitlab

注意,gitlab 更新,一次只能更新一个次版本,比如 13.10.x 只能更新到 13.11.x , 而不能只能 13.12.x。另外,不同版本对于 postgresql 数据库版本也不尽相同,高版本有时候会采用更高版本的 postgresql 数据库,也要随着更新。

更新要点:
先登录到 git.easeware.net, 访问 git.easeware.net/help 查看当前版本
之后到服务器上,查看所有版本的gitlab,然后一次跳一个次版本号这样去更新

备份

/opt/gitlab/bin/gitlab-rake gitlab:backup:create

查看当前版本

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

查看可更新版本

apt-cache madison gitlab-ce

更新(替换latest_version为版本号)

apt-get install gitlab-ce=latest_version-ce.0

留言

您的电子邮箱地址不会被公开。 必填项已用 * 标注