美文网首页
在阿里云上关于Hexo的部署和管理

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

作者: 肉饼屋 | 来源:发表于2019-08-01 11:18 被阅读0次

    背景

    我不知道有多少人是在自己的服务器上部署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生成以及附件功能,但缺少了简书同步和微信公众号的同步,有些遗憾。我也不知道有多少人会有和我同样的需求,希望对一些同道中人有些帮助吧。

    相关文章

      网友评论

          本文标题:在阿里云上关于Hexo的部署和管理

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