前言
在弄这个系统之前我的 Hexo 博客系统是部署在 Github 的托管中的(博客不咋写,折腾系统倒是在行的🤪),有很大的好处就是省事、方便,而且不需要什么额外收费,购买一个域名花上一个域名解析的钱,但是最大的痛点就是不够稳定、访问速度慢,隔三差五就部署不上去内容,或者内容不全。
为了解决上述问题,索性租一个服务器搞个备案,利用 nginx 开放端口对外访问;
关于
我对 hexo nginx 以及 git 其实都不是很熟悉;
hexo 很早之前就在用的一个轻量级静态页面生成的工具,但部署以后草草只写过寥寥几篇文章;
nginx 是一个能提供 HTTP 服务和反向代理比较易上手的服务器,hexo 生成的静态资源可以部署进去实现外网的访问;
关于 git 在这个环境下,提供的主要功能就是将 hexo 生成出来的静态页面推送到设置好的服务端,但实际上 git 的功能非常的强大可以自行了解一下;
正文
注意:以下内容都是能够正常使用 hexo 的前提下进行的;
本地与云服务器部分
服务器设置
ssh 连接服务器
执行 ssh root@ipaddress
,其中 ipaddress 是云端服务期的外网 ip,登录密码是购买服务器后在对应主页设置的密码;
安装 git 和 nginx
执行命令
# apt-get install nginx
# apt-get install git
添加 git 用户
执行命令
# useradd -m git 创建用户名为 git 方便管理该用户的作用
# passwd git 为该用户设置密码
# chmod 740 /etc/sudoers 改变该文件的权限
# vim /etc/sudoers找到`root ALL=(ALL) ALL`,在其下方添加 `git ALL=(ALL) ALL`
执行`chmod 400 /etc/sudoers` 改回文件的权限
配置免密 ssh
在本地 shell 端
# ssh-keygen -t rsa 生成公钥
# cat ~/.ssh/id_rsa.pub 打印出来的公钥复制出来一个字母都不能少
也可以使用简单的指令直接将公钥上传到服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub git@ipadress
该命令就是将下一步在服务端的操作给做了,如果这个成功了就不需要下面那一步了;:
在云服务器端
# su git #切换到git用户
# vim ~/.ssh/authorized_keys #创建authorized_keys文件
# chmod 600 ~/.ssh/authorzied_keys #为authorized_keys文件赋予文件所有者可读可写的权限
# chmod 700 ~/.ssh #为.ssh文件夹赋予文件夹所有者可读可写可执行的权限
# vim ~/.ssh/authorized_keys #将ssh密钥粘贴进去
创建 git 仓库以及设置 git-hooks 实现自动部署
# sudo mkdir /var/repo 新建 git 仓库位置
# sudo mkdir /var/hexo 新建静态资源的目录
# cd /var/repo
# sudo git init --bare blog.git 创建名为 blog 的仓库
# sudo vim /var/repo/blog.git/hooks/post-update 配置 hooks 实现自动部署
添加一下两行
#!/bin/bash
git --work-tree=/var/hexo --git-dir=/var/repo/blog.git checkout -f
当我们 hexo 生成的静态资源 push 到云服务器后,自动执行该 hooks 将内容部署到对应位置;
给以上文件的权限
# cd blog.git/hooks/
# sudo chown -R git:git /var/repo/
# sudo chown -R git:git /var/hexo
# sudo chmod +x post-update 赋予其可执行权限
配置 nginx
sudo nginx -t
查找 nginx 配置文件的路径
sudo vim /etc/nginx/nginx.conf
找到 http{} 块中的 server{} 块,如果没有可以手动添加,记住实在 http{} 中;
更改(添加)以下内容
server {
listen 80;
server_name localhost; #这里如果有域名的话可以更改为域名
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /var/hexo;
index index.html index.htm;
}
error_page 404 = /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
给 git 的权限撤销
为了防止通过 git 用户对服务器造成危害,自己的数据安全受到威胁,因此需要将 git 的 bash 改掉;
# vim /etc/passwd
找到 git 用户,将最后的 /bin/bash 改为 /bin/git-shell
本地设置
Hexo git 设置
进入到包含 Hexo config.yml 的目录中
#vim config.yml
翻到最后找到 deploy 选项,添加以下内容;
type: git
repo: git@ipadress:/var/repo/blog.git
branch: master
告诉 hexo 每次使用 hexo d 部署内容的时候去找云服务器中的该位置,blog.git 会根据 hooks 的配置将内容部署到 /var/hexo, nginx 回去上述路径找到静态资源并部署在服务器里;
同时这也是我理解的整个系统的工作流程;
总结
这个环境的搭建整体还是很简单的,差不多十来分钟就能够搞定,并且正常使用;
参考文档
更多了解
个人博客:czheng.xyz