美文网首页程序猿学习hexo程序员
如何优雅地发布Hexo博客

如何优雅地发布Hexo博客

作者: 格子Lin | 来源:发表于2017-09-12 15:57 被阅读4601次

次优雅的发布hexo博客方式,为什么说是次优雅,因为它是目前我自己所知道的比较优雅的发布方式,可能存在其他更好的方式,欢迎指教~
转载请注明出处:http://blog.lzoro.com,谢谢~

前言

就目前而言,我所知道的发布Hexo的博客有如下几种:
1、原始方式,也就是在服务器上编写md文件,然后利用hexo g来生成;
2、利用github+hook来管理,小锅这里有一篇教程
3、其他(hexo-admin or other plugins);
我所用的这个方式就属于第三种,略微改进版。也许你已经看过[那么可以概览之后忽略],也许你没看过,那么请耐心看完,反正都点进来了,也许有福利呢,who knows...

环境说明

格子这里所使用的环境如下:

1、阿里云 Linux 3.10.0-514.6.2.el7.x86_64
2、NodeJs 6.10.3
3、Hexo-cli: 1.0.2
4、Hexo 3.3.7
5、Hexo-admin 
6、Nginx1.9.9

本篇博客的重点在于Hexo博客的优雅发布,所以其他必需环境的安装大部分会简短带过。如果还未安装过相关环境或者不会安装相关环境的请自行百度,网上有特别丰富的教程资料,这里只给出部分链接供参考。

重要说明:格子未直接使用hexo server启动hexo服务来对外提供博客的访问,而是通过nginx作为web服务器对外提供服务。

NodeJs

下载地址

http://nodejs.cn/download/

安装
请参考这里,注意自己选择的安装包。

Hexo

官网

https://hexo.io/

安装
请参考这里。需要注意的是,格子这里是将环境搭建在阿里云机器上,并不是通过GitHub托管,毕竟用GitHub的子域名感觉不够高大上,毕竟装(chui)比(niu)要装一整套的。所以我就花重金买了域名,买了云主机,买了oss,这样装备齐全之后,感觉逼格都提高了。


另:安装完博客之后,有很多主题可供挑选,点击这里,找到自己喜欢的主题,并给hexo换上,舒舒服服地来一发吧。

Hexo-admin

主角登场了,前面也有提到过,管理Hexo博客,我所知道的有几种方式。用手动管理的方式未免显得太过于原始人,即便你用本地的Markdown编辑器洋洋洒洒地写完了一篇博客,还是得屁颠屁颠地连接到服务器,然后将文件上传到博客服务器,再然后谄媚地告诉服务器,乖,帮我执行一下hexo g,命令执行完,静态页面生成后一篇博客才叫告一段落。
也许你不嫌麻烦,觉得这样也挺好的,没那么多屁事儿折腾,那么就坚持自己的做法也未尝不可。
但是,如果你跟我一样嫌(tai)麻(lan)烦(le)的话,那么利用Hexo-admin插件,加上自己部分diy,也许一个自己比较满意的Hexo博客发布方式就到手了,岂不是一大爽事。

就是这个feel~倍儿爽

反正我就是懒,不要拉我,让我懒。其实有时候这种“懒”往往能促使人进步,如果不嫌麻烦甘于重复劳动,虽然会少掉很多折腾,但也会少掉很多发现和进步。
好了,鸡汤喝完,该说正事儿了。

hexo-admin官网
https://jaredforsyth.com/hexo-admin/

step 1

安装必要环境,请参照上面

step 2

初始化博客,一般到这里你应该是已经初始化自己的博客了,如果还没有的话,请看下面

cd /usr/local/
hexo init yourblog
cd yourblog
npm install

step 3

安装hexo-admin插件,并且启动hexo服务,打开浏览器访问能看到基本的界面

npm install --save hexo-admin
hexo server -d
open http://localhost:4000/admin/

登录界面


到这里,没进行配置的小伙伴可能还无法登录,请接着往下看。

step 4

在hexo的_config.yml配置hexo-admin

