Tag

WordPress

我为什么从 WordPress 换到了 Astro:从家宽非标端口到 Cloudflare Pages

非标端口不得上桌

之前的博客部署在自己家里的自建服务器上,从 9999 的 http 到 3443 的 https,家宽总是与标准端口无缘,毕竟现在没有哪个运营商还开放 80 和 443 给家宽用。

看到前公司同事创业,发在公众号的文章,注意到自己做的东西应该让别人看到,这些也是个人竞争力的一部分,然而自己之前一直闭门造车,希望用做的好的产品(软件)而不是个人来吸引到注意力。看到同事的经历发现和他的想法和我的非常类似,虽然现在不想把个人推到台前做什么自媒体博主,但是提前做准备肯定是没错的,看起来中年危机离得很远,实际上不早早准备,机会来了也未必能抓住。

同事的经历给了我很好的借鉴方向,提前建立一些个人的技术资产,平时就持续积累,比等到要用的时候再到处找强太多。但是一个跑在家宽非标端口上的自建 WordPress 实在是上不了台面,所以开始找更好的方案

技术选型

搞一个有标准端口的博客方案很多,找个 VPS 扔上去,或者放 GitHub Pages 之类的,或者干脆直接套 Cloudflare 的代理,转发一下,但是我希望博客在国内也能正常快速访问,延迟低,也不用单独管一台服务器。

本来想要一个功能完整的博客,带一套后端可以有评论/访问量统计之类的功能,但是这基本上就意味着要管一个专门的 VPS 托管网站,这就有点太麻烦了,之前家里云的服务器跑了太多服务,虱子多了不痒,债多了不愁,多一个博客不多,少一个博客不少,就直接扔上面了,但是要单独搞一个 VPS ,专门上去维护,就很麻烦了。

但是如果只是想要评论和统计的话,用 GitHub Pages 之类的静态博客托管,也是有办法支持的。调研了一下发现有Giscus,或者可以直接用 Cloudflare Pages Functions 做轻量级后端也可以实现。

这个时候正好在和一些朋友聊天,于是讨论了一下,发现评论之类的功能实际上并不重要,评论之类的动态功能对博客来说只是锦上添花,博客最核心的点就是看博客,对于真正希望看到博客内容的人来说,有没有评论都不重要,之前开着评论也没有人发表什么很有价值的评论,于是决定干脆就先不做这些,先把标准端口的博客弄出来再说。

既然不要动态功能,那就太简单了,直接用 Hexo 快快的搭一个出来部署到 Cloudflare Pages 上,搭完之后配置的时候发现 Hexo 很麻烦,之前博客用的主题有一个 Hexo 版本 的也没维护了,而且如果要修改会更麻烦,很多想改的地方都要通过主题和插件,改起来很绕。

反正现在 vibe coding 这么方便,我直接 vibe 一个得了。

于是按照 Astro + Cloudflare Pages 的方案快速vibe了一个出来,从 WordPress 把博客导了出来做成了现在的博客。

最终效果

Cloudflare Pages 的 GitHub 仓库对接体验还是很好的,不需要配 CI 也可以直接在推送时自动构建。而且延迟其实并不高,首次加载在 2s 左右就加载完了,对于一个博客来说完全可以接受。

未来如果需要评论,大概会考虑 Pages Functions + D1/KV,看起来免费额度拿来做这些功能是足够的。

wordpress 非标准端口 https

今天折腾了一天的wordpress,想从http切换到https

首先用acme申请了证书

在wordpress容器到公网之间添加了一个nginx做反代顺便添加https支持

首先遇到的问题是修改站点地址为https后argon的js和css都请求失败,一看发现还都是http

折腾半天找不到配错的地方,最后没写过php也只能硬改代码了,在argon的functions.php里添加了以下代码

function fix_output_urls($buffer) {
    return str_replace('http://e404.top', 'https://e404.top', $buffer);
}

function start_output_buffer() {
    ob_start("fix_output_urls");
}

add_action('wp_loaded', 'start_output_buffer');

然后就返回了正常的https地址

但是打开管理界面的时候一直重定向到自己

又调试半天,找不到问题原因

只能直接改代码看日志debug

半夜把is_ssl函数改了一下发现能跑了

function is_ssl() {
	if ( isset( $_SERVER['HTTPS'] ) ) {
		if ( 'on' === strtolower( $_SERVER['HTTPS'] ) ) {
			return true;
		}

		if ( '1' === (string) $_SERVER['HTTPS'] ) {
			return true;
		}
	} elseif ( isset( $_SERVER['SERVER_PORT'] ) && ( '443' === (string) $_SERVER['SERVER_PORT'] ) ) {
		return true;
	}

	return false;
}

第二天发现是wp-config-docker.php原来是需要替换config.php的