yum安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 配置yum源
vi /etc/yum.repos.d/tsinghua.repo

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

# 缓存相关包
yum makecache

# 安装相关依赖
yum install curl policycoreutils-python openssh-server

# 安装gitlab-ce
yum install gitlab-ce

# 配置
# 修改gitlab配置文件指定服务器ip和自定义端口:
vim /etc/gitlab/gitlab.rb
external_url='http://122.51.139.130'
unicorn['port'] = 8888

启动

1
2
3
4
5
6
7
8
9
10
11
12
13
# 重置并启动GitLab
gitlab-ctl reconfigure
# 修改clone host地址
vi /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
122.51.139.130
cat /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
gitlab-ctl restart

# 测试sshkey
ssh -vT git@ip

# 用yum安装完gitLab,设置ssh key,在进行项目的clone
git clone git@xxx/xxx.git #提示需要输入密码,这个密码并不是gitlab账户的密码,而是服务器git用户的密码。

question

1
2
3
4
5
6
7
最终决定登陆到gitlab服务器发现git用户为锁定状态,由于git账户是在安装gitlab时自动创建的,初始密码没有设置,用户锁定导致ssh连接不可用

解决:
1.首先切换到root用户: sudo su root
2.输入有root权限的当前账户的密码(如果你已经在root账户下 1 2两步忽略)
3.给git用户设置密码:passwd git 
4.按提示输入两遍新密码即可

docker部署

镜像拉取与启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
docker pull gitlab/gitlab-ce
#-i 以交互模式运行容器,通常与 -t 同时使用命令解释:
#-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用
#-d 后台运行容器,并返回容器ID
#-p 9980:80 将容器内80端口映射至宿主机9980端口,这是访问gitlab的端口
#-p 9922:22 将容器内22端口映射至宿主机9922端口,这是访问ssh的端口
#-v /home/bq/docker/gitlab/etc:/etc/gitlab 将容器/etc/gitlab目录挂载到宿主机/home/bq/docker/gitlab/etc目录下,若宿主机内此目录不存在将会自动创建,其他两个挂载同这个一样
#--restart always 容器自启动
#--privileged=true 让容器获取宿主机root权限
#--name gitlab 设置容器名称为gitlab
#gitlab/gitlab-ce 镜像的名称,这里也可以写镜像ID
docker run \
-itd \
-p 9980:80 \
-p 9922:22 \
-v /home/bq/docker/gitlab/etc:/etc/gitlab \
-v /home/bq/docker/gitlab/log:/var/log/gitlab \
-v /home/bq/docker/gitlab/opt:/var/opt/gitlab \
--name gitlab \
gitlab/gitlab-ce

配置

1
2
3
4
5
6
7
8
9
10
#进入容器
docker exec -it gitlab /bin/bash
# 修改配置
vi /etc/gitlab/gitlab.rb
# 配置生效
gitlab-ctl reconfigure
# 重启gitlab
gitlab-ctl restart
# 退出容器
exit

关闭用户注册

1、使用root用户登录gitlab
2、点击【Admin Area】
3、点击【Settings】
4、点击Sign-in restrictions这一栏的【Expand】
5、取消勾选【Sign-up enabled】
6、保存修改

优化精简git仓库

清除垃圾文件(大量无用的mp3文件)

1
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.mp3' --prune-empty --tag-name-filter cat -- --all

提交到远程仓库(如GitHub, 我再次从git clone GitHub代码库会变小为1.3M)

1
git push origin --force --all

必须回收垃圾,本地仓库才变小

1
2
3
4
5
6
7
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin   
git reflog expire --expire=now --all
git gc --prune=now
rm -rf .git/refs/original
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#1.统计仓库精简前容量信息,造成最大的文件pack记录
#查看仓库容量信息:
du -h --max-depth=1
#找出最大的3个文件的pack记录:
git verify-pack -v .git/objects/pack/pack-*.idx |sort -k 3 n | tail -3
#2.通过blob id查询大文件的文件名
git rev-list --objects --all | grep blobid
#3.查看该文件的所有提交记录
git log --branches -- zz/xx.zip 或
git log --pretty=oneline --branches -- zz/xx.zip
#4.将该文件从历史记录的所有tree中移除,并用filter-branch命令重写所有commit才能将该文件从git历史中完全移除
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch zz/xx.zip' --prune-empty --tag-name-filter cat -- --all
#5.依次执行以下命令,清理和回收空间
rm -rf .git/refs/original/
rm -rf .git/logs/
git gc
gir prune
git push origin --force --all

配置ssh key

打开本地git bash,使用如下命令生成ssh公钥和私钥对

1
`ssh-keygen -t rsa -C 'xxx@xxx.com'` # 然后一路回车(-C 参数是你的邮箱地址)
1
2
3
打开~/.ssh/id_rsa.pub文件(~表示用户目录),复制其中的内容
打开gitlab,找到Profile Settings-->SSH Keys--->Add SSH Key,并把上一步中复制的内容粘贴到Key所对应的文本框,在Title对应的文本框中给这个sshkey设置一个名字,点击Add key按钮
到此就完成了gitlab配置ssh key的所有步骤,可以使用ssh协议不需要输入密码进行代码的拉取以及提交等操作了

本地配置多个ssh key

大多数时候,我们的机器上会有很多的git host,比如公司gitlab、github、oschina等,那我们就需要在本地配置多个ssh key,使得不同的host能使用不同的ssh key ,做法如下(以公司gitlab和github为例):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 为公司生成一对秘钥ssh key
ssh-keygen -t rsa -C 'yourEmail@xx.com' -f ~/.ssh/gitlab-rsa
# 为github生成一对秘钥ssh key
ssh-keygen -t rsa -C 'yourEmail2@xx.com' -f ~/.ssh/github-rsa
# 在~/.ssh目录下新建名称为config的文件(无后缀名)。用于配置多个不同的host使用不同的ssh key,内容如下:
# gitlab
Host gitlab.com
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_id-rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id-rsa

# 配置文件参数
# Host : Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件
# HostName : 要登录主机的主机名
# User : 登录名
# IdentityFile : 指明上面User对应的identityFile路径

# 按照上面的步骤分别往gitlab和github上添加生成的公钥gitlab_id-rsa.pub和github_id-rsa.pub
# OK,大功告成,再次执行git命令验证是不是已经不需要再次验证权限了。
# 再次查看~/..ssh目录下的文件,会有gitlab_id-rsa、gitlab_id-rsa.pub和github_id-rsa、github_id-rsa.pub四个文件