为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 Astro 容器化并部署?

如果你只是想直接复制粘贴,这里是你的Astro应用所需的最终Dockerfile,可以用来生成镜像:

    FROM node:20-alpine AS base
    WORKDIR /app

    # 只复制 package.json 和 package-lock.json 文件,确保以下的 `-deps` 步骤独立于源代码。
    # 因此,如果只更改源代码,`-deps` 步骤将会被跳过。
    COPY package.json package-lock.json ./

    FROM base AS prod-deps
    RUN npm install --omit=dev

    FROM base AS build-deps
    RUN npm install

    FROM build-deps AS build
    COPY . .
    RUN npm run build

    FROM base AS runtime
    COPY --from=prod-deps /app/node_modules ./node_modules # 复制生产依赖项:
    COPY --from=build /app/dist ./dist # 复制构建输出:

    # 绑定到所有网络接口:
    ENV HOST=0.0.0.0
    # 监听的端口:
    ENV PORT=4321
    # 仅为约定,非强制:
    EXPOSE 4321

    CMD node ./dist/server/entry.mjs # 启动应用程序

全屏模式 退出全屏

下面是一个.dockerignore文件。

.DS_Store
node_modules
dist

全屏模式(按ESC退出).

要构建并运行 Docker 镜像,请使用以下命令:

先构建名为astro的Docker镜像,然后运行它并映射端口4321:

docker build -t astro .
docker run -p 4321:4321 astro

全屏 退出全屏

不只是来复制粘贴就走的吧?那我们来看看Dockerfile里都有哪些内容吧!

耶

背景

本教程假设你已经设置了一个基本的 Astro 项目。如果你的设置不同,你可能需要相应地调整 Dockerfile。

通常,你会运行 npm install 然后运行 npm run dev 来本地运行。不过,在部署时,我们希望构建应用并生成文件,通过服务器提供这些文件。因此,我们将使用 npm run build 来生成文件,然后通过服务器提供这些文件。

让我们来深入了解一下Dockerfile吧。

Docker文件:
    FROM node:20-alpine AS base
    WORKDIR /app

    # 仅复制 package.json 和 package-lock.json 文件到此,确保以下 `-deps` 步骤与源代码独立。
    # 因此,如果仅更改源代码,那么 `-deps` 步骤将不会执行。
    COPY package.json package-lock.json ./

    FROM base AS prod-deps
    RUN npm install --omit=dev

    FROM base AS build-deps
    RUN npm install

    FROM build-deps AS build
    COPY . .
    RUN npm run build

    FROM base AS runtime
    COPY --from=prod-deps /app/node_modules ./node_modules # 从 `prod-deps` 复制到 `/app/node_modules`
    COPY --from=build /app/dist ./dist # 从 `build` 复制到 `/app/dist`

    # 绑定到所有接口
    ENV HOST=0.0.0.0
    # 监听端口
    ENV PORT=4321
    # 仅为约定,非强制
    EXPOSE 4321

    CMD node ./dist/server/entry.mjs # 启动应用程序

全屏进入。
全屏退出。

这里到底发生了什么事?

  1. 基础阶段:
  • 基于Node.js 20和Alpine,提供一个轻量级的基础镜像。

  • 设置工作目录,并复制包文件用于安装依赖项。

    1. 生产依赖项安装阶段:
  • 仅安装生产依赖,排除开发依赖。

    1. 构建依赖阶段:
  • 安装所有依赖项,包括用于构建的开发依赖项。

    1. 构建阶段:
  • 复制整个项目并执行构建命令。

    1. 运行时阶段:
  • 从基础镜像重启。

  • 复制生产依赖项和构建文件。

  • 设置主机和端口的环境变量值。

  • 开放端口4321(Astro的默认端口)。

  • 使用构建的服务器入口点启动Astro应用服务。

这种分阶段的方法不仅优化了构建过程,还通过分离构建环境和运行时环境来保持最终镜像的较小尺寸。
确保将 .dockerignore 文件添加到项目中以忽略 node_modulesdist 文件夹。
这将加快构建过程并减小镜像的大小。

部署工作

你可以将这个 Docker 容器部署到任何支持 Docker 的云提供商上。比如,你可以选择使用像 Heroku、DigitalOcean 或 AWS ECS 这样的平台。因为我也是 Sliplane 的联合创始人之一,我会向你展示如何在 Sliplane 上部署它。

注册之后,你可以通过选择你的Github仓库来创建服务。然后只需保持默认设置不变,并点击部署按钮。

创建服务按钮

部署完成后,您的 Astro 应用程序将在 sliplane.app 的一个子域下可用,通常就是您的服务名。

你也可以查看应用程序的日志信息,查看指标如 CPU 和内存使用,添加持久化存储等功能。每次您推送代码到仓库时,Sliplane 会自动部署您的应用。

试试Sliplane,前两天免费哦!然后告诉我你的想法,好吗 :)

下一步行动

还有其他想知道的吗?需要帮忙把你的Astro应用容器化吗?需要帮忙把应用部署到特定平台吗?随时联系,没问题!
你可以在X上找到我,或直接在本文下方留言。

好了

Jonas

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消