声明:
本文转自 DEV Community 网站,文章翻译由开发者社区提供;
点击下方链接,查看英文原文:
你可能认为这篇文章是标题党,但事实并非如此。我已经在亚马逊云科技上搭建了一个功能齐全的静态无服务器 Wordpress 解决方案,并配备全球 CDN、WAF 和 A 级 SSL,每天只需花费 1 美分。它速度快、有弹性、可扩展,而且与许多 Wordpress 网站不同的是,不容易遭受暴力登录攻击。
要知道,你也可以做到这一点。它位于一个开源的 Terraform 模块,我希望这种简单的访问方式能够颠覆互联网。30 分钟就能从零开始完成设置。
静态无服务器 Wordpress 是什么?
静态无服务器 Wordpress是 TechToSpeech 的一个 Community Terraform 模块,只需一个注册域名,其 DNS 指向亚马逊云科技。
它创建一个完整的基础设施框架,并启动一个临时的 Wordpress 容器。和其他 Wordpress 网站一样,你可以登录并进行自定义操作,最后将其发布为一个静态网站,依托于全球 CloudFront CDN 和 S3 Origin。完成之后,你可以关闭 Wordpress 容器,这一切几乎没有成本。
重点在于只需极少的配置,因为你需要的大部分资源都是根据行业最佳实践和高效运行成本进行预安装、预配置的。
你有想转换为静态无服务器 Wordpress 的网站吗?没问题。
这里有很多内容要讲述,所以分成了两篇不同的文章:短版和长版。如果你想抓紧时间马上开始,请看第一篇;如果你想了解该解决方案的具体运行机制,请看第二篇。
如果你熟悉亚马逊云科技,那么你很快就会弄明白。不过,即使你是第一次接触,短版中的步骤也能帮助你快速启动和运行。
短版
在以下步骤中,我们会使用示例域www.peter.cloud。
步骤0 -创建一个亚马逊云科技账户。
步骤 1 – 域
在你的亚马逊云科技账户中,为域名创建一个 Route53托 管区。创建后,它将为您的新网站显示四个 DNS 名称服务器。
进入域名注册地址(可以是亚马逊云科技本身,也可以是其他地址),将 DNS 服务器更新为刚刚创建的四个。
步骤 2 - 工具和凭证
确保你有 Terraform、Amazon-CLI(用户和凭证)和(可选但最好有)服务已启用的 Docker。
步骤 3 - 代码和规划
查看项目的 GitHub README,了解丰富的代码实例,以便快速进行设置和部署。
该模块几乎能够自己完成全部工作,但这里有一些额外的特定资源,使其成为一个完全不需要动手的端到端流程。需要安装 docker,正确配置 Amazon CLI 的默认区域和配置文件。
Terraform 初始化、规划、应用,然后坐下来喝杯茶。完整的端到端创建流程应该需要 10 分钟左右。除非你操作有误,否则过程中不会发生错误。不过,为了以防万一,请再进行一次规划和应用步骤。
步骤 4 - 启动 Wordpress
启动 Wordpress 和发布静态网站所需要创建的一切,都在步骤 3 里完成。但目前为止它尚未启动。如果没有添加可选的 Terraform 资源来触发 CodeBuild 作业,你需要前往所选地区的 CodeBuild 控制台,启动“-serverless-wordpress-docker-build”作业并等待完成(大约需要2分钟)。
将模块的启动“属性”从 0 修改为 1,然后再次运行 “terraform apply”。Wordpress 现在将启动。首次设置大约需要 5 分钟,包括初始网站的创建、配置和必要插件的安装。
默认情况下,你的 Wordpress 安装将在 http://wordpress.yourdomain.com(为什么没有 SSL?详情请查阅长版)。
默认的用户名是“supervisor”,默认的密码是“techtospeech.com”。你可以在模块配置中修改用户名、密码以及默认的子域,也可以登录Wordpress后进行修改。请确保这样操作。
步骤 5 – 发布
现在,Wordpress 的安装和其他 Wordpress 一样。你可以安装大多数插件(尽管所有具有服务器端功能的插件都无法在静态网站中运行)、任何你喜欢的主题,甚至可以导入当前网站的备份。像 Yoast 这样的 SEO 插件也能正常工作。如果网站闲置超过 5 分钟,后台数据库就会暂停(以节省费用),不过只要刷新管理控制台,延迟几秒钟之后就会再次启动。
当你要停止容器时,将 Terraform 配置的“启动”属性切换回 0,然后重新运行“terraform 应用”。你也可以在亚马逊云科技控制台中手动将 ECS 服务更改为 0 任务。未来会有更好的方法来一键启动或暂停网站。停止容器不会丢失任何数据——数据库将在后台保存,同时保存的还有你安装的所有文件、图像、插件或主题。其状态会一直保留到下次启动。
不过,至关重要的是,要记得关闭容器。否则它会继续运行——即便如此,也不会产生太多费用,但这个解决方案的意义就在于省钱,而不是浪费钱 (未来的另一项更新是闲置时自动关闭功能)。
当一切准备就绪后,就可以发布了。检查一下已经自动安装的 WP2Static 插件和 WP2Static S3 插件。Leon Stafford 是这些插件的创建者。他是开源的静态 Wordpress 大师,没有他,就没有这个项目的部署机制。更多关于 Leon 的内容请在长版中查阅。
你可以查看全部 WP2Static 选项,可以调整配置部署,但自动设置已经预先填写了你要发布的内容。点击“生成静态网站”按钮,然后定期刷新日志,检查状态。该操作会抓取每个 URL 并重写到一个简洁的静态版本,然后直接推送到支持网站静态版本的 S3 存储桶。
这个过程需要 3-5 分钟,如果你的网站规模更大,耗时就会更长一些。我们正在研究更快的方法(欢迎提供帮助!),但目前与此设置捆绑的版本稳定、可靠,只是需要一点耐心。
这个过程结束后,就大功告成了! 前往 https 版本的网站(本示例是https://www.peter.cloud),你会惊讶地发现,网站看起来和以前一样,只不过现在它是无服务器的、静态的、由全球 CDN 缓存的,不会因为某些薄弱的 DDoS 攻击或 wp-login 暴力攻击而崩溃。试试前往 https://www.peter.cloud/wp-admin。哈, 网站根本不存在!
真的每天只需0.01美元吗?
是的,但也不完全是。这取决于具体情况。
看一下典型用例。假设你是一个呆板的技术人员,拥有个人博客网站(我就是这样,我的网站是 petewilcock.com),你发布了一些文章,每天有 50 到 200 次点击量。在这些流量下,网站会以静态形式运行,不需要任何干预,每天的成本大约为 0.01 美元,这是完全合法的。
另一方面,假设你拥有一家全球著名的大型内容生成企业,每月会发布数千篇文章,拥有数百万次点击......费用则多得多。流量方面的唯一可变成本是 CloudFront 分配费用,你可以利用 CloudFront Security Savings Bundle 获得折扣,降低成本。如果你的企业规模特别大,你可以直接向亚马逊云科技咨询定制 CloudFront 的价格。WAF 有一些不可避免的固定成本,会使运行成本每天至少增加 0.6 美元。但如果你立场不坚定,需要 WAF,那么我猜你可以负担得起。
我使用该设置运行几个静态 Wordpress 网站,每月只需花费1美元购买一个 Savings Bundle,就能涵盖很多用量。之前,我运行的是一个带有 CPanel 许可的 T3 虚拟主机服务器,每年花费约 600 美元。由于某些原因,这样的比较从严格意义上来讲并不公平(例如,该设置目前不能处理电子邮件,但请注意,未来会更新!),但是你开始了解到这与基本网站的“传统”托管设置之间的区别。即使是其他“静态”Wordpress 网站的供应商也无法与之竞争,因为他们需要利润,而你不需要。
唯一需要注意的其他成本,是支持 Wordpress 的 ECS Fargate 容器的运行成本(它以 Spot 模式运行,所以非常便宜),以及支持 Wordpress 数据库的 RDS Aurora Serverless v1 数据库。实际上这是最贵的部分(你猜对了,如果你想牺牲功能性和便利性,未来将提供一个更便宜的版本),但只会在你主动修改网站的时候收费。举个例子,如果我花了几个小时编辑网站,可能需要花费大约 0.3 美元。最关键的是,在绝大多数情况下,如果你不添加内容,几乎不需要任何费用。
问题解决
任何设置都不会是完美无缺的,所以,如果你在使用 Terraform 模块时有任何问题,请在我们的 GitHub 上报告,我们会进行查看。我们也欢迎你的贡献。
如果你在使用 WP2Static 插件时遇到问题,请查看他们的问题页面,了解常见问题和解决方案,你遇到的任何问题都可能按照你希望的方式解决。你可以随时升级该插件或 Wordpress——但一定要先备份。我推荐 UpdraftPlus,它是一款优秀的免费 Wordpress 备份插件。
总结
首先再次提醒一下。当你完成时,不要忘记关闭你的 Wordpress 容器。
这个模块是经过几个月的辛苦迭代的成果,既要为我自己使用,又要具有广泛的适用性,这样在公开发布后才不会使自己感到尴尬。它集合了我自 2014 年开始使用亚马逊云科技以来的所有经验,并将我掌握的 DevOps 和 Web 开发的每一个元素压缩到一个紧凑的解决方案中,任何人都可以使用。我希望它对你有所帮助。
文章作者:Pete Wilcock
Pete Wilcock for AWS Community Builders
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。