【问题标题】:How can I use bucket storage to serve static files on google flex/app engine environment?如何使用存储桶存储在 google flex/app 引擎环境中提供静态文件?
【发布时间】:2017-05-28 15:16:59
【问题描述】:

我有一个 nodejs 后端和一个 reactjs 前端。我正在使用 gcloud flex 环境(应用程序引擎)并希望使用 CDN 提供所有前端文件。我不希望请求触及我的 nodejs 服务器。我无法配置我的项目 app.yaml 来做同样的事情。

我怀疑我的请求没有从 CDN 提供,因为如果我在我的 nodejs 代码中注释以下行,我将无法再访问 index.html。

app.use('/', express.static(path.resolve('./frontend/dist')));

下面是 YAML 文件。

handlers:
- url: /(.*\.html)
  mime_type: text/html 
  static_files: frontend/dist/\1 
  upload: frontend/dist/(.*\.html)

- url: /styles/(.*\.css) 
  mime_type: text/css 
  static_files: frontend/dist/styles/\1 
  upload: frontend/dist/styles/(.*\.css)

- url: /scripts/(.*\.js) 
  mime_type: text/javascript 
  static_files: frontend/dist/scripts/\1 
  upload: frontend/dist/scripts/(.*\.js)

- url: /images/(.*\.(bmp|gif|ico|jpeg|jpg|png)) 
  static_files: frontend/dist/images/\1 
  upload: frontend/dist/images/(.*\.(bmp|gif|ico|jpeg|jpg|png))

- url: / 
  static_files: frontend/dist/index.html 
  upload: frontend/dist/index.html

-  url: /.* 
  script: IGNORED
  secure: always

有没有办法配置应用引擎,使静态文件请求不响应我的 nodejs 后端服务器?

谢谢

【问题讨论】:

  • 那么这是前端还是后端.yaml文件?还要描述您的应用程序目录结构。
  • 这是用于将我的代码上传到 app-engine 的 .yaml。摘录显示了代码的处理程序部分。静态文件在 /frontend/dist 文件夹中创建(并且具有名称为 images/、scripts/ 和 styles/ 的子​​文件夹)。如果我能提供更多信息,请告诉我。谢谢
  • 没关系,我在想标准的环境风格......
  • 是的,这是 flex env - 我没有意识到我隐瞒了有用的信息。

标签: node.js google-app-engine gcloud


【解决方案1】:

您将standard GAE env app.yaml elements(静态内容配置)混入您的flex env app app.yaml

在 flex 环境中提供静态内容是不同的。

您的基于express.static 的静态文件服务方法实际上对应于Serving from your application

从您的应用程序提供服务

大多数 Web 框架都支持提供静态文件。在这 示例,应用程序使用express.static 中间件 将文件从./public 目录提供到/static URL。

要在请求不影响您的应用的情况下提供静态内容,您需要关注Serving from Cloud Storage

从 Cloud Storage 存储分区提供静态文件的示例

这个简单的示例创建一个 Cloud Storage 存储分区并上传静态 使用 Cloud SDK 的资产:

  1. 创建一个存储桶。以项目 ID 命名存储桶很常见,但不是必需的。存储桶名称必须是全局唯一的。

    gsutil mb gs://<your-bucket-name>
    
  2. 设置 ACL 以授予对存储桶中项目的读取权限。

    gsutil defacl set public-read gs://<your-bucket-name>
    
  3. 将项目上传到存储桶。 rsync 命令通常是上传和更新资产的最快和最简单的方法。你也可以 使用cp。

    gsutil -m rsync -r ./static gs://<your-bucket-name>/static
    

您现在可以通过以下方式访问您的静态资产 https://storage.googleapis.com/&lt;your-bucket-name&gt;/static/....

如需详细了解如何使用 Cloud Storage 服务静态资产, 包括如何通过自定义域名进行服务,参考How to Host a Static Website

有关如何使用 Cloud Storage API 的更多信息 从您的内部动态上传、下载和操作文件 申请,见Using Cloud Storage

【讨论】:

  • 我已阅读该文档,但它对我没有帮助。我需要将一些 API 路由到 flex env 服务器并保留到 CDN(如上的存储桶)。你知道这样的例子吗?我正在寻找一个同时存在动态和静态端点的示例。我还尝试将存储桶添加为图像、css 等的 static_dir ......但这没有帮助。
  • - url: /styles/(.*\.css)$ static_files: https://storage.googleapis.com/bucket_name mime_type 这也不起作用。虽然它只是在黑暗中扔飞镖。
  • 即使对于标准环境配置也是无效的 - static_files 可以包含文件路径模式(相对于 /),而不是主机/域部分。
  • 跟进问题-cloud.google.com/appengine/docs/python/config/appref(搜索处理程序)-在此页面上没有任何地方说该文档适用于标准 env 而不是 flex 环境。想知道这份文件是否正确?
  • 是的,有些文档没有更新以明确说明它们适用的环境(有些适用于多个环境!)。一些提示通过他们的 URL 路径。有些,比如这个,通过左侧的文档导航栏提示它:向上滚动并选中Google App Engine/Product Overview/Environments 下方的第二个框。
猜你喜欢
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 2019-02-19
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2020-03-13
相关资源
最近更新 更多