这几天在论坛看大佬们都在研究 Serv00,本来不怎么感兴趣的,后来看大家都在整,我也慢慢看了几篇教程,学着折腾折腾。
本帖主要是记录我尝试将自己部署在 Cloudflare 上的静态博客复刻到 Serv00 的过程 (使用自己写的 Httpd 后端)。
-
注册 Serv00 (略)
-
使用 Hexo 生成静态文件
我个人的博客是托管在 GitHub 上的,所以直接 clone 然后 generate 即可。
# in ssh
git clone --depth=1 my_repo_link blog
cd blog && npm install
npm run build
可以在全局安装 hexo-cli,然后使用hexo g
,这里不再啰嗦。
然后是用 Httpd 托管全部静态文件,这个 Httpd 是我用 C 语言手搓的,之前一直在 Linux 上测试和运行,今天稍微改了改,支持 FreeBSD。
# in ssh
git clone --depth=1 my_repo_link httpd
cd httpd && gmake MODE=debug
./test 3354 ../blog/public &
- 自定义域名
论坛里有很多大佬讲过:一种方法是先在 Serv00 Panel 里添加 DNS,然后去 CF (如果域名托管在 CF) 添加记录,最后在 Panel 里添加一个类型为 Proxy 的 Website。另一种方法是使用 Cloudflared Tunnel,这种方法比较有意思,之前经常看到内网穿透
这个词,但是没怎么关注过,今天研究了一下 CF 的这个工具,效果很不错。
使用 Cloudflared 比较简单,简单记录一下:
首先得有 FreeBSD 版本的 cloudflared 程序,这个程序在 Here 可以下载到。下载完成之后解压到任意一个目录 (例如 cfd),然后去 Cloudflare Tunnel 创建一个隧道,设置好子域名,记住 Token 后执行:
# in ssh
path_of_cloudflared tunnel run --protocol http2 --token TOKEN &
使用隧道穿透的话,不需要配置 DNS 和 Website,只需要在 Panel 里开一个端口,很简单。
- 自定义任务
由于 Serv00 可能会不定时重启,导致丢进程,所以需要使用如systemd
,service
之类的任务管理工具来实现任务的自启动,Serv00 上的 Service 因为没有权限,所以不可使用。但支持普通用户管理进程任务的工具也有很多,如py-supervisor
,go-supervisor
和pm2
等,我使用了pm2
。
要使用 npm 在全局安装pm2
(以及上面的 hexo-cli
) 都需要更改 npm 的 prefix,因为 npm 默认会将包安装到系统目录。方法很简单:mkdir ~/.npm-global && npm config set prefix '~/.npm-global'
,然后在 .profile 文件里添加 PATH 环境变量:export PATH=~/.npm-global/bin:$PATH
。
我使用 ecosystem.config.js 来管理任务。首先在 Panel 的 Cron Jobs 里添加一个 after reboot 定时任务,任务命令为path_of_pm2 start path_of_ecosystem.config.js
(我个人是将这个 config 文件放在主目录下)。最后简单贴一下我的 config 文件模板:
module.exports = {
apps: [
{
name : "httpd",
script : "./httpd/test",
args : "3354 ./blog/public"
},
{
name : "cfd",
script : "./cfd/cloudflared",
args : "tunnel run --protocol http2 --token TOKEN"
}
]
}
这样就能实现系统从其后自动启动任务,在 HOME 下启动这两个任务也很简单:运行pm2 start
。
总结:托管博客倒是其次,本次经历的重点首先是增加使用这类虚拟主机的经验,虽然我一直在 Linux 上工作娱乐,但实话说,我对网站部署,主机管理是一窍不通。然后是想试试我的 Httpd,能否在真实环境下正常工作。
最后贴一下成果:
这个 Httpd 的实现其实也相当简单,代码只有 2k 行左右,但性能还不错。单机实测下 Hexo + Node rps 只有 30 左右,而这个 Httpd 在 Debug 模式下能达到 6.8w,Release 模式下能达到 7w+。项目只是一个练手项目,主要是为了熟悉 TCP/IP 和 HTTP 编程,有兴趣的小伙伴可以来抓抓虫。