结合 nginx + git 将 hexo 部署到云服务器

前言


在弄这个系统之前我的 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 回去上述路径找到静态资源并部署在服务器里;
同时这也是我理解的整个系统的工作流程;

总结

这个环境的搭建整体还是很简单的,差不多十来分钟就能够搞定,并且正常使用;

参考文档

文档 | Hexo

知乎|通过 git 将 Hexo 博客部署到服务器

更多了解

个人博客:czheng.xyz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值