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

简介: 利用 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 函数

有了代码, 我们还需要部署地址. 这里我们以阿里云函数计算为例.

首先是创建自定义运行时函数.

  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 是否正常工作.

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

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
9月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
6月前
|
运维 数据可视化 C++
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
2025年热门Web化容器部署工具对比:Portainer与Websoft9。Portainer以轻量可视化管理见长,适合技术团队运维;Websoft9则提供一站式应用部署与容器管理,内置丰富开源模板,降低中小企业部署门槛。两者各有优势,助力企业提升容器化效率。
454 1
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
|
10月前
|
人工智能 运维 安全
函数计算支持热门 MCP Server 一键部署
云上托管 MCP 搭建 AI Agent 将成为趋势。函数计算 FC 目前已经支持开源 MCP Server 一键托管,欢迎体验。
1365 114
|
7月前
|
Java 应用服务中间件 Docker
java-web部署模式概述
本文总结了现代 Web 开发中 Spring Boot HTTP 接口服务的常见部署模式,包括 Servlet 与 Reactive 模型、内置与外置容器、物理机 / 容器 / 云环境部署及单体与微服务架构,帮助开发者根据实际场景选择合适的方案。
306 25
|
7月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
615 0
|
8月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。该方案设计目标是实现通用性,适用于各种网络架构和业务场景。
259 1
|
9月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。
352 7
|
10月前
|
Serverless Python
借助 serverless 将 MCP 服务部署到云端
本文介绍了如何将 MCP 服务通过 SSE 协议部署到云端,避免本地下载和启动的麻烦。首先,使用 Python 实现了一个基于 FastMCP 的网络搜索工具,并通过设置 `transport='sse'` 启用 SSE 协议。接着,编写客户端代码测试服务功能,确保其正常运行。随后,利用阿里云函数计算服务(FC 3.0)以 Serverless 方式部署该服务,包括创建函数、配置环境变量、添加依赖层以及部署代码。最后,提供了客户端测试方法和日志排查技巧,并展示了如何在不同工具(如 Cherry-Studio、Cline 和 Cursor)中配置云端 MCP 服务。
1567 10
借助 serverless 将 MCP 服务部署到云端
|
9月前
|
人工智能 安全 程序员
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
1124 12
|
10月前
|
人工智能 运维 安全
函数计算支持热门 MCP Server 一键部署
MCP(Model Context Protocol)自2024年发布以来,逐渐成为AI开发领域的实施标准。OpenAI宣布其Agent SDK支持MCP协议,进一步推动了其普及。然而,本地部署的MCP Server因效率低、扩展性差等问题,难以满足复杂生产需求。云上托管成为趋势,函数计算(FC)作为Serverless算力代表,提供一键托管开源MCP Server的能力,解决传统托管痛点,如成本高、弹性差、扩展复杂等。通过CAP平台,用户可快速部署多种热门MCP Server,体验高效灵活的AI应用开发与交互方式。
3853 10

热门文章

最新文章

相关产品

  • 函数计算