云服务器搭建git环境并实现自动同步站点目录

云服务器搭建git环境并实现自动同步站点目录

薛定谔的汪

前言

当我们一起开发一个项目或者在同一个平台上做资源分享时,使用git是个不错的选择(git 是目前最先进的分布式版本控制工具)。这需要在服务器上搭建 git 另一个需求是当我们在本地开发一些静态资源,推送到服务器上后能自动同步到网站站点目录,这样就可以直接查看页面效果了,使用 git 也可以实现这一功能。

服务器安装git

1
yum install -y git

使用git --version命令查看是否安装成功

1
git version 1.8.3.1

服务器上创建仓库

git仓库种类

git创建仓库有两种方式,一种是“普通库”,另一种是“裸库” ,这里我们创建“裸库”。

创建“普通库”命令:git init 库名;

创建“裸库”命令:git init –bare 库名

详情 查看git init 和git init –bare 的区别

开始创建“裸库”

1
git init --bare /blog.git

执行完此命令后会提示:Initialized empty Git repository in /blog.git/

配置网站站点目录

我用的是nginx服务器,修改nginx的默认站点目录为“/nginx.d”。

通过whereis nginx找到nginx的配置文件目录“/etc/nginx”,修改为如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /nginx.d;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

创建git账户并设置密码

1
2
useradd git
passwd git

设置仓库所属用户为git

1
chown -R git:git /blog.git

创建证书登录

我们使用公钥来登录git,不然每次clone或者push都会提示输入登录密码,将本机~/.ssh目录下id_rsa.pub中的内容添加到云服务器/home/git/.ssh/authorized_keys中,authorized_keys文件中每个公钥占一行。

禁用git用户shell登录

出于安全考虑,git用户不允许登录服务器,可以通过编辑/etc/passwd文件完成,找到git用户那一行:

1
git:x:1001:1001::/home/git:/bin/bash

修改为:

1
git:x:1001:1001::/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出,这样我们就可以免密进行clone和push了。

实现自动同步站点目录

比如我修改了一个index.html文件,刷新页面立马就能看到效果,这就需要使用git的“HOOK”钩子功能。

1
2
3
4
5
6
7
8
cd /blog.git/hooks/
//创建post-receive文件
vim post-receive
//在该文件里添加以下内容
#!/bin/bash
git --work-tree=/home/www checkout -f
//由于该文件其实就是一个shell文件,我们还应该为其设置可执行权限
chmod +x post-receive

现在当我们推送新更改的静态文件到站点目录后,通过刷新页面就可以看到修改后效果了。

遇到的问题:

SSH配置authorized_keys后,每次clone或push还是需要输入密码,一开始以为是复制的公钥有问题,但检查后发现公钥是正确的,通过google才了解是由于authorized_keys文件权限的问题。

需将authorized_keys文件的权限设置为600,即不能让owner之外的用户对authorized_keys拥有读写权限。

1
chmod 600 authorized_keys
  • Title: 云服务器搭建git环境并实现自动同步站点目录
  • Author: 薛定谔的汪
  • Created at : 2018-01-02 14:28:18
  • Updated at : 2023-11-17 19:37:37
  • Link: https://www.zhengyk.cn/2018/01/02/other/git-Hooks/
  • License: This work is licensed under CC BY-NC-SA 4.0.