ubuntu下安装gitlab 14.5及配置

从12.1开始, CE版本不再支持mysql数据库

当前文档只在14.5.0版本下测试通过!

1. 下载后安装

(镜像)各版本安装包: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/focal/main/g/gitlab-ce

sudo apt-get install wget

# 下载
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/focal/main/g/gitlab-ce/gitlab-ce_14.5.0-ce.0_amd64.deb

# 安装
sudo dpkg -i gitlab-ce_14.5.0-ce.0_amd64.deb

2. 使用自带的nginx和redis等配置

配置文件: /etc/gitlab/gitlab.rb. 仓库默认存储路径是/var/opt/gitlab/git-data(实际存储在下面的repositories, 这个文件夹会自动建立).

gitlab默认的存储路径有2处: /opt/gitlab(程序目录, 大约2Gb), /var/opt/gitlab (程序运行时目录, 大约3Gb, 其中"prometheus"占用2.6G)

这里修改了nginx和redis的端口, 以与单独安装的区分开. (曾尝试使用单独安装的nginx, 参考按照官方文档安装但是配置失败)

在第一次执行reconfigure之前, git.xxx相关的用户账号还没有建立, 所以必须先执行一次sudo gitlab-ctl reconfigure命令

# 修改外部url
external_url 'http://192.168.0.204'


nginx['listen_port'] = 81
gitlab_rails['redis_port'] = 6380
redis['port'] = 6380
# redis不需要集群的话, 有关sentinel的不用改

# 修改文件存储路径, 注意权限设置: `sudo chown -R git.git /www/gitlab/git-data`
git_data_dirs({
    "default" => {
        "path" => "/www/gitlab/git-data"
    }
})

重新配置gitlab(耗时较长):

sudo gitlab-ctl reconfigure

重启:

sudo gitlab-ctl restart

每次修改/etc/gitlab/gitlab.rb后都需要运行sudo gitlab-ctl reconfigure

账号root的初始密码在/etc/gitlab/initial_root_password

gitlab自带nginx的配置文件

/var/opt/gitlab/nginx/conf/nginx.conf, 加载的vhost配置是/var/opt/gitlab/nginx/conf/gitlab-http.conf

注意: 默认的nginx配置文件中没有阻止非绑定域名的解析, 所以需要在每次reconfigure后(restart之前)执行下面这个命令, 以追加配置:

echo "server {listen 81 default_server; server_name _; return 403;}" | sudo tee -a /var/opt/gitlab/nginx/conf/gitlab-http.conf

sudo echo "内容" >> 目标文件 无法执行, 因为">>"的权限无法被提升

3. 备份与恢复

参考官方文档备份和恢复

  • 备份将会创建一个包含所有数据库(用户,权限,job等)、仓库和附件的归档文件
  • 恢复时必须使用相同版本的gitlab.
  • 需要自己设置cron进行备份! 需要自己设置cron进行备份! 需要自己设置cron进行备份!

3.0 备份的相关配置

自定义备份目录需要设置权限:

# 创建目录
sudo mkdir -pv /www/_backup/gitlab
# 设置权限
sudo chown -R git.git /www/_backup/gitlab

修改配置文件 /etc/gitlab/gitlab.rb:

#备份路径, 默认是 /var/opt/gitlab/backups
gitlab_rails['backup_path'] = '/www/_backup/gitlab'

#备份保留时间(秒), 默认是7天, 这里改成30天
gitlab_rails['backup_keep_time'] = 2592000

配置修改后执行 gitlab-ctl reconfigure 更新设置.

3.1 备份

sudo /usr/bin/gitlab-rake gitlab:backup:create

执行结果:

# 这里只是第一次备份的简单的记录, 具体执行时内容可能更多
Creating backup archive: 1638266276_2021_11_30_14.5.0_gitlab_backup.tar ... done
Uploading backup archive to remote storage  ... skipped
Deleting tmp directories ... done
done
done
done
done
done
done
done
Deleting old backups ... done. (0 removed)
Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
Backup task is done.

注意: 重要的文件/etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json需要手动备份

3.2 恢复

恢复操作前确保:

  • 安装和备份的软件版本一致: 区分不同版本(版本/ce/ee)
  • 至少执行过一次配置: sudo gitlab-ctl reconfigure 建议先恢复配置/etc/gitlab/gitlab.rb
  • GitLab在运行: sudo gitlab-ctl start
  • 备份文件的owner是git: sudo chown git.git 备份文件

3.2.0 停止数据库连接:

sudo gitlab-ctl stop puma
# 停止队列
sudo gitlab-ctl stop sidekiq

#检查状态
sudo gitlab-ctl status

3.2.1 执行恢复操作

# 设置备份文件的权限
sudo chown git.git /www/backup/gitlab/1638321295_2021_12_01_14.5.0_gitlab_backup.tar
# 恢复
sudo gitlab-backup restore BACKUP=1638321295_2021_12_01_14.5.0

注意:

  1. 名称不要带备份文件名后面的"_gitlab_backup.tar". 比如备份的文件名是"1638321295_2021_12_01_14.5.0_gitlab_backup.tar", 调用命令时只能使用"1638321295_2021_12_01_14.5.0", 否则会报错: 找不到文件

  2. 不要带路径.

