1 分钟在 Serverless 上部署现代化 Deno Web 应用

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 利用 Serverless 的水平扩展与按量付费优势, 结合自定义运行时, 实现 Web 应用的快速迁移。而 Deno 运行时是新一代的 JS 运行时, 使用阿里云 Serverless + Deno 的组合, 我们可以快速开发现代化 Web 应用。

作者:连喆人


本文选自 “Serverless 函数计算征集令" 征文


利用 Serverless 的水平扩展与按量付费优势, 结合自定义运行时, 实现 Web 应用的快速迁移。而 Deno 运行时是新一代的 JS 运行时, 使用阿里云 Serverless + Deno 的组合, 我们可以快速开发现代化 Web 应用。


Deno 配合 Serverless Devs 工具, 可以快速实现代码部署工作。至此, 阿里云函数计算 + Serverless Devs + Deno + TypeScript 的组合实现了软件的快速开发, 快速迭代, 快速部署, 快速伸缩,利用云端优势, 快速解决业务问题。


为什么是 Serverless


在 Web 开发领域, Serverless 相比传统方式, 最大的优势在于:可以在低运维前提下实现水平扩展。这样开发者能够将主要精力放在业务上, 而不是为了支持可能的高并发而过多关注繁杂的技术细节, 因为专注于业务,大大提升了开发效率, 降低了开发成本。


同时弹性的水平扩展可以支持任何访问频次的业务需求, 无需担心成本收益不符问题。从日 1 PV 到日 1,000,000 PV 的应用都可以支持, 无需进行额外配置, 不需要自己做集群管理, 也无需承担固定的费用, 按使用量付费即可。


我们可以把 Serverless 理解为无需自己管理的按需扩缩的容器集群,在 Web 应用的开发上, 无论从技术角度, 还是成本角度, Serverless 都更有优势。


那么,如何实现传统 Web 应用到 Serverless 的迁移呢?


理论上, 任何编程语言语言都可以在 Serverless 上进行使用。不过在具体实现上, Serverless 提供了如下几种方法:


1. 直接运行脚本语言(Serverless 容器已经携带目标语言运行时, 仅上传代码即可)


2. 运行时 + 语言脚本(全部上传到 Serverless)


3. 可执行文件(在本地编译为可执行文件, 然后上传到 Serverless)


4. 自定义容器(目前阿里云 Serverless 支持 Docker 镜像以生成容器)


以上几种方法, 在阿里云 Serverless 上均支持。对比以上几种方法的优缺点:


  • 直接运行脚本语言是冷启动时间 (即代码执行前 Serverless 容器准备的时间) 最短的;


  • 自定义容器是兼容性最好的,而我们此处用到的是一个平衡做法: 自定义运行时。 


之所以选择自定义运行时, 是因为我们采用的运行时是 Deno, 一款现代化 JS/TS 运行时。一方面, 虽然 JS 是脚本语言, 但阿里云目前还不支持 Deno 运行时, 所以无法通过直接运行脚本语言的方式在 Serverless 上运行应用。


另一方面, Deno 提供类似 Go 语言的打包为可执行文件功能,无需使用容器即可实现代码的跨平台运行。


为什么是 Deno


Deno, 是一款 JS/TS 运行时, 与 Node.js 一样使用 V8 作为 JS 解释器, 保证了速度,与 Node.js 不同的是使用 Rust 而非 C++ 作为开发语言, 与操作系统进行沟通。(二者相同的另一点是发起人和最初的主要开发者均为 Ry, Ryan Dahl)


Node.js 作为后端 JS 运行时, 无疑是影响巨大且成功的。但 Node.js 诞生在多年前,随着 ECMAScript 的发展, JavaScript(JS) 已经今非昔比, 而为了保证生态兼容性, Node.js 又难以进行大刀阔斧的改革, 这就是 Deno 诞生的大背景。


对于开发者而言, Deno 除了更好的 ECMAScript 兼容性, 还提供开箱即用的 TypeScript (TS) 支持, 提供更健壮类型约束的同时,大大降低了开发环境配置等不必要的消耗。


目前, 随着 Deno 版本的不断迭代, 在 Web 开发场景下, Deno 已经可以实现大部分 Node.js 可以实现的功能。使用 Deno 作为运行时对 JS 开发者来说可以快速上手, 不会有过大负担。相比 Node.js, Deno 的最大优势有两个:


1. 支持 Web API(比如 fetch, crypto 等)。


2. 支持文件引用, 而不需要使用 npm 这样的包管理器。


支持 Web API 可以打通前后端技术栈, 而 npm 苦开发者久矣。


简单的 Deno Web 应用案例


使用 Deno 开发 Web 应用非常简单, 下面我们来快速创建一个简单的 Web 应用实现 UA 显示。


import { serve } from "https://deno.land/std@0.148.0/http/server.ts";
function handler(req: Request): Response {
  return new Response(
    ["Hello, World!", req.method, req.url, req.headers.get("user-agent")].join(
      "\n"
    )
  );
}
serve(handler, { port: 9000 });

现在我们将以上代码保存在 /User/zsqk/web/main.ts 地址中。

