个性化阅读
专注于IT技术分析

使用Firebase无服务器-移动和Web应用程序变得简单

本文概述

移动和Web应用程序通常需要后端服务器。 Web应用程序需要Web服务器来传递内容。应用程序还需要存储用户配置文件和媒体, 例如图像和视频。应用程序和服务器之间的通信通常使用API​​(通常是REST)来完成。

应用程序使用多种语言进行编码。 iOS应用程序是用Swift或Objective-C编写的。 Android应用程序是用Java或Kotlin编写的。 Web应用程序是用HTML, CSS, JavaScript和通常复杂的框架(例如Angular或React)编写的。前端开发人员需要了解相关的语言及其关联的开发工具。

后端服务器以多种语言编写, 包括Go, Java, PHP和Python。这些语言中的每一种都有自己的库套件, 以方便编写复杂的应用程序。

大多数开发人员将自己视为前端或后端开发人员。精通这两个角色的全栈开发人员相对很少。

运行和维护后端服务器有其自身的挑战。服务器需要构建, 更新和备份。还需要对服务器进行安全保护, 以防止意外或恶意数据丢失或对敏感数据的访问。此外, 服务器需要分配主机名和IP地址, 以便可以连接到它们。

什么是Firebase?

Firebase最初是由Google收购的一种移动消息体系结构。从那时起, 它已发展成为由超过25个与Google Cloud Platform互操作的组件组成的套件。

Firebase包含软件开发工具包(SDK), 使移动和Web开发人员可以简单, 安全和可靠地访问云功能。它们会自动弥补网络连接性差的问题。有一个Firebase Web控制台, 用于启用, 管理和保护组件。还有一些命令行工具和REST API, 可以更深入地使用。

某些Firebase组件比其他组件知名度更高。组件之间几乎没有依赖关系, 因此可以逐步采用功能。 Firebase身份验证和分析是使用最广泛的。

Firebase已经发展成为一个平台, 该平台允许移动和Web前端开发人员无需后端服务器即可开发完整的应用程序。最新的增强功能极大地促进了无服务器解决方案的发展, 该解决方案提供了可行, 可扩展且经济高效的替代方案, 可替代Cloud Virtual Machine服务器解决方案。

Firebase定价和计费计划

基本的Firebase计费计划称为Spark, 是免费的。云资源的使用有一定的限制, 但是非常慷慨。可以运行大小合理的应用程序而不会产生任何费用。

根据Spark计划, 可以托管一个拥有1GB内容且每月传输量少于10GB的网站。 Firestore允许多达1GB的数据和每月高达10GB的网络流量。云存储限制最多为5GB数据, 每天最多下载1GB。

如果应用程序需要更多资源, 则需要付费帐单计划, 例如按需付款。 Spark计划的免费限制仍然适用。可计费费用非常低。定价可在Firebase定价页面上找到。

即使未使用, 在云中运行的虚拟机也会在运行时产生费用。 Firebase无服务器解决方案可扩展为零。这意味着资源仅在使用时才有效运行, 并且在不使用时不会产生费用。这是季节性业务(如假期租赁)或定期活动(如音乐会)的理想选择。会有很多活动, 然后几个月不活动。

如何设置Firebase

身份验证需要电子邮件帐户。首选Google邮件帐户。可以在https://mail.google.com上创建它们。

还需要一个Google Cloud Platform(GCP)帐户。这里提供免费试用。这将为你提供300美元的信用额度, 可使用一年。需要信用卡作为身份证明。 Google可能会收取$ 1, 然后退款。如果启用了计费功能并使用了可计费资源, 则信用卡将每月进行借记。也有Google提供者公司充当计费的中介。你向提供商支付云使用费, 而他们则向Google支付。他们有自己的计费方案, 并可能提供免费试用。

经常监视云控制台的计费部分以监视使用情况很重要。在不需要存储资源时, 很容易保持其活动状态, 随着时间的流逝, 这将招致相当大的成本。

Firebase项目也是GCP项目。你可以创建一个GCP项目并将其导入Firebase, 或者创建一个Firebase项目, 这也将创建一个GCP项目。 Firebase控制台在这里。

不同类型的应用程序需要不同的设置。主要的是Android, iOS和Web应用程序。可以在官方的《 Firebase指南》中找到设置说明。

一些操作需要Firebase命令行界面(CLI)工具。这些要求安装Node.js和npm工具。如果在macOS或Linux上运行, 则需要使用sudo运行npm命令。

须藤npm install -g firebase-tools

认证与授权

Firebase身份验证可能是使用最广泛的Firebase组件。用户可以选择多种身份验证机制中的一种或多种。这些是电子邮件地址和密码, 电话号码以及联合身份提供者Google, Facebook, Twitter和GitHub。可以启用任何数量的身份验证机制。

Firebase UI提示用户使用以下机制:

Firebase身份验证

Firebase提供了用于身份验证的用户界面, 可以从客户端的几行代码中调用它们。也有用于手动执行身份验证的API。成功认证后, 将生成一个身份令牌, 该令牌可用于后端验证。

