在Google App Engine上部署多服务应用程序
#javascript #devops #云 #googlecloud

Google App Engine(GAE)是一个无服务器(某人的其他计算机)平台,可帮助组织为可扩展性,安全性,可靠性,可访问性和可审核性提供准备。它可利用组织专注于业务逻辑,而Google作为云提供商管理其基础设施部署。

通常,企业有多种用不同语言开发的应用程序。在不手动旋转Docker服务的情况下,部署此类体系结构变得挑战。这样的基础架构可以包括Web或客户端接口,后端服务器,推荐服务器和分析服务器等。

如果需要,可以将这些各种业务逻辑部署到具有不同版本的单个GAE项目中。在本文中,我们部署了使用vue.js和node.js服务器应用程序开发的客户端应用程序。选择这是基本应用程序是为了使我们的生活更轻松。但是可以采用更复杂的应用程序。

让我们从虚拟化客户端项目树开始:

.
├── README.md
├── app.yaml
├── index.html
├── node_modules
├── package-lock.json
├── package.json
├── public
│   └── vite.svg
├── src
│   ├── App.vue
│   ├── assets
│   │   ├── avatar.png
│   │   └── vue.svg
│   ├── components
│   │   ├── core
│   │   ├── generics
│   │   └── user
│   ├── config
│   │   └── index.js
│   ├── database
│   │   └── index.js
│   ├── firebase
│   │   └── index.js
│   ├── main.js
│   ├── router
│   │   └── index.js
│   ├── service
│   │   └── index.js
│   ├── store
│   │   ├── index.js
│   │   └── modules
│   ├── style.css
│   ├── utils
│   │   └── index.js
│   └── views
│       ├── Dashboard.vue
│       ├── Login.vue
│       ├── NotFound.vue
│       └── Register.vue
└── vite.config.js

node_modules目录被编辑为最大化空间。如果我们正在查看项目树,则有一个app.yaml文件包含GAE命令和所需的应用程序参数,如下所示:

# Runtime engine nodejs 18 LTS
runtime: nodejs18
service: default
handlers:
  # Serve all static files with urls ending with a file extension
- url: /(.*\..+)$ 
  static_files: dist/\1
  upload: dist/(.*\..+)$
  # catch all handler to index.html
- url: /.*
  static_files: dist/index.html
  upload: dist/index.html

它具有runtimeservicehandler的路由请求。值得一提的是,第一个部署的应用程序默认为服务名称,并且如果跳过,可能会出现错误。您可以阅读documentation以获取更多信息。

导航到Google Cloud Console并配置CloudBuild Service帐户xxxxxxxxxxxxxx@cloudbuild.gserviceaccount.com,由Add App Engine DeployerApp Engine DeployerStorage Object Viewer角色。

接下来,让我们通过运行命令npm run build来构建vue.js项目。然后,我们将通过从根目录中运行以下命令gcloud app deploy --project <project-name>部署应用程序。部署成功后,导航到https://<project-name>.<region_id>.r.appspot.com/访问默认应用程序。

要在同一项目中部署node.js服务器服务,我们遵循同一过程。首先,项目树看起来如下:

.
├── README.md
├── app.yaml
├── controllers
│   └── user.js
├── database
│   └── index.js
├── index.js
├── lib
│   └── auth.js
├── migrate.js
├── node_modules
├── package-lock.json
├── package.json
└── routes
    └── user.js

这是一个简单且典型的node.js应用程序,我们的兴趣是app.yaml文件,其中包含以下键值对runtime: nodejs18service: server。如上所述,我们将通过从根目录中运行以下命令gcloud app deploy --project <project-name>来部署应用程序。并通过导航到https://<service-name>-dot-<project-name>.<region_id>.r.appspot.com/访问申请。

我们可能需要添加的最后一件事是将域名映射到这些服务中。为此,我们可以将dispatch.yaml文件发送到客户端或服务器应用程序。

dispatch:
- url: "www.client.com/*"
  service: default
- url: "client.com/*"
  service: default
- url: "server.com/*"
  service: server

客户端应用程序是可取的,因为它是默认应用程序。值得一提的是,我们可以将调度文件的包含包含在各个应用程序中,选择是您的。确保您已在应用程序引擎的custom domain选项卡中添加了所有域和子域。

然后通过运行命令gcloud app deploy dispatch.yaml部署dispatch.yaml文件。如果所有部署都成功,则访问调度文件中的任何URL都应打开任何映射的应用程序。

再次,我们仅部署了两项服务,但要适合我们的特殊性可能更适合。本教程的存储库在github上。

如果您喜欢这篇文章,请喜欢并与朋友分享。