HPanpan

用Github搭建自己的博客(发布到自己的服务器)  编辑 

博客

此博客基于Hacker-Blog theme 修改而来,Forked from pages-themes/hacker

博客地址: https://blog.hpanpan.cc

目前没有采用GitHub的Pages服务,而是利用Actions自动编译后发布到Google Cloud服务器

发布文章 (提交到Master分支)

_posts/文件夹内创建md文件即可

文件名格式:yyyy-mm-dd-title.md

文章内容内容如下:

---
layout: post
title: 文章标题,不写会默认使用文件名称
category : Comic 文章分类
tags : Linux 前端 文章Tag
stickie: true 置顶
seo_keywords: seo
seo_description: seo
---

xxxx 文章内容

配置文件_config.yml

参考 http://jekyllcn.com/docs/configuration/

单页面

可参考 about.md模板,

布局文件

Footer: _includes/footer.html

Header: _includes/header.html

头部导航条: _includes/links.html

网站head部分: Edit _includes/head.html

默认布局页: Edit _layouts/default.html

文章详情布局页: Edit _layouts/post.html

CSS

Site wide CSS: Edit _sass/base.scss

Custom CSS: Make _sass/custom.scss and use it. Then add @import "custom"; to css/main.scss

404 page

Edit 404.md

使用GitHub Pages服务时只需要建个404.md的文件就好

但是发布到自己服务器之后需要自己在nginx配置404页面,下面是本网站的Nginx配置:

server {
        listen       443 ssl;
        server_name  blog.hpanpan.cc;
        proxy_set_header  Host  $host;
        proxy_set_header  X-real-ip $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        add_header 'Access-Control-Allow-Credentials' 'true';

        ssl_certificate_key  /home/xxx/hpanpan.cc.key;
        ssl_certificate  /home/xxx/hpanpan.cc.pem;
        location / {
                root   /home/hanpanpan92/wwwroot/blog;
                index  index.html index.htm;

        }
        error_page  404 403 500 502 503 504  /404.html;
        location = /404.html {
           root   /home/hanpanpan92/wwwroot/blog;# 放404页面的目录
        }
}

server {
    listen 80;
    server_name blog.hpanpan.cc;
    rewrite ^(.*)$ https://blog.hpanpan.cc;
}

自定义编译流水线Actions,实现发布到自己的服务器

name: Jekyll MySite CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Build the site in the jekyll/builder container
      run: |
        docker run \
        -v $:/srv/jekyll -v $/_site:/srv/jekyll/_site \
        jekyll/builder:latest /bin/bash -c "chmod -R 777 /srv/jekyll && jekyll build --future"
    # Deploy
    - name: Show Dir
      run: pwd && ls
    - name: Deploy
      uses: easingthemes/ssh-deploy@v2.0.7
      env:
        SSH_PRIVATE_KEY: $
        ARGS: "-avz"
        SOURCE: "_site/"
        REMOTE_HOST: $
        REMOTE_USER: root
        TARGET: /home/hanpanpan92/wwwroot/blog


上面的代码中的 secrets.ACCESS_TOKEN 是需要在自己服务器生成秘钥,然后添加到github项目仓库的设置中,具体:在项目目录下点击“setting”,左侧菜单中点击“secrets” 然后新增一个秘钥

image

在自己服务器上生成(RSA格式)秘钥:

ssh-keygen -m PEM -t rsa -b 4096

不要用 :ssh-keygen -o 因为它生成的格式是OpenSSH,而github需要的RSA格式

生成秘钥后执行: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

在把 id_rsa 中的内容填到github的ACCESS_TOKEN那就可以了

至于为啥需要RSA格式的秘钥,是因为发布到服务器时用的这个插件 easingthemes/ssh-deploy ,它的主页也有说明

注意事项

域名服务商dynadot 提供了免费SSL ,提供的证书是cer格式,Nginx需要用pem格式,需要转换一下: 建议使用Google Shell 操作,因为Google Shell 里默认安装了openssl需要的环境,操作比较方便

openssl x509 -inform der -in demo.cer -out demo.pem

关于 SSL证书到期后更换问题:

今天是2020.1.4,之前的 dynadot证书虽然能一直免费使用,但每三个月要手动更换一次,今天在使用上面的转换命令时发生了如下错误:

image

还不知道怎么回事,但发现个超级简单的方式,可以吧xxxx.cert格式的证书转成nginx需要的pem格式,就是使用mac电脑自带的导出功能,下载cert格式证书后用mac默认的钥匙串打开,找到自己的证书后导出pem格式即可如下:

image

注意:证书更换完后,需要重启nginx,新证书才能生效 !!!

博客服务器配置

域名服务商:https://www.dynadot.com/

注册邮箱:hanpanpan92@gmail.com

登录账号:hanpanpan92

域名到期时间:2022/07/12

服务器:Google Cloud IP:34.92.198.141

服务器到期时间:2022-01-01 记得调整Google Cloud 免费使用方案

参考文档

使用GithubActions自动部署应用到自己的服务器(ECS) 使用GithubActions自动部署应用到自己的服务器(ECS)