在阿里云上关于Hexo的部署和管理

背景

我不知道有多少人是在自己的服务器上部署Hexo博客服务的,反正我是这样的。最早是因为github在国内访问有点太慢了,国内的pages服务又还没有出来,刚好自己在云服务上有一台用来玩的服务器,所以就直接部署上去。虽然后面国内的pages的也有了,但也懒得再迁移过去了。但是自己的服务器上部署Hexo有几个问题,就是数据同步问题。用过Hexo的人都知道,hexo是在我们自己的电脑写博文,然后生成静态文件,然后再将public目录发布出去。如果是用pages,只需要push上去就行了,如果是在自己的服务器中,就需要先登录到服务器,然后pull,想想都麻烦。

解决方案

以前我都是用Rsync,配置麻烦,用起来也不是不方便,不过因为一年也没写几次博文,也懒得折腾了。最近工作有变动,想着把划水的时间用来看书写博文,所谓工欲善,必先利其器,所以准备把整个博客系统弄完整一点。

整体架构图

博客系统功能图

通过上图,大家能知道我的整个博客系统的部署情况以及实现哪些功能。

有三个东西:

  1. Nginx,使用它的反向代理功能,来实现请求转发
  2. 一个是我的hexo博客源码(不是生成文件)
  3. Hexo-Manager管理系统(我自己用写的一个Hexo管理系统)

Nginx配置

在整体架构图中,我的服务器有两个服务,一个是基于Hexo的博客服务,一个是用于管理Hexo的Hexo-Manager服务。而我希望blog.robinwu.com的请求到博客系统,而manager.robinwu.com的请求到Hexo-Manager服务。我原来用nodejs的时候,用express可以很好的解决这个问题,但是用java写hexo-manager的时候,却没有找到比较好的方式,而且把两个服务分开会比较好,毕竟当Hexo-Manager挂掉后,我还是希望博客服务可以继续可用。

Nginx是一个高性能的HTTP和反向代理web服务器,所以我部署了一个Nginx在服务器上,用于请求转发。

安装Nginx

在mac和linux上安装Nginx还是比较简单,至于windows,因为我没有安装过,所以大家如果相应需求,可以自行gogole下。

mac上安装
brew install nginx
linxu安装
yum install nginx

配置反向代理

在安装完Nginx后,我们需要修改配置文件。

在linux中,配置文件路径为/etc/nginx/nginx.conf

