一、安装Gitlab

docker pull gitlab/gitlab-ce

docker run -d --restart=always --name gitlab \
  -v /etc/localtime:/etc/localtime:ro \
  -v /usr/local/soft/gitlab/config:/etc/gitlab \
  -v /usr/local/soft/gitlab/logs:/var/log/gitlab \
  -v /usr/local/soft/gitlab/data:/var/opt/gitlab \
  -p 443:443 \
  -p 80:80 \
  -p 1022:22 \
  gitlab/gitlab-ce

二、配置gitlab.rb

2.1 配置url

vi /usr/local/soft/gitlab/config/gitlab.rb

# 修改下面的内容,可以是IP也可以是域名
external_url 'http://192.168.1.17'

# 重新加载配置
gitlab-ctl reconfigure

 2.2 配置时区

# 默认配置是UTC时间,在Gitlab中查看commit时间会晚于北京时间8小时
# gitlab_rails['time_zone'] = 'UTC'

gitlab_rails['time_zone'] = 'Asia/Shanghai'

2.3 配置Email的发送

vi /usr/local/soft/gitlab/config/gitlab.rb

# 修改下面的内容
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'QQ号吗@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'anron'
gitlab_rails['gitlab_email_reply_to'] = 'QQ号吗@qq.com'

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "QQ号吗@qq.com"
gitlab_rails['smtp_password'] = "QQ邮箱的授权码"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

# 重新加载配置
gitlab-ctl reconfigure

# 测试邮件的发送,进入控制台 
gitlab-rails console

# 在控制台输入命令发送一封测试邮件
Notify.test_email('收件人邮箱','邮件标题','邮件正文').deliver_now

2.4 登录Gitlab的WEB配置界面

设置root的密码后,创建group和user后就可以使用了,project可以属于user,也可以属于group,最好是属于group

三、远程仓库地址的格式

远程仓库地址的格式有:   

  1.  http://192.168.1.17/zyt/zyt-fireware.git
  2.  git@192.168.1.17:zyt/zyt-fireware.git
  • 协议     包括有http和ssh
  • 主机     域名或IP
  • 组         group或user(zyt)
  • 项目      project(zyt-fireware)

四、添加Project到Gitlab

4.1 先配置好Groups和Users

进入Gitlab的管理页面,在Admin Area中查看Groups信息,可以看到组内有几个project和user

docker gitlab修改ip gitlab-ce docker_docker gitlab修改ip

前面的图标是projects数量,后面的图标是users数量,zyt组有2个project和3个user,dog组有1个project和2个user 

4.2 在Gitlab的管理页面中添加Project

进入Gitlab的管理页面New Project,输入Project name,选择Groups,点击Create project按钮即可

docker gitlab修改ip gitlab-ce docker_gitlab_02

4.3 在客户端推送一个Project到Gitlab

cd existing_folder

# Initialized empty Git repository
$ git init

# 本地目录关联远程仓库地址
$ git remote add origin http://192.168.1.17/zyt/jwt.git

$ git add .
$ git commit -m '初始化项目'
$ git push -u origin master

4.4 在客户端推送一个已绑定其他Gitlab的Project到新的Gitlab

cd existing_folder

# 查看远程仓库地址
$ git remote -v
origin  http://192.168.1.10/jinlin/jv_code_sdk_park.git (fetch)
origin  http://192.168.1.10/jinlin/jv_code_sdk_park.git (push)

# 取消与远程仓库地址的关联
$ git remote remove origin

# 再次查看远程仓库地址,结果为空
$ git remote -v

# 本地目录关联远程仓库地址
$ git remote add origin http://192.168.1.17/zyt/zyt-fireware.git

# push数据到服务器
$ git push -u origin master

四、备份与还原

4.1 备份

[root@localhost ~]# docker exec -it gitlab bash
root@481012d86197:/# gitlab-rake gitlab:backup:create

#备份完成后在/var/opt/gitlab/backups目录下生成tar文件
root@481012d86197:/# ll /var/opt/gitlab/backups
-rw-------.  1 git  git  53575680 Jul 18 07:19 1595056757_2020_07_18_13.1.4_gitlab_backup.tar

4.2 还原 

# 使用scp命令从其它服务器copy文件或者本机
# scp是linux命令: scp 用户名@IP地址:远程文件的绝对路径 本机路径

docker外:
scp root@192.168.1.17:/var/opt/gitlab/backups/1595056757_2020_07_18_13.1.4_gitlab_backup.tar /var/opt/gitlab/backups/

docker内:
chmod -R 777 /var/opt/gitlab/backups
gitlab-rake gitlab:backup:restore BACKUP=1595056757_2020_07_18_13.1.4

4.3  定时自动备份

# 先确保crond服务已经安装
systemctl status crond

# 编辑cron
crontab -e

# 添加一行,每30分钟备份一次,正式环境可以把时间改成每天执行一次[0 0 * * *]
# docker exec不需要-it参数,否则提示the input device is not a TTY
*/30 * * * * docker exec gitlab gitlab-rake gitlab:backup:create

# 退出后查看
crontab -l

4.4  设置备份过期时间

vi /usr/local/soft/gitlab/config/gitlab.rb

# 修改备份保留天数,以秒为单位,1天=86400秒,7天=604800秒
gitlab_rails['backup_keep_time'] = 604800

# 重新加载配置
gitlab-ctl reconfigure