外包网站推荐,春哥 响应式网站建设,计算机软件网站建设,wordpress skype一、版本控制系统/版本控制器
1. 版本控制系统#xff1a;
git 分布式 —没有中心代码库#xff0c;所有机器之间的地位同等#xff08;每台机器上都有相同的代码#xff09; svn 集中管理的 —有中心代码库#xff0c;其他都是客户端 2.git与svn介绍
1.git属于分布…一、版本控制系统/版本控制器
1. 版本控制系统
git 分布式 —没有中心代码库所有机器之间的地位同等每台机器上都有相同的代码 svn 集中管理的 —有中心代码库其他都是客户端 2.git与svn介绍
1.git属于分布式版本控制系统
客户端并不只提取最新版本的文件而是把原始的代码仓库完整地克隆下来。
优点
a.由于任何人每次提取操作实际上都是一次对代码仓库的完整备份因此近乎所有的操作都可以在本地执行速度就是相当的快并且可以在网络断开的时候操作仍然不受影响可以频繁的进行提交更新等到有网络的时候再上传到远程的仓库就可以了。
b.git的分支模型相当的轻量级被称为“必杀技”。缺点
a.每个开发人员都拥有所有的代码不利于核心代码的保密如果有重要代码需要保密则不建议使用git2.svn属于集中式的版本控制系统
有一个单一的集中管理的服务器保存所有文件的修订版本而协同工作的成员通过客户端连接到这台服务器进行文件上传和更新。优点
a.使用简单比较符合我们的常规思维
b.同步代码比较简单只要一步操作即可。缺点
a.丢失数据的风险最显而易见的由于集中化的特点如果版本库的服务器磁盘发生故障等你不能保证所有的数据已经有人提取出来了最坏的情况是彻底的丢失整个项目的所有历史更改记录。
b.网络中断的情况下协作就无法进行了因为无法连接服务器进行上传和更新。面试题Git和SVN的区别
3.git 相关概念—纯命令行
工作区
版本库
暂存区
HEAD
版本号
版本日志1.工作区Working Directory
存放git版本仓库的目录就是工作区放源代码的地方2.暂存区
Git的版本库里存了很多东西其中最重要的就是称为stage或者叫index的暂存区会将代码添加到缓存区没有问题之后在提交到版本库3.版本库Repository
工作区有一个隐藏目录.git这个不算工作区而是Git的版本库。4.HEAD:指向你最近一次提交后的结果。现在是哪个版本头就会指向这个版本1.添加文件到暂存区
创建两个文件add到stage #git add 文件名 或者 #git add *
从暂存区(stage)提交到当前master分支的HEAD
git commit -m “版本描述信息” #提交暂存区里的修改到版本库的分支
版本号最核心用的是id号。每个版本都会有一个id号也就是commit id
查看版本号 版本号可以通过版本日志查看
commit完成的功能类似快照可以使用git log查看每次的commit记录
[rootvm20 gittest]# git log
commit fbecfa3d04ae5038aa11bf55942e46c840077ace //id号二、git部署
环境git-server 192.168.246.214 充当中心代码仓库服务器client 192.168.246.213所有机器关闭防火墙和selinux安装所有机器都安装[rootgit-server ~]# yum install -y git[rootgit-server ~]# git --version git version 1.8.3.1准备因为Git是分布式版本控制系统所以每个机器都必须注册你的名字和Email地址。注意git config命令的--global参数用了这个参数表示你这台机器上所有的Git仓库都会使用这个配置。所有的机器都添加只要邮箱和用户不一样就可以。 # git config --global user.email soho163.com ----设置邮箱# git config --global user.name soho ----加添用户# cat /root/.gitconfig# git config --global color.ui true #语法高亮# git config --list #查看全局配置1、git使用
创建版本库:
1.创建一个空目录****在中心服务器上创建
[rootgit-server ~]# mkdir /git-test
[rootgit-server ~]# useradd git #创建一个git用户用来运行git
[rootgit-server ~]# passwd git #给用户设置密码git
[rootgit-server ~]# cd /git-test/2.通过git init命令把这个目录变成Git可以管理的仓库 第1种情况可以改代码还能上传到别人的机器别人也能从你这里下载但是别人不能上传代码到你的机器上。第2种情况只是为了上传代码用别人从这台机器上下载代码也可以上传代码到这台机器上经常用于核心代码库。创建裸库 适用于作为远程中心仓库使用 创建裸库才可以从别处push传代码过来使用–bare参数------裸
git init --bare 库名字
创建一裸库
[rootgit-server git-test]# git init --bare testgit
Initialized empty Git repository in /git-test/testgit/
[rootgit-server ~]# chown git.git /git-test -R #修改权限
2.仓库创建完成后查看库目录
[rootgit-server git-test]# cd testgit/
[rootgit-server testgit]# ls
branches config description HEAD hooks info objects refs1.客户端
1.配置免密登录
[rootclient ~]# ssh-keygen #生成秘钥
[rootclient ~]# ssh-copy-id -i git192.168.246.214 #将秘钥传输到git服务器中的git用户
2.克隆git仓库
[rootclient ~]# yum install -y git
[rootclient ~]# git clone git192.168.246.214:/git-test/testgit/
Cloning into testgit...
warning: You appear to have cloned an empty repository.
[rootclient ~]# ls #查看仓库已经克隆下来了
anaconda-ks.cfg testgit1.创建文件模拟代码提交到仓库
1.在testgit目录下创建一个测试文件test.txt
[rootclient ~]# cd testgit/
[rootclient testgit]# vim test.txt #随便写点东西2.把文件添加到暂存区使用 git add 建立跟踪
[rootclient testgit]# git add test.txt
注: 这里可以使用 git add * 或者 git add -A3.提交文件到仓库分支
[rootclient testgit]# git commit -m test1
[master (root-commit) 2b51ff9] test11 file changed, 2 insertions()create mode 100644 test.txt-m:描述4.查看git状态
[rootclient testgit]# git status
# On branch master #分支位于master
5.修改文件后再此查看状态
[rootclient testgit]# echo 1122334 test.txt
[rootclient testgit]# git status
# 位于分支 master
# 尚未暂存以备提交的变更
# 使用 git add file... 更新要提交的内容
# 使用 git checkout -- file... 丢弃工作区的改动
#
# 修改 readme.txt
#
修改尚未加入提交使用 git add 和/或 git commit
6.先add
[rootclient testgit]# git add -A
8.再次提交commit
[rootclient testgit]# git commit -m add2
[master 73bf688] add21 file changed, 1 insertion()[rootclient testgit]# git status
# On branch master
nothing to commit, working directory clean2、版本回退
已经提交了不合适的修改到版本库时想要撤销本次提交使用版本回退不过前提是没有推送到远程库。
查看现在的版本
[rootclient testgit]# git log
显示的哪个版本在第一个就是当前使用的版本。版本回退(切换) 在Git中上一个版本就是HEAD^当然往上100个版本写100个比较容易数不过来所以写成HEAD~100一般使用id号来恢复
回到上一个版本
[rootclient testgit]# git reset --hard HEAD^
HEAD is now at 0126755 test1
2.回到指定的版本(根据版本号):
[rootclient testgit]# git reset --hard dd66ff
HEAD is now at dd66ff9 add2注消失的ID号
回到早期的版本后再查看git log会发现最近的版本消失可以使用reflog查看消失的版本ID用于回退到消失的版本
[rootvm20 gittest]# git reflog
2a85982 HEAD{0}: reset: moving to 2a859821a2385e136fe83f3a206b287eb0eb8c18
f5bc8c1 HEAD{1}: commit: test-version2
2a85982 HEAD{2}: commit (initial): test-version1[rootgit-client testgit]# git reset --hard f5bc8c13、删除文件
从工作区删除test.txt并且从版本库一起删除 工作区
[rootclient testgit]# touch test.txt
[rootclient testgit]# git status
# On branch master
# Untracked files:
# (use git add file... to include in what will be committed)
#
# qf.txt
nothing added to commit but untracked files present (use git add to track)
[rootclient testgit]# rm -rf test.txt 未添加到暂存区可直接删除
[rootclient testgit]# git status
# On branch master
nothing to commit, working directory clean
已从工作区提交到暂存区
第一种方法
[rootclient testgit]# touch test.txt
[rootclient testgit]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use git add file... to include in what will be committed)
#
# test.txt
nothing added to commit but untracked files present (use git add to track)[rootclient testgit]# git add test.txt
[rootclient testgit]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use git rm --cached file... to unstage)
#
# new file: test.txt
#[rootclient testgit]# git rm --cache test.txt #从暂存区移除
rm test.txt
[rootclient testgit]# ls
test.txt
[rootclient testgit]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use git add file... to include in what will be committed)
#
# test.txt
nothing added to commit but untracked files present (use git add to track)
[rootclient testgit]# rm -rf test.txt
[rootclient testgit]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use git add to track)第二种方法
[rootclient testgit]# touch b.txt
[rootclient testgit]# git add b.txt
[rootclient testgit]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use git rm --cached file... to unstage)
#
# new file: b.txt
#
[rootclient testgit]# git rm -f b.txt
rm b.txt
[rootclient testgit]# ls
[rootclient testgit]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use git add to track)
直接在暂存区rm掉文件如何解决
[rootclient testgit]# touch c.txt
[rootclient testgit]# git add c.txt
[rootclient testgit]# ls
c.txt
[rootclient testgit]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use git rm --cached file... to unstage)
#
# new file: c.txt
#
[rootclient testgit]# rm -rf c.txt
[rootclient testgit]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use git rm --cached file... to unstage)
#
# new file: c.txt
#
# Changes not staged for commit:
# (use git add/rm file... to update what will be committed)
# (use git checkout -- file... to discard changes in working directory)
#
# deleted: c.txt
#
[rootclient testgit]# git rm --cache c.txt
rm c.txt
[rootclient testgit]# ls
[rootclient testgit]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use git add to track)
[rootclient testgit]# 4、修改文件
暂存区修改名称
[rootclient testgit]# touch a.txt
[rootclient testgit]# git status
# On branch master
# Untracked files:
# (use git add file... to include in what will be committed)
#
# a.txt
nothing added to commit but untracked files present (use git add to track)
[rootclient testgit]# git add a.txt
[rootclient testgit]# git status
# On branch master
# Changes to be committed:
# (use git reset HEAD file... to unstage)
#
# new file: a.txt
#
[rootclient testgit]# git mv a.txt d.txt
[rootclient testgit]# git status
# On branch master
# Changes to be committed:
# (use git reset HEAD file... to unstage)
#
# new file: d.txt
#
[rootclient testgit]# ls
d.txt test.txt
[rootclient testgit]# git rm --cache d.txt
[rootclient testgit]# rm -rf d.txt5、将代码上传到仓库的master分支
[rootclient testgit]# vi a.txt #创建一个新文件
hello world
[rootclient testgit]# git add a.txt
[rootclient testgit]# git commit -m add
[rootclient testgit]# git push origin master #上传到中心仓库master分支
Counting objects: 11, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (11/11), 828 bytes | 0 bytes/s, done.
Total 11 (delta 0), reused 0 (delta 0)
To git192.168.246.214:/git-test/testgit/* [new branch] master - master测试:
在客户端将仓库删除掉然后在克隆下来查看仓库中是否有文件
[rootclient testgit]# cd
[rootclient ~]# rm -rf testgit/
[rootclient ~]# git clone git192.168.246.214:/git-test/testgit/
Cloning into testgit...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 11 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (11/11), done.
[rootclient ~]# cd testgit/
[rootclient testgit]# ls
a.txt
[rootclient testgit]# cat a.txt
hello world三、创建分支并合并分支
每次提交Git都把它们串成一条时间线这条时间线就是一个分支。截止到目前只有一条时间线在Git里这个分支叫主分支即master分支。HEAD严格来说不是指向提交而是指向mastermaster才是指向提交的所以HEAD指向的就是当前分支。
在客户端操作
[rootclient ~]# git clone git192.168.246.214:/git-test/testgit/
[rootclient testgit]# git status
# On branch master #当前所在为master分支
#
# Initial commit
#
nothing to commit (create/copy files and use git add to track)
注意刚创建的git仓库默认的master分支要在第一次commit之后才会真正建立。然后先git add .添加所有项目文件到本地仓库缓存再git commit -m init commit提交到本地仓库之后就可以随心所欲地创建或切换分支了。
创建分支:
[rootclient testgit]# git branch dev #创建分支。
[rootclient testgit]# git branch #查看分支。*在哪里就表示当前是哪个分支dev
* master
切换分支:
[rootclient testgit]# git checkout dev
Switched to branch dev
[rootclient testgit]# git branch
* devmaster
在dev分支创建一个文件
[rootclient testgit]# vi test.txt
[rootclient testgit]# git add test.txt
[rootclient testgit]# git commit -m add dev
[dev f855bdf] add dev1 file changed, 1 insertion()create mode 100644 test.txt
现在dev分支的工作完成我们就可以切换回master分支[rootclient testgit]# git checkout master
Switched to branch master切换回master分支后再查看一个test.txt文件刚才添加的内容不见了因为那个提交是在dev分支上而master分支此刻的提交点并没有变
[rootclient testgit]# ls
a.txt现在我们把dev分支的工作成果合并到master分支上
[rootclient testgit]# git merge dev
Updating 40833e0..f855bdf
Fast-forwardtest.txt | 1 1 file changed, 1 insertion()create mode 100644 test.txt
[rootclient testgit]# ls
a.txt test.txt
现在已经将dev分支的内容合并到master上。确认没有问题上传到远程仓库:
[rootclient testgit]# git push origin mastergit merge命令用于合并指定分支到当前分支。合并后再查看test.txt的内容就可以看到和dev分支的最新提交是完全一样的。
合并完成后就可以放心地删除dev分支了
[rootclient testgit]# git branch -d dev
Deleted branch dev (was f855bdf).删除后查看branch就只剩下master分支了
[rootclient testgit]# git branch
* master部署gitlab服务
准备环境: 关闭防火墙和selinux
192.168.246.214 #gitlab服务器1.配置yum源
[rootgit-server ~]# cd /etc/yum.repos.d/
[rootgit-server yum.repos.d]# vi gitlab-ce.repo
[gitlab-ce]
nameGitlab CE Repository
baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever
gpgcheck0
enabled1
安装相关依赖
[rootgit-server yum.repos.d]# yum install -y postfix curl policycoreutils-python openssh-server
[rootgit-server yum.repos.d]# systemctl enable sshd
[rootgit-server yum.repos.d]# systemctl start sshd
安装postfix
[rootgit-server yum.repos.d]# yum install postfix -y #安装邮箱
[rootgit-server yum.repos.d]# systemctl enable postfix
[rootgit-server yum.repos.d]# systemctl start postfix
[rootgit-server yum.repos.d]# yum install -y gitlab-ce #将会安装gitlab最新版本配置gitlab登录链接
[rootgit-server ~]# vim /etc/gitlab/gitlab.rb
1.# 添加对外的域名gitlab.papamk.com请添加A记录指向本服务器的公网IP将原来的修改为
external_url http://192.168.246.214
2.设置地区
gitlab_rails[time_zone] Asia/Shanghai将数据路径的注释去掉可以更改 开启ssh服务: 初始化Gitlab:
[rootgit-server ~]# gitlab-ctl reconfigure #重新加载需要等很长时间… …
启动Gitlab服务:
[rootgit-server ~]# gitlab-ctl start #启动在gitlab14版本以上会有默认的root用户密码存在/etc/gitlab/initial_root_password Gitlab 设置 HTTPS 方式
如果想要以上的 https 方式正常生效使用则需要把 letsencrypt 自动生成证书的配置打开这样在执行重
新让配置生效命令 (gitlab-ctl reconfigure) 的时候会自动给域名生成免费的证书并自动在 gitlab 自带的nginx 中加上相关的跳转配置都是全自动的非常方便。
letsencrypt[enable] true
letsencrypt[contact_emails] [caryyuqq.com] # 这应该是一组要添加为联系人的电子邮件地址测试访问:http://192.168.246.214 用户为:root 密码:本人设置的密码是12345678 需要创建秘钥 [rootclient ~]# ssh-keygen
[rootclient ~]# cd .ssh/
[rootclient .ssh]# ls
[rootclient .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0HeO8gaua13h9HCJK5RXVc/cjet9DpLYq2dqmQ0LXfP0Vwj6YjKxu7lE1i/4Y2cmu5lDe8bG22aikyaW38Fnz0bkGfEurdVZii/KCiHBz2lXS1ocuAdloJT4wnc2MUjh/gwc4FuNkWdYvpbMLXSSHIVjv8vB9YbHlPMTMy5N89kMwMmta5C87/8fBO5VtGijgGOueywMxAzovlfoJbprV/ZBKkhiskSKz4fHyoGFGwllX3kMkNR/soGF5XXA/99iO3UqSaloF0UzfUCgqfMfMVB5zDHGIB6uTrMe6ccfKp9gnVyD7m4Zmk7MwouBwAfMLIiHmvekBGXqb1YCTgJ rootclient创建一个文件:
1.newfile:先新建一个文件。 2.uploadfile:再上传即可。 上传一个文件 新建普通用户 新添加的用户创建成功
Gitlab新建文件 在git客户端
ssh方式拉取代码 查看客户端的公钥
[rootclient ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCodOD/MhqMO9VQAXlZ/dpZ9dsgwKfE8HBY4aA3zGTyKbgGDWtSg/VFPyOlwcqxzUXhUf7zVCXHAQ0OKwsVpmaQTyOSyd1eqOjbWBIt3OA8TjWIwkcb98rob0lKy73P0GYEWUyKP8rdzH/Gxkb6adbkNhC/rm44xOwLs3FEV5jCtAMHgCm3u6dRXz6gwWYxASYJE2MrQpqzz/fp9ZvkCoBLzAj4ly2IQLKjoUz2wjHaKjHhW2MbiDL68aqJXnuEqBVcwP45m6xkO4sFP2UH8N4KQervLhIxP0enANKC2VvmqSXLLU/qWNtB0Y1urYpdKkPUYHsTUFoD9WVXvn rootredis-3[rootclient ~]# git clone git192.168.246.214:root/testapp.git
Cloning into testapp...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
[rootclient ~]# ls
testapp
[rootclient ~]# cd testapp/
[rootclient testapp]# ls
test.txt 同步时间.txt
[rootclient testapp]#http方式拉取代码 [rootclient ~]# rm -rf testgit/
[rootclient ~]# git clone http://192.168.246.214/root/testapp.git
Cloning into testapp...
Username for http://192.168.246.214: root
Password for http://root192.168.246.214:12345678 #为自己设置的密码
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
[rootclient ~]# ls
testapp提交代码到gitlab仓库
[rootclient testapp]# vim update.txt
1000phone
[rootclient testapp]# git add .
[rootclient testapp]# git commit -m update_version1
[master 091798d] update_version11 file changed, 2 insertions()create mode 100644 update.txt[rootnginx-server testapp2]# git push origin main
Username for http://192.168.62.166: root
Password for http://root192.168.62.166:
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 307 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://192.168.62.166/root/testapp2.git201f479..091798d master - master调整上传文件的大小 默认是10M可根据情况调整
拓展
1.cat /proc/swaps 查看swap分区是否启动无
2.创建
dd if/dev/zero of/data/swap bs512 count8388616
创建swap大小为bs*count4294971392(4G)
/data/swap目录若无则找/mnt/swap
3.通过mkswap命令将上述空间制作成swap分区
mkswap /data/swap
4.查看内核参数vm.swappiness中的数值是否为0如果为0则根据实际需要调 整成60
查看 cat /proc/sys/vm/swappiness
设置 sysctl -w vm.swappiness60
若想永久修改则编辑/etc/sysctl.conf文件改文件中有vm.swappiness变量配置默认为0
5.启用分区
swapon /data/swap
echo “/data/swap swap swap defaults 0 0” /etc/fstab
6.再次使用cat /proc/swaps 查看swap分区是否启动tag版本推送
[rootgit-client testweb]# vim e.txt
hello eee
[rootgit-client testweb]# git add *
[rootgit-client testweb]# git commit -m new e.txt
[rootgit-client testweb]# git tag -a v1.1 -m new e.txt
[rootgit-client testweb]# git push origin v1.1分支版本推送
[rootgit-client testweb]# git branch dev
[rootgit-client testweb]# git branchdev
* master
[rootgit-client testweb]# git checkout dev
Switched to branch dev
[rootgit-client testweb]# ls
b.txt c.txt d.txt
[rootgit-client testweb]# vim dev.txt
[rootgit-client testweb]# git add *
[rootgit-client testweb]# git commit -m new dev branch
[dev 6c3fea1] new dev branch1 file changed, 1 insertion()create mode 100644 dev.txt
[rootgit-client testweb]# git push origin dev Gitlab 备份与恢复
1、查看系统版本和软件版本
[rootgit-server ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)[rootgit-server ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
8.15.42、数据备份
打开/etc/gitlab/gitlab.rb配置文件查看一个和备份相关的配置项
[rootgit-server backups]# vim /etc/gitlab/gitlab.rb
gitlab_rails[backup_path] /var/opt/gitlab/backups #备份的路径
gitlab_rails[backup_archive_permissions] 0644 #备份文件的默认权限
gitlab_rails[backup_keep_time] 604800 #保留时长秒为单位设置备份保留时长防止每天执行备份肯定有目录被爆满的风险打开/etc/gitlab/gitlab.rb配置文件找到如下配置
该项定义了默认备份出文件的路径可以通过修改该配置并执行 gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效。
[rootgit-server backups]# gitlab-ctl reconfigure
或者
[rootgit-server backups]# gitlab-ctl restart执行备份命令进行备份
[rootgit-server backups]# /opt/gitlab/bin/gitlab-rake gitlab:backup:create也可以添加到 crontab 中定时执行
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create可以到/var/opt/gitlab/backups找到备份包解压查看会发现备份的还是比较全面的数据库、repositories、build、upload等分类还是比较清晰的。
备份完成会在备份目录中生成一个当天日期的tar包。
[rootgit-server ~]# ll /var/opt/gitlab/backups/3、数据恢复
特别注意
备份目录和gitlab.rb中定义的备份目录必须一致GitLab的版本和备份文件中的版本必须一致否则还原时会报错。
在恢复之前可以删除一个文件以便查看效果 执行恢复操作
[rootgit-server ~]# cd /var/opt/gitlab/backups
[rootgit-server backups]# /opt/gitlab/bin/gitlab-rake gitlab:backup:restore BACKUP/var/opt/gitlab/backups/1678342140_2023_03_09_15.1.0
注意恢复文件的名称恢复完成后启动刚刚的两个服务或者重启所有服务再打开浏览器进行访问发现数据和之前的一致
注意通过备份文件恢复gitlab必须保证两台主机的gitlab版本一致否则会提示版本不匹配
查看gitlab端可以看到数据恢复成功 Gitlab配置邮箱
[rootgitlab-server ~]# vim /etc/gitlab/gitlab.rb
QOOJRFWGOZBHQMSQ[rootgitlab-server ~]# gitlab-ctl reconfigure
或者
[rootgitlab-server ~]# gitlab-ctl restart[rootgitlab ~]# gitlab-rails console
irb(main):001:0 Notify.test_email(XXXXXXgmail.com,test Gitlab Email,Test).deliver_now #输入收件人的邮箱
Delivered mail 610835daa71d5_21d35a645978asage.novalocal.mail (40062.2ms) #Mail::Message:173540, Multipart: false, Headers: Date: Mon, 02 Aug 2021 18:13:46 0000, From: GitLab xxxxxxqq.com, Reply-To: GitLab noreplyxx.xx.4.62, To: xxxxxxxgmail.com, Message-ID: 610835daa71d5_21d35a645978asage.novalocal.mail, Subject: test Gitlab Email, Mime-Version: 1.0, Content-Type: text/html; charsetUTF-8, Content-Transfer-Encoding: 7bit, Auto-Submitted: auto-generated, X-Auto-Response-Suppress: All #出现这段报文就说明配置成功Gitlab配置https方式访问
配置ssl证书
我们可以配置私有CA也可以在阿里云官网上面购买域名之后获取SSL证书
创建私有CA证书
首先在一台服务器上安装一些需要用到的应用
1、检查安装openssl
[rootwww ~]# rpm -qa|grep openssl
openssl098e-0.9.8e-29.el7.centos.3.x86_64
openssl-libs-1.0.2k-25.el7_9.x86_64
xmlsec1-openssl-1.2.20-7.el7_4.x86_64
openssl-devel-1.0.2k-25.el7_9.x86_64
openssl-1.0.2k-25.el7_9.x86_64如果未安装
[rootwww ~]#yum install openssl openssl-devel -y
创建所需要的文件
根CA服务器因为只有 CA 服务器的角色所以用到的目录只有/etc/pki/CA
网站服务器只是证书申请者的角色所以用到的目录只有/etc/pki/tls
[rootwww ~]#cd /etc/pki/CA/
[rootwww CA]# ls
certs crl newcerts private
[rootwww CA]# touch index.txt #创建生成证书索引数据库文件
[rootwww CA]# ls
certs crl index.txt newcerts private
[rootwww CA]# echo 01 serial #指定第一个颁发证书的序列号
[rootwww CA]# ls
certs crl index.txt newcerts private serial
[rootwww CA]#2、创建密钥
在根CA服务器上创建密钥密钥的位置必须为/etc/pki/CA/private/cakey.pem这个是openssl.cnf中中指定的路径只要与配置文件中指定的匹配即可。
[rootwww CA]# (umask 066; openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
...........
...............
e is 65537 (0x10001)3、生成自签名证书
根CA自签名证书根CA是最顶级的认证机构没有人能够认证他所以只能自己认证自己生成自签名证书。
[rootwww CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem -days 7300
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ., the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BEIJING
Locality Name (eg, city) [Default City]:BEIJING
Organization Name (eg, company) [Default Company Ltd]:CA
Organizational Unit Name (eg, section) []:OPT
Common Name (eg, your name or your servers hostname) []:ca.qf.com
Email Address []:
[rootwww CA]# ls
cacert.pem certs crl index.txt newcerts private serial客户端gitlab服务器CA证书申请域名
1、安装openssl
[rootgitlab ~]# yum install openssl openssl-devel -y2、客户端生成密钥文件
[rootgitlab ~]# (umask 066; openssl genrsa -out /etc/pki/tls/private/www.git123.com.key 2048)
Generating RSA private key, 2048 bit long modulus
..............................
..........
e is 65537 (0x10001)
[rootgitlab ~]# cd /etc/pki/tls/private/
[rootgitlab private]# ls
www.git123.com.key
[rootgitlab private]#3、客户端用私钥加密生成证书请求
[rootgitlab private]# ls ../
cert.pem certs misc openssl.cnf private
[rootgitlab private]# openssl req -new -key /etc/pki/tls/private/www.qf.com.key -days 365 -out /etc/pki/tls/www.qf.com.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ., the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BEIJING
Locality Name (eg, city) [Default City]:BEIJING
Organization Name (eg, company) [Default Company Ltd]:QF
Organizational Unit Name (eg, section) []:OPT
Common Name (eg, your name or your servers hostname) []:www.git123.com
Email Address []:Please enter the following extra attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[rootgitlab private]# ls ../
cert.pem certs misc openssl.cnf private www.git123.com.csr
[rootgitlab private]#4、CA 签署证书在ca服务器上面操作
[rootwww ~]# vim /etc/pki/tls/openssl.cnf
policy policy_match82 83 # For the CA policy84 [ policy_match ]85 countryName match86 stateOrProvinceName match87 organizationName supplied88 organizationalUnitName optional89 commonName supplied90 emailAddress optionalCA签署证书
[rootwww ~]# openssl ca -in /etc/pki/CA/private/www.git123.com.csr -out /etc/pki/CA/certs/www.git123.com.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:Serial Number: 1 (0x1)ValidityNot Before: Jul 3 10:12:23 2019 GMTNot After : Jul 2 10:12:23 2020 GMTSubject:countryName CNstateOrProvinceName BEIJINGorganizationName QForganizationalUnitName OPTcommonName www.qf.comX509v3 extensions:X509v3 Basic Constraints: CA:FALSENetscape Comment: OpenSSL Generated CertificateX509v3 Subject Key Identifier: E3:AC:1A:55:2B:28:B9:80:DC:9C:C2:13:70:53:27:AD:3D:44:8F:D3X509v3 Authority Key Identifier: keyid:5D:2A:81:B2:E7:8D:D8:88:E5:7B:94:CA:75:65:9C:82:2B:A9:B2:3CCertificate is to be certified until Jul 2 10:12:23 2020 GMT (365 days)
Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated查看证书的信息
[rootwww ~]# openssl x509 -in /etc/pki/CA/certs/www.qf.com.crt -noout -subject
subject /CCN/STBEIJING/OQF/OUOPT/CNwww.git123.com将生成的证书发放给请求客户端Gitlab服务器
[rootwww ~]# cd /etc/pki/CA/certs/
[rootwww certs]# scp www.git123.com.ctr 10.8.156.42:/etc/pki/CA/certs/Gitlab中修改配置 在gitlab前面配置Nginx做转发
首先把gitlab内部nginx的端口修改一下
vim /etc/nginx/conf.d/default.confupstream git{server 127.0.0.1:8888;
}server {listen 443 ssl;server_name www.git123.com;ssl_certificate /etc/pki/CA/certs/www.git123.com.crt;ssl_certificate_key /etc/pki/tls/private/www.git123.com.key;ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;location / {client_max_body_size 50m;proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://git;index index.html index.htm;}
}server{listen 80;server_name www.git123.com;rewrite ^(.*)$ https://$host$1 permanent;location / {return 301 https://www.git123.com:443$request_uri;}
} Github 远程仓库
1、github.com 注册账户 2、在github上创建仓库 本人账户 用户名youngfityu 邮箱 908367919qq.com 密码 *** 3、客户端生成本地ssh key
[rootlocalhost ~]# ssh-keygen -t rsa -C meteor163.com # 邮箱要与github上注册的相同
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:RiE6UR1BtzV5avyE2uz6TNPsVHa2D2eHprghrJEkd/g meteor163.com
The keys randomart image is:
---[RSA 2048]----
| ..ooo. o. |
| o ..o o... |
| o . .. |
| . o . |
| . S o |
| * . oo.o|
| o E ..o B.|
| o . .* o|
| . . .|
----[SHA256]-----
[rootlocalhost ~]#
[rootlocalhost ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVThfq4brrlsPGtAknVB0TLPx7Dd3qlxTbSIrUOsGC5Y8JuNqVTlIntZB4oNj8cSQrWvec9CKm0a8o7WwaJIiqpxurzYpQHP2KbapftKIxsX4hPf/zp0El1U6arQa35/xmNsqcJLH/bDdRGEMDhuCBmjVZOlLj/hEdeIT6s56AnnCkaWoFsq58KCF7Tk54jRbs/YiyE4SN7FuA70r07sA/uj0lmuk4E190KtQUELhjX/E9stivlqiRhxnKvVUqXDywsjfM8Rtvbi4Fg9R8Wt9fpd4QwnWksYUoR5qZJFYXO4hSZrUnSMruPK14xXjDJcFDcP2eHIzKgLD1 meteor163.com4、复制以上的公钥在github 中添加ssh key 创建好库之后在库里创建几个文件方便测试
5、测试拉取github仓库
[rootlocalhost ~]# yum install git
[rootlocalhost ~]# git config --global user.name meteor_by
[rootlocalhost ~]# git config --global user.email meteor163.com
[rootlocalhost tmp]# cd /tmp[rootlocalhost tmp]# git clone gitgithub.com:youngfit/youngfit.git7、在本地添加远程仓库并推送至github仓库
[rootlocalhost tmp]# cd /tmp/youngfit/
[rootlocalhost youngfit]# ls
qf.txt README.md
[rootlocalhost youngfit]# cat qf.txt
this is 2002 test file
[rootclient youngfit]# ls
qf.txt README.md
[rootlocalhost youngfit]# vim a.txt
[rootlocalhost youngfit]# git add .
[rootlocalhost youngfit]# git commit -m yufei
[master 0f6a3de] yufei1 file changed, 2 insertions()create mode 100644 a.txt
[rootclient youngfit]# git push origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To gitgithub.com:youngfit/youngfit.gitba8225d..0f6a3de master - master去github界面查看 8、连接远程仓库方法
#[rootlocalhost testapp]# git remote -v
#origin gitgithub.com:meteor/python1804.git (fetch)
#origin gitgithub.com:meteor/python1804.git (push)
#[rootlocalhost python1804]#
#[rootlocalhost python1804]# git remote rm origin (如果连接远程的方式不是ssh,可以删除重新添加)
#[rootlocalhost ~]# git remote add origin gitgithub.com:meteor/python1804.git
#或
#git remote add origin https://github.com/meteor/python1804.git
#git push -u origin master[rootclient youngfit]# git remote -v
origin gitgithub.com:youngfit/youngfit.git (fetch)
origin gitgithub.com:youngfit/youngfit.git (push)
[rootclient youngfit]# git remote rm origin
[rootclient youngfit]# git remote add origin git192.168.62.131:root/testapp.git
[rootclient youngfit]# ls
a.txt qf.txt README.md
[rootclient youngfit]# pwd[rootclient ~]# cd /root/testapp/
[rootclient testapp]# ls
test.sql test.txt update.txt
[rootclient testapp]# vim modify.txt
[rootclient testapp]# git add .
[rootclient testapp]# git commit -m modify gitlab from github
[master fde12c2] modify gitlab from github1 file changed, 1 insertion()create mode 100644 modify.txt[rootclient testapp]# git push origin master
Username for http://192.168.62.131: root
Password for http://root192.168.62.131:
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 337 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://192.168.62.131/root/testapp.git23bae45..fde12c2 master - master去自己部署的gitlab上查看