linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

发布于 2018-05-18  219 次阅读


搭建 git 服务器

github 毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的。

Gitlab 是个不错的选择。在介绍它之前,先讲述一下命令行的 git 服务器

用一台纯净的,没装过 git 的机器做实验

[root@am-02:~#] yum -y install git

[root@am-02:~#] useradd -s /usr/bin/git-shell git

#yum 安装 git,创建一个 git 用户,设置 shell 为/usr/bin/git-shell,这样的话,这个 git 用户就不能远程登录服务器了
[root@am-02:~#] cd /home/git/

[root@am-02:/home/git#] mkdir .ssh

[root@am-02:/home/git#] touch .ssh/authorized_keys

[root@am-02:/home/git#] chown -R git:git .ssh

[root@am-02:/home/git#] chmod 600 .ssh/authorized_keys

#在 git 用户的家目录下创建 authorized_keys 文件,用来存放客户端的公钥,实现加密免密码访问

复制客户端公钥到服务端 authorized_keys 文件,这一步跟 github 添加公钥是一个道理

客户端使用 ssh-keygen 命令生成公钥

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

测试是否能正常通讯

测试可以通讯,但不能登录,因为之前设置了不允许登陆

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

[root@am-02:/home/git#] mkdir /data/gitroot

[root@am-02:/home/git#] cd /data/gitroot/

[root@am-02:/data/gitroot#] git init --bare sample.git

初始化空的 Git 版本库于 /data/gitroot/sample.git/

[root@am-02:/data/gitroot#] chown -R git:git sample.git

#创建存储 git 仓库的目录,初始化 git 仓库

#创建一个裸仓库,裸仓库没有工作区,因为服务器上的 Git 仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的 Git 仓库通常都以.git 结尾

#平时 git 服务器是不需要开发人员登录修改代码的,它仅仅是充当着一个服务器的角色,就像 github 一样,平时操作都是在我们自己的 pc 上做的
[root@am-01:~#] git clone git@172.17.1.242:/data/gitroot/sample.git

正克隆到 'sample'...

warning: 您似乎克隆了一个空版本库。

[root@am-01:~#] cd sample/

[root@am-01:~/sample#] ls -la

总用量 4

drwxr-xr-x   3 root root   17 5 月  19 00:01 .

dr-xr-x---. 23 root root 4096 5 月  19 00:01 ..

drwxr-xr-x   7 root root  111 5 月  19 00:01 .git

#把服务端的 git 仓库克隆到客户端
[root@am-01:~/sample#] cp /etc/init.d/mysqld .

[root@am-01:~/sample#] git add .

[root@am-01:~/sample#] git commit -m "one add"

[master(根提交) 4c8c847] one add

 1 file changed, 378 insertions(+)

 create mode 100755 mysqld

[root@am-01:~/sample#] git push origin master

Counting objects: 3, done.

Delta compression using up to 2 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 3.84 KiB | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@172.17.1.242:/data/gitroot/sample.git

 * [new branch]      master -> master

#做实验,对本地的 git 仓库做一些更改并推送到远程仓库,第一次的推送需要指定分支
[root@am-01:~#] cd /tmp/

[root@am-01:/tmp#] git clone git@172.17.1.242:/data/gitroot/sample.git

正克隆到 'sample'...

remote: Counting objects: 3, done.

remote: Compressing objects: 100% (2/2), done.

remote: Total 3 (delta 0), reused 0 (delta 0)

接收对象中: 100% (3/3), done.

[root@am-01:/tmp#] cd sample/

[root@am-01:/tmp/sample#] ls

mysqld

[root@am-01:/tmp/sample#] vim 1.txt

kjkjdksjdksjdskdks

[root@am-01:/tmp/sample#] git add 1.txt

[root@am-01:/tmp/sample#] git commit -m "1.txt 01"

[master fe3c49c] 1.txt 01

 1 file changed, 1 insertion(+)

 create mode 100644 1.txt

[root@am-01:/tmp/sample#] git push

Counting objects: 4, done.

Delta compression using up to 2 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 278 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@172.17.1.242:/data/gitroot/sample.git

   4c8c847..fe3c49c  master -> master

#切换到另一个目录,重新拉取远程仓库到本机,做修改并推送到远程仓库
[root@am-01:~/sample#] pwd

/root/sample

[root@am-01:~/sample#] git pull

remote: Counting objects: 4, done.

remote: Compressing objects: 100% (2/2), done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Unpacking objects: 100% (3/3), done.

来自 172.17.1.242:/data/gitroot/sample

   4c8c847..fe3c49c  master     -> origin/master

更新 4c8c847..fe3c49c

Fast-forward

 1.txt | 1 +

 1 file changed, 1 insertion(+)

 create mode 100644 1.txt

[root@am-01:~/sample#] cat 1.txt

kjkjdksjdksjdskdks

#切换回/root/sample 目录,从远程仓库拉取,可以见到,是能成功拉取的

安装 gitlab

gitlab 官网:https://about.gitlab.com/gitlab-com/

官方安装文档:https://about.gitlab.com/installation/?version=ce#centos-7

国内的在线管理平台:coding.net、码市、码云

自建 web 界面的代码管理平台:gitlab

服务端内存不少于 2GB,此处使用清华大学的 yum 源安装 gitlab

[root@am-01:~#] vim /etc/yum.repos.d/gitlab.repo

[gitlab-ce]

name=Gitlab CE Repository

baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/

gpgcheck=0

enabled=1

[root@am-01:~#] yum install -y gitlab-ce

#新建 gitlab 的 yum 源,并通过 yum 下载安装 gitlab
[root@am-01:~#] gitlab-ctl reconfigure

#配置 gitlab,这台服务器建议只做 gitlab,因为 gitlab 有很多相关组件,其中一个出错都有可能失败
[root@am-01:~#] gitlab-ctl stop

ok: down: gitaly: 1s, normally up

ok: down: gitlab-monitor: 0s, normally up

ok: down: gitlab-workhorse: 1s, normally up

ok: down: logrotate: 0s, normally up

ok: down: nginx: 1s, normally up

ok: down: node-exporter: 0s, normally up

ok: down: postgres-exporter: 0s, normally up

ok: down: postgresql: 0s, normally up

ok: down: prometheus: 0s, normally up

ok: down: redis: 0s, normally up

ok: down: redis-exporter: 0s, normally up

ok: down: sidekiq: 0s, normally up

ok: down: unicorn: 0s, normally up

[root@am-01:~#] /etc/init.d/nginx stop

Stopping nginx (via systemctl):                            [  确定  ]

[root@am-01:~#] systemctl disable nginx

nginx.service is not a native service, redirecting to /sbin/chkconfig.

Executing /sbin/chkconfig nginx off

[root@am-01:~#] gitlab-ctl start

ok: run: gitaly: (pid 122747) 1s

ok: run: gitlab-monitor: (pid 122757) 0s

ok: run: gitlab-workhorse: (pid 122761) 1s

ok: run: logrotate: (pid 122779) 0s

ok: run: nginx: (pid 122787) 1s

ok: run: node-exporter: (pid 122793) 0s

ok: run: postgres-exporter: (pid 122798) 0s

ok: run: postgresql: (pid 122810) 1s

ok: run: prometheus: (pid 122885) 0s

ok: run: redis: (pid 122894) 1s

ok: run: redis-exporter: (pid 122898) 0s

ok: run: sidekiq: (pid 122903) 1s

ok: run: unicorn: (pid 122910) 0s

#因为之前运行过 nginx,所以先把 gitlab 停止运行,再把 nginx 停止运行,再运行 gitlab
[root@am-01:~#] iptables -nvL

Chain INPUT (policy ACCEPT 13M packets, 6158M bytes)

 pkts bytes target     prot opt in     out     source               destination        



Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination        



Chain OUTPUT (policy ACCEPT 12M packets, 3915M bytes)

 pkts bytes target     prot opt in     out     source               destination      

[root@am-01:~#] getenforce

Disabled

#检查 iptables 规则和 selinux

使用 windows 客户端浏览器访问 gitlab 页面

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

第一步,需要先改密码

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

改完密码后登陆,默认用户名为 root

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

使用 gitlab

访问的时候,直接输入服务端 IP 即可,也可以设置为输入域名访问

有一种情况就是,gitlab 服务器是内网服务器,这时就可以通过 nginx 做代理服务器,用户需要访问这台 gitlab 内网服务器的时候,会先到 nginx 代理服务器上,再跳转到 gitlab 内网服务器,有个前提是,nginx 代理服务器有公网 IP

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

[root@am-01:~#] vim /var/opt/gitlab/nginx/conf/gitlab-http.conf

listen *:80;

#定义了监听端口

server_name gitlab.example.com;

#定义了域名

access_log  /var/log/gitlab/nginx/gitlab_access.log gitlab_access;

error_log   /var/log/gitlab/nginx/gitlab_error.log;

#定义了访问日志和错误日志

创建组和项目

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

设置 key

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

添加新用户

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

假如邮箱功能不可用,还可以给用户设置密码

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

测试新用户是否可用

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

创建新用户的项目

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

linux 学习笔记-089-代码管理平台-搭建 git 服务器,gitlab 的安装与使用,gitlab 的备份和恢复

gitlab 备份和恢复

[root@am-01:~#] gitlab-rake gitlab:backup:create

Dumping database ...

Dumping PostgreSQL database gitlabhq_production ... [DONE]

done

Dumping repositories ...

 * test/01 ... [SKIPPED]

 * test/01.wiki ...  [SKIPPED]

 * am/am ... [SKIPPED]

 * am/am.wiki ...  [SKIPPED]

done

Dumping uploads ...

done

Dumping builds ...

done

Dumping artifacts ...

done

Dumping pages ...

done

Dumping lfs objects ...

done

Dumping container registry images ...

[DISABLED]

Creating backup archive: 1526665262_2018_05_19_10.7.3_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 ... skipping

[root@am-01:~#] ls /var/opt/gitlab/backups/

1526665262_2018_05_19_10.7.3_gitlab_backup.tar

#备份 gitlab,会备份用户、项目、配置、代码等信息,属于在线备份,不需要手工停止服务,会自动停止并备份

#备份文件存放在/var/opt/gitlab/backups 目录

#如果你是用低版本备份出来的 tar 文件,是不能直接在高版本恢复的,反之同理,所以备份恢复必须要保持两边版本一致
[root@am-01:~#] gitlab-ctl stop unicorn ; gitlab-ctl stop sidekiq

ok: down: unicorn: 0s, normally up

ok: down: sidekiq: 0s, normally up

[root@am-01:~#] gitlab-rake gitlab:backup:restore BACKUP=1526665262_2018_05_19_10.7.3

[root@am-01:~#] gitlab-ctl start

ok: run: gitaly: (pid 122747) 3094s

ok: run: gitlab-monitor: (pid 122757) 3093s

ok: run: gitlab-workhorse: (pid 122761) 3093s

ok: run: logrotate: (pid 122779) 3092s

ok: run: nginx: (pid 122787) 3092s

ok: run: node-exporter: (pid 122793) 3091s

ok: run: postgres-exporter: (pid 122798) 3091s

ok: run: postgresql: (pid 122810) 3091s

ok: run: prometheus: (pid 122885) 3090s

ok: run: redis: (pid 122894) 3090s

ok: run: redis-exporter: (pid 122898) 3089s

ok: run: sidekiq: (pid 128464) 0s

ok: run: unicorn: (pid 128471) 1s

#gitlab 恢复需要停止 unicorn 和 sidekiq 服务,恢复的时候需要加上备份文件的那一串前缀,恢复完之后还要启动一下 gitlab

扩展

gitlab 常用命令:

https://www.cnyunwei.cc/archives/1204

svn 的钩子:

http://coolnull.com/1716.html

gitlab 修改端口:

http://blog.csdn.net/arybd/article/details/54635295

gitlab 修改主机名:

http://www.mamicode.com/info-detail-1316828.html

gitlab 第三方邮件设置:

http://blog.csdn.net/liuruiqun/article/details/50000213

server ssh 端口并不是 22 怎么 git clone:

http://www.cnblogs.com/limx/p/5709101.html

http://www.linuxidc.com/Linux/2017-02/141043.htm