Skip to content
作者:  WHY
字数统计: 
阅读时长:  分钟
阅读量: 

Deploy

打包部署

bash
# 打包后的文件目录 .vitepress/dist
pnpm docs:build

Docker

Mac OS Catalina 10.15.7 安装 Docker:

bash
docker version

docker ps

构建镜像:

bash
docker build -t knowledge-base .

运行:

bash
docker run -itd -p 8002:80 --name knowledge-base knowledge-base

浏览器输入 http://localhost:8002 即可查看

使用 deploy.sh 一键运行:

bash
# 避免 zsh: permission denied: ./deploy.sh
# cd 至当前项目所在根目录
chmod 777 deploy.sh

# 运行 deploy.sh
# 运行成功后查看 http://localhost:8002
./deploy.sh
deploy.sh
sh
#!/bin/bash

KNOWLEDGE_BASE="knowledge-base"
readonly  KNOWLEDGE_BASE

echo "[INFO] Start building ${KNOWLEDGE_BASE} image."
docker build -t ${KNOWLEDGE_BASE} .
# shellcheck disable=SC2181
if [[ "$?" = "0" ]]; then
  echo "[INFO] Build ${KNOWLEDGE_BASE} image successfully."
else
  echo "[ERROR] Fail to build ${KNOWLEDGE_BASE} image."
  exit 1
fi

# 判断是否已存在正在运行的容器
if [[ -n $(docker ps -q -f "name=${KNOWLEDGE_BASE}") ]]; then
  echo "[INFO] Container<${KNOWLEDGE_BASE}> is already running, try remove it forcefully."
  docker rm -f ${KNOWLEDGE_BASE}
  echo "[INFO] Container<${KNOWLEDGE_BASE}> has been removed"
else
  echo "[INFO] Container<${KNOWLEDGE_BASE}> is not running, just do nothing here."
fi

echo "[INFO] Start running ${KNOWLEDGE_BASE} container."
docker run -itd -p 8002:80 --name ${KNOWLEDGE_BASE} ${KNOWLEDGE_BASE}
echo "[INFO] ${KNOWLEDGE_BASE} container is running."
echo "[SUCCESS] Please visit link http://localhost:8002/knowledge-base."

GitHub Pages

.github/workflows/deploy.yml
yml
name: Deploy

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

env:
  VITE_BASE_ENV: 'production'

jobs:
  deploy-gh-pages:
    name: Deploy to GitHub Pages
    permissions:
      contents: write
    concurrency:
      group: pages
      cancel-in-progress: false
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v3
        with:
          node-version: 20.11.1
      - run: npm i pnpm@8.15.4 -g
      - run: pnpm install --frozen-lockfile

      - name: Generate
        run: pnpm generate:heatmap

      - name: Build
        run: pnpm docs:build

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: .vitepress/dist

      # 将文件上传至云服务器
      # 参考: https://www.lu-xiaoyu.com/notes/raop/myw
#      - name: Deploy to server
#        uses: marcodallasanta/ssh-scp-deploy@v1.2.0
#        with:
#          # 本地打包后的文件目录
#          local: .vitepress/dist
#          # 上传至远程服务器的目标目录
#          remote: /home/ubuntu/
#          # 远程服务器的地址
#          host: ${{ secrets.REMOTE_HOST }}
#          # 远程服务器的用户名
#          user: ${{ secrets.REMOTE_USERNAME }}
#          # 远程服务器的密钥(与密码二者选其一)
#          key: ${{ secrets.PRIVATE_KEY }}
#          # 上传后执行的脚本
#          post_upload: sudo nginx -s reload

Netlify

注意, 须在 Netlify 后台添加环境变量:

dotenv
# 这将使 `.vitepress/config.ts` 中 `base` 为 `/`
VITE_BASE_ENV="development"

配置文件为 netlify.toml:

netlify.toml
toml
[build]
base = ""
publish = ".vitepress/dist"
command = "pnpm run docs:build"

[context.main]
VITE_BASE_ENV = "development"

[[headers]]
for = "/*"

[headers.values]
cache-control = "max-age=7200"

[[headers]]
for = "/assets/*"

[headers.values]
cache-control = "max-age=31536000"

Vercel

注意, 须在 Vercel 后台添加环境变量:

dotenv
# 这将使 `.vitepress/config.ts` 中 `base` 为 `/`
VITE_BASE_ENV="development"

配置文件为 vercel.json:

vercel.json
json
{
  "framework": "vitepress",
  "installCommand": "pnpm i",
  "buildCommand": "pnpm docs:build",
  "ignoreCommand": "if [[ \"$VERCEL_ENV\" == \"production\" && \"$VERCEL_GIT_COMMIT_REF\" == 'main' ]]; then exit 1; else exit 0; fi",
  "cleanUrls": true,
  "public": false,
  "outputDirectory": ".vitepress/dist",
  "github": {
    "silent": true
  },
  "git": {
    "deploymentEnabled": {
      "main": true,
      "gh-pages": false
    }
  }
}

AWS Amplify

amplify-explicit.yml
yml
version: 1.0
frontend:
  phases:
    preBuild:
      commands:
        - npm i pnpm@8.15.4 -g
        - pnpm install --frozen-lockfile
    build:
      commands:
        - pnpm docs:build
  artifacts:
    baseDirectory: .vitepress/dist
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*
      - $(npm root --global)/**/*

Cloudflare Pages

注意, 须在 Cloudflare 后台添加环境变量:

dotenv
# 这将使 `.vitepress/config.ts` 中 `base` 为 `/`
VITE_BASE_ENV="development"

配置文件为 wrangler.toml:

wrangler.toml
toml
# schema https://github.com/cloudflare/workers-sdk/files/12887590/wrangler.schema.json

name = "knowledge-base"

# Build command (Worker only)
# build.command = "pnpm docs:build"

# Build output directory
pages_build_output_dir = ".vitepress/dist"

[vars]
VITE_BASE_ENV = "development"

Possible Platforms

Nginx 配置

nginx.conf 示例
nginx
server {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    listen 80;
    server_name _;
    index index.html index.htm;

    include /etc/nginx/mime.types;

    #     location / {
    #             # content location
    #             # root /app;
    #             root /usr/share/nginx/knowledge-base;
    #
    #             # exact matches -> reverse clean urls -> folders -> not found
    #             try_files $uri $uri.html $uri/ =404;
    #
    #             # non existent pages
    #             error_page 404 /404.html;
    #
    #             # a folder without index.html raises 403 in this setup
    #             error_page 403 /404.html;
    #
    #             # adjust caching headers
    #             # files in the assets folder have hashes filenames
    #             location ~* ^/assets/ {
    #                 expires 1y;
    #                 add_header Cache-Control "public, immutable";
    #             }
    #         }

    location /knowledge-base {
        # content location
        # root /app;
        alias /usr/share/nginx/knowledge-base;
        index index.html index.htm;

        # exact matches -> reverse clean urls -> folders -> not found
        # try_files $uri $uri.html $uri/ =404;
        try_files $uri $uri/ $uri.html /index.html =404;

        # non existent pages
        error_page 404 /404.html;

        # a folder without index.html raises 403 in this setup
        error_page 403 /404.html;

        # adjust caching headers
        # files in the assets folder have hashes filenames
        location ~* ^/assets/ {
            expires 1y;
            add_header Cache-Control "public, immutable";
        }
    }
}

Contributors

The avatar of contributor named as why why

Changelog

Released under the MIT License.