gitlab-ce版安装:

安装依赖包:

yum install curl openssh-server openssh-clients postfix cronie policycoreutils-python –y

方法一:

官网安装方法:但是安装使用的yum源不是国内的。

https://packages.gitlab.com/gitlab/gitlab-ce/install

国内下载地址:这是清华大学的开源地址

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/


方法二:

配置yum源:

vim /etc/yum.repos.d/gitlab-ce.repo

[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

安装:因为rpm包比较大,可以先安装一下查看版本,再去清华的yum源下载rpm下来安装。

export EXTERNAL_URL="GitLab服务器的公网IP地址"
yum install gitlab-ce

启动:

gitlab-ctl start       # 启动所有 gitlab 组件

配置参考:

https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

修改配置:

vim /etc/gitlab/gitlab.rb

# 关闭不需要的服务,建议开启,gitlab默认集成了grafana监控面板自带面板
grafana['enable'] = false
prometheus['enable'] = false
alertmanager['enable'] = false

# 几个expoter修改为监听在0.0.0.0地址
gitlab_exporter['enable'] = true
gitlab_exporter['listen_address'] = '0.0.0.0'
gitlab_exporter['listen_port'] = '9168

node_exporter['enable'] = true
node_exporter['listen_address'] = '0.0.0.0:9100'

redis_exporter['enable'] = true
redis_exporter['listen_address'] = '0.0.0.0:9121'

重新读取配置:

gitlab-ctl reconfigure

其他命令:gitlab默认用户名为root。

gitlab-ctl stop        # 停止所有 gitlab 组件
gitlab-ctl restart     # 重启所有 gitlab 组件
gitlab-ctl status      # 查看服务状态
vim /etc/gitlab/gitlab.rb      # 修改默认的配置文件
gitlab-rake gitlab:check SANITIZE=true --trace    # 检查gitlab
gitlab-ctl tail        # 查看日志

参考地址:

www.cnblogs.com/weifeng1463/p/7714492.html



gitlab-jh版安装:jh版是国内企业维护的,国内公司一般都会用jh版本。

添加yum源:

wget https://packages.gitlab.cn/repository/raw/scripts/setup.sh  
bash setup.sh

安装:

yum install gitlab-jh -y

jh版本需要重载配置才能启动:默认安装好是无法启动的,需要重载配置

gitlab-ctl reconfigure

启动:

gitlab-ctl start

数据目录:默认所有的数据都在这个目录了,可以直接给这个目录单独挂载个盘,停掉gitlab服务后,数据直接mv出去,挂载好之后再mv进来就可以了。

~]# ls -al /var/opt/gitlab/
total 108
drwxr-xr-x 23 root              root        4096 Oct 18 17:54 .
drwxr-xr-x  4 root              root        4096 Oct 18 09:57 ..
drwxr-x---  3 gitlab-prometheus root        4096 Oct 18 17:54 alertmanager
drwx------  2 git               root        4096 Oct 17 19:03 backups
-rw-------  1 root              root          38 Oct 17 10:15 bootstrapped
drwxr-xr-x  2 git               git         4096 Oct 17 10:12 .bundle
drwxr-xr-x  2 root              root        4096 Oct 17 10:14 crond
drwx------  3 git               root        4096 Oct 18 17:54 gitaly
-rw-r--r--  1 git               git          303 Oct 17 10:12 .gitconfig
drwxrws---  3 git               git         4096 Oct 17 10:12 git-data
drwxr-xr-x  3 git               root        4096 Oct 17 10:13 gitlab-ci
drwxr-xr-x  2 git               root        4096 Oct 18 17:54 gitlab-exporter
drwx------  2 git               root        4096 Oct 18 17:54 gitlab-kas
drwxr-xr-x  9 git               root        4096 Oct 18 17:54 gitlab-rails
drwx------  2 git               root        4096 Oct 18 17:54 gitlab-shell
drwxr-x---  3 git               gitlab-www  4096 Oct 18 17:54 gitlab-workhorse
drwx------  3 root              root        4096 Oct 18 18:32 logrotate
drwxr-x--- 10 root              gitlab-www  4096 Oct 18 17:54 nginx
drwxr-xr-x  3 root              root        4096 Oct 17 11:29 node-exporter
drwx------  2 gitlab-psql       root        4096 Oct 18 17:54 postgres-exporter
drwxrwsr-x  3 gitlab-psql       gitlab-psql 4096 Oct 18 17:54 postgresql
drwxr-x---  4 gitlab-prometheus root        4096 Oct 18 17:54 prometheus
-rw-r--r--  1 root              root         426 Oct 18 17:54 public_attributes.json
drwxr-x---  2 gitlab-redis      git         4096 Oct 18 19:07 redis
drwxrws---  2 registry          registry    4096 Oct 17 10:43 registry
drwx------  2 git               git         4096 Oct 17 10:13 .ssh
-rw-r--r--  1 root              root          40 Oct 17 10:13 trusted-certs-directory-hash



