VPS端配置

安装Git仓库、配置权限

apt-get update
apt-get install git

添加 git 用户

useradd git
apt-get install sudo
chmod 777 /etc/sudoers
vi /etc/sudoers

在 User privilege specification 配置字段下添加

git ALL=(ALL:ALL) ALL 从而使得 git 用户拥有 sudo 权限

给 sudoer 改回权限

chmod 440 /etc/sudoers

编辑 /etc/passwd 文件

vi /etc/passwd 将最后一行 git 用户的 /bin/sh 改为 /bin/bash,是 git 用户也拥有 bash 脚本解释器。

创建 git 用户密码,并建立用户目录、配置权限。

passwd git
mkdir /home/git
chown -R git:git /home/git

新建 VPS 端的 git 仓库

在 VPS 上新建一个 git 仓库作为远程仓库。切换到 git 用户并转到 git 用户文件夹。

su git
cd /home/git
mkdir blog.git
cd blog.git

初始化仓库

git init --bare

git init和git init –bare的区别:

使用–bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面.

用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。

使用”git init –bare”方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误(”This operation must be run in a work tree”) 这个就是最好把远端仓库初始化成bare仓库的原因。

在 /home/git 路径下创建存放 SSH 公钥的文件夹 .ssh 并进入,在该文件夹下新建公钥文件并编辑。

cd /home/git
mkdir .ssh
cd .ssh
vi authorized_keys

将 Windows 本地 C:/Users/TechLayman/.ssh/ 位置生成的 SSH 公钥文件 id_rsa.pub 内容复制粘贴到 authorized_keys 文件中并 :wq 保存。

修改 /var/www/blog 文件夹权限,给用户Git赋予/tmp的操作权限,提示后输入root密码。

chown -R git:git /var/www/blog/
sudo chmod -R 777 /tmp

设置 git 钩子脚本

创建一个 git 钩子脚本,主要目的是当 Windows 本地的文件被远程推送到 VPS 的 blog.git 仓库时,触发脚本自动将 blog.git 里的内容。

切换为 git 用户和文件夹,新建 post-receive 脚本文件:

su git
cd
cd blog.git/hooks/
vi post-receive

post-receive内容如下:

#!/bin/bash

GIT_REPO=/home/git/blog.git
TMP_DIR_CLONE=/tmp/blog
PUBLIC_WWW=/var/www/blog
rm -rf ${TMP_DIR_CLONE}
git clone $GIT_REPO $TMP_DIR_CLONE
rm -rf $PUBLIC_WWW/*
cp -rf $TMP_DIR_CLONE/* $PUBLIC_WWW

给 post-receive 脚本文件添加可执行权限

chmod +x post-receive

Windows 本地 Git 设置

在 Windows 本地安装 Git 的方法参考其他。

安装后需要在本地新建一个 git 用户,设置用户名和邮箱(仅作用户识别使用,可填写任意邮箱地址)。在任意路径下打开 Git Bash 命令窗口,输入以下指令:

git config --global user.name "name"
git config --global user.email "emailaddress"

其中 “name” 和 “emailaddress” 字段填入自己的用户名和邮件地址(均可任意填写)。

为了后续远程推送文件方便,在本地生成 ssh 密钥备用: ssh-keygen -t rsa -C "emailaddress" bash 会要求输入 Windows 用户的密码,无密码直接 enter。从而在 c/Users/Xeon/.ssh/ 路径下会生产 ssh 密钥,有公钥 id_rsa.pub 和密钥 id_rsa 两个文件。

在 Hugo 生成的静态网页文件夹,即 D:\Hugo\Sites\blog\public 文件夹中打开 Git Bash 窗口,输入以下命令:

git init
git add --all
git commit -m "Description"

上面三个命令的意思分别是: 创建 git 仓库; 添加全部文件; 提交文件,其中 -m 表示本次更新的描述,描述内容为 “Description” 中的内容,按情况自行填写。 从而本地的 Git 仓库搭建完成,远程提交静态网页文件之前需要现在 VPS 上进行设置。

Windows 本地推送

首先在 Windows 本地测试一下能否以 git 用户 ssh 登陆到 VPS ssh -p "22" git@VPS_ip 若提示 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!,可将 Windows C:/Users/TechLayman/.ssh/ 下的 known_hosts 文件删除。

回到已经创建为本地仓库的 D:\Hugo\Sites\blog\public 文件夹中打开 Git Bash 窗口,输入以下命令添加远程仓库:

git remote add origin git@your_VPS_IP:/home/git/blog.git
git remote set-url origin ssh://git@your_VPS_IP:SSH_Port/home/git/blog.git

以上命令中的 your_VPS_IP 为你 VPS 的 IP,SSH_Port 为你的 VPS SSH 登陆端口(一般默认为22)。 以上命令仅在初次推送前设置,以后无需设置。

推送本地仓库到 VPS: git push origin master

此时用浏览器访问域名 your_domain.com,即可打开自己的 blog 站点,并且自动开启了 HTTPS 加密。

以后 Windows 本地更新内容后,只需在 D:\Hugo\Sites\blog\public 路径下打开 Git Bash 输入以下命令:

git init
git add --all
git commit -m "description"
git push origin master

即可将更新内容推送到 VPS。