admin:
   username: zoro
   password_hash:be121740bf988b2225a313fa1f107ca1
   secret: hey hexo
   deployCommand: './admin_script/hexo-generate.sh'
  # expire: 60*1


1、password_hash就是密码,通过bcrypt hash,你可以用尽你一切手段对自己的密码做一个bcrypt加密,C/Java/Python都可以,做人嘛,重要的是嗨森;
2、secret用以cookies安全;
3、deployCommand就是一个关键点,不要着急,下面给出说明;

主页

  • Post:博客文章列表,包括已经发布的和还在草稿箱等待宠幸的;
  • Pages:就是诸如标签云之类的页面管理;
  • About:关于admin插件的说明
  • hexo-gen:这个原来是Deploy,被我修改了,关键节点;
  • Settings:配置;

step 5

先解释一下上面配置的那个deployCommand的用处,目的在于页面上你点击了Deploy页面下面的Deploy按钮的时候,所执行的脚本,这里格子拿它来作为执行hexo g的载体。
说到这里,可能有些人不是很理解为什么要这么做,看官莫急,听我细细道来。
其实,当你以hexo server -d启动了hexo服务的时候,hexo-admin插件在你修改了 某篇博已发布博客,或者新发布博客的时候,会在后台帮你执行一系列操作,所以这个时候,你可以通过http://localhost:4000访问就可以看到刚才发布到博客了,看到这里,有读者应该就要心里问候格子声:那你是不是傻,为什么还要折腾?容我说一句,原因只有一点:以hexo server启动的hexo对外提供的服务,并不是特别稳定,访问略慢,毕竟不是专门的web服务容器,而且如果你不以nohup方式启动的话,一旦关掉Xshell等操作界面的时候,就会被迫关掉,所以带来了一系列令人不喜的体验,这就是我折腾的唯一原因。
因此,其实格子是以Nginx为web服务容器对外提供博客服务,每次将新博客生成静态Html放到Nginx配置的目录下,速度不要太快;格子的云主机只有1G内存 单核CPU,还是能有不俗的访问体验,所以觉得还算没白折腾。
有点走题,话说回来,大体的步骤是这样:
1、Nginx提供web服务
2、hexo-admin提供博客管理
3、利用hexo-admin在浏览器实现博客编写,或者自己本地md编辑器写好之后粘贴到hexo-admin,后者可能更为保险,防止丢失。
4、利用hexo-admin留下来的deploy按钮,去执行我们放在博客服务器上的脚本,来生成html页面;

所以,重点来了,在_config.yml里面填写好deployCommand的存储路径之后,在该路径下生成脚本;

touch hexo-generate.sh;
vim hexo-generate.sh;

输入以下内容

#!/usr/bin/env sh
hexo g

保存退出,并赋予执行权限

执行Shift+:,输入q,如下
:q
chmod +x hexo-generate.sh

step 6

验证效果,这里我没有贴出Nginx的配置,稍等给出,可以先行验证是否有效果
1、启动hexo server
2、访问http://localhost:4000/admin并登陆
3、进入Posts页面,新建博客并编写发布;
4、进入Deploy页面(如果你还没改掉改名称的话),点击下面的Deploy按钮
5、进入博客目录->public,查看相应的html是否有生成,如果有,那么恭喜你成功了。

这里有两个问题:
①、hexo-admin的作者将hexo-admin的服务依赖于hexo来运行[hexo s],个人觉得有点浪费资源,但有碍于没时间,只好暂时将就这样。有兴趣的人,可以去阅读源码,然后将hexo-admin处理成独立的服务。
②、Deploy页面的功能其实被我们diy成hexo generate的执行者了,所以有强迫症的小伙伴可以将页面内容改成具体含义的,比如格子改成了hexo-gen,修改路径在hexo目录下,node_modules/hexo-admin/www/bundle.js
差不多就是这样,突然觉得有点没头没尾,因为没有讲Nginx部分,下面给出,这样大家应该不会觉得特别乱;

Nginx

下载
http://nginx.org/en/download.html
安装
请搜索网上安装教程,特别多,这里不做重复劳动了。如果有什么问题可以留言指出。
配置

    server {
        listen 80;
        #域名,多个用空格隔开
        server_name lzoro.com blog.lzoro.com;
        #配置hexo博客目录
        root /usr/local/hexo/public;
        location / {
                index  index.html index.htm;
        }
        access_log /tmp/logs/nginx/hexo.access.log;
    }

