Deploy
打包部署
bash
# 打包后的文件目录 .vitepress/dist
pnpm docs:buildDocker
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.shdeploy.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 reloadNetlify
注意, 须在 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
Git integration guide - Cloudflare Pages
仅支持
GitHub和GitLab平台
注意, 须在 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
- Deno Deploy
- Google Cloud
- Microsoft Azure
- Fly.io Launch Apps Near Users, 须付费使用
- Zeabur
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";
}
}
}