gitlab分为gitlab-ce和gitlab-ee,gitlab-ce可以免费使用,因此此处用的是gitlab-ce。
安装系统要求
官方资料: https://docs.gitlab.com/ee/install/requirements.html
硬件要求
CPU
CPU 要求取决于用户数量和预期工作负载。您的确切需求可能更多,具体取决于您的工作量。
- 4 核是建议的最低核数,最多支持 500 个用户
- 8 核最多支持 1000 个用户
- 更多用户?查阅参考架构页面
内存
建议您的服务器上至少有 2 GB 的交换空间,即使您当前有足够的可用 RAM。如果您的可用内存发生变化,交换有助于减少发生错误的可能性。
- 4 GB RAM是所需的最小内存大小,最多支持 500 个用户
- 8 GB RAM 支持多达 1000 个用户
软件要求
Redis 版本
GitLab 13.0 及更高版本需要 Redis 5.0 或更高版本。
建议使用 Redis 6.0 或更高版本,因为这是从 GitLab 13.9 开始随附的 Omnibus GitLab软件包。
数据库
GitLab 版本 | PostgreSQL 最低版本 |
---|---|
13.0 | 11 |
14.0 | 12.7 |
15.0 | 12.10 |
16.0(计划中) | 13.6 |
您还必须确保将以下扩展加载到每个 GitLab 数据库中。
扩展 | GitLab 最低版本 |
---|---|
pg_trgm | 8.6 |
btree_gist | 13.1 |
plpgsql | 11.7 |
安装
官方文档: https://about.gitlab.com/install/#ubuntu
1.安装依赖
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
2.安装 Postfix(或 Sendmail)以发送通知电子邮件
sudo apt-get install -y postfix
在 Postfix 安装期间,可能会出现一个配置屏幕。选择“Internet 站点”并按回车键。使用服务器的外部 DNS 作为“邮件名称”,然后按回车键。如果出现其他屏幕,请继续按 enter 键接受默认设置。
3.配置防火墙(或者执行:ufw disable 关闭防火墙 )
systemctl start ufw
sudo ufw allow https
sudo ufw allow http
sudo ufw allow ssh
sudo ufw enable
sudo ufw status
4.安装gitlab
##添加GitLab包仓库
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
##查看可安装版本
apt list |grep gitlab
##安装最新的gitlab-ce版本,并启用HTTPS
#sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install -y gitlab-ce
##因某墙的原因请勿启用HTTPS,安装指定版本的gitlab-ce
sudo EXTERNAL_URL="http://gitlab.example.com" apt-get install -y gitlab-ce=15.8.3-ce.0
- GitLab 默认安装路径: /var/opt/gitlab
- 默认情况下,不启用 HTTPS。如果external_url 配置使用 HTTPS 协议且未配置其他证书,则默认 [启用Let's Encrypt](https://docs.gitlab.com/omnibus/settings/ssl/index.html)
5.配置并启动GitLab
# 首次启动也需要以下命令加载配置,完成初始化
sudo gitlab-ctl reconfigure
#启动gitlab
sudo gitlab-ctl restart
sudo gitlab-ctl status
##设置GitLab开机自启
systemctl enable gitlab-runsvdir.service
6.访问GitLab Web界面
打开Web浏览器,访问 https://gitlab.example.com
默认使用root 用户名登录,除非您在安装过程中提供了自定义密码,否则将在 /etc/gitlab/initial_root_password 中随机生成一个密码存储 24 小时 .
GitLab配置更改
官方文档: https://docs.gitlab.com/omnibus/settings/configuration.html
当gitlab安装完成后,根据自己的环境,要修改配置。如:
- gitlab修改nginx端口,绑定IP等
- gitlab修改ssh端口
- gitlab修改访问url等
- gitlab修改数据库类型(这个没必要,因为这里的数据库只存储些用户名,gitlab代码放在/var/opt/gitlab/git-data/下)
- gitlab修改redis,gunicorn配置等等
所有的配置在/etc/gitlab/gitlab.rb中修改,修改完配置后执行gitlab-ctl reconfigure生效
基本配置
1. 编辑/etc/gitlab/gitlab.rb
# 修改成你的url地址
external_url "http://gitlab.example.com"
### GitLab Shell settings for GitLab
gitlab_rails['gitlab_shell_ssh_port'] = 22
gitlab_rails['gitlab_shell_git_timeout'] = 800
#停止非必要组件,节约系统资源
logrotate['enable'] = false
prometheus['enable'] = false
grafana['enable'] = false
alertmanager['enable'] = false
node_exporter['enable'] = false
2. 重新配置 GitLab:
sudo gitlab-ctl reconfigure
修改默认存储位置
默认情况下,GitLab 将 Git 存储库数据存储在 /var/opt/gitlab/git-data. 存储库存储在名为 repositories.
1. 创建gitlab 数据目录并授权
mkdir -p /data/gitlab/git-data
chown -R git:git /data/gitlab
chmod -R +x /data
2. 编辑/etc/gitlab/gitlab.rb:
##要更改父目录的位置git-data:
git_data_dirs({ "default" => { "path" => "/data/gitlab/git-data" } })
##你也可以添加多个 Git 数据目录,目标目录及其任何子路径都不能是符号链接
git_data_dirs({
"default" => { "path" => "/data/gitlab/git-data" },
"alternative" => { "path" => "/data/nas/git-data" }
})
##可选,将存储库同步到新位置。注意后面没有斜杠 repositories,但是后面有一个斜杠git-data:
#sudo rsync -av --delete /data/gitlab/git-data/repositories /data/nas/git-data/
3. 重新配置 GitLab:
##停止当前gitlab,重新加载配置
sudo gitlab-ctl stop
sudo gitlab-ctl reconfigure
##重新加载后,会发现在/data/gitlab/git-data 目录下多出一个repositories目录
##最后启动gitlab即可
sudo gitlab-ctl restart
修改备份文件默认目录
官方文档: https://docs.gitlab.com/omnibus/settings/backups.html
1. 创建gitlab 数据目录并授权
mkdir -p /data/backup/gitlab
# 赋予目录权限,否则重新加载配置会报权限错误
chmod -R 0644 /data/backup/gitlab
chmod -R +x /data/
2. 修改/etc/gitlab/gitlab.rb来修改默认存放备份文件的目录:
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/backup/gitlab"
gitlab_rails['backup_archive_permissions'] = 0644
##将备份生存期限制为 7 天 - 604800 秒
gitlab_rails['backup_keep_time'] = 604800
3. 重新加载配置,并重启服务
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
配置外部数据库
1. 数据库环境配置
我使用的云数据库,部署步骤忽略
##为 GitLab 创建数据库用户
sudo -u postgres psql -d template1 -c "CREATE USER git CREATEDB;"
##修改用户密码
sudo -u postgres psql -d template1 -c "alter user git with password '12345.com';"
###创建pg_trgm扩展
sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
##创建btree_gist扩展 (required for GitLab 13.1+):
sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS btree_gist;"
##创建plpgsql扩展
sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS plpgsql;"
##创建 GitLab 生产数据库并授予对数据库的所有权限:
sudo -u postgres psql -d template1 -c "CREATE DATABASE gitlabhq_production OWNER git;"
- 验证测试
##尝试使用新用户连接到新数据库:
sudo -u git -H psql -d gitlabhq_production
##检查是否启用了pg_trgm扩展:
SELECT true AS enabled
FROM pg_available_extensions
WHERE name = 'pg_trgm'
AND installed_version IS NOT NULL;
##如果启用扩展,这将生成以下输出:
enabled
---------
t
(1 row)
##检查是否启用了btree_gist扩展:
SELECT true AS enabled
FROM pg_available_extensions
WHERE name = 'btree_gist'
AND installed_version IS NOT NULL;
##如果启用扩展,这将生成以下输出:
enabled
---------
t
(1 row)
##检查是否启用了 plpgsql 扩展:
SELECT true AS enabled
FROM pg_available_extensions
WHERE name = 'plpgsql'
AND installed_version IS NOT NULL;
##如果启用扩展,这将生成以下输出:
enabled
---------
t
(1 row)
Quit the database session:
gitlabhq_production> \q
2. 编辑/etc/gitlab/gitlab.rb:
# Disable the built-in Postgres
postgresql['enable'] = false
# Fill in the connection details for database.yml
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['db_host'] = '127.0.0.1'
gitlab_rails['db_port'] = 5432
gitlab_rails['db_username'] = 'git' #上面创建的数据库用户
gitlab_rails['db_password'] = '12345.com' #上面创建的数据库用户密码
注意:
- /etc/gitlab/gitlab.rb应该具有文件权限,0600因为它包含纯文本密码。 PostgreSQL 允许监听多个地址 如果您在 , 中使用多个地址gitlab_rails['db_host'],以逗号分隔,列表中的第一个地址将用于连接。
3. 重新配置 GitLab以使更改生效
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
重置密码
官方文档:https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password. Rake 任务可以将用户名作为参数。例如,要为root用户重置密码 :
sudo gitlab-rake "gitlab:password:reset[root]"
邮箱设置
官方文档: https://docs.gitlab.com/omnibus/settings/smtp.html
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxx@163.com"
gitlab_rails['smtp_password'] = "xxxxxxxxxxx" #授权码
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'xxx@163.com'
SSL 配置
官方文档: https://docs.gitlab.com/omnibus/settings/ssl/
启用 Let's Encrypt
- 编辑/etc/gitlab/gitlab.rb和添加或更改以下条目:
## GitLab instance
external_url "https://gitlab.example.com" # Must use https protocol
letsencrypt['contact_emails'] = ['foo@email.com'] # Optional
## Container Registry (optional), must use https protocol
registry_external_url "https://registry.example.com"
#registry_nginx['ssl_certificate'] = "path/to/cert" # Must be absent or commented out
## Mattermost (optional), must use https protocol
mattermost_external_url "https://mattermost.example.com"
- 证书每 90 天过期一次。您指定的电子邮件地址会contact_emails在到期日期临近时收到警报。
- GitLab 实例是证书上的主域名。Container Registry 等附加服务作为备用域名添加到同一证书中。在上面的示例中,主域是gitlab.example.com,Container Registry 域是registry.example.com. 您无需设置通配符证书。
- 重新配置 GitLab:
sudo gitlab-ctl reconfigure
自动更新证书
默认安装计划在每个月的第 4 天午夜后更新。分钟由 external_url 中的值确定,以帮助在上游 Let's Encrypt 服务器上分配负载。 要明确设置续订时间:
- 编辑/etc/gitlab/gitlab.rb:
# Renew every 7th day of the month at 12:30
letsencrypt['auto_renew_hour'] = "12"
letsencrypt['auto_renew_minute'] = "30"
letsencrypt['auto_renew_day_of_month'] = "*/7"
- 重新配置 GitLab:
sudo gitlab-ctl reconfigure
仅当证书在 30 天后到期时才会更新证书。例如,如果您将其设置为每月 1 日 00:00 续订,证书在 31 日到期,则证书将在续订前过期。
禁用自动续订:
- 编辑/etc/gitlab/gitlab.rb:
letsencrypt['auto_renew'] = false
- 重新配置 GitLab:
sudo gitlab-ctl reconfigure
手动更新证书
使用以下任一命令手动更新 Let's Encrypt 证书:
sudo gitlab-ctl reconfigure
sudo gitlab-ctl renew-le-certs
前面的命令仅在证书即将到期时生成更新。
运维操作
##启动所有 gitlab 组件:
sudo gitlab-ctl start
##停止所有 gitlab 组件:
sudo gitlab-ctl stop
##重启所有 gitlab 组件:
sudo gitlab-ctl restart
##查看服务状态
sudo gitlab-ctl status
##启动服务
sudo gitlab-ctl reconfigure
##修改默认的配置文件
sudo vim /etc/gitlab/gitlab.rb
##查看版本
sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
##系统内核调优
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl -p
echo never > /sys/kernel/mm/transparent_hugepage/enabled
##检查gitlab
gitlab-rake gitlab:check SANITIZE=true --trace
##查看日志
sudo gitlab-ctl tail
GitLab汉化
备份恢复
官方文档:https://docs.gitlab.com/15.8/ee/raketasks/backup_gitlab.html
备份
- GitLab 12.2 或更高版本:
sudo gitlab-backup create
- GitLab 12.1 及更早版本:
gitlab-rake gitlab:backup:create
- 如果您从源代码安装 GitLab,请使用以下命令:
sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
确认存档可以传输
为确保生成的存档可由 rsync 传输,您可以设置该GZIP_RSYNCABLE=yes 选项。这会将--rsyncable选项设置为,这仅在与设置备份文件名选项gzip结合使用时才有用。
sudo gitlab-backup create BACKUP=dump GZIP_RSYNCABLE=yes
GitLab 12.1 及更早版本的用户应改用该命令gitlab-rake gitlab:backup:create。
跳过 tar 创建
使用对象存储进行备份时,无法跳过 tar 创建。 添加tar到SKIP变量中会将包含备份的文件和目录保留在用于中间文件的目录中。创建新备份时会覆盖这些文件,因此您应确保将它们复制到别处,因为系统上只能有一个备份。
sudo gitlab-backup create SKIP=tar
备份策略选项
默认备份策略基本上是使用 Linux 命令将数据从各个数据位置流式传输到备份tar。gzip这在大多数情况下工作正常,但当数据快速变化时可能会导致问题。 当tar读取数据时数据发生变化,file changed as we read it可能会发生错误,并导致备份过程失败。为了解决这个问题,8.17 引入了一种名为copy. tar该策略在调用and之前将数据文件复制到临时位置gzip,从而避免了错误。
sudo gitlab-backup create STRATEGY=copy
GitLab 12.1 及更早版本的用户应改用该命令gitlab-rake gitlab:backup:create。
增量备份
增量存储库备份可能比完整存储库备份更快,因为它们仅将自上次备份以来的更改打包到每个存储库的备份包中。增量备份存档没有相互链接:每个存档都是实例的独立备份。必须有一个现有备份才能从以下位置创建增量备份:
在 GitLab 14.9 和 14.10 中,使用BACKUP=<timestamp_of_backup>选项选择要使用的备份。所选的先前备份将被覆盖。 在 GitLab 15.0 及更高版本中,使用PREVIOUS_BACKUP=<timestamp_of_backup>选项选择要使用的备份。默认情况下,会按照备份时间戳部分中的说明创建备份文件。您可以通过设置环境变量[TIMESTAMP]来覆盖文件名部分 。 BACKUP
要创建增量备份,请运行:
sudo gitlab-backup create INCREMENTAL=yes PREVIOUS_BACKUP=<timestamp_of_backup>
要从已压缩的备份创建未压缩的增量备份,请使用SKIP=tar:
sudo gitlab-backup create INCREMENTAL=yes SKIP=tar
上传到本地挂载的共享
您可以使用 Fog Local 存储提供程序将备份发送到本地装载的共享(例如 NFS、CIFS 或 SMB)。
为此,您必须设置以下配置键:
-
backup_upload_connection.local_root: 备份复制到的安装目录。
-
backup_upload_remote_directory: backup_upload_connection.local_root 目录的子目录。如果它不存在,则会创建它。如果要将压缩包复制到挂载目录的根目录,请使用 ..
-
配置上传到本地安装的共享
##编辑/etc/gitlab/gitlab.rb:
gitlab_rails['backup_upload_connection'] = {
:provider => 'Local',
:local_root => '/mnt/backups'
}
# The directory inside the mounted folder to copy backups to
# Use '.' to store them in the root directory
gitlab_rails['backup_upload_remote_directory'] = 'gitlab_backups'
- 对于源安装:
##编辑home/git/gitlab/config/gitlab.yml:
backup:
upload:
# Fog storage connection settings, see https://fog.io/storage/ .
connection:
provider: Local
local_root: '/mnt/backups'
# The directory inside the mounted folder to copy backups to
# Use '.' to store them in the root directory
remote_directory: 'gitlab_backups'
重新启动 GitLab 以使更改生效。
备份定时任务
1. 为用户编辑 crontab root:
sudo su -
crontab -e
2. 在那里,添加以下行以安排每天凌晨 2 点进行备份:
0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1
GitLab 12.1 及更早版本的用户应改用该命令gitlab-rake gitlab:backup:create。
卸载
要卸载 Linux 软件包,您可以选择保留数据(存储库、数据库、配置)或全部删除:
1. 可选的,在删除 GitLab 包之前删除 由 Omnibus GitLab 创建的所有用户和组apt(使用或yum):
sudo gitlab-ctl stop && sudo gitlab-ctl remove-accounts
如果您在删除帐户或组时遇到问题,请运行userdel或groupdel手动删除它们,您可能还想从 /home/ 中手动删除剩余的用户主目录。
2. 选择是保留数据还是全部删除数据:
- 要保留您的数据(存储库、数据库、配置),请停止 GitLab 并删除其监督进程:
sudo systemctl stop gitlab-runsvdir
sudo systemctl disable gitlab-runsvdir
sudo rm /usr/lib/systemd/system/gitlab-runsvdir.service
sudo systemctl daemon-reload
sudo gitlab-ctl uninstall
- 要删除所有数据:
sudo gitlab-ctl cleanse && sudo rm -r /opt/gitlab
3. 卸载软件包:
# Debian/Ubuntu
sudo apt remove gitlab-ce
# RedHat/CentOS
sudo yum remove gitlab-ce
升级
官方文档:https://docs.gitlab.com/14.0/ee/update/
迁移
把备份文件拷贝到gitlab的备份目录下,根据上面gitlab恢复步骤即可。