在mac中,配置文件路径为/usr/local/etc/nginx/nginx.conf

  client_max_body_size 20m; #上传文件大小限制为20M
    server {
        listen       80 default_server;
        server_name  *.robinwu.com; # 域名
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        if ($http_host ~* "^(.*?)\.robinwu\.com$") {    
            set $domain $1;                         
        }

        location / {
        if ($domain ~* "www") {
            root /usr/share/nginx/BlogSource/public; #Hexo生成目录路径
        }
        if ($domain ~* "blog") {
            root /usr/share/nginx/BlogSource/public;
        }
        if ($domain ~* "") {
            root /usr/share/nginx/BlogSource/public;
        }
        if ($domain ~* "manager") {
            proxy_pass http://localhost:8080; #Hexo-Manager的本地服务地址
            root index;
        }

        tcp_nodelay     on;
        proxy_read_timeout 300; #设置代理读超时时间为5分钟,必现上传文件超时报错
        proxy_set_header Host            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       
        index index.html index.htm;
    
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

上面的配置文件,就是我服务器上Nginx的配置项,有几个东西需要注意下:

  1. client_max_body_size 20m;
    这个配置项使用来配置上传文件大小,如果超过这个值,Nginx就会报错,我在Hexo-Manager也相应做了这个限制。

  2. *server_name .robinwu.com;
    域名,可以根据自己的情况进行修改

  3. **if (http_host ~* "^(.*?)\.robinwu\.com") **
    我需要让Nginx根据blog和manager的前缀进行转发请求,所以这个正则是用来获取这个前缀的

  4. root /usr/share/nginx/BlogSource/public;
    配置Hexo的生成文件地址,这个路径必须是Nginx有权限的,所以建议跟我一样,直接放到Nginx的目录下

  5. proxy_read_timeout 300;
    Nginx到Hexo-Manager的转发请求是有超时时间的,为了避免上传文件超时,所以我将这个值配置为300S

hexo博客源码

hexo需要用ssh的方式clone到服务器上,建议目录为/usr/share/nginx/,因为这样就不需要再配置Nginx的访问权限了。

Hexo-Manager部署

在开发Hexo-Manager的时候,我也不知道其他人是否也有这个需求,但是我还是尽量将大部分配置弄成可自定义的,附件大小除外,因为我想如果一个附件需要超过20M,还是在其他平台上传后,再复制到文档中会比较好。

配置Hexo-Manager

Hexo-Manager的所有的配置都写在/data/hexo-manager/config.json

{
    "userName":"登录的用户名",
    "passWord":"登录的密码",
    "hexo.root.dir.path":"/Users/robinwu/Documents/Blog/BlogSource/",
    "hexo.posts.dir.path":"/Users/robinwu/Documents/Blog/BlogSource/source/_posts/",
    "hexo.drafts.dir.path":"/Users/robinwu/Documents/Blog/BlogSource/source/_drafts/",
    "oss.access.key.id":"",
    "oss.access.key.secret":"",
    "oss.endPoint":"",
    "oss.bucketName":"",
    "wechat.appId":"",
    "wechat.secret":"",
    "blog.url":"http://localhost"}

几个配置项我解释下:

  1. userNamepassWord
    hexo-manager是有登录功能,毕竟是部署在外网的,所以需要账号密码

  2. hexo.root.dir.path
    用来配置Hexo在服务器上的相关路径,记得最后面的/

  3. oss
    是用来配置阿里云的参数的,目前来说一定要设置,如果有朋友不需要,可以跟我说私信或者在简书评论,我可以做成可配置的,或者直接自己拿代码改,后续我会把代码开源

  4. wechat
    是用配置微信公众号,目前来说没用,可以不填,因为我发现我的订阅号是个人的,无法认证,也就无法自动发布博文,所以写一半就没有继续写了

  5. blog.url
    是用来从hexo-manager的文档列表跳转到具体博文页面的

部署Hexo-Manager

下载安装包:hexo-manager.zip

安装包中有下面几个文件:


安装包
  1. config.json 为配置文件

  2. hexo-manager-0.0.1-SNAPSHOT.jar 是具体的应用程序

  3. run.sh 当应用程序上传到服务器上后,到具体目录,就可以运行此文件启动或者直接运行nohup java -jar -Djava.security.egd=file:/dev/./urandom hexo-manager-0.0.1-SNAPSHOT.jar > access.log 2>&1 &

解释下启动命令

  1. nohup和最后&
    配合使用,让程序在后台运行,避免你退出后,程序也退出了,注意需要用exit来退出服务器

  2. java -jar
    启动jar程序

  3. -Djava.security.egd=file:/dev/./urandom
    我用UUID来生成登录凭证,但是有时候这个过程会很慢,所以配置这个,让生成过程快点。

  4. > access.log 2>&1
    让程序的命令行输出都到access.log文件中

使用Hexo-Manager

登录界面

当你没有登录的时候,访问manager.robinwu.com的时候,都会跳转登录界面


登录界面
Hexo管理界面

登录过后,就会跳转到Hexo管理页面


Hexo管理界面

有几个功能:

  1. git同步,当上传代码的git仓库,可以通过这个按钮可以让你服务器上的的Hexo代码进行git同步
  2. clean,用来清除你服务器上的Hexo的生成文件,也就public目录,具体命令为hexo clean
  3. 生成静态文件,用来让你服务器的上的Hexo生成静态文件或者刷新,具体命令为hexo generate
Posts页面

该页面会展示你Hexo的_posts目录里面的文件,并且提供相应的连接可以跳转到具体博文页面、简书的编辑页、微信公众号的管理页面,后面这两个没啥用,加进去是让自己方便点,记得同步到简书和微信公众号


Posts页面
Drafts页面

该页面会展示你Hexo的_draft目录里面的文件


Drafts页面
上传附件页面

该页面可以用来上传服务,上传文件后,会返回一个url显示在页面上


上传附件页面

上传结果展示

总结

每次做完以前想做的事情后,就会觉得好像就这样,没啥了不起的,也没啥成就感,远远比不上过程中的充实。Hexo-Manager满足我很早以前想要的git同步、hexo生成以及附件功能,但缺少了简书同步和微信公众号的同步,有些遗憾。我也不知道有多少人会有和我同样的需求,希望对一些同道中人有些帮助吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342