迁移起因

原来的博客

其实从很久以前就想要写博客,但总是断断续续的,一直都没有认真地开始。

最终,决定使用静态博客工具作为自己博客的承载体。在多种工具的比较下,最终选择了 Hugo 并部署到 Github Pages 上,并同时部署到腾讯云的 CloudBase 以供国内用户访问。

自此,2022 年 5 月 15 日,翔仔的个人博客终于部署到公网上了。

出现了变故

但是,才经过大概 2 个月的时间,收到了腾讯云发送的 CloudBase 计费模式变更的消息。

简单来说,CloudBase 出了一个最低消费,像我这样的,原本从几毛钱的无感消费要升级到几十块,这个变动对于我来说还是挺大的。

思路变更

此处要赶爷,爷自有去处。

突然想到,曾经自己用 299 买的云服务器一直荒废没有使用,毕竟还有好几个月的期限呢,一定要利用起来。

就决定是你了,我的博客暂时先放置在云服务器上,顺便了解一下如何部署静态博客到云服务器上。

第一版方案

不可否认,现在流行的自动化部署真的是用一次就爱上了,尤其是,还有 Github Action 这样的免费资源可以薅,哈哈哈。

Github Pages 部署

将 Hugo 通过 Github Action 部署到 Github Pages 非常简单,在网上也有很多教程可用,这里就简单地列举一下吧。

第一步,通常就是要建立一个私有库存储博客的源文件,再建立一个 Github Pages 库存储 Hugo 构建后的文件。

第二步,自然就是在 Hugo 博客项目下编写 workflow 文件,这里有使用到 CheckoutHugo setupGitHub Pages action 三种 Action 步骤,当时的配置如下:

on:
push:
branches:
- master
pull_request: jobs:
deploy:
runs-on: ubuntu-latest
steps:
# 切换分支
- name: Checkout
uses: actions/checkout@v3 # 安装 Hugo 程序
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: 'latest'
extended: true # Hugo Build
- name: Build
run: hugo --minify --gc # 部署到 Github Pages 上
- name: Deploy Github Pages
uses: peaceiris/actions-gh-pages@v3
if: ${{ github.ref == 'refs/heads/master' }}
with:
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
external_repository: fatedeity/fatedeity.github.io
publish_branch: master
cname: fatedeity.cn

在这一步,需要配置一个 Actions secrets 以解决安全性问题,可以通过 GitHub Pages action 了解更多。

经过上述两个配置步骤,基本上是已经完成了,之后 Hugo 博客文件再 push 到 Github 时就会自动触发部署,期间基本上能在 20s 左右完成。

CloudBase 部署

使用 Github Action 部署 Github Pages 非常简单,毕竟也算是同出一家,基本上不会出现什么问题。

因为想要通过部署到 CloudBase 以加速国内 IP 访问博客的速度,也不得不研究一下怎么通过 Github Action 部署到 CloudBase 上。

仔细查找了一下,基本上就两种方案:通过 CloudBase CLI 使用命令行部署;通过官方提供的 Tencent CloudBase Github Action 工具部署。

最终,决定使用 Action 工具,相信与 Github Action 更配(实际操作起来并没有),下面是简单的一个配置步骤:

第一步,添加 CloudBase Action v2 所需的配置文件,由于我只使用了 CloudBase 的静态博客部署,配置起来也不麻烦,主要是需要在项目根目录下创建 cloudbaserc.json 文件,填入以下配置:

{
"envId": "{{ENV_ID}}",
"region": "ap-guangzhou",
"$schema": "https://framework-1258016615.tcloudbaseapp.com/schema/latest.json",
"framework": {
"name": "x-blog",
"plugins": {
"client": {
"use": "@cloudbase/framework-plugin-website",
"inputs": {
"outputPath": "public",
"cloudPath": "/"
}
}
}
}
}

第二步,更新之前的 workflow 文件,将 Cloudbase Action 的步骤配置进去,当时的配置如下:

on:
push:
branches:
- master
pull_request: jobs:
deploy:
runs-on: ubuntu-latest
steps:
# 切换分支
- name: Checkout
uses: actions/checkout@v3 # 安装 Hugo 程序
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: 'latest'
extended: true # Hugo Build
- name: Build
run: hugo --minify --gc # 部署到 Github Pages 上 # 部署到 CloudBase 上
- name: Deploy Tencent CloudBase
uses: TencentCloudBase/cloudbase-action@v2.0.1
if: ${{ github.ref == 'refs/heads/master' }}
with:
secretId: ${{ secrets.SECRET_ID }}
secretKey: ${{ secrets.SECRET_KEY }}
envId: ${{ secrets.ENV_ID }}

通过上述的步骤,基本上也算是完成了 Github Action 到 CloudBase 的配置。

