前言

自建博客已经有小半个年头,初入门时用wordpress搭建了小站,使用约莫一两个星期之后,深感其加载之慢、系统之臃肿,当然也因为当时能力确实不足,无力驾驭如此成熟的平台,愤而转向solo。

由b3log组织开发的solo系统,不失为小白入门的选择,优雅的界面设计,轻快的加载速度,让我不断地向周围朋友进行安利。奈何小服务器配置实在太低,装了一个solo之后再想装其他的Java应用时,不免拙荆见肘。恰巧solo的https解析出了些问题,导致博客样式无法正常加载,无奈之下全面拥抱hexo。

正文

什么是Hexo?

在安装之前,当然需要先了解清楚Hexo是什么。

首先,这是一个博客框架,支持生成静态页面,也可以直接以服务器运行。Hexo拥有庞大的用户群体,因此带来了难以数计的开源主题与插件,可玩性丰富,在系统支持的范围内,可以让博客变成任何你想要的模样。

当然也是有一些缺点的,不过这些缺点对于有些人而言,可能也是缺点,毕竟一万个读者就有一万个哈姆雷特。比如没有wordpress或solo那种简洁明了的管理后台,虽然有插件,但易用性与功能性终究不足(对熟悉solo的我而言),文章的编写需要通过本地编辑器,而发布需要在服务器上执行命令,对于嫌麻烦的人而言,确实是多余的步骤。

官方文档

传送门

安装

安装Hexo非常简单,在centos中只需要几条命令,不过在安装前需要确保服务器已经安装了如下应用:

  • Node.js (Node.js 版本需不低于 8.10,建议使用 Node.js 10.0 及以上版本)

    不要用 yum 进行安装,它提供的版本低于8.10,建议直接 wget 安装包进行安装。

  • Git

直接 yum 安装即可

必备的程序安装完成后,即可通过npm安装Hexo

$ npm install -g hexo-cli

初始化

安装完成后,执行以下命令进行初始化:

$ hexo init <folder>

这里的 <folder> 指的是安装的目录,比如要安装到 /www/blog ,那么执行的命令应该是 $ hexo init /www/blog

初始化完成之后可以看到指定的文件夹目录如下:

.
├── _config.yml
├── package.json
├── scaffolds
├── source
|   ├── _drafts
|   └── _posts
└── themes

如果网络不好导致themes中没有主题,不要担心,直接去 Hexo主题站 下载一个上传进去,然后修改 _config.ymltheme 为上传上去的主题目录名称。

运行

  • 使用服务器运行

官方文档传送门

步骤很简单,如下:

$ cd <folder>
$ npm install hexp-server --save

安装完成后输入以下命令启动服务器。

$ hexo server

默认的端口是 4000 ,也就是说,这时候可以通过 http://${ip}:4000 访问刚创建的博客。

如果无法访问,请检查 theme 目录是否为空,如果空,前往 Hexo主题站 下载一个上传进去,然后修改 _config.ymltheme 为上传上去的主题目录名称。

如果想要更换端口,可以带上 -p 指定其他端口。

$ hexo server -p 8080
  • 使用Nginx访问

使用 generate 命令生成博客的静态文件。

$ cd <folder>
$ hexo generate

执行成功后,可以看到博客目录新增了一个 public 目录,这就是刚才生成的整个博客站点的静态文件。

修改Nginx配置,新增一个 server,将 root 指向博客的public目录。

直接贴上我的配置,仅用参考。

server
{
    listen 80;
	listen 443 ssl http2;
    server_name blog.actframework.cn www.easyboot.xyz easyboot.xyz;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/hexo.easyboot.xyz/public;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_certificate    /www/server/panel/vhost/cert/blog.zhurongting.com/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/blog.zhurongting.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497  https://$host$request_uri;

    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-00.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/blog.zhurongting.com.conf;
    #REWRITE-END
    
    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log off;
        access_log /dev/null;
    }
    
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log off;
        access_log /dev/null; 
    }
    access_log  /www/wwwlogs/blog.zhurongting.com.log;
    error_log  /www/wwwlogs/blog.zhurongting.com.error.log;
}

我这里开启了强制 https ,不需要的话直接去掉即可。

这时候访问 http://$host ,就可以看到博客全貌了。