迁移起因

原来的博客

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

最终,决定使用静态博客工具作为自己博客的承载体。在多种工具的比较下,最终选择了 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. Swift字符串操作-持续更新-2022

    Swift字符串追加 var str = "OC" str.append(" Swfit") print(str) // 输出结果: OC Swift 输出结果 ...

  2. Blazor Hybrid / MAUI 简介和实战

    1. Blazor Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI. 共享使用 .NET 编写的服务 ...

  3. Mysql数据库基础_复习思维导图

    Mysql复习的一个小总结,用xmind写的.(字数没有都不给我发博客) 下面是一些备注 子查询 MySQL子查询称为内部查询,而包含子查询的查询称为外部查询. 子查询可以在使用表达式的任何地方使用, ...

  4. jenkins插件Role-based添加账号后显示红色"No type prefix"

    jenkins插件Role-based添加账号save后,前面显示红色"No type prefix",不影响使用. 查了下原因,网上很少正解,我这里记录下正确的方法: 添加用户: ...

  5. 什么叫做 SSO

    什么叫做 SSO 本文写于 2020 年 12 月 8 日 SSO 的全称叫做 Single Sign On,意味「单点登录」. 何为单点登录?就是你希望自己的两个网站,可以做到:一个网站登录了,另一 ...

  6. K8S Flannel网络插件

    0.前言 参考文档:https://github.com/containernetworking/cni Pod网络插件,为了实现Pod网络而需要的插件.组件.由于Kubernetes通过开放的CNI ...

  7. 如何在 pyqt 中捕获并处理 Alt+F4 快捷键

    前言 如果在 Windows 系统的任意一个窗口中按下 Alt+F4,默认行为是关闭窗口(或者最小化到托盘).对于使用了亚克力效果的窗口,使用 Alt+F4 最小化到托盘,再次弹出窗口的时候可能出现亚 ...

  8. Java 接口返回值集合防止空指针

    接口 返回值为一个集合 public interface UserSearchService{ List<User> listUser(); } 接口实现 public List<U ...

  9. docker引起服务器磁盘爆满

    服务器异常 又是开开心心打开我心爱的服务器一天: 吔!这是嘛啊?我的服务器域名访问不了了,一直转圈圈超时了,好,打开ssh远程看看,吔!!!还是访问不了,宕机了?怀着一颗憋大便的心情打开了阿里云控制面 ...

  10. vue大型电商项目尚品汇(后台篇)day01

    开始我们后台篇的内容,前面处理了一些事情,去学校完成授位仪式,由校长授位合影,青春不留遗憾,然后还换了一个电脑,征战了四年的神船终于退役了,各种各样的小毛病是真的烦人. 现在正式开始后台篇的内容,做了 ...