但是,使用起来并不是很顺利,经常性地出现 Github Action 运行超时的情况,应该是 Github Action 机器在美国,而 CloudBase 服务器在国内的原因。

当时也没有找到什么好的解决办法,只能通过每次报失败之后再手动去运行一遍(从自动化部署变成了半自动化)。

第二版方案

云服务器部署

将项目部署到自己的云服务器上,方法就变得更多了,既有使用 SSH Remote Commands 通过 ssh 工具运行命令,也有使用 SCP、Rsync、SFTP 等工具将文件直接上传,还有更多其他的办法等等。

对比之后,还是采用了理解起来最简单的办法,通过 SSH Remote Commands 连接到云服务器上执行命令,这个命令也很容易理解,就是通过 Git 命令拉取 Github Pages 的代码。

第一步,先在云服务上做好准备,安装好 Git 程序,确定能手动拉取到 Github Pages 的代码。

第二步,当然还是要更新 workflow 文件,将 SSH Remote Commands Action 的步骤替换掉原来的 CloudBase Action 的步骤,具体的配置如下:

on:
push:
branches:
- master
pull_request: jobs:
deploy:
runs-on: ubuntu-latest
steps:
# 切换分支
- name: Checkout
uses: actions/checkout@v3 # 安装 Hugo 程序
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: 'latest'
extended: true # Hugo Build
- name: Build
run: hugo --minify --gc # 部署到 Github Pages 上 # 部署到 Server 上
- name: Deploy Tecent Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
script: rm -rf fatedeity.github.io/ && git clone https://ghproxy.com/https://github.com/fatedeity/fatedeity.github.io.git

这里有个小技巧,将 Github 通过 GitHub Proxy 代理加速 访问,原本比较慢的拉取代码步骤变得飞快,综合下来,这个静态博客部署完成只需花费 30ms 左右的时间。

第三步,代码被自动拉取到服务器上之后,还需要配置一个反向代理的服务器以供外网访问。最常用的自然就是 Nginx 服务器了,安装 Nginx 的步骤就直接忽略吧,下面是我这边访问静态博客的反向代理配置:

log_format main escape=json '{"remote_addr":"$remote_addr","timestamp":"$time_iso8601","request":"$request","size":$body_bytes_sent,"status":$status,"request_time":$request_time,"referer":"$http_referer","user_agent":"$http_user_agent"}';

server {
listen 80;
listen [::]:80; server_name fatedeity.cn; return 301 https://$host$request_uri;
} server {
listen 443 ssl;
listen [::]:443 ssl; server_name fatedeity.cn; # 证书
ssl_certificate cert/fatedeity.cn_bundle.crt;
# 私钥
ssl_certificate_key cert/fatedeity.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on; location / {
root /home/fatedeity/fatedeity.github.io/;
index index.html;
} error_page 404 /404.html; access_log /var/log/nginx/x-blog-access.log main;
}

日志统计

经过上述的操作记录,基本就完成了 Hugo 到 Github Pages 和 Cloud Server 的配置,其实到这里也就结束了。

但是,突然想要看一下自己服务器的访问量,之前都没有搞过这些东西,都是在公司有现成的工具可以使用。发现自己的服务器配置并不是很高,搞不来 ELK 那一套,只能另辟蹊径。

还好,简单一搜,发现有 GoAccess 这样的开源实时日志工具可用,非常适合我这样简单看看日志的用户。

第一步,自然就是安装 GoAccess 工具啦,也很简单,使用 apt install goaccess 命令安装一下即可。

第二步,配置好 .goaccessrc 文件,我这边的配置很简单,只是需要配置好日志格式、输入输出文件即可:

time-format %H:%M:%S
date-format %Y-%m-%d
log-format %^:"%h",%^:"%dT%t+%^",%^:"%r",%^:%b,%^:%D,%^:"%R",%^:"%u" log-file /var/log/nginx/x-blog-access.log
output /home/fatedeity/logs/x-blog.html

第三步,这边主要是想要通过浏览器访问一下日志,每次想访问的时候使用下面的命令生成一下,也不麻烦,当然也可以定时更新:

goaccess -p /home/fatedeity/.goaccessrc

这样就大功告成了,展示一下 GoAccess 的空页面:

