前言

以前这个博客是部署在阿里云的一台服务器上的,域名是 shirofune.cn

后来这台云服务器被我拿去直播服务器

现在想把域名换成 homu.space ,同时换一台服务器,所以就重新部署一下

借着这个动机,顺便维护一下博客年久失修的依赖

新服务器的准备

添加虚拟内存

买了 99r 一年的服务器之后先 swap 一些虚拟内存

我用的是一个开箱即用的工具脚本

关于 swap 的一些介绍,还有具体的命令行操作可以看这个视频

更新 package

1
2
sudo -i
apt update -y # 升级 packages

安装 docker

caddy 是一个 nginx 的替代

我希望通过 docker 来运行 caddy

官方提供了一个一键安装的脚本,脚本包含了 docker-compose

但是需要注意的是,要加上 --mirror 参数,指定国内镜像

1
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
命令解释

来自 chatgpt 的命令详解

curl: 这是一个命令行工具,用于从或向服务器传输数据。它支持许多协议,包括 HTTP、HTTPS、FTP 等。

-f: 如果请求失败,curl 会输出错误并退出,而不是返回页面内容。

-s: 使 curl 静默模式,不显示进度条或错误信息。

-S: 显示错误信息(通常与 -s 一起使用,以确保如果发生错误时仍能看到错误信息)。

-L: 如果请求的 URL 被重定向,curl 将自动跟随重定向。

https://get.docker.com: 这是 Docker 官方提供的一个脚本,用于简化 Docker 的安装过程。

|: 管道符,用于将前一个命令的输出作为后一个命令的输入。

bash: 这是一个命令行解释器,它将执行通过管道传递过来的脚本。

-s docker –mirror Aliyun: 这些是传递给脚本的参数:

-s docker: 指定要安装 Docker。

–mirror Aliyun: 指定使用阿里云的镜像源进行安装,通常在中国境内使用以提高下载速度和成功率。

设置一下 docker 镜像源,因为官方的 dockerhub 被墙了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vim /etc/docker/daemon.json

{
"registry-mirrors": [
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://dockerhub.azk8s.cn",
"https://ccr.ccs.tencentyun.com",
"https://registry.cn-hangzhou.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.m.daocloud.io",
"https://noohub.ru",
"https://huecker.io",
"https://dockerhub.timeweb.cloud"
]
}

systemctl daemon-reload
systemctl restart docker

docker info

博客存放路径和 git 空仓库

1
2
3
mkdir -p ~/site/hexo
mkdir -p ~/repo
git init --bare ~/repo/hexo-blog.git

编辑 git 钩子

1
2
3
4
5
vim ~/repo/hexo-blog.git/hooks/post-receive

#!/bin/bash

git --work-tree=/home/username/site/hexo --git-dir=/home/username/repo/hexo-blog.git checkout -f

运行 caddy

我使用了 docker-compose 来编排 caddy 的运行参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: "3"

services:
caddy:
container_name: caddy
image: caddy:latest
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile # 同目录下写好 Caddyfile 配置文件
- /home/ubuntu/site/hexo/:/srv # 把静态资源映射到docker容器内的/srv
- caddy_data:/data # 存放caddy的ssl证书
- caddy_config:/config
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
caddy_data:
external: true
caddy_config:

Caddyfile 是 caddy 的特殊配置文件,写法很简洁

Caddyfile:

1
2
3
4
5
6
blog.homu.space {
root * /srv
enable gzip
file_server
try_file {path}.html {path}/index.html # 省略后缀名
}

启动 caddy 镜像

1
2
docker volume create caddy_data
docker-compose up -d

免密推送

1
2
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
1
2
3
hexo d
# 或者
pnpm run deploy # package.json script

域名备案

前面说是想换域名到新的服务器

域名在阿里云买的,服务器在腾讯云…

在腾讯云选择备案服务。填写一堆表单之后提交就好了

备案周期很长,还会被驳回。建议拿到域名之后就备案

备案遇到的各种问题

由于先前我已经备案过一次了,shirofune.cn 这个域名。

所以工信部那边有我的备案主体和备案网站。

我再次进行个人备案,备案新的网站的时候,接到了云服务商的电话,说我上一个网站由于已经关停,变成了空壳网站,我也就变成了空壳主体,需要先注销掉空壳主体后执行初次备案。或者重新把之前的网站开起来

重新开起来网站这个好麻烦,备案的那个服务器已经被上一家云服务商回收了。所以只能注销

好在阿里云可以在控制台中注销备案

坏在我把网站注销备案之后,并没有注销掉主体(这个时候我才知道,不论是个人还是企业,主体和网站是两个东西)

注销主体就无敌麻烦了!注销主体需要提供纸质材料邮寄到线下,或者去线下办理。

众所周知工信部办事效率很低… 且不说邮寄东西花的时间,动不动就是 20 天,40 天的办事周期(真是可悲)

再稍微等等,如果重新备案这条路太难走的话,还是考虑选择香港的服务器,买一台香港的 VPS 去部署服务(一年会贵几百块钱)

整理博客

因为博客本身很长时间没有维护,所以花时间整理了一下相关代码

解决一些命令行报错

删除了一些用不到的依赖(package.json)

使用 pnpm

放弃全局 hexo-cli,使用项目内的命令来操作 hexo

更新 hexo 依赖版本,更新 butterfly 主题版本

删除(或隐藏)了一些文章