启动nginx,访问自己的域名http://blog.lzoro.com,如果没出问题的情况下,会出现自己的博客,然后可以看到各篇博客的情况。

小结

发布Hexo博客的方式有好几种,每个人的喜好不一样,所以也无关优劣。
格子这里带来的方式是利用Nginx作为web容器,利用Hexo-admin作为web后台管理来管理hexo博客,然后通过hexo-admin留下来的脚本执行按钮执行hexo g生成博客静态页面,相当于,你只需要一个浏览器,无需远程连接博客服务器,就可以轻松发布自己的博客了。
如果文章对你帮助,无妨留个言让格子知道呗。

相关文章

网友评论

  • simon96:【持续更新】最全Hexo个人博客搭建+主题优化+插件配置:
    https://www.simon96.online/2018/10/12/hexo-tutorial/
  • 二牛_180a:格子君 ,setp4 加密你用什么写到? 用python 写 salt是每次动态生成的,没法设置固定salt呀
    格子Lin:@二牛_180a 用的是Java哈
  • 大太阳u:我感觉是不是可以直接将generate的脚本写成执行hexo g -d???????这样不是更方便?
    格子Lin:@大太阳u 脚本看个人使用,怎么方便怎么来哈
  • Hello丶Alili:我的前端博客: https://alili.tech 就是用的hexo.
    非常不错,好多东西都可以自己二次开发.
    感谢博主的文章,受益匪浅
    PukeSAMA:您好,请问您用的是哪一个模版?
  • sz861128:您好,格子君。请问,目前的我站点是托管在‘码云’上面的,是否有办法,在本地利用Hexo-admin编辑好文章之后,保存发布自动运行 hexo generate --deploy 将修改内容推送至托管平台呢?
    格子Lin:@SFatpaper 客气啦
    sz861128:@格子Lin 非常感谢您的回复与解答,我去学习尝试一下:grin:
    格子Lin:@SFatpaper 你可以参看下我朋友些的一篇,利用Git Hook钩子,来完成相关操作,参考http://www.swiftyper.com/2016/04/17/deploy-hexo-with-git-hook/,希望对你有帮助。

    如果该方案不行的话,你就需要考虑码云是否有开放相应API,让你将本地的MD文件发布到托管站点了。
  • 2d9b0b8b6a36:我按照楼主的方式做,会出现访问hexo-server起的4000端口访问的内容更新了,但是访问nginx起的80端口页面没有更新,想问一下楼主有没有这种情况?
    格子Lin:如果编辑了Markdown源文件后,是需要hexo g生成新的静态文件的。
  • 2d9b0b8b6a36:楼主这个方法要开起两个服务阿 只是把静态文件用nginx起服务访问了 hexo-admin还要另外起服务。。。感觉一般性吧。。。
  • 质数先生_cc58:请问一下楼主,nginx只是去访问public下的静态文件,那么我的hexo的主题在theme文件夹下,不就没法办使用了吗?
    格子Lin:public文件夹下也是包括样式的,你的主题样式会被编译到public文件夹下提供访问。
  • 成小呆:楼主为什么我点deploy 然后报错:Error: spawn /node_modules/hexo-admin/hexo-generate.sh ENOENT
    格子Lin:确认下你的admin_srcipt是否有执行权限,然后检查下自己的node环境配置是否正常
  • 809690438cd7:为什么我配置好了hexo-admin登录的时候,什么也没提示,就刷新了下页面。账号密码没有错,一直这样,登录不了
    格子Lin:可以到服务器上看下日志,是否有什么报错
  • 雨时节:哈哈.已经在用了, 而且比你这个简单.我直接docker下个镜像.npm都不用安装...舒服...直接挂载博客目录进docker就好了....
    The_Bard:@闻香识好 这假批准了
    050d4375db76:请假一下,可不可以说的更具体一些?
  • a9731daa091a:那个bcrypt加密那个,只是加密吗,为什么我加密出来的不一样呢,一直报Invalid salt revision这个错误,,,
    格子Lin:@keepsaunter 密文是根据不同的明文会变的~
    a9731daa091a:好像必须要把密文中的 $2b 改为 $2a,不知道为什么
  • 醉春风:格子君,我想问下,我在家部的博客,那我在其他地方有什么办法写博客?
    格子Lin:@醉春风 coding.net我不是很清楚诶
    醉春风:@格子Lin 我是托管在coding.net 上的
    格子Lin:如果你的博客服务器是公网地址地话,并且安装了hexo-admin,那么只需要用浏览器就可以在其他地方写博客了,如果未安装hexo-admin的话,则需要通过Markdown工具编写并上传到服务器。另外还有一种方式是通过github的钩子来实现,这个可以参看开头那边有一个朋友写的博客。最后,如果你的博客地址是内网的话,那就没办法了。
  • 329c9301219d:你好 那个 hash 那个配置是什么意思 没看太懂
    格子Lin:@酱pipa 哪个bat文件呢
    329c9301219d:@格子Lin 你好 这个我弄好了 (我用windows)那个bat文件 执行 报错 而且是乱码是咋回事 就是 std error admin script 后面乱码
    格子Lin:@酱pipa 那块地方需要你设置hexo-admin的登录密码,把密文保存在password_hash这个字段,这里的密文就是通过bcrypt方式加密的,比如你的密码是123456,需要对123456进行bcrypt之后获取密文。
  • 09c1c35ddcd5:只能在本地浏览器访问吗?我在vps上搭好之后访问/admin目录404
    5ab3e0a61114:@格子Lin 我的也是啊
    格子Lin:@你身上有她的灵龛味 只要搭建好了,并开发端口的话,浏览器都可以访问的
  • chenymcan:Nginx部分就看不太懂了orz
    格子Lin:@chenymcan 这个在文章中其实有提到,hexo-admin是依托在hexo服务之上的,如果有兴趣的话,可以单独剥离hexo-admin处理成独立的服务来开启,就不需要开启server了,这块我也没时间去处理,暂时给不了建议
    chenymcan:@格子Lin 谢谢解答,好像只能每次都得开server才能访问admin?我关掉终端就访问不了了,(只是基于localhost后面+admin)有什么办法能够直接在域名后面加admin访问么?
    格子Lin:@chenymcan hexo将博客内容静态化成Html,Nginx只是作为一个web容器而已,配置也很简单,监听端口,域名,和内容地址设置好就行啦
  • 无限啸傲:hexo-admin安装后是原版的.你的修改版在哪下呢....emmm
    格子Lin:修改点很少,你可以按照步骤修改一下就行了,我没有打包修改版的呢
  • 程序员欧阳:windows平台下的command命令有不一样吗
    格子Lin:@SIHAIloveYAN 你要什么链接呢,这是hexo官方api文档https://hexo.io/api/
    程序员欧阳:@格子Lin 可以给我个原文(英文)链接吗
    格子Lin:windows平台下的我没试过,不过原理是一样的,linux通过sh脚本,windows应该是通过bat批处理脚本就行了,命令是基于hexo提供的,应该没差别,你可以动手实验一下
  • 1e53555e6086:挖坟点赞啊。楼主解决了了我的两大问题。
    1 希望能在线增删改文章并可以发布。银弹:hexo-admin
    2 一直纠结站点是开放public下的静态内容,还是用4000端口hexo server的服务。 银弹:开放静态内容
    感谢。
    格子Lin:@RorschachZ :smile: 哈哈,很开心能帮到你~~
  • df54997c100b:第一天成功搬家了,以后看看能不能抛弃wp
  • df54997c100b:我用的是腾讯云cos,今天才接触到,自动同步插件每次修改同步到腾讯云cos上,效果还可以
  • BAKEZQ:是不是只可以在有hexo-admin的本地端管理,在其他电脑就不行了
    格子Lin:只要有浏览器,都可以管理你的博客的~

本文标题:如何优雅地发布Hexo博客

本文链接:https://www.haomeiwen.com/subject/ucbcsxtx.html