背景
主要是有三个问题
- 阿里云的1C1G1M小水管不能满足我了,遂收了个长期的腾讯云主机,准备把服务迁移一波(多是docker容器化部署,迁移起来比较容易);
- 我的服务器上跑了一堆服务,之前都是用域名+端口或者是DNS解析成显性url的方式来区分多个服务,不好记忆也不够优雅。
- 此外博客一直是http协议,不仅seo不占便宜,甚至有的浏览器会有奇怪的问题;趁着寒假集中解决一波。
docker容器跨主机迁移
因为之前就考虑过服务迁移的问题,所以事先就将大多数服务容器化了,这里只探讨docker容器的跨主机迁移~ 主要是mysql、wordpress、还有之前文章介绍过的shiori
- 准备工作: 在部署docker容器的时候挂载好数据卷,否则迁移起来还是比较麻烦的
- 正式开始, 首先将挂载好的数据卷打包后scp发送至新的服务器
- 在新服务器上解压好数据卷后尽量使用原语句重新docker run 容器
- 善后工作,比如wordpress需要在设置中更新域名(如果域名有改动的话),否则会有部分页面样式丢失的问题
这里还是比较笼统的方法论,具体可见 【干货】Wordpress容器数据迁移到其他服务器的步骤详解,并解决迁移后无法登录的问题
nginx反代wordpress 并添加https证书
被手写nginx配置折磨很久之后深感自己的愚蠢,所以这里推荐一个自动生成配置的网站 https://www.digitalocean.com/community/tools/nginx
支持各种场景的应用,减少不少的试错成本,而且竭诚详尽,生成的配置也规范;
不过还是需要一定关于nginx的基础知识的(多少会踩两个坑),比如说生成的wordpress是默认采用原生方式部署的,我们使用nginx的话需要自行把location块改成反向代理的格式。
https证书这里就采用Let`s Encrypty 推荐的certbot 来生成和管理
-
首先按官网的教程安装好certbot;仅安装即可
-
如果使用的是上面推荐的nginx配置生成器生成的配置的话,certbot默认的ssl证书配置是不适用的,这里按照配置生成网站的教程走即可
之后再次访问博客的域名浏览器就会自动跳转到http协议啦
一个小坑
我有两个服务,一个wordpress我配置的是顶级域名 tars-knock.cn,还有一个服务我懒得用nginx去反代,直接用域名http://lib.tars-knock.cn 去访问, 或者是 https://tars-knock.cn:8080 这样去访问;那么当我为t我的博客套上https之后,再使用http协议访问二级域名时就会触发浏览器的安全策略,自动强制跳转至https,导致出现SSL_ERROR_RX_RECORD_TOO_LONG 之类的错误;也就是说主域名上https后次级域名必须也上https,否则就会无法访问:disappointed_relieved:
nginx管理二级域名
有了nginx之后就可以把一个车服务器上的服务用不同的次级域名区分开来,比如code-server 就是 code.tars-knock.cn, 自建图书馆就是 lib.tars-knock.cn 不再需要记忆端口号而且全部可以套上https;下面就以lib.tars-knock.cn举例
- 首先还是要配置DNS,不过不再需要解析成显性URL,直接将lib.tars-knock.cn 解析成服务器的IP即可;
- 在nginx中新建配置文件,lib.tars-knock.cn.conf 如果按照nginxconfig网站的规范就是把文件建立在/etc/nginx/sites-available ,软连接到sites-enabled即可
- 配置文件的格式即基本的反向代理应用的格式,可以使用nginxconfig生成
检查配置+重启一把梭 完成。sudo nginx -t && systemctl reload nginx
后记
怎么感觉我没事就喜欢折腾折腾我的博客呢hhh 现在应该是比较完美的状态了,计划用上一段时间,持续记录一下自己折腾过的和学到的(其实更多是直接收藏进了我的个人书签站hhh)
最后感觉自己博客可以稳定运行一段时间了,所以向“十年之约” foreverblog.cn 提交了申请,立一个更新十年的flag!