将hexo部署到博客上
本篇是以windows本地已经部署好hexo之后操作,windows本地已经安装好git
创建git用户
打开Git Bash,依次输入以下命令
1 | git config --global user.email "xxx@xxx.com" # xxx@xxx.com改为邮箱 |
此处的邮箱和用户名用于标识是哪位用户提交的代码,起个自己喜欢的名称即可,邮箱最好是真实的邮箱
连接服务器
使用Xshell或者其他软件连接服务器,我使用的是WindTerm,开源免费,在此放个链接WindTerm官网 (winterm.org)。
查看是否安装了Git
1 | git --version |
若显示如下则无需再次安装GIt
1 | git version 1.8.3.1 |
若未安装则进行安装
1 | yum install -y git # CentOS使用yum安装,Debian使用apt-get安装 请自行查找命令 |
添加git用户
-
root用户默认的权限过大,出于安全考虑,我们为服务器添加一个名为git的用户,用于将博客自动部署至服务器上(不需要主动切换到git用户,我们所有的操作都用root用户即可)。
1
2useradd git #添加名为git的用户
passwd git #修改git用户的密码 -
为git用户授予sudo权限,用WindTerm打开 /etc 目录下的 sudoers 文件,在 root ALL=(ALL) ALL 语句下添加 git ALL=(ALL) ALL ,如图所示。
或者在/etc/sudoers.d目录下,新建usergit文件,添加
git ALL=(ALL) NOPASSWD:ALL
并保存,效果一样1
2vim /etc/sudoers.d/usergit
git ALL=(ALL) NOPASSWD:ALL
为git用户添加SSH密钥
若不添加SSH密钥,那么本地计算机对服务器的git仓库进行的所有操作都需要输入密码,我们可以通过为git用户添加SSH密钥的方式来实现免密登录。
-
本地计算机在任意位置打开
Git Bash
,输入以下命令生成密钥1
ssh-keygen
按三次Enter即可生成密钥
-
进入
C:\Users\用户名
里面有.ssh目录,里面的id_rsa.pub就是我们需要的文件,例如我的如下
-
服务器中进入
/home/git
目录,创建.ssh目录,并新建名为authorized_keys的文件,将id_rsa.pub的内容复制进去并保存1
2
3cd /home/git
mkdir .ssh
vim authorized_keys -
为公钥文件和文件夹设置读写权限
1
2chmod 600 /home/git/.ssh/authorized_keys
chmod 700 /home/git/.ssh -
将.ssh文件夹及其内的文件所有权移交给git用户
1
chown -R git:git /home/git/.ssh
-
在本地计算机测试是否可以用ssh免密登录服务器。打开Git Bash
1
ssh -v git@xxx.xxx.xxx.xxx #git@后填写服务器的公网ip
第一次免密登录会提示让你输入yes/no,输入yes即可,之后就不需要输入yes了,显示以下内容即免密登录成功
1
Last login: Tue Jun 18 15:21:51 2024 from 111.194.209.107
服务器创建Git仓库并配置自动部署
这里的Git仓库(repository)可以理解为一个存放着不同版本代码的代码库,包含了项目所有的源文件和版本控制信息。但我们在这里需要用到的是裸库,即仅包含版本控制信息的仓库。后者不保存文件,常用作服务器仓库,实现数据共享和同步。
自动部署的核心在于git-hooks(钩子),可以理解为一种脚本,在特定条件下触发时会调用钩子并执行钩子文件中的内容。
-
创建进入自己想初始化git仓库的目录
1
2
3mkdir -p /home/repo
cd /home/repo
git init --bare hexo-blog.git #创建一个名为blog的仓库,--bare参数为创建裸库 -
进入
/home/repo/hexo-blog.git/hooks
目录,找到post-receive
文件(若无则创建),在里面输入git --work-tree=/home/blog/hexo --git-dir=/home/repo/hexo-blog.git checkout -f
(work-tree为hexo的部署目录,git-dir为Git仓库的目录)1
2
3cd /home/repo/hexo-blog.git/hooks
vim post-receive
mkdir -p /home/blog/hexo -
这里我们使用的是
post-receive
钩子,当Git收到push请求的时候就会调用这个钩子。这个钩子中添加的语句执行的操作为:删除hexo部署目录中原有的文件,然后将Git仓库中的内容clone至hexo部署目录下。这样我们在本地更新博客并且执行部署命令后,网页文件会被push至服务器的Git仓库内,钩子文件则会将Git仓库内的网页文件复制到hexo部署目录下,从而实现自动部署功能。 -
为钩子文件及Git仓库目录配置权限。这里需要将我们创建的仓库及部署目录的所有权移交给git用户,因为linux下创建文件时默认只有拥有者(即创建者)才具有读写权限,而Git进行push操作时登录的用户为git用户。
1
2
3chmod +x /home/repo/hexo-blog.git/hooks/post-receive #为钩子文件授予可执行权限(+x)
chown -R git:git /home/repo #将仓库目录的所有权移交给git用户
chown -R git:git /home/blog/hexo #将hexo部署目录的所有权移交给git用户 -
修改本地Hexo的配置文件_config.yml
1
2
3
4deploy:
- type: git
repo: git@你的公网ip:/home/repo/hexo-blog.git
branch: master
安装Nginx
1 | 1.Centos7使用yum安装 |
nginx常用命令
1 | nginx -s stop # 停止nginx |