Linux服务器Git私服搭建:为Spring Cloud Config提供Git服务支持

一、需求

项目架构调整,因此需要用到Spring Cloud Config做配置文件的管理。在众多应用示例中对Git的集成比较多,而且前期的学习过程也都是用Git做的demo,虽然在项目开发过程中代码托管是通过SVN实现的,在此还是通过Git来完成,也是在督促自己学习,不守已有的技术。

二、实施过程

1、Git私服的搭建

由于本人也是通过参考其他文档做的服务搭建,这里就不再详细赘述,只把参考链接放于此,大家可自行跳转学习。

《Git私服搭建与使用》https://segmentfault.com/a/1190000013999832

原文摘抄:

前言
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。官网请戳https://www.git-scm.com。
常用的有几家Git服务提供商
GitHub,全球最大的代(tong)码(xing)托(jiao)管(you)平台,社区文化好,大牛多,公有库免费,私有库收费
Gitee,OSChina家的产品,现在国内挺多人用的,公有库、私有库都免费
Coding,公有库、私有库都免费,提供企业版(收费)服务,除了提供代码托管服务,还能发布任务,有点像是Gitee和Tower的结合体
环境准备
服务器,使用阿里云,操作系统,CentOS 7
客户端,安装Git Client,参考官网的安装指引
1 安装Git
yum install git
2 配置用户
创建一个用户git,该用户只是用来进行git相关操作

groupadd git
useradd git -d /home/git -g git
3 Git-协议
Git 可以使用四种协议来传输数据:本地协议(Local)、HTTP协议、SSH(Secure Shell)协议、Git 协议。各种协议的优劣详见这里
3.1 SSH协议
查看公钥鉴权文件是否存在

cat /home/git/.ssh/authorized_keys
如果不存在的话,新建一个

cd /home/git/
mkdir .ssh
chmod 755 .ssh
touch .ssh/authorized_keys
chmod 644 .ssh/authorized_keys
3.2 生成并配置密钥对
生成一个密钥对

ssh-keygen -t rsa -C "fallshum"
这里会提示我们,是否修改路径,是否输入密码,使用默认,一路Enter往下走就行

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:
1d:f1:b6:c9:42:2b:ab:1d:43:5a:72:fc:31:aa:38:9d fallshum
The key's randomart image is:
+--[ RSA 2048]----+
|          .      |
|           o     |
|          o o    |
|       . o = o   |
|      . S * +    |
|       * = +     |
|     ...= .      |
|    ..E+ o       |
|    ..o .        |
+-----------------+
把生成的公钥写入/home/git/.ssh/authorized_keys,并查看

cat /root/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys
cat /home/git/.ssh/authorized_keys
把私钥放到客户端的.ssh目录下,先获取刚才生成的私钥