这些API允许管理用户以编程方式管理用户。操作包括:

  • 创建, 更新和删除用户
  • 通过搜索条件(例如电子邮件地址或电话号码)查找用户
  • 访问信息, 例如帐户创建日期和上次登录日期和时间
  • 无需使用现有工作流程即可验证电子邮件地址和电话号码

大多数移动和Web应用程序都希望大量用户登录其应用程序。例如, 拥有Google Mail帐户的任何人都可以向允许Google身份验证的任何应用程序进行身份验证。需要一种授权形式, 以限制某些用户对应用程序的访问。通过将电子邮件地址和访问角色之间的关联存储在数据存储中, 可以轻松完成此操作。成功认证后, 将在数据存储中查找电子邮件地址。如果用户以正确的角色存在, 则授予访问权限;否则, 用户将被强制注销。

Firebase托管

Firebase托管允许将静态Web内容(包括JavaScript)托管在云中, 而无需Web服务器。内容被缓存在全球内容分发网络(CDN)的边缘。这样可以从世界任何地方快速访问内容。

可以托管一个或多个网站, 方法是将它们添加到Firebase控制台中Firebase项目的”托管”部分。内容通过SSL交付, 并提供两个URL, 形式为https://site-name.web.app和https://site-name.firebaseapp.com, 其中site-name是项目名称或用户名称, 指定的站点名称。

如果你可以更改域的DNS记录, 则使用你自己的域名托管网站非常容易。你将域名添加到Firebase控制台上的站点。然后, 你将获得一个DNS TXT记录, 你必须将该记录添加到域的DNS中, 以向Google证明你拥有该域。一旦可见TXT记录, 就可以获取该站点的DNS A记录。将自动为该站点设置一个SSL证书。设置证书后, 该站点将在全球范围内可用。原则上, DNS更新和证书置备可能要花费几个小时。实际上, 该过程可以在20分钟内完成。

要将内容添加到托管, 首先, 为站点创建目录, 然后从命令行cd进入该目录。接下来, 登录Firebase并初始化项目目录。

firebase login
firebase init

系统将提示你选择一个项目以及需要哪些客户端服务。始终可以在以后添加服务, 而不必在此阶段选择服务。

创建一个名为firebase.json的文件, 该文件定义网站的根目录和要排除的文件。你还需要一个.gitignore文件, 以将文件从版本控制中排除。

{
  "hosting": {
    "public": "public", "ignore": [
      "firebase.json", "**/.*", "**/node_modules/**"
    ]
  }
}

然后, 将静态内容复制到公共目录中。最后, 将站点部署到云中。

firebase deploy

要更改Web内容, 只需更改内容文件并发出deploy命令。每个部署在Firebase控制台上显示为一个版本。你可以单击一次以回滚到以前的版本。

Firebase托管还可以将URI重写为文件, Cloud Functions和Cloud Run。由于不必为这些服务分配域, 因此极大地简化了事情。通过将重写部分添加到firebase.json的托管部分中来定义重写。如果该服务不存在, 则托管部署将失败。

{
	"hosting": {
		"public": "public", "rewrites": [
		{
			"source": "/xxx", "destination": "/profile.html"
		}, {
			"source": "/yyy", "function": "profile"
		}, {
			"source": "/api{, /**}", "run": {	
				"serviceId": "cloud-api", "region": "europe-west1"
			}
		}
		]
	}
}

数据存储

Firebase提供了用于访问基于云的数据存储的客户端API。共有三种存储类型:

  • 实时数据库
  • 云消防站
  • 云储存

这使移动和Web客户端无需服务器即可存储和检索数据。

实时数据库

实时数据库是云托管的NoSQL数据库。实时数据库中的数据会自动实时实时同步到所有连接的设备。它可以跨平台运行到Android, iOS和Web。数据存储为JSON树结构。可以设置安全规则来控制对数据的读写访问。

每个设备都保留数据库的本地副本。这意味着在未连接到网络时数据可用。重新连接时, 将同步数据的本地副本和基于云的副本。

应用程序使用侦听器读取数据。侦听器在JSON树中的节点上侦听。每当在控制台上或其他用户更改数据时, 就会使用新的数据值来调用侦听器回调。实时数据库还支持查询。每个查询都返回一个节点及其所有子节点。

默认情况下, 安全规则不允许访问数据。规则可以全局添加, 也可以添加到JSON对象的各个节点。安全规则控制对数据的读写访问, 并可以执行验证。

实时数据库最适合不需要深度嵌套数据结构的小数据。可用限制为1GB数据。

云消防站

Cloud Firestore被视为实时数据库的替代品。它扩展了实时数据库的功能。数据不在JSON树中, 而是文档的分层集合。每个文档由一组键值对和可选的子文档组成。查询允许进行更复杂的过滤和排序, 并且仅返回完整的文档。查询不返回子文档。

Cloud Firestore即将取代Cloud Datastore。它可以在数据存储模式或纯模式下运行。所有数据存储应用程序将自动迁移到Cloud Firestore。

Cloud Firestore最适合处理相对较小的数据。它可以具有深层嵌套的数据结构。可用限制为1GB数据。