创建 Serverless 函数


有了代码,我们还需要部署地址。这里我们以阿里云函数计算 FC 为例,首先是创建自定义运行时函数:

1. 进入阿里云函数计算 Web 控制台


2. 点击左侧导航栏 "服务与函数"


3. 点击 "创建服务" 进行服务的创建


4. 点击 "服务名称" 进入服务界面


5. 点击 "创建函数"


6. 在创建函数时, 选择 "使用自定义运行时平滑迁移 Web Server", 然后进行函数创建


然后需要绑定域名:


1. 回到函数计算首页后, 点击左侧导航栏 "域名管理"


2. 点击 "添加自定义域名"


3. 在添加自定义域名时, 选择刚才我们创建的服务及函数


此时我们就完成所有基础配置, 拿到了需要的参数:


1. 服务名


2. 函数名


3. 访问域名


在 Serverless 上一键部署 Deno Web 应用


在 Serverless 上部署 Deno Web 应用是很方便的,我们可以实现一键部署,利用阿里云 Serverless 的自定义运行时,在本地构建出一个可执行文件,然后通过 Serverless Devs 工具将代码部署到函数计算,在 Serverless 上执行即可。


这里我们假定已经在本地环境安装好了 Deno 与 s 工具,现在创建如下配置文件并放到 /User/zsqk/web/s.yaml 中。


edition: 1.0.0
name: zsqk-fc
access: default
services:
  fc-z1-deno:
    component: devsapp/fc
    props:
      region: ${地区}
      service:
        name: ${服务名}
      function:
        name: ${函数名}
        instanceConcurrency: 5
        instanceType: e1
        memorySize: 128
        runtime: custom
        timeout: 3
        codeUri: "./dist"


代码和部署配置文件都已经准备好, 下面只需要构建并上传代码即可。首先进入 /User/zsqk/web/ 目录中, 使用以下为使用 Deno 运行构建及上传命令的例子:


// 构建 deno 文件
const r = Deno.run({
  cmd: [
    `deno`,
    "compile",
    "--output",
    "dist/bin/zsqk",
    "--target",
    "x86_64-unknown-linux-gnu",
    "--allow-all",
    "/User/zsqk/web/main.ts",
  ],
});
await r.status();
r.close();
Deno.writeTextFileSync(
  `/User/zsqk/web/dist/bootstrap`,
  "#!/bin/bash\n./bin/zsqk --allow-all"
);


// 准备上传
const r = Deno.run({
  cmd: ["s", "deploy", "function", "--use-local"],
});
await r.status();
r.close();


当以上命令执行成功,我们就完成了一键部署 Deno Web 应用到 Aliyun Serverless 的全部流程。接写来我们可以使用上文配置的访问域名来查看我们的 UA Web 是否正常工作。


至此, 我们就完成了整个工作,之后如果每次需要应用代码变动,只需要重新执行构建及部署命令即可。


阅读原文: https://developer.aliyun.com/article/986503
相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
11天前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
198 12
|
4月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
218 0
|
6天前
|
人工智能 运维 安全
聚焦 AI 应用基础设施,云栖大会 Serverless AI 全回顾
2025 年 9 月 26 日,为期三天的云栖大会在杭州云栖小镇圆满闭幕。随着大模型技术的飞速发展,我们正从云原生时代迈向一个全新的 AI 原生应用时代。为了解决企业在 AI 应用落地中面临的高成本、高复杂度和高风险等核心挑战,阿里云基于函数计算 FC 发布一系列重磅服务。本文将对云栖大会期间 Serverless+AI 基础设施相关内容进行全面总结。
|
17天前
|
人工智能 Kubernetes 安全
重塑云上 AI 应用“运行时”,函数计算进化之路
回顾历史,电网的修建,深刻地改变了世界的经济地理和创新格局。今天,一个 AI 原生的云端运行时的进化,其意义也远不止于技术本身。这是一次设计哲学的升华:从“让应用适应平台”到“让平台主动理解和适应智能应用”的转变。当一个强大、易用、经济且安全的 AI 运行时成为像水电一样的基础设施时,它将极大地降低创新的门槛。一个独立的开发者、一个小型创业团队,将有能力去创造和部署世界级的 AI 应用。这才是技术平权的真谛,是激发全社会创新潜能的关键。
|
2月前
|
运维 数据可视化 C++
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
2025年热门Web化容器部署工具对比:Portainer与Websoft9。Portainer以轻量可视化管理见长,适合技术团队运维;Websoft9则提供一站式应用部署与容器管理,内置丰富开源模板,降低中小企业部署门槛。两者各有优势,助力企业提升容器化效率。
218 1
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
|
3月前
|
Java 应用服务中间件 Docker
java-web部署模式概述
本文总结了现代 Web 开发中 Spring Boot HTTP 接口服务的常见部署模式,包括 Servlet 与 Reactive 模型、内置与外置容器、物理机 / 容器 / 云环境部署及单体与微服务架构,帮助开发者根据实际场景选择合适的方案。
122 25
|
3月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
154 0
|
5月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
7月前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
1219 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
|
7月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。

相关产品

  • 函数计算