用 marknb 替换 Python markdown,并添加一键安装与升级脚本。

部署时通过 install.sh 自动编译 marknb;日常更新用 upgrade.sh 拉代码并重编译。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
cnb
2026-07-05 11:48:18 +08:00
co-authored by Cursor
parent 0333ab1fc1
commit cf8eba082f
8 changed files with 227 additions and 25 deletions
+74
View File
@@ -0,0 +1,74 @@
#!/usr/bin/env bash
# marknb / py-blog 公共构建逻辑(供 install.sh、upgrade.sh 引用)
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
VENDOR="$ROOT/vendor/marknb"
MARKNB_REPO="${MARKNB_REPO:-https://cnb.cool/whcself/marknb.git}"
MARKNB_SRC="$VENDOR/src"
LIB_PATH="$VENDOR/libmarknb.so"
apt_install() {
if ! command -v apt-get >/dev/null 2>&1; then
return 0
fi
local pkgs=(gcc make git python3 python3-pip python3-venv)
if command -v sudo >/dev/null 2>&1 && [ "$(id -u)" -ne 0 ]; then
sudo apt-get update -qq
sudo apt-get install -y --no-install-recommends "${pkgs[@]}"
else
apt-get update -qq
apt-get install -y --no-install-recommends "${pkgs[@]}"
fi
}
build_marknb() {
mkdir -p "$VENDOR"
if [ -d "$MARKNB_SRC/.git" ]; then
git -C "$MARKNB_SRC" fetch --depth 1 origin main
git -C "$MARKNB_SRC" checkout -f main
git -C "$MARKNB_SRC" reset --hard origin/main
else
git clone --depth 1 --branch main "$MARKNB_REPO" "$MARKNB_SRC"
fi
local srcs=(
"$MARKNB_SRC/src/fsm.c"
"$MARKNB_SRC/src/table_stats.c"
"$MARKNB_SRC/src/line_index.c"
"$MARKNB_SRC/src/render.c"
"$MARKNB_SRC/src/marknb.c"
"$MARKNB_SRC/src/compat_cmark.c"
)
gcc -std=c11 -Wall -Wextra -O3 -fPIC -shared \
-I"$MARKNB_SRC/include" -I"$MARKNB_SRC/src" \
"${srcs[@]}" -lm -o "$LIB_PATH"
}
install_python() {
if [ ! -d "$ROOT/venv" ]; then
python3 -m venv "$ROOT/venv"
fi
"$ROOT/venv/bin/pip" install -U pip
"$ROOT/venv/bin/pip" install -r "$ROOT/requirements.txt"
}
upgrade_python() {
if [ ! -d "$ROOT/venv" ]; then
echo "未找到 venv,改为执行 install.sh" >&2
exec bash "$ROOT/scripts/install.sh"
fi
"$ROOT/venv/bin/pip" install -U pip
"$ROOT/venv/bin/pip" install -U -r "$ROOT/requirements.txt"
}
pull_py_blog() {
if [ ! -d "$ROOT/.git" ]; then
echo "当前目录不是 git 仓库,跳过 py-blog 代码拉取"
return 0
fi
local branch
branch="$(git -C "$ROOT" rev-parse --abbrev-ref HEAD)"
git -C "$ROOT" fetch origin "$branch"
git -C "$ROOT" merge --ff-only "origin/$branch"
}
+21
View File
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
# 一键安装 py-blog 依赖:编译 marknb 动态库 + Python venv
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# shellcheck source=common.sh
source "$ROOT/scripts/common.sh"
echo "==> 安装系统构建依赖(如有 apt)"
apt_install
echo "==> 拉取并编译 marknb → $LIB_PATH"
build_marknb
echo "==> 安装 Python 依赖到 venv"
install_python
echo ""
echo "安装完成。"
echo " marknb: $LIB_PATH"
echo " 启动: source venv/bin/activate && python blog.py"
+21
View File
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
# 升级已部署的 py-blog:拉取代码、重编译 marknb、更新 Python 依赖
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# shellcheck source=common.sh
source "$ROOT/scripts/common.sh"
echo "==> 拉取 py-blog 最新代码"
pull_py_blog
echo "==> 重新编译 marknb → $LIB_PATH"
build_marknb
echo "==> 升级 Python 依赖"
upgrade_python
echo ""
echo "升级完成。"
echo " marknb: $LIB_PATH"
echo " 若 blog.py 正在运行,请重启服务使变更生效。"