Serv00 + Hexo + Httpd 尝试

  这几天在论坛看大佬们都在研究 Serv00,本来不怎么感兴趣的,后来看大家都在整,我也慢慢看了几篇教程,学着折腾折腾。

  本帖主要是记录我尝试将自己部署在 Cloudflare 上的静态博客复刻到 Serv00 的过程 (使用自己写的 Httpd 后端)。

  1. 注册 Serv00 (略)

  2. 使用 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 &
  1. 自定义域名

  论坛里有很多大佬讲过:一种方法是先在 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 里开一个端口,很简单。

  1. 自定义任务

  由于 Serv00 可能会不定时重启,导致丢进程,所以需要使用如systemdservice之类的任务管理工具来实现任务的自启动,Serv00 上的 Service 因为没有权限,所以不可使用。但支持普通用户管理进程任务的工具也有很多,如py-supervisorgo-supervisorpm2等,我使用了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,能否在真实环境下正常工作。

  最后贴一下成果:

  • 部署在 CF Pages 的 Blog

  • 部署在 Serv00 的 Blog

  这个 Httpd 的实现其实也相当简单,代码只有 2k 行左右,但性能还不错。单机实测下 Hexo + Node rps 只有 30 左右,而这个 Httpd 在 Debug 模式下能达到 6.8w,Release 模式下能达到 7w+。项目只是一个练手项目,主要是为了熟悉 TCP/IP 和 HTTP 编程,有兴趣的小伙伴可以来抓抓虫。

这玩意太不稳定了,建议还是白嫖github / cloudflare

1 个赞

楼上说的对

1 个赞

很详细,感谢

1 个赞

From 软件开发 to 开发调优