升级,再接着咕 — 服务器迁移小记
鉴于目前在用的阿里云轻量服务器,无论从线路还是性能方面来说都十分捉急,于是换了一台新的服务器,顺便升级一下现有的服务器架构。
服务器选择
新的服务器选择了腾讯云轻量应用服务器,地域是香港,电信 CN2 GIA 回程,联通 169 回程,移动 CMI 回程,路由还算不错。
配置方面选择了 1C 2G 30M 1T 的组合,对一般通过建站用户来说简直不要太美好(
给服务器跑了一下分,LemonBench 结果如下:腾讯云 阿里云
搭建 Web 环境
选好服务器,下一步肯定是搭建 Web 环境啦。由于本人实在太懒,于是这次选择使用 Oneinstack 一键包搭建 Web 环境。
选择的 Stack 为 Nginx + PHP 8.0 + MariaDB 10.5 + Pure-FTPd + PhpMyAdmin,PHP 安装了 imagick 和 fileinfo 扩展。安装指令如下:
1 | tar xzf oneinstack-full.tar.gz |
安装完成之后,就可以在 oneinstack 文件夹中使用 ./vhost.sh
创建站点了。
切换至 ZeroSSL 证书
Oneinstack 内置了 acme.sh 工具,可以便捷的签发 SSL 证书。如果不想使用默认的 Let’s Encrypt 证书,也可以切换至 ZeroSSL , Buypass 等证书。
ZeroSSL 提供了免费的单域名及通配符证书,支持 acme 协议签发,单张证书有效期为 3 个月。下面是本人使用的命令,列出来供大家参考一下:
1 | acme.sh --register-account --server zerossl --eab-kid \[EAB-KID\] --eab-hmac-key \[EAB-HMAC-KEY\] |
签发证书前需要前往 ZeroSSL 官网 注册账号,生成 EAB KID 以及 EAB HMAC KEY,并添加至环境变量中。由于本人的域名托管在 DNSPod 上,所以还需要添加两个环境变量 DP_Id
和 DP_Key
,分别为 DNSPod API 的 ID 和 KEY。如果使用阿里云 DNS,那么环境变量名为 Ali_Key
和 Ali_Secret
,签发时需要将 dns_dp
改为 dns_ali
。需要文件验证或者其他 DNS 提供商可以参考 acme.sh 的 官方 Wiki 。
Nginx 配置指北
获得 SSL 证书后,为了使得网站更加安全,我对 Nginx 配置进行了部分修改。
将 HTTP 请求重定向至 HTTPS
都1202 年了,难道真的还有网站不用 HTTPS 吗.webp
1 | if ($ssl_protocol = "") { return 301 https://$host$request_uri; } |
在配置中添加此行,即可将所有 HTTP 请求重定向至 HTTPS。
禁用过时的 TLS 协议
各大主流浏览器早在 2020年3月 就已经开始对仍在使用 TLS1.0 及 TLS1.1 的网站进行警告,如果你并不需要对老设备进行适配,就请取消对这两个过时协议的支持吧。
1 | ssl_protocols TLSv1.2 TLSv1.3; |
在配置中删除此行的 TLSv1.0
及 TLSv1.1
字段,即可取消对这两个协议的支持。
选择合适的加密套件
1 | ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; |
使用这些加密套件可以更好的保护安全,只需替换配置中的相应字段即可。
开启 HSTS 和 OCSP 装订
1 | add_header Strict-Transport-Security "max-age=63072000" always; |
开启 HSTS 后,如果网站声明了 HSTS 策略,浏览器会拒绝所有的 HTTP 连接并阻止用户接受不安全的 SSL 证书。
1 | ssl_stapling on; |
开启 OCSP 装订后,当用户访问网站时,服务器将会把自己存储的站点证书、中间证书以及根证书一起下发到客户端,省去客户端进行实时 OCSP 查询的过程。开启后,用户访问网站的速度将获得提升。
搭建系统监控页面
折腾完 Nginx,总觉得服务器上少了点什么,于是准备搭建一个状态监控服务。最后我选择的是 Grafana + Prometheus ,功能比较全面,配置也很简单。
首先进入 Prometheus 官网,下载最新版本的压缩包并解压
1 | wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz |
运行上述指令后,Prometheus 将会运行在 127.0.0.1:9090
上。但是光安装 Prometheus 没有太大意义,所以还要安装 node_exporter ,用于监控服务器信息并通过 API 的形式返回。node_exporter 的安装方式也很简单,在 Prometheus 官网可以找到最新版本的安装包。
1 | wget https://github.com/prometheus/node\_exporter/releases/download/v1.1.2/node\_exporter-1.1.2.linux-amd64.tar.gz |
运行指令后, node_exporter 将会运行在 127.0.0.1:9100
上。此时在 Prometheus 的面板上输入 up 并点击 Excute,可以看到 node_exporter 正在运行。
接下来需要安装 Grafana。在 Grafana 官网的下载界面下载适合你使用的 Linux 发行版的版本,并安装即可。下面以 Ubuntu 20.04 为例:
1 | sudo apt-get install -y adduser libfontconfig1 |
安装完成后,可以通过 127.0.0.1:3000
访问 Grafana ,默认用户名和密码为 admin
。
登录面板后,点击侧栏的 Configuration - Data Sources -Add data source ,选择 Prometheus ,URL 填写 http://127.0.0.1:9090
,点击 Save & Test 即可。然后点击侧栏 Create - Import ,输入 ID 8919
,点击 Load 后选择 VictoriaMetrics 为刚刚创建的 Prometheus 数据源,再点击 Import 就可以完成导入。
还没有完成的事
本文写的匆忙,还有一些基础工作并没有完成,比如网站备份、证书监控等。本文将会继续更新我的维护日常,欢迎大家支持(
以上便是本次迁移和升级服务器架构的粗略过程,若有不足之处还请批评指正,谢谢大家!
升级,再接着咕 — 服务器迁移小记