【发布时间】:2018-05-03 08:21:35
【问题描述】:
有没有办法获取由部署在 CDN 或静态托管解决方案(如 S3)上的 Meteor 应用生成的静态资产,以提高加载速度并降低托管成本?
【问题讨论】:
标签: deployment amazon-s3 meteor cdn frontend
有没有办法获取由部署在 CDN 或静态托管解决方案(如 S3)上的 Meteor 应用生成的静态资产,以提高加载速度并降低托管成本?
【问题讨论】:
标签: deployment amazon-s3 meteor cdn frontend
我在 this post 中详细介绍了我们在 Edthena 是如何实现这一目标的。 TLDR 是:
在你的服务器代码的某处添加这一行:
WebAppInternals.setBundledJsCssPrefix(CDN_URL);
CDN_URL 是您的 CloudFront URL(例如https://a27n0s89ik4xb3.cloudfront.net)。
我们在创建 CloudFront 分配时保留了默认值,但以下情况除外:
Origin Domain Name: myapp.example.com
Origin ID: myapp.example.com
Viewer Protocol Policy: HTTPS Only
Compress Objects Automatically: yes
如果您提供自己的字体,最终可能会出现跨源错误(除非您使用字体数据 URL)。 Josh Owens 在his post 中描述了如何处理这个问题。
查看meteorhacks 博客上的Cloudflare Meets Meteor。如果您碰巧是 CloudFlare 用户,这是一个非常简单的解决方案,但您需要禁用 WebSockets(或支付大量费用,或使用复杂的解决方法)。
【讨论】:
DDP_DEFAULT_CONNECTION_URL 将 websocket 设置为不同的服务器,Cloudflare 会很好地工作。这里有一个很好的例子:github.com/rclai/meteor-app-with-remote-server
如果你使用的是陨石,你可以使用这个包:https://github.com/nate-strauser/meteor-aws-sdk
【讨论】:
如果通过demeteorizer部署,将static_cacheable的内容上传到CDN并更改app.html和app.json中的链接非常容易。
该过程可能可以在自定义部署/capistrano 脚本中自动化。
【讨论】: