个人建站方案 2016 Ver.

昨天重新整理了一下自己现有的 VPS 资源, 现在把全套方案公布一下, 仅供参考.

我自认文章里的方案在当下还是比较好使的, 如果你发现有哪方面可以改进或者犯了错误, 欢迎留言把我打醒.

VPS

弃用了原本 DigitalOcean 的 VPS, 换到了 Vultr 的东京机房, 全国范围的 Ping 值表现得到一定提升. 之前在 DigitalOcean 的 VPS 上还开了锐速这种压榨网络的不道德软件, 这次也顺便弃用了.

比较值得担心的是, Vultr 的节点经常出硬件故障, 稳定性比 DigitalOcean 差了不知道多少倍, 这次更换主要还是图方便, 可以在 Vultr 统一管理.

本来是想考虑搞个香港沙田的机房提升一下访问速度, 毕竟 BGP + CN2 全国平均 60ms 简直跟火箭一样, 但考虑到香港水管太小, 最后还是控制住了自己.

NS

原本大部分域名用的 DNSPod, 少部分用的 CloudXNS, 现在全部换到了 CloudXNS, 管理起来方便点.

不是说 DNSPod 不好, 只是用得太久想换一换.

Docker 反向代理

目前我用了两套 Docker 单机的反向代理方案, 支持 HTTPS、HTTP/2, Let's Encrypt 证书的自动申请和 renew.

一套是我基于 caddy 创建的类似于 nginx-proxy 的 caddy-proxy 项目, caddy 是面向现代的服务器, 用 Let's Encrypt 自动强制开启 HTTPS 和 HTTP/2, 配置简单, 功能前卫. caddy-proxy 让 caddy 在 Docker 上大显身手, 但它的稳定性连我自己都很怀疑, 有时间要把代码翻新一下.

caddy-proxy 的 Docker Hub: blackglory/caddy-proxy

另一套是我修改的 BlackGlory/nginx-proxy + JrCs/docker-letsencrypt-nginx-proxy-companion, 前者实现 nginx 的 proxy 容器, 后者是 Let's Encrypt 扩展容器.

nginx-proxy 一直是个牛逼的解决方案, 但它内置的 openssl 版本太低了. 今年上半年 Chrome 51 狠下心来干掉 NPN 协商方式, nginx-proxy 就没法在 Chrome 上使用 HTTP/2 了. 我开 HTTPS 的主要目的就是用 HTTP/2, HTTPS 的安全性对我根本没屁用, 所以我不得不自己建了一个 nginx-proxy, 升级了 openssl 版本, 以支持新的 ALPN 协商方式, 使 HTTP/2 在 nginx-proxy 上继续快乐的奔跑.

后来我没时间继续看这几个项目, 也不知道现在原版是不是已经有新的版本了.

nginx-proxy 的 Docker Hub: blackglory/nginx-proxy 使用方法和原 nginx-proxy 完全一致.

有了这两套反代方案后, Docker 单机建站基本上就是随便玩了, 零成本域名绑定 + 开启 HTTPS 和 HTTP/2, 除了给新站点的 Docker 容器添加几个环境变量之外, 没有额外操作.

夸张点说, 对小站长而言, 建站从未如此简单.

Docker 构建 & 镜像部署

代码构建用了国内的 DaoCloud 服务, 最初在容器化创业潮里货比三家, 发现还是只有 DaoCloud 最懂程序员, 我已经使用一年多了.

DaoCloud 的代码构建支持多家代码仓库服务, 提交代码触发 Hook 后自动 CI 生成 Docker 镜像, 版本迭代非常方便, 专业版好像还支持自建的 GitLab.

除了代码构建, 还可以用 DaoCloud 部署 Docker Hub 的第三方镜像, 这方面说实话没有命令行敲起来方便, 但胜在有 GUI.

DaoCloud 的应用编排用起来感觉比 Docker 自己的 Compose 要舒服, 但经常找不到镜像, DaoCloud 自己的镜像仓库比 Docker Hub 落后了几个世纪, 也是说不出话.

如果全套都用 DaoCloud 接管的话, 基本也没什么必要登服务器了, 这也是我一直提倡的服务器管理方法, 减少人工操作犯错的可能性.

CDN

站点没有直接用 CDN 服务, 现在服务器都在东京机房, 延迟可以接受, 丢包率不高, 带宽也还可以, 开全站 CDN 的意义不是很大.

图片一类的静态文件 CDN 主要用的是又拍云, 收费不过价格很好接受.

我知道站长中有很多七牛的簇拥, 我不用七牛主要是因为当初七牛的实名认证的设计实在太脑残了, 在又拍云可以直接接入其他实名认证网站的数据, 不知道节省了多少时间, 我也不是那种为了一点免费流量就蹭服务用的人, 没心情浪费时间在认证上面.

网站监控

在找到 Uptime Robot 这个神级服务之前, 我是一直想着自己做一个简单的监控服务的, 毕竟只是发 HTTP 请求 + 邮件提醒罢了, 简单得很.

找到 Uptime Robot 之后, 直接就打消了自己开发的念头:

Uptime Robot 免费额度提供50个监控, 最低间隔可以设置成5分钟检测一次(专业版最低1分钟), 邮件提醒, 各种自定义监控访问, 甚至支持 API、Public Status Page 和 RSS.

没什么好说的, 就是牛逼啊.

定时备份 & 网络备份

Crontab 做定时备份, 用 tar 命令打包文件, 用数据库对应的工具进行热备份, 没什么好说的.

以前用 Seafile 实现过网络备份, 专门做了一个 docker-seafile-cli 完成了容器化, 但由于 Seafile 本身的问题, 隔几个月就崩一次, 最后连备份服务器都遇到了不可名状的问题, 放弃.

目前用 Syncthing 实现网络备份, 直接跟我的开发机同步, 不过 P2P 对网络环境的要求和负担太大, 作为网络备份方案很是不妥(BTSync 也是一样), 接下来还是打算搞个 Google Drive 或 Dropbox 做备份.

邮箱服务

邮箱主要在用的还是我好多年前申请的 Google Apps 企业服务, 可以使用 Gmail、Inbox 之类的全套 Google 服务, 简直牛逼到天上. 可惜现在已经不允许新用户注册了, 而且也不知道什么时候会被 Google 产品关闭部门干掉, 所以还在物色其他的邮箱服务, 同时开启了一个单独的 Google 帐户保底.

国内各种域名邮箱服务都比较差(同时还有审查风险), 要用企业邮箱的话大概还是要往海外找, 比如Yandex、Fastmail、Zoho之类的, 值得研究一下.

也考虑过自建邮件服务器, 不过稳定性是个问题, 属于只有不得已时才会采用的方案.