常用命令


列出可被单独管理的服务:

]# gitlab-ctl service-list
alertmanager*
gitaly*
gitlab-exporter*
gitlab-kas*
gitlab-workhorse*
grafana*
logrotate*
nginx*
node-exporter*
postgres-exporter*
postgresql*
prometheus*
puma*
redis*
redis-exporter*
sidekiq*

查看服务状态:

]# gitlab-ctl status

停止服务:

]# gitlab-ctl stop

停止某个服务:

]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up

启动服务:

~]# gitlab-ctl start
ok: run: alertmanager: (pid 27376) 1s
ok: run: gitaly: (pid 27388) 0s
ok: run: gitlab-exporter: (pid 27407) 1s
ok: run: gitlab-kas: (pid 27410) 0s
ok: run: gitlab-workhorse: (pid 27424) 0s
ok: run: grafana: (pid 27436) 1s
ok: run: logrotate: (pid 27451) 0s
ok: run: nginx: (pid 27457) 1s
ok: run: node-exporter: (pid 27469) 0s
ok: run: postgres-exporter: (pid 27475) 1s
ok: run: postgresql: (pid 27484) 0s
ok: run: prometheus: (pid 27497) 0s
ok: run: puma: (pid 27511) 1s
ok: run: redis: (pid 27516) 0s
ok: run: redis-exporter: (pid 27522) 1s
ok: run: sidekiq: (pid 27529) 0s

启动某个服务:

]# gitlab-ctl start sidekiq
ok: run: sidekiq: (pid 27976) 0s

检查配置:

]# gitlab-ctl check-config

直接进入gitlab内部的pg:

]# gitlab-psql 
psql (13.6)
Type "help" for help.

gitlabhq_production=#

直接进入gitlab内的redis:

]# gitlab-redis-cli 
redis /var/opt/gitlab/redis/redis.socket>



备份恢复


一、备份配置文件:

]# gitlab-ctl backup-etc
Could not find '/etc/gitlab/config_backup' directory. Creating.
Running configuration backup
Creating configuration backup archive: gitlab_config_1671011177_2022_12_14.tar
/etc/gitlab/
/etc/gitlab/gitlab-secrets.json
/etc/gitlab/initial_root_password
/etc/gitlab/trusted-certs/
/etc/gitlab/gitlab.rb
Configuration backup archive complete: /etc/gitlab/config_backup/gitlab_config_1671011177_2022_12_14.tar
Keeping all older configuration backups


二、备份代码:如下两个命令效果等同。

]# gitlab-rake gitlab:backup:create
]# gitlab-backup create

输出如下:

]# gitlab-backup create
2022-12-14 23:43:43 +0800 -- Dumping database ... 
Dumping PostgreSQL database gitlabhq_production ... [DONE]
2022-12-14 23:43:47 +0800 -- Dumping database ... done
2022-12-14 23:43:47 +0800 -- Dumping repositories ... 
......
2022-12-14 23:43:48 +0800 -- Dumping repositories ... done
2022-12-14 23:43:48 +0800 -- Dumping uploads ... 
2022-12-14 23:43:48 +0800 -- Dumping uploads ... done
2022-12-14 23:43:48 +0800 -- Dumping builds ... 
2022-12-14 23:43:48 +0800 -- Dumping builds ... done
2022-12-14 23:43:48 +0800 -- Dumping artifacts ... 
2022-12-14 23:43:52 +0800 -- Dumping artifacts ... done
2022-12-14 23:43:52 +0800 -- Dumping pages ... 
2022-12-14 23:43:52 +0800 -- Dumping pages ... done
2022-12-14 23:43:52 +0800 -- Dumping lfs objects ... 
2022-12-14 23:43:52 +0800 -- Dumping lfs objects ... done
2022-12-14 23:43:52 +0800 -- Dumping terraform states ... 
2022-12-14 23:43:52 +0800 -- Dumping terraform states ... done
2022-12-14 23:43:52 +0800 -- Dumping container registry images ... [DISABLED]
2022-12-14 23:43:52 +0800 -- Dumping packages ... 
2022-12-14 23:43:52 +0800 -- Dumping packages ... done
2022-12-14 23:43:52 +0800 -- Creating backup archive: 1671032623_2022_12_14_15.0.2_gitlab_backup.tar ... 
2022-12-14 23:43:52 +0800 -- Creating backup archive: 1671032623_2022_12_14_15.0.2_gitlab_backup.tar ... done
2022-12-14 23:43:52 +0800 -- Uploading backup archive to remote storage  ... [SKIPPED]
2022-12-14 23:43:52 +0800 -- Deleting tar staging files ... 
2022-12-14 23:43:52 +0800 -- Cleaning up /var/opt/gitlab/backups/backup_information.yml
2022-12-14 23:43:52 +0800 -- Cleaning up /var/opt/gitlab/backups/db
2022-12-14 23:43:52 +0800 -- Cleaning up /var/opt/gitlab/backups/repositories
2022-12-14 23:43:52 +0800 -- Cleaning up /var/opt/gitlab/backups/uploads.tar.gz
2022-12-14 23:43:52 +0800 -- Cleaning up /var/opt/gitlab/backups/builds.tar.gz
2022-12-14 23:43:52 +0800 -- Cleaning up /var/opt/gitlab/backups/artifacts.tar.gz
2022-12-14 23:43:52 +0800 -- Cleaning up /var/opt/gitlab/backups/pages.tar.gz
2022-12-14 23:43:52 +0800 -- Cleaning up /var/opt/gitlab/backups/lfs.tar.gz
2022-12-14 23:43:52 +0800 -- Cleaning up /var/opt/gitlab/backups/terraform_state.tar.gz
2022-12-14 23:43:52 +0800 -- Cleaning up /var/opt/gitlab/backups/packages.tar.gz
2022-12-14 23:43:52 +0800 -- Deleting tar staging files ... done
2022-12-14 23:43:52 +0800 -- Deleting old backups ... [SKIPPED]
2022-12-14 23:43:52 +0800 -- 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.
2022-12-14 23:43:52 +0800 -- Backup 1671032623_2022_12_14_15.0.2 is done.

