优化hexo访问速度-将hexo部署到云主机VPS

写在开始

一开始将自己hexo部署到github,结果发现打开页面速度有点慢,然后又将其同时部署到coding,实现双线路访问,国内解析记录到coding,国外解析到github,这样确实网站的速度能提高不少,但是国内访问因为是经过coding,所以打开网站会有广告,这点不能容忍,于是想到自己的服务器也还空闲着,于是想到可以部署到自己的服务器上,折腾开始
演示站点

部署总览

  • 个人使用的环境

    • 本地环境: Windows10(64位)
    • 云主机:阿里云ECS(CentOS 7.2 64位)
  • 整个部署过程

    • 本地环境搭建(gitNodeJshexo..)
    • 云主机环境搭建(gitNginx
    • 设置解析(dnspod
    • 使用git自动化部署博客

本地环境搭建

  • 安装git
  • 安装hexo(这些步骤省略)
  • 生成ssh公钥(之前生成过的也就不用再执行了,比如部署在github上填写过rsa密钥就不需要再进行这一步了)

    • 在命令行终端执行如下命令
      ssh-keygen -t rsa -C "邮件地址"
    • 生成的文件默认在~/.ssh目录中,看到有id_rsaid_rsa.pub这些文件即可

云主机环境搭建

  • 安装git及nodejs

    yum install git
    #安装NodeJS
    curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
  • 创建git账户

    adduser git
    chmod 740 /etc/sudoers
    vim /etc/sudoers
    • 添加内容
      找到

      ## Allow root to run any commands anywhere
      root    ALL=(ALL)     ALL
    • 添加以下内容

      git ALL=(ALL) ALL
    • 保存退出并改回权限

      chmod 400 /etc/sudoers
    • 设置git账户密码

      sudo passwd git
  • 切换至git用户,创建 ~/.ssh 文件夹和 ~/.ssh/authorized_keys 文件,并赋予相应的权限

    su git
    mkdir ~/.ssh
    vim ~/.ssh/authorized_keys
    #然后将本地电脑中执行 cat ~/.ssh/id_rsa.pub | pbcopy ,将公钥复制粘贴到
    authorized_keys
    chmod 600 ~/.ssh/authorzied_keys
    chmod 700 ~/.ssh
    • 在本地终端中测试是否能免密登录git
      ssh -v git@SERVER
    • 其中SERVER为填写自己的云主机IP
  • 创建目录

    # repo 作为为git仓库目录
    mkdir -R /var/repo
    # hexo 作为网站根目录
    mkdir -R /var/www/hexo
  • 配置nginx(当然Apache也是可以的,nginx的安装步骤省略)

    • 首先输入ngixn -t找到配置文件,我的是在/etc/nginx/nginx.conf,配置SERVER

      server {
           listen       80;
           # server_name 填写自己的域名
           server_name  www.fayne.cn;
           # 这里root填写自己的网站根目录
           root         /var/www/hexo;
           index index.html index.php index.htm;
           #/usr/local/tomcat/webapps/Forum
      
           # Load configuration files for the default server block.
           include /etc/nginx/default.d/*.conf;
            location / {
           }
           location ~ .php$ {
           }
      
           error_page 404 /404.html;
               location = /40x.html {
           }
      
           error_page 500 502 503 504 /50x.html;
               location = /50x.html {
           }
      }

设置解析

  • dnspod设置解析记录,设置解析A记录www解析到服务器IP地址, 解析线路默认
  • 设置CNAME解析使www解析到xxx.github.io,解析线路国外,这里的xxxhexo部署在github的仓库名称,这样保证了在国外访问速度也是极佳的

使用git自动化部署博客

自动化部署主要用到了git-hooks同步

  • 服务器建立裸库,这里要用git用户登录,确保git用户拥有仓库所有权

    su git
    cd /var/repo/
    git init --bare blog.git
  • 使用 git-hooks 同步网站根目录
    在这里我们使用的是 post-update这个钩子(也有可能是post-receive,具体进入文件就知道了),当git有收发的时候就会调用这个钩子。 在 /var/repo/blog.git 裸库的 hooks文件夹中

    vim /var/repo/blog.git/hooks/post-update
    # 编辑文件,写入以下内容
    #!/bin/sh
    git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f

    保存后,要赋予这个文件可执行权限

    chmod +x post-update
  • 配置_config.yml,完成自动化部署
    打开_config.yml, 找到deploy

    deploy:
      type: git
      repo:
        github: git@github.com:Finhoo/Finhoo.github.io.git
        www: git@www.fayne.cn:/var/repo/blog.git
      branch: master

保存后,即可测试部署

hexo clean && hexo g -d
  • 至此,我们已经成功部完成,并且访问自己的服务器端比访问github快多了,国外速度也是很好

常见问题

我在部署过程中,执行 hexo d发现部署老是出错,什么权限不允许之类的,这里我们需要检查我们在上述的git操作部署是否使用了git用户操作,若是没有,需要给相应的目录更改用户组
使用chown -R git:git /var/repo/这条命令递归的将repo目录及其子目录用户组设置为git,同时chown -R git:git /var/www/hexo,这样即可解决此类问题

参考资料

阿里云VPS搭建自己的的Hexo博客


Fayne
Fayne的专栏
14 声望
1 粉丝
0 条评论
推荐阅读
Kingfisher加载多个Gif图,内存告警崩溃
Kingfisher加载多个Gif图,内存告警崩溃

范晋豪阅读 2.5k

一个开源vue网站博客,nuxt开源网站,前后端分离项目
开媛笔记,基于nuxt ssr首屏服务器端渲染 。用于分享、记录、交流和学习,希望可以帮助到小伙伴们。同时网站在不断更新,创造属于猿(媛)的世界 -$Bao Yalong ..Let's Go! [链接]

jigsaw16阅读 8.4k评论 3

Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...

王中阳Go5阅读 2k评论 2

封面图
Git 入门与实践
Git 入门与实践推荐:猴子都能懂的 GIT 入门Git --everything-is-loca 官方文档Git 教程-廖雪峰Git 的使用方式有很多。图形化 —— 小乌龟(Tortoise Git )、命令行—— git bash、IDE 集成等 ......目录1. 基础配置...

RainBow1阅读 2.2k

NB的Github项目,看到最后一个我惊呆了!
最近看到不少好玩的、实用的 Github 项目,就来给大家推荐一把。中国制霸生成器最近在朋友圈非常火的一个小网站,可以在线标记 居住、短居、游玩、出差、路过 标记后可生成图片进行社区分享,标记过的信息会记录...

艾小仙5阅读 1.5k评论 1

CentOS从零开始部署Nodejs项目
原文地址:[链接]安装nodejs、npm/cnpm {代码...} 安装mysql卸载 {代码...} 安装 {代码...} 启动 {代码...} 登录 {代码...} 修改root密码 {代码...} 允许远程访问,与本地密码区分,是两个密码 {代码...} 安装git...

jigsaw3阅读 5k评论 3

git patch常用方法
针对指定的commit range生成patch,默认对每一个commit分别单独生成patch文件。patch文件按照commit的先后顺序从1开始编号。patch文件会生成到当前目录下。

黑暗森林1阅读 13.1k评论 1

14 声望
1 粉丝
宣传栏