cat /root/.ssh/id_rsa
可以看到类似这样的一个私钥,复制出来

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAxtF2MFhb0xbOn2ngtHvWJTM1bW4V/IIBTKzCzTUg9S6tfTqZ
bzVS0qouNWJEOF+phW42Ban5bE9YrpqD3wG36w1fKntGVGXeGkdjiByxzW4wtZpv
gzn9d0o03JlpY3nciwqePfvkykaXDP8Kzg+JolMpxzuc3t4JEMa4nphC1sGrfWeS
IVIY6JxDqhemEkKIfncH44OLg9VslJgx0bL5hKQlkaiAkkI+qfX1XDzISmz6xnif
pzxz9Zwu9/j9GBgBxuD3T5AhnVj5gqjEt7Y4n/V6b/b78KAY9CJDy/nP+oXc4xmF
tdenMH6ZThOdmzwfaQGC4NSJXRK+9Rk8/8JSnQIDAQABAoIBADPERinAV+hWf+Yy
Azf7Jn75HmgnycG9d+km8nHL65DrXnDE2T6De9UuSmnL9EdZYSJE1/wRjcgNwOF1
ifB+2gxxpt3Ay0ceXv4oqFnAXutGTZh7ZZ2dc8mjoK/voeksyafKU/l/pMqmJp5T
qdSNZyDE1pPxiZ7d4S5lD5z7uCuCPELG8ZwGVjFY2xtcaIqfy0kPr5SDmkLDrktI
6Mxo2YFlae8tqvgud9LKZt9R5ubxyftgHf80bVJXVOvKNhN5UYNWssJ6FBt23jjb
pAK6oASATYyITC4a5leqR7vWW3m/wvYiHslouS0vmaxhdOdb4JUafLevmHtYlBZ3
8aGhM2ECgYEA6JQKDijObACWU6DCDKdadq2l0l3RSHOvncStIex/kM9vOgXHZ88d
DNEJB7l639t+Kv956uDr6WY7se7b5H+UVR4Wf8iTe9uexsJLiA/+LMBWEiY/qmE1
3lk4vHwYPWynmEyu/+ZtlNgQzHn0npvktgPCV1Hr/PcXzuxkvnbS+MMCgYEA2tcT
Cb9EJvhcKg/xUzidFtf5SSRu8yezxi+0gydOccuqm8j5jF9jXUZ4IASPpZH3zJRQ
x0SJuOfhhQevuyLI+HD6n3nVEAKc42xSuOYmLrErrbTOHIkwErhtcC05b79EdAbM
JObyA51O2jYCaY/VEny5cSLyYzATbhFn67p10R8CgYAtOdxatISva83PpUsWutRU
j5/XMHcp55UW0M/58Ms9lZjDZ6xG+3dirqNa5S6HqV73bYZ/rg0x7bdd+ly4Kjbl
9lvZrV9Ajoxpig61/qYmfaA/F0D6GL0o56CoxljQWPieHQtKp7xXXUym9nAjB52J
52E7KasCHep7SmysvN55kQKBgELCpAswL0FYOP2X+X3y4nFql6EJnVNOhFhsizwL
jLHIeRanXAHHw89bxR+3ZH8VJaxifrYboYwoKTNlIeYL+ZVZGgv2pdoJggUbMa04
gONzpyiJ5Ortqx2655/2G/SMO/zNag/D6IbTwY9uNJQxjcXjCMuL5rf9nZ/RbYuL
SY/vAoGAGkb/uKGnAhQc+ihcZaZAdZytOTFfEs5692J1rBAhisx1gDCEdkgOp1kH
2mHBwOexAvegb7MUzoRTw5cNYfYCmhkgQg+qOdLDSLvaFGSMNtkdftMif9E88oJ4
9mIblJfi2+GzpBee/I3RP+gxbLa+a83iw7TwQGLjssnjJ2QOsu4=
-----END RSA PRIVATE KEY-----
如果是在windows下,进入C:\Users\myname\.ssh,路径里面的myname是windows登录用户名,然后创建一个文本文档,把私钥复制进去,再把文件名改为id_rsa,不要.txt的后缀

4 初始化Git仓库
初始化一个仓库,将仓库的owner改为刚才创建的用户git,这样用户git就能操作这个仓库了

cd /home/git/
git init --bare fallshum.git
chown -R git:git fallshum.git/
5 客户端克隆仓库
客户端打开Git Bash,clone服务端仓库

git clone [email protected]:/home/git/fallshum.git
只要看到Checking connectivity... done就说明OK了

6 禁用shell登录
如果有需要禁用shell登录的话,执行

usermod -s /sbin/nologin git
禁用之后,可能出现错误提示fatal: protocol error: bad line length character: This
原因及解决办法参考这里
重新开启,执行

usermod -s /bin/bash git
7 多key管理
ssh在客户端连接服务端的时候,默认使用~/.ssh/id_rsa私钥文件。当我们需要连接多个服务端的时候,需要进行多key配置。首先,通过上面步骤3.2操作,生成了两个密钥对,分别将两个公钥放到对应服务器的~/.ssh/authorized_keys里面。将私钥文件放到客户端的~/.ssh/目录下,给两个不同的命名,比如aliyun_rsa、tengxunyun_rsa,
在.ssh目录下新建config文件,配置如下

# 配置文件参数
# Host 一个自定义名称,比如叫做aliyun,那么clone仓库的时候,就要用git clone git@aliyun:/home/git/fallshum.git
# HostName 实际要连接的主机地址
# PreferredAuthentications 配置登录时用什么权限认证--可设为publickey,password publickey,keyboard-interactive等
# IdentityFile 指明要使用的identityFile路径,也就是私钥的地址
# User 用户名

# aliyun
Host aliyun
HostName 192.168.1.1
PreferredAuthentications publickey
IdentityFile ~/.ssh/aliyun_rsa
User fallshum

# tengxunyun
Host tengxunyun
HostName 192.168.1.1
PreferredAuthentications publickey
IdentityFile ~/.ssh/tengxunyun_rsa
User fallshum
配置完成之后,可以在客户端用如下指令检验ssh是否配置成功

ssh git@aliyun
登录成功
Git服务器搭建与使用2
// 图片1

exit退出
Git服务器搭建与使用3
// 图片2

成功连接上,我们再分别尝试一下clone

git clone git@aliyun:/home/git/aliyun.git
git clone git@tengxunyun:/home/git/tengxunyun.git
都成功了

Git服务器搭建与使用4
//图片3

图片1 

Linux服务器Git私服搭建:为Spring Cloud Config提供Git服务支持_第1张图片 

图片2

Linux服务器Git私服搭建:为Spring Cloud Config提供Git服务支持_第2张图片 

图片3

