使用 Deno 部署你的 Astro 站点
你可以使用 Deno 来部署静态或按需渲染的 Astro 站点,既可以选择自己的服务器,也可以选择 Deno Deploy——这是一个全球分布式系统,能够在边缘节点运行 JavaScript、TypeScript 和 WebAssembly。
本指南包括使用 Deno 在自己的服务器上运行 Astro 站点,以及通过 GitHub Actions 或 Deno Deploy CLI 部署到 Deno Deploy 的介绍。
要求
段落标题 要求本指南假设你已经安装了 Deno。
项目配置
段落标题 项目配置你的 Astro 项目可以是静态站点或按需渲染的站点。
静态站点
段落标题 静态站点你的 Astro 项目默认是一个静态站点。你不需要任何额外的配置就可以使用 Deno 部署一个静态 Astro 站点,或将其部署到 Deno Deploy。
按需渲染适配器
段落标题 按需渲染适配器要在 Astro 项目中启用基于 Deno 的按需渲染,并部署到 Deno Deploy:
-
使用你喜欢的包管理器将
@deno/astro-adapter
适配器 安装到你的项目依赖中:终端窗口 npm install @deno/astro-adapter终端窗口 pnpm install @deno/astro-adapter终端窗口 yarn add @deno/astro-adapter -
使用下面的修改来更新你的
astro.config.mjs
项目配置文件。astro.config.mjs import { defineConfig } from 'astro/config';import deno from '@deno/astro-adapter';export default defineConfig({output: 'server',adapter: deno(),}); -
使用以下修改来更新
package.json
中的preview
脚本。package.json {// ..."scripts": {"dev": "astro dev","start": "astro dev","build": "astro build","preview": "astro preview""preview": "deno run --allow-net --allow-read --allow-env ./dist/server/entry.mjs"}}你现在可以使用以下命令通过 Deno 在本地预览你生产环境的 Astro 站点。
终端窗口 npm run preview终端窗口 pnpm run preview终端窗口 yarn run preview
如何部署
段落标题 如何部署你可以在自己的服务器上运行 Astro 站点,也可以通过 GitHub Actions 或使用 Deno Deploy 的 CLI(命令行界面)部署到 Deno Deploy。
使用自己的服务器
段落标题 使用自己的服务器-
复制你的项目到服务器上。
-
使用你喜欢的包管理器安装项目依赖:
终端窗口 npm install终端窗口 pnpm install终端窗口 yarn -
使用你喜欢的包管理器构建你的 Astro 网站:
终端窗口 npm run build终端窗口 pnpm run build终端窗口 yarn run build -
使用以下命令启动你的应用:
终端窗口 deno run -A jsr:@std/http/file-server dist终端窗口 deno run -A ./dist/server/entry.mjs
使用 GitHub Actions 进行部署
段落标题 使用 GitHub Actions 进行部署如果你的项目存储在 GitHub 上,Deno Deploy 网站 将指导你设置 GitHub Actions 来部署你的 Astro 站点。
-
将你的代码推送到公开或私有的 GitHub 存储仓库。
-
使用你的 GitHub 账号登录 Deno Deploy,然后单击 New Project。
-
选择你的存储仓库和要部署的分支,并选择 GitHub Action 模式。(你的 Astro 站点需要一个构建步骤,不能使用 Automatic 模式。)
-
在你的 Astro 项目中,创建一个名为
.github/workflows/deploy.yml
的新文件,并粘贴下面的 YAML 内容。这类似于 Deno Deploy 提供的 YAML,但还包括你的 Astro 站点所需的其他步骤。.github/workflows/deploy.yml name: Deployon: [push]jobs:deploy:name: Deployruns-on: ubuntu-latestpermissions:id-token: write # 用于 Deno Deploy 身份认证contents: read # 用于克隆仓库steps:- name: Clone repositoryuses: actions/checkout@v4# 没有使用 npm?将 `npm ci` 更改为 `yarn install` 或 `pnpm i`- name: Install dependenciesrun: npm ci# 没有使用 npm?将 `npm run build` 更改为 `yarn build` 或 `pnpm run build`- name: Build Astrorun: npm run build- name: Upload to Deno Deployuses: denoland/deployctl@v1with:project: my-deno-project # TODO:替换为 Deno Deploy 项目名称entrypoint: jsr:@std/http/file-serverroot: dist.github/workflows/deploy.yml name: Deployon: [push]jobs:deploy:name: Deployruns-on: ubuntu-latestpermissions:id-token: write # 用于 Deno Deploy 身份认证contents: read # 用于克隆仓库steps:- name: Clone repositoryuses: actions/checkout@v4# 没有使用 npm?将 `npm ci` 更改为 `yarn install` 或 `pnpm i`- name: Install dependenciesrun: npm ci# 没有使用 npm?将 `npm run build` 更改为 `yarn build` 或 `pnpm run build`- name: Build Astrorun: npm run build- name: Upload to Deno Deployuses: denoland/deployctl@v1with:project: my-deno-project # TODO:替换为 Deno Deploy 项目名称entrypoint: dist/server/entry.mjs -
提交此 YAML 文件,然后推送到你配置的部署分支后,将会自动开始部署!
你可以在 GitHub 存储库页面上的 “Actions” 选项卡上,或在 Deno Deploy 上跟查看部署进度。
使用 CLI 进行部署
段落标题 使用 CLI 进行部署-
安装 Deno Deploy CLI。
终端窗口 deno install -gArf jsr:@deno/deployctl -
使用你喜欢的包管理器构建你的 Astro 站点:
终端窗口 npm run build终端窗口 pnpm run build终端窗口 yarn run build -
运行
deployctl
进行部署!终端窗口 cd dist && deployctl deploy jsr:@std/http/file-server终端窗口 deployctl deploy ./dist/server/entry.mjs你可以在 Deno Deploy 上跟踪所有部署。
-
(可选) 为了将构建和部署简化为一个命令,可以在
package.json
中添加一个deploy-deno
脚本。package.json {// ..."scripts": {"dev": "astro dev","start": "astro dev","build": "astro build","preview": "astro preview","deno-deploy": "npm run build && cd dist && deployctl deploy jsr:@std/http/file-server"}}package.json {// ..."scripts": {"dev": "astro dev","start": "astro dev","build": "astro build","preview": "deno run --allow-net --allow-read --allow-env ./dist/server/entry.mjs","deno-deploy": "npm run build && deployctl deploy ./dist/server/entry.mjs"}}然后你可以使用以下命令一步构建和部署你的 Astro 站点。
终端窗口 npm run deno-deploy