恢复:恢复之前先停止如下两个服务

]# gitlab-ctl stop unicorn
ok: down: unicorn: 0s, normally up
]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 1s, normally up

备份准备:备份文件移动到备份目录,并赋予相应的权限

mv *_gitlab_backup.tar /var/opt/gitlab/backups
chown git.git *_gitlab_backup.tar

恢复:

gitlab-rake gitlab:backup:restore BACKUP=要恢复版本的包名
gitlab-backup restore BACKUP=要恢复版本的包名

执行恢复:恢复过程有应答

]# gitlab-rake gitlab:backup:restore BACKUP=1671119227_2022_12_15_15.0.2
2022-12-15 23:51:30 +0800 -- Unpacking backup ... 
2022-12-15 23:51:30 +0800 -- Unpacking backup ... done
2022-12-15 23:51:30 +0800 -- Restoring database ... 
2022-12-15 23:51:30 +0800 -- Be sure to stop Puma, Sidekiq, and any other process that
connects to the database before proceeding. For Omnibus
installs, see the following link for more information:
https://docs.gitlab.com/ee/raketasks/backup_restore.html#restore-for-omnibus-gitlab-installations

Before restoring the database, we will remove all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.

Do you want to continue (yes/no)? yes
......
2022-12-15 23:54:41 +0800 -- Restoring uploads ... done
2022-12-15 23:54:41 +0800 -- Restoring builds ... 
2022-12-15 23:54:41 +0800 -- Restoring builds ... done
2022-12-15 23:54:41 +0800 -- Restoring artifacts ... 
2022-12-15 23:54:42 +0800 -- Restoring artifacts ... done
2022-12-15 23:54:42 +0800 -- Restoring pages ... 
2022-12-15 23:54:42 +0800 -- Restoring pages ... done
2022-12-15 23:54:42 +0800 -- Restoring lfs objects ... 
2022-12-15 23:54:42 +0800 -- Restoring lfs objects ... done
2022-12-15 23:54:42 +0800 -- Restoring terraform states ... 
2022-12-15 23:54:42 +0800 -- Restoring terraform states ... done
2022-12-15 23:54:42 +0800 -- Restoring packages ... 
2022-12-15 23:54:42 +0800 -- Restoring packages ... done
This task will now rebuild the authorized_keys file.
You will lose any data stored in the authorized_keys file.
Do you want to continue (yes/no)? yes