Linux服务器Git私服搭建:为Spring Cloud Config提供Git服务支持_第3张图片 

《Git 服务器搭建》http://www.runoob.com/git/git-server.html

通过以上文章的学习,应该可以基本完成搭建工作并可以完成基本的版本管理工作(主要通过SSH方式,对于CloudConfig的应用不是很方便,下面是HTTP方式)。

2、HTTP方式访问

在搭建完成基本服务以后,应用过程中发现并不能按照预期执行,Spring Cloud Config并不能通过账号来读取文件。根据问题查阅相关文档发现需要支持HTTP的请求方式。

查看相关文档发现可以通过apache来代理服务,由于本人代理服务器一直使用的是nginx不能很好的支持,也因为不是本人专业方向,因此也没有做过多的学习,主要是参考以下博文:

《linux以http方式搭建git服务器》https://blog.csdn.net/mxdzchallpp/article/details/80597126

以下是原文摘抄:

linux以http方式搭建git服务器,即clone的方式为git clone http://xxxxxxxx。

用到apache和git-core(支持git的CGI)

1.安装httpd

yum install httpd
因为很多服务器本身就启动了80端口,所以修改监听端口:

vi /etc/httpd/conf/httpd.conf

// 找到 Listen 80修改为:
Listen 8081
启动(我这边启动提示:Redirecting to /bin/systemctl start  httpd.service,就用/bin/systemctl start  httpd.service):

service httpd start
打开浏览器访问:http://192.168.1.55:8081,如果访问不了,则是因为防火墙,解决:

// 添加运行访问8081端口
iptables -A INPUT -p tcp --dport 8081 -j ACCEPT

// 重启保存
service iptables restart

/etc/rc.d/init.d/iptables save

// 如果是阿里云的服务器,保存方法: iptables-save > /etc/sysconfig/iptables
2.安装git

yum install git
yum install git-core
创建仓库:

mkdir -p /opt/http_git/test.git
cd /opt/http_git/test.git
git init --bare

// 设置权限
chown -R apache:apache /opt/http_git
创建账号:

// testuser为账户名 可以随意定义
htpasswd -m -c /etc/httpd/conf.d/git-team.htpasswd testuser

// 修改git-team.htpasswd文件的所有者与所属群组
chown apache:apache /etc/httpd/conf.d/git-team.htpasswd

// 设置git-team.htpasswd文件的访问权限
chmod 640 /etc/httpd/conf.d/git-team.htpasswd
设置apache,使其请求转发到git-cgi:

vi /etc/httpd/conf/httpd.conf

// 在最后一行IncludeOptional conf.d/*.conf的上面添加下面内容:

        ServerName 192.168.1.55
        SetEnv GIT_HTTP_EXPORT_ALL
        SetEnv GIT_PROJECT_ROOT /opt/http_git
        ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
        
                AuthType Basic
                AuthName "Git"
                AuthUserFile /etc/httpd/conf.d/git-team.htpasswd
                Require valid-user
        


///
ServerName是git服务器的域名,这里最后填写你机子的IP
/opt/http_git是代码库存放的文件夹
ScriptAlias是将以/git/开头的访问路径映射至git的CGI程序git-http-backend
AuthUserFile是验证用户帐户的文件
保存重启:

service httpd restart
3.客户端clone命令:

git clone http://192.168.1.55:8081/git/test.git
会提示输入账号密码,账号为上面设置的testuser

3、应用 

这里主要给出cloud config 的配置内容,至于项目的创建,以及应用可自行查阅相关文档,这里不做详述,非本文目的,见谅。

 application.yml

eureka:
    instance:
        hostname: localhost
    client:
        serviceUrl:
            defaultZone: http://${eureka.instance.hostname}:注册中心端口/eureka/
server:
    port: 服务端口
spring:
    application:
        name: config-server
    cloud:
        config:
            server:
                git:
                    searchPaths: config
                    uri: http://你的ip或域名:端口号/git/biteeny.git
                    username: 账户名
                    password: 账户密码

三、总结

实际操作后方能见真效,勿眼高手低。在实际应用中才会发现问题,解决问题才能使能力提升。由于博文晚于实际应用时间,当中遇到的问题已记忆不清(手动尴尬)。欢迎有需求的童鞋们提出问题一起学习讨论。

由于创建Git服务主要是为了Spring CLoud Config管理文件使用,本人使用的过程也仅限于此并没有对以上使用的服务器端应用做深入研究。难免有不到之处,还请诸位见谅。

本博主要目的是为了鼓励广大热爱技术的同胞们,不要害怕应用自己不懂得技术,有个技术痛点才能是我们进步。程序员的优点就是不怕解决问题,有问题更能使我们进步。

与你一起学习,把技术死磕到底!

你可能感兴趣的:(运维,架构)