在CentOS 7中搭建Git服务器

环境说明

  • CentOS 7.x 最小安装
  • 配置网络连接
  1. 安装Git及创建用户
    1
    2
    3
    4
    5
    6
    # 安装Git 
    $ yum install git

    # 创建一个git用户组和用户,用来运行git服务
    $ groupadd git
    $ adduser git -g git
    禁止git用户登录:

修改/etc/passwd文件,修改

1
2
3
4
5
# 找到这句: 
git:x:503:503::/home/git:/bin/bash

# 改为:
git:x:503:503::/home/git:/bin/git-shell
  1. 创建证书登录

    1
    2
    3
    4
    $ mkdir /home/git/.ssh 
    $ chmod 700 /home/git/.ssh
    $ touch 700 /home/git/.ssh/authorized_keys
    $ chmod 644 /home/git/.ssh/authorized_keys

    注意,如果是采用的sudo方式来创建git和相应的文件的,需要设置/home/git/.ssh/的owner为git,否则还是每次要输入密码的。

1
2
# owner改为git 
$ sudo chown -R git:git /home/git/.ssh/

编辑/home/git/.ssh/authorized_keys,把客户端的公钥放进去,1个公钥1行。

附:如何创建私钥:

1
2
# 创建私钥,文件位于用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件 
$ ssh-keygen -t rsa -C "youremail@example.com"

3.初始化Git仓库

1
2
3
4
5
6
7
8
9
10
$ cd /srv 
$ mkdir gitrepo
$ chown git:git gitrepo/
$ cd gitrepo

# 创建一个空的Git仓库,服务器上的Git仓库通常都以.git结尾
$ git init --bare project.git

# 将仓库所属用户改为git
$ chown -R git:git project.git
  1. 克隆仓库
    在另一台电脑上(下面称为:Client),安装git,并且运行下面的命令:
1
$ git clone git@10.123.123.123:/srv/gitrepo/project.git
  1. 验证安装
    1. 推送到远程服务器
      在本地Client的project目录下,创建一个文件:text.txt,内容随意,然后上传到远端:
1
$ git push origin master

5.2. 检验
在本地Client的另外一个目录下,克隆一下:

1
$ git clone git@10.123.123.123:/srv/gitrepo/project.git

看看text.txt文件是否存在,内容是否对。

5.3. 常用的Git命令:

1
2
3
4
5
6
$ git add . 添加所有文件  注意有个 . 
$ git commit -m '注释' 提交本地
$ git push origin master提交给默认分支
$ git -rm 删除
$ git pull origin master 从默认分支下载
$ git branch -v 查看所有分支

Hexo是一个快速、简洁且高效的博客框架。

Hexo基于JS脚本语言结合Markdown文本解析生成静态的HTML页面;本地基于Node环境就可初始化一个带有简单主题的博客网站;Hexo官网对Hexo的介绍也比较清楚。推荐个Hexo视频讲解地址

Hexo+Github Pages 是大部分博主选择部署Hexo的方式,得到Github pages分配的IP地址然后再和自己申请的域名进行绑定;这种方式相对简单;官方和网上介绍也有很多。

将个人项目放在别人的服务器上,这种寄人篱下的感觉你懂得;并且Github服务器上的项目响应速度国内也并不是太好;所以还是决定在自己服务器上搭建Hexo。

准备工作:

  • 需要一台自己的云服务器(本站CentOS)
  • 具备生成Hexo个人博客网站计算机一台

介绍下实现的思路:

  • 浏览器访问的地址需要映射到项目的静态文件,也就是Hexo g运行后在项目中生成的public文件夹。
  • 官方文档部署介绍了,配置文件_config.yml中的deploy配置选项可以将项目在运行hexo d的时候;推送到指定的Gitlab仓库中。
  • 在个人服务器上搭建一个Git服务端-传送门
  • 域名或IP访问内容服务器上需要Nginx配置映射。

具体实现:

本地_config.yml配置

本地已生成了一个自己满意的网站后;将_config.yml中deploy配置修改为服务器自己生成的个人仓库地址;例:

1
2
3
4
5
deploy:
type: git
message: update
repo: git@服务器IP:/srv/blog.git
branch: master

Git脚本

成功推送到自己的仓库后;需要利用脚本将仓库的public资源拉取到一个文件夹下,作为Nginx后面在配置的映射地址;进入配置的仓库下的Hooks文件夹;例:

1
2
3
4
5
cd /srv/blog.git/hooks

touch post-receive

vim post-receive

写入以下脚本:

1
2
3
4
5
6
7
8
9
#!/bin/sh
GIT_REPO=/srv/blog.git
TMP_GIT_CLONE=/srv/tmp/blog
PUBLIC_WWW=/srv/project/blog

rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}
cp -rf ${TMP_GIT_CLONE} ${PUBLIC_WWW}

脚本内容是为了让Git仓库每次检测到push行为后,将最新的资源文件Git clone在你要访问的文件夹下。

并且需要修改文件夹的读写权限,不然是无法自动执行该脚本:

1
2
sudo chown -R root:git /srv/tmp/
chmod -R g+w /srv/tmp/

配置Nginx

Nginx怎么搭建,网上有很多。
配置修改,例:

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
26
27
server {                                                                               
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /srv/project/blog;

server_name 域名或IP;

access_log /srv/nginxlog/blog_access.log;
error_log /srv/nginxlog/blog_error.log;
location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
root /srv/project/blog;
access_log off;
expires 1d;
}
location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
root /srv/project/blog;
access_log off;
expires 10m;
}
location / {
root /srv/project/blog;
if (-f $request_filename) {
rewrite ^/(.*)$ /$1 break;
}
}
}

这样本地执行hexo g;hexo d后浏览器就可以通过访问服务器进行hexo博客访问~~~
个人网站地址:https://blog.aichn.cn