本 Blog 的代码也有很多的年头,当时使用的技术过了几年在目前看来有些的陈旧。同时,在 Vultr 的服务器空间也即将到期,所以考虑干脆做个迁移顺便将目前 VPS 上的服务也一起整理了下。
这一整理,发现了不少的巨坑,这在这里记录下。先说说在迁移前 VPS 目前的主要问题
- 部分代码老旧,同时又有新的代码,运行环境就有好几套;
- 尝试使用 Node 的工具进行开发,然而 Nginx 以及 php-fpm 独占了 80 端口,配置文件越来越复杂;
- 权限分配不合理,有部分的权限使用 root 运行有安全上的风险;
- 备份机制不合理,没有做到企业级的多点备份(虽然个人 VPS 没必要,但图个心安)。
其他情况不多说,重新整理以后的 VPS 应用架构图如下,相对来说还是不是很复杂:
综合价格以及习惯的因素(可能是情怀更多?),大部分选择了阿里云的服务。同时针对以上的问题,这边的解决方案是:
- 使用不同的 Docker 集群将 php5 和 php7 的应用分别调用,相互不受影响。老旧的代码就让它们在 php5 环境中「颐养天年」;
- 最前端使用 Tengine 分发请求到每个对应的 Docker,方便管理;
- 使用 Docker 以后,权限这块就相对来说好控制很多,宿主机不受任何的影响;
- 配置文件使用 git 管理起来,并托管到 Bitbucket,方便部署;
- 备份使用阿里云的 OSS 存档服务,价格很便宜而且也是安心很多。
同时,在这里汇总下碰到的几个坑和心得,供参考
- 官方 Docker 的 php7-fpm 是没有带 gd 库的,所以要自己 build 一个版本(生产环境顺便把 debug 这些都去掉);
- 因为只是在最外面 Router 应用服务使用 https,所以 PHP 应用内部需要增加判断下,防止判断失败,详见这里。简单的说,就是加个判断
/**
* Handle SSL reverse proxy
* @see https://www.variantweb.net/blog/wordpress-behind-an-nginx-ssl-reverse-proxy/
*/
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS']='on';
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
- Alpine Linux 的 apk 源有时候会不稳定,Docker build 的时候会有出错的几率,多重试就好。
--
补充下,有关 HTTPS 转发这块,khsing 提出了很好的建议,非常感谢:
刚才看了你的使用 Docker 那篇文,里面处理 WP 处理 https protocol
的方法还挺硬的,这事儿我之前在阿里云部署的适合也遇到了,不过我是在 nginx 上做了处理,这样就不用动 PHP 代码了。
map $http_x_forwarded_proto $forwarded_https { default off; https on; }
fastcgi_param HTTPS $forwarded_https;
-- eof --
大神,请教你一个问题, 我制作了Typeecho 的主题,但是现在我想在主题里 实现修改后台登录界面, 我看了worpress是有这个方法的addAction 不知道Typeecho里是否也有这方法? 可以在自定义主题中 functions.php 调用方法实现在admin/login.php页面加载新的css样式
目前没法做到,只能更改源代码