跳转到内容

部署你的 Astro 站点至 GitLab Pages

你可以使用 GitLab Pages 为你的 GitLab 项目、组或用户账号托管 Astro 网站。

你可以使用 GitLab CI/CD 来自动构建和部署站点,从而将 Astro 网站部署到 GitLab Pages。为此,你的源代码必须托管在 GitLab 上,并且需要对 Astro 项目进行以下更改:

  1. astro.config.mjs 文件中设置 sitebase

    astro.config.mjs
    import { defineConfig } from 'astro/config';
    export default defineConfig({
    site: 'https://<username>.gitlab.io',
    base: '/<my-repo>',
    outDir: 'public',
    publicDir: 'static',
    });

    site

    site 的值必须是以下之一:

    • 以下基于用户名的链接:https://<username>.gitlab.io
    • 以下基于群组名的链接:https://<groupname>.gitlab.io
    • 如果你在 GitLab 项目中配置了自定义域名: https://example.com

    对于 GitLab 的自托管实例,请将 gitlab.io 替换为你实例的 Page 域名。

    base

    为了让 Astro 将你的仓库名(例如:/my-repo)视为网站的根目录,所以可能需要一个 base 的值。

    base 的值应该是诸如 /my-blog 这样以斜杠开头的仓库名称。这样 Astro 就能理解你网站的根目录是 /my-repo,而不是默认的 /

  2. public/ 目录重命名为 static

  3. astro.config.js 文件中,设置 outDir: 'public'。此设置指示 Astro 将静态构建输出放入 public 文件夹,这是 GitLab Pages 公开文件所需的文件夹。

    如果你在 Astro 项目中使用 public/ 目录 存放静态资源,你需要重命名该目录,并在 astro.config.mjs 文件中将 publicDir 的值改为新的目录名。

    例如,当 public/ 目录被重命名为 static/,正确的 astro.config.mjs 文件设置则如下:

    astro.config.mjs
    import { defineConfig } from 'astro/config';
    export default defineConfig({
    outDir: 'public',
    publicDir: 'static',
    });
  4. 更改 .gitignore 文件中的构建输出。在我们的示例中,需要将 dist/ 更改为 public/

    .gitignore
    # 构建输出
    dist/
    public/
  5. 在项目的根目录中创建一个名为 .gitlab-ci.yml 的文件,其中包含以下内容。每当你更改内容时,都会构建和部署网站:

    .gitlab-ci.yml
    pages:
    # 用于构建你的应用的 Docker 镜像
    image: node:lts
    before_script:
    - npm ci
    script:
    # 在这里指定构建你的应用所需的步骤
    - npm run build
    artifacts:
    paths:
    # 包含用于发布的构建文件的文件夹
    # 必须命名为"public"
    - public
    only:
    # 仅在推送到以下分支时,
    # 触发新的构建和部署
    - main
  6. 提交你的更改并将其推送到 GitLab。

  7. 在 Gitlab 上,转到你仓库的 Deploy 菜单并选择 Pages。在这里你能看到 GitLab Pages 网站的完整 URL。要确保使用的是 https://username.gitlab.io/my-repo 这样的 URL 格式,请取消选中此页面上的 Use unique domain 设置。

你的网站现在应该可以发布了!当你将更改推送到 Astro 项目的仓库时,GitLab CI/CD 流水线将自动为你部署它们。

更多部署指南

贡献

你有什么想法?

社区
京ICP备15031610号-99