云储存

云存储用于存储图像和视频剪辑等文件。移动和Web客户端可以使用Firebase直接在云中上传和下载文件, 而无需后端服务器。可用限制为5GB数据。

云功能

云功能是用于创建无服务器应用程序的一项重要技术。可以使用JavaScript, TypeScript, Python或Go编写云功能, 将其直接部署到Google云中。通过HTTP请求或云中的事件(例如写入Cloud Storage)来触发功能。

云功能一次只能处理一个请求, 但是云会通过复制功能自动扩展功能。用Python编写的Cloud Function使用Flask库处理HTTP请求。该函数将请求对象作为参数, 并返回响应主体。

一个简单的Python Cloud Function需要一个工作目录, 入口点位于文件main.py中。

def simple_cloud_function(request):
    return "It worked"

依赖关系由pip管理, 并进入一个名为requirements.txt的文件。

Flask==1.0.2

使用gcloud命令行工具部署了功能。它指定函数名称, 语言和触发器。

gcloud functions deploy simple_cloud_function --runtime python37 \ 
       --trigger-http

该功能的URL在部署时显示, 可以通过运行describe命令找到。

gcloud functions describe simple_cloud_function
Url: https://europe-west1-project-id.cloudfunctions.net/simplecloud_function

云功能可以调用Google Cloud和Firebase API以提供后端功能。它们提供有关执行启动和执行时间的日志记录信息。可以轻松添加其他日志记录。可以在Stackdriver Logging UI和gcloud命令行工具中查看日志。

gcloud functions logs read simple_cloud_function 

可以在Google Cloud Console中查看和删除功能。

Google Cloud Console:功能

云功能最适合用于不经常发生的操作。一个示例用法是在将图像上传到Cloud Storage时创建缩略图。免费限制是每月125, 000次调用。

Cloud Run

Cloud Run是最近添加的功能, 可极大地简化无服务器应用程序。它使Docker容器可以在云中运行, 而无需进行复杂的基础架构设置。它可以在托管模式下运行, 该模式使用在Kubernetes上构建的Knative运行时。它也可以在基于Kubernetes构建的Anthos上运行, 但允许容器跨云甚至在你自己的数据中心上运行。由于它是自动完成的, 因此无需设置和管理Kubernetes集群。

Cloud Run可以管理可以内置在Docker映像中的任何应用程序。它会根据需求自动缩放容器的数量。当不使用服务时, 它也将缩小为零。未使用的服务不收取任何费用。

Docker容器如果要响应HTTP请求, 则需要运行Web服务器。 Python服务将使用Flask。入口点将在app.py中。

from flask import Flask, request

app = Flask(__name__)

@app.route(’/api/profile’)
def profile():
	page = ’’’
Page content
	’’’
	return page

该应用程序需要一个Dockerfile来创建映像。

FROM python
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . .
ENV PORT 8080
RUN pip install Flask gunicorn firebase-admin
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app

Cloud Run容器直接部署到云中。

gcloud run deploy --image=image_name --platform=managed \
       --region=europe-west1 --allow-unauthenticated  

如果未在项目配置中定义服务名称, 平台, 区域或是否允许未经身份验证, 或者在命令行中未提供服务名称, 平台, 区域或是否允许未经身份验证, 则会提示你输入服务名称, 平台, 区域或是否允许未经身份验证。部署完成后, 将显示服务URL。也可以使用gcloud命令获取URL。

gcloud run services list
  SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT
   cloud-api europe-west1 https://cloud-api-h42ifbxkyq-ew.a.run.app [email protected] 2020-02-05T10:53:30.006Z

该URL包含一个难以管理的随机数。这是Firebase托管重写规则变得最有用的地方。

可以在Google Cloud Console中查看和删除服务。

Google云端控制台:服务

Cloud Run非常适合托管REST API。每月的可用限制为180, 000 CPU秒, 360, 000 GB秒的内存, 200万个请求和1GB的网络出口。免费网络出口限制仅在服务部署在北美地区时适用。

认证方式

默认情况下, Cloud Functions和Cloud Run容器是公共的, 可以由Internet上的任何人访问。使用Cloud Console中的IAM规则, 可以将服务限制为项目成员, Google网上论坛和单个电子邮件地址。

如果存在限制, 则禁止未经授权的访问。要启用访问, 必须将身份令牌添加到请求标头中。可以使用gcloud命令或在Firebase身份验证过程中获取身份令牌。

gcloud auth print-identity-token

授权标头是必需的。

Authorization: Bearer id-token

总结

Google Cloud Platform和Firebase提供了一系列产品, 极大地促进了移动和Web应用程序的开发。通过允许客户端直接访问云功能或通过使用Cloud Functions或Cloud Run将后端代码部署到云中, 可以完全消除对后端服务器的需求。

可以将现有应用程序逐步迁移到无服务器。实际上, 技术的发展方式可能意味着不再需要传统的基于虚拟机的服务器解决方案。

赞(0)
未经允许不得转载:srcmini » 使用Firebase无服务器-移动和Web应用程序变得简单

评论 抢沙发

评论前必须登录!