亲测! 带了路径反而找不到

执行恢复操作后, 会在backup文件夹下生成很多tar文件解压的文件(夹)出来, 包括"db/, repositories/, artifacts.tar.gz, backup_information.yml, builds.tar.gz, lfs.tar.gz, pages.tar.gz, uploads.tar.gz", 不过它们会在下次备份时被删除

3.2.3 恢复配置文件

恢复 /etc/gitlab/gitlab.rb, /etc/gitlab/gitlab-secrets.json

3.2.4 重启服务

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
# 校验
sudo gitlab-rake gitlab:check SANITIZE=true

4. Gitlab配置

管理员登录后, 点击Gitlab图标后的 Menu => Admin 进入管理界面.

关闭自动注册

Admin -> Settings -> General -> Sign Uprestrictions -> 取消Sign-up enabled

合并时默认选中"delete source branch"选项, 这个目前没有全局配置, 只能合并时注意了.

用户权限

  • 群组(Group)下添加的用户, 默认会拥有该群组的仓库的权限. 如果用户在某仓库中需要更高的权限, 在该仓库中重新添加该账户并设置更高权限即可.
  • gitlab默认只有维护(maintainer)才有权限merge并push到main, 而开发(developer)没有权限合并(虽然能本地merge,但是不能push)

附件上传大小限制

Admin -> Settings -> General -> Account and limit -> "Maximum attachment size(MB)"

如果调大, 则相应的/etc/gitlab/gitlab.rb配置中的nginx设置也要修改:

nginx['client_max_body_size'] = '1024m'

实测: 本地gitlab中设置1m, 无效, 阻止不了大于1m的文件的push.....

禁止用户创建项目

  • 通用设置: Admin -> Settings -> General -> Account and limit -> "Default projects limit" 设置为0
  • 已有用户: User -> Edit -> Access -> "Projects limit" 设置为 0

禁止用户创建群组(Group)

  • 已有用户: User -> Edit -> Access -> 取消"Can create group"选中

用户角色与权限

官方文档: 用户权限

角色分为: Guest, Reporter, Developer, Maintainer, Owner

普通开发人员设置 developer即可, 可以建立&提交自己的分支, 但是不能合并到master

maintainer/owner: 可以合并分支到master

5. 服务与降低内存使用

gitlab中的各种服务

  • nginx: web服务
  • redis: 消息队列
  • puma: Ruby的http应用服务器. 从13.0开始取代了unicorn成为默认的web服务器
  • prometheus: 监控, 可以关闭
  • grafana: 数据可视化工具, 用以显示Prometheus的指标, 可以关闭.
  • *_exporter: 用于prometheus监控的xxx数据导出, 可以关闭
  • alertmanager: 报警模块, 可以关闭

优化设置参考

# 优化: 减少服务的内存占用
puma['worker_processes'] = 2
postgresql['shared_buffers'] = "128MB"
postgresql['max_worker_processes'] = 4
sidekiq['max_concurrency'] = 2
sidekiq['min_concurrency'] = 1

# 闭关不需要的服务
prometheus['enable'] = false
grafana['enable'] = false
redis_exporter['enable'] = false
gitlab_exporter['enable'] = false
node_exporter['enable'] = false
postgres_exporter['enable'] = false
alertmanager['enable'] = false

6. 移动目录

把仓库、redis、postgresql目录转移到/www/gitlab目录下.

停止服务

gitlab-ctl stop

复制文件

# pg目录
sudo rsync -av /var/opt/gitlab/postgresql /www/gitlab/

# redis目录
sudo rsync -av /var/opt/gitlab/redis /www/gitlab/

修改 /etc/gitlab/gitlab.rb:

# pg目录
postgresql['dir'] = "/www/gitlab/postgresql"
postgresql['data_dir'] = "/www/gitlab/postgresql/data"
postgresql['home'] = "/www/gitlab/postgresql"

# redis目录
redis['dir'] = "/www/gitlab/redis"

重新加载配置,并重启gitlab:

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

直接复制目录后重新配置, 会出现错误, 但是不影响系统的运行:

database_objects[postgresql] (postgresql::standalone line 28) had an error: RuntimeError: postgresql_user[gitlab] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/database_objects.rb line 19) had an error: RuntimeError: execute[create gitlab postgresql user] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/postgresql/resources/user.rb line 11) had an error: RuntimeError: PostgreSQL did not respond before service checks were exhausted

但是, 如果改成"先备份, 然后修改配置(不复制文件), 然后reconfigure再还原", 错误如下

rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had an error: Mixlib::ShellOut::ShellCommandFailed: bash[migrate gitlab-rails database] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/rails_migration.rb line 16) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20211220-1959-1y491c3" ----
STDOUT: psql:/opt/gitlab/embedded/service/gitlab-rails/db/structure.sql:9: NOTICE:  extension "btree_gist" already exists, skipping
psql:/opt/gitlab/embedded/service/gitlab-rails/db/structure.sql:11: NOTICE:  extension "pg_trgm" already exists, skipping
rake aborted!
Redis::CannotConnectError: Error connecting to Redis on 127.0.0.1:6380 (Errno::ECONNREFUSED)

参考资料:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章