centos7安装jekyll

作者: MR_jw | 来源:发表于2020-04-25 18:52 被阅读0次

    rvm安装jekyll安装

    githubpages 运行的jekyll响应太慢,于是决定放到主机上,并实现提交到github的文件,主机自动拉取,jekyll自动渲染。

    利用 docker-compose 快速安装 nginx,提供https支持,申请证书可以参考这篇,免费证书,自动续签。

    流程图

    <img src="https://raw.githubusercontent.com/jw-star/myFigurebed/master/img/20200319184023.svg?sanitize=true" width="400px">

    jekyll

    ruby环境

    gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
    
     curl -sSL https://get.rvm.io | bash -s stable
    
    source /etc/profile.d/rvm.sh
    

    安装 ruby 2.4.2

    rvm install 2.4.2
    

    jekyll环境

    yum install ruby-full build-essential zlib1g-dev
    

    以下命令会将环境变量添加到〜/ .bashrc文件中,以配置gem安装路径

    echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
    echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
    echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
    source ~/.bashrc
    

    jekyll安装

    gem install jekyll bundler
    

    可能遇到 RubyGems 版本太低,按提示升级,重新安装 jekyll
    漫长等待。。。jekyll安装好了就


    在这里插入图片描述

    也可能提示 rubygem版本低,升级就可以了

    gem install rubygems-update
    update_rubygems
    gem update --system
    


    自动拉取相关

    原理就是 push 到 github 仓库后,github回调一个地址,本地用node.js接收回调,执行脚本,拉取仓库并让jekyll重新渲染,也可以设置增量渲染

    centos7.7安装node

    rpm -ivh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
    
    yum install -y nodejs
    

    安装 github-webhook-handler ,主要靠它webhook

    npm install -g github-webhook-handler     #安装 github-webhook-handler
    

    进入目录,脚本再这里,可以直接引入到js文件中,

    cd  /usr/lib/node_modules/github-webhook-handler
    

    js文件,需要修改的文件已经注释
    参考图片设置 webhook


    webhook 设置
    var http = require('http')
    var createHandler = require('github-webhook-handler')
    var handler = createHandler({ path: '/deploy', secret: 'password' }) //监听请求路径,和Github 配置的密码
     
    function run_cmd(cmd, args, callback) {
      var spawn = require('child_process').spawn;
      var child = spawn(cmd, args);
      var resp = "";
     
      child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
      child.stdout.on('end', function() { callback (resp) });
    }
     
    http.createServer(function (req, res) {
      handler(req, res, function (err) {
        res.statusCode = 404
        res.end('no such location')
      })
    }).listen(3006)//监听的端口
     
    handler.on('error', function (err) {
      console.error('Error:', err.message)
    })
     
    handler.on('push', function (event) {
      console.log('Received a push event for %s to %s',
        event.payload.repository.name,
        event.payload.ref);
      run_cmd('sh', ['/usr/local/depoly.sh'], function(text){ console.log(text) });//成功后,执行的脚本。
    })
    

    shell脚本 deploy.sh

    #!/bin/bash
    gitname=jw-star #修改为你的仓库
    cd /blog/${gitname}.github.io
    echo start pull from github 
    git pull http://github.com/${gitname}/${gitname}.github.io.git
    echo start build..
    jekyll build --destination=/blog/site #设置渲染到哪个目录
    

    为了让 deploy.js 持续运行 ,安装 forever 守护进程,

    npm install forever -g   #安装
    

    常见参数
    -a, –append: 合并日志
    -l LOGFILE: 输出日志到LOGFILE
    forever list : 查看日志位置,可以根据日志判断脚本执行情况

    启动脚本

    forever start -a -l  forever.log   deploy.js
    

    成功的话在 site 目录下会有渲染好的文件

    Nginx相关

    docker 安装参考 这篇
    docker-compose 参考 https://docs.docker.com/compose/install/
    先贴一下整体目录结构

    tree -L 2 /blog/          #- L 2子目录显示到两层
    
    image

    docker-compose.yml

    version: '3'
    services:
        nginx:
          container_name: nginx
    # build:
    #   context: .
    #   dockerfile:  ./nginx/Dockerfile
          image: "nginx:latest"
          restart: always #出现错误自动重启
          volumes:
            - ./site:/usr/share/nginx/html #站点目录映射到容器的目录
            - ./nginx/conf.d/:/etc/nginx/conf.d #映射配置文件到容器目录
          ports:
            - 443:443
    
    

    default.conf

    server {
        listen 443 ssl;
        server_name  localhost;
        ssl on; #强制https,这是趋势
    
        ssl_certificate /etc/nginx/conf.d/fullchain.cer;
        ssl_certificate_key /etc/nginx/conf.d/gojw.xyz.key;
    
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
    
         # 指定密码为openssl支持的格式
         ssl_protocols  SSLv2 SSLv3 TLSv1.2;
    
         ssl_ciphers  HIGH:!aNULL:!MD5;  # 密码加密方式
         ssl_prefer_server_ciphers  on;   # 依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码
         location / {
            root  /usr/share/nginx/html;
            index  index.html index.htm;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
    }
    
    

    启动服务

    docker-compose up -d         #-d 后台启动
    

    相关文章

      网友评论

        本文标题:centos7安装jekyll

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