2022-12-15 23:55:00 +0800 -- Deleting tar staging files ... 
2022-12-15 23:55:00 +0800 -- Cleaning up /var/opt/gitlab/backups/backup_information.yml
2022-12-15 23:55:00 +0800 -- Cleaning up /var/opt/gitlab/backups/db
2022-12-15 23:55:00 +0800 -- Cleaning up /var/opt/gitlab/backups/repositories
2022-12-15 23:55:00 +0800 -- Cleaning up /var/opt/gitlab/backups/uploads.tar.gz
2022-12-15 23:55:00 +0800 -- Cleaning up /var/opt/gitlab/backups/builds.tar.gz
2022-12-15 23:55:00 +0800 -- Cleaning up /var/opt/gitlab/backups/artifacts.tar.gz
2022-12-15 23:55:00 +0800 -- Cleaning up /var/opt/gitlab/backups/pages.tar.gz
2022-12-15 23:55:00 +0800 -- Cleaning up /var/opt/gitlab/backups/lfs.tar.gz
2022-12-15 23:55:00 +0800 -- Cleaning up /var/opt/gitlab/backups/terraform_state.tar.gz
2022-12-15 23:55:00 +0800 -- Cleaning up /var/opt/gitlab/backups/packages.tar.gz
2022-12-15 23:55:00 +0800 -- Deleting tar staging files ... done
2022-12-15 23:55:00 +0800 -- Deleting backups/tmp ... 
2022-12-15 23:55:00 +0800 -- Deleting backups/tmp ... done
2022-12-15 23:55:00 +0800 -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data 
and are not included in this backup. You will need to restore these files manually.
2022-12-15 23:55:00 +0800 -- Restore task is done.

启动被停止的两个服务:

]# gitlab-ctl start sidekiq
]# gitlab-ctl start unicorn

参考:

cnblogs.com/easonscx/p/12615981.html


恢复gitlab:jh版示例

1、安装gitlab-jh:注意rpm包的版本和数据的版本要对应,否者会报错,恢复不成功。

rpm -i gitlab-jh-17.4.2-jh.0.el9.x86_64.rpm

# 本地没有安装包的情况下,使用如下命令找出对应版本安装包安装
yum list gitlab-jh --showduplicates
yum install gitlab-jh-17.4.2 -y

2、拷贝配置

tar -xf gitlab_config_1729447201_2024_10_21.tar
mv /etc/gitlab/ /home/
mv ./etc/gitlab/ /etc/
gitlab-ctl reconfigure

3、恢复数据

mv 1729447218_2024_10_20_17.4.2-jh_gitlab_backup.tar /var/opt/gitlab/backups/
chown git.git /var/opt/gitlab/backups/1729447218_2024_10_20_17.4.2-jh_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=1729447218_2024_10_20_17.4.2-jh



邮件重置密码


配置重置密码邮箱:

vim vim /etc/gitlab/gitlab.rb

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.demo.com" # 貌似不支持imap协议,推荐使用smtp协议
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "example@email.com"
gitlab_rails['smtp_password'] = "xxxxxx"
gitlab_rails['smtp_domain'] = "email.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_pool'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'none'

# from和reply地址貌似要相同,要不然可能发生成功却收不到邮件
gitlab_rails['gitlab_email_from'] = 'example@email.com'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['gitlab_email_reply_to'] = 'example@email.com'

重新读取配置:

gitlab-ctl reconfigure

邮件发生测试:

]# gitlab-rails console
--------------------------------------------------------------------------------
 Ruby:         ruby 3.1.5p253 (2024-04-023 revision 1945f8dc0e) [x86_64-linux]
 GitLab:       17.4.2-jh (174ac7c3a0e) EE
 GitLab Shell: 14.39.0
 PostgreSQL:   14.11
------------------------------------------------------------[ booted in 24.93s ]
WARNING: Active Record does not support composite primary key.

security_findings has composite primary key. Composite primary key is ignored.
Loading production environment (Rails 7.0.8.4)
irb(main):001:0> Notify.test_email('example@email.com', '密码重置', 'content').deliver_now
Delivered mail 6712308344058_622b3110585a8@gitlab.mail (2150.3ms)
=> #<Mail::Message:794380, Multipart: false, Headers: <Date: Fri, 18 Oct 2024 17:55:15 +0800>, <From: finstep-gitlab <example@email.com>>, <Reply-To: finstep-gitlab <example@email.com>>, <To: example@email.com>, <Message-ID: <6712308344058_622b3110585a8@gitlab.mail>>, <Subject: 密码重置>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=US-ASCII>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>
irb(main):002:0> exit


gitlab代码迁移:

cnblogs.com/chuanzhang053/p/17887062.html



配置证书


gitlab配置https证书:

external_url 'https://gitlab.demo.com'
nginx['redirect_http_to_https'] = true

nginx['ssl_certificate'] = "/opt/gitlab/certs/demo.com.crt"
nginx['ssl_certificate_key'] = "/opt/gitlab/certs/demo.com.key"

letsencrypt['enable'] = false

重新读取配置:

gitlab-ctl reconfigure
gitlab-ctl status
gitlab-ctl tail nginx

更换证书:重启nginx即可

gitlab-ctl stop nginx
gitlab-ctl start nginx