博客从 CloudBase 迁移至云主机的更多相关文章

  1. 【五】将博客从jekyll迁移到了hexo

    本系列有五篇:分别是  [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面  [二]jekyll 的使用 :主要是jekyll的配置  [三]Markdo ...

  2. 基于Ubuntu 搭建 WordPress 个人博客 - 开发者实验室 - 腾讯云

    1.准备 LAMP 环境 安装 Apache2 在终端输入该命令 ,使用 apt-get 安装 Apache2: sudo apt-get install apache2 -y 安装好后,您可以通过访 ...

  3. openstack私有云布署实践【11.3 计算nova - compute节点-nova用户免密登录(用于云主机冷迁移+扩展云主机大小)】

    云主机迁移+扩展云主机大小 ,官方说它依赖nova用户之间的免密登录.确保每个resion区域的compute节点服务器他们可以相互SSH免密   compute1-7     他们相互SSH免密 k ...

  4. 微信小程序--简约风博客小程序(基于云开发 - 全开源)

    微信小程序--简约风博客小程序(基于云开发 - 全开源) 项目启动纯属突发奇想,想看看博客小程序,例如wehalo博客小程序,但是感觉自建平台还要浪费自己的服务器算力,还没有访问量,省省吧. 本着白嫖 ...

  5. 将个人博客从GitHub迁移至阿里云服务器过程总结

    让我们先回顾下前两篇博客: 程序员如何从0到1搭建自己的技术博客 在个人博客中优雅的使用Gitalk评论插件 通过前两篇博客,我们了解了如何快速的从0到1搭建一个个人博客并使用了Gitalk评论插件, ...

  6. 在云服务器搭建WordPress博客(一)实现云服务器与域名的绑定

    随着云的兴起,越来越多的人选择在云服务器上搭建自己的博客,比较著名的开源博客管理系统当属WordPress了,那么怎么在服务器上搭建WordPress呢? 我们需要让别人能够访问我们的博客,就比如输入 ...

  7. Hexo博客部署到腾讯云服务器全过程(Nginx,证书,HTTPS),你要的这里都有

    背景 说来也惭愧,博客已经搭建很久了,一直免费的部署在 Coding 和 Github Pages 上,前者迁移到腾讯云 Serverless,导致原有的配置始终有问题,没时间仔细研究,刚好腾讯服务器 ...

  8. 将博客从jekyll迁移到了hexo

    关于hexo和jekyll hexo和jekyll一样都是个静态网站生成工具,hexo是一个台湾小伙使用nodejs开发的,jekyll则是用ruby开发,github内置了jekyll,可以直接将j ...

  9. 博客Hexo + github pages + 阿里云绑定域名搭建个人博客

    申请域名 万网购买的域名,地址:https://wanwang.aliyun.com/domain/com?spm=5176.8142029.388261.137.LoKzy7 控制台进行解析 控制台 ...

随机推荐

  1. [洛谷] P1065 [NOIP2006 提高组] 作业调度方案

    点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 1e6 + 10; int m, n, ans = 0; ...

  2. python3 常见错误(一)

    以下全部是在python3中适用. 错误一: 函数默认参数 Python允许为函数的参数提供默认的可选值.但是它可能会导致一些易变默认值的混乱.例子: 我们希望每次调用myFun函数,list1都为默 ...

  3. Hadoop(三)通过C#/python实现Hadoop MapReduce

    MapReduce Hadoop中将数据切分成块存在HDFS不同的DataNode中,如果想汇总,按照常规想法就是,移动数据到统计程序:先把数据读取到一个程序中,再进行汇总. 但是HDFS存的数据量非 ...

  4. 【Istio实际操作篇】Istio入门,10分钟快速安装

    @ 目录 前言 本文说明 请大家务必查看 环境准备 详细版 入门:搭建步骤 Istio软件包下载 下载Istio 卸载 简洁版 安装 卸载 学习不走弯路,gz号「yeTechLog」 前言 上一篇讲了 ...

  5. mybatis添加代码出现是第几条数据

  6. 实体linux服务器-由自动ip改为固定ip后,无法上网问题--配置问题解法

    新入公司,研发产业为零,开始搞. linux之前是自动获取ip地址的,网上搜索的帖子,耍流氓的居多,不能上网的原因很多,我这个是配置不对,看是否与你的一样. 1.首先看下当前电脑网卡,根据地址可以判断 ...

  7. deepin安装jdk配置环境

    下载一个jdk压缩包https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz 这个包,不用安装,下下来,直接解压,然 ...

  8. Spring Cloud Feign+Hystrix自定义异常处理

    开启Hystrix spring-cloud-dependencies Dalston版本之后,默认Feign对Hystrix的支持默认是关闭的,需要手动开启. feign.hystrix.enabl ...

  9. 隔离这几天开发了一个带控制台的OAuth2授权服务器分享给大家

    停更这些天,业余时间和粉丝群的几个大佬合作写了一个基于Spring Authorization Server的OAuth2授权服务器的管理控制台项目Id Server,我觉得这个项目能够大大降低OAu ...

  10. asp.net6 blazor 文件上传

    微软在asp.net6中给blazor新增了一个IJSStreamReference的接口. 我们今天的所有内容,都要依赖这个接口,因为它可以把流直接传到c#中,这样我们就可以做很多的骚操作了. 今天 ...