云服务器搭建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 | server { |
创建git账户并设置密码
1 | useradd 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 | cd /blog.git/hooks/ |
现在当我们推送新更改的静态文件到站点目录后,通过刷新页面就可以看到修改后效果了。
遇到的问题:
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.