Files
blog/write-server/scripts/check-config.sh
T

275 lines
6.9 KiB
Bash
Raw Normal View History

2026-06-21 20:42:44 +08:00
#!/bin/bash
# Write Server 配置检查脚本
# 检查所有必要的依赖和配置
set -e
echo "==================================="
echo " Write Server 配置检查"
echo "==================================="
echo ""
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查结果
ERRORS=0
WARNINGS=0
# 检查函数
check_pass() {
echo -e "${GREEN}✓${NC} $1"
}
check_fail() {
echo -e "${RED}✗${NC} $1"
((ERRORS++))
}
check_warn() {
echo -e "${YELLOW}⚠${NC} $1"
((WARNINGS++))
}
# 1. 检查 .env 文件
echo "1. 检查环境配置"
if [ -f .env ]; then
check_pass ".env 文件存在"
# 加载环境变量
source .env
# 检查 BLOG_ROOT
if [ -n "$BLOG_ROOT" ]; then
if [ -d "$BLOG_ROOT" ]; then
check_pass "BLOG_ROOT 目录存在: $BLOG_ROOT"
# 检查 content/posts 目录
if [ -d "$BLOG_ROOT/content/posts" ]; then
check_pass "content/posts 目录存在"
# 统计文章数量
POST_COUNT=$(find "$BLOG_ROOT/content/posts" -name "index.md" -type f | wc -l)
echo " 📝 文章数量: $POST_COUNT"
else
check_warn "content/posts 目录不存在(将自动创建)"
fi
# 检查 Hugo 配置
if [ -f "$BLOG_ROOT/hugo.toml" ]; then
check_pass "hugo.toml 配置文件存在"
else
check_warn "hugo.toml 配置文件不存在"
fi
else
check_fail "BLOG_ROOT 目录不存在: $BLOG_ROOT"
fi
else
check_fail "BLOG_ROOT 未配置"
fi
# 检查其他配置
if [ -n "$ARTALK_SERVER" ]; then
check_pass "Artalk 服务器已配置: $ARTALK_SERVER"
else
check_warn "Artalk 服务器未配置(评论功能可能不可用)"
fi
if [ -n "$TG_BOT_TOKEN" ]; then
check_pass "Telegram Bot Token 已配置"
if [ -n "$TG_ALLOWED_CHAT_IDS" ]; then
check_pass "Telegram 访问控制已配置"
else
check_warn "Telegram 访问控制未配置(所有用户都可访问)"
fi
else
check_warn "Telegram Bot Token 未配置(Bot 功能不可用)"
fi
else
check_fail ".env 文件不存在"
echo " 请运行: cp .env.example .env"
fi
echo ""
# 2. 检查 Node.js
echo "2. 检查 Node.js 环境"
if command -v node &> /dev/null; then
NODE_VERSION=$(node --version)
check_pass "Node.js 已安装: $NODE_VERSION"
# 检查版本
NODE_MAJOR=$(echo "$NODE_VERSION" | sed 's/v//' | cut -d. -f1)
if [ "$NODE_MAJOR" -ge 18 ]; then
check_pass "Node.js 版本符合要求 (>= 18)"
else
check_warn "Node.js 版本较低,建议升级到 18+"
fi
else
check_fail "Node.js 未安装"
fi
if command -v npm &> /dev/null; then
NPM_VERSION=$(npm --version)
check_pass "npm 已安装: $NPM_VERSION"
else
check_fail "npm 未安装"
fi
echo ""
# 3. 检查 Hugo
echo "3. 检查 Hugo 环境"
if command -v hugo &> /dev/null; then
HUGO_VERSION=$(hugo version 2>/dev/null | head -n 1 || echo "unknown")
check_pass "Hugo 已安装: $HUGO_VERSION"
# 检查是否是 extended 版本
if hugo version 2>/dev/null | grep -q "extended"; then
check_pass "Hugo Extended 版本(支持 SCSS/SASS)"
else
check_warn "Hugo 非 Extended 版本(某些主题功能可能不可用)"
fi
else
check_warn "Hugo 未安装(预览功能不可用)"
fi
echo ""
# 4. 检查项目依赖
echo "4. 检查项目依赖"
if [ -d "node_modules" ]; then
check_pass "node_modules 目录存在"
# 检查关键依赖
if [ -d "node_modules/next" ]; then
check_pass "Next.js 已安装"
else
check_fail "Next.js 未安装"
fi
if [ -d "node_modules/gray-matter" ]; then
check_pass "gray-matter 已安装(Markdown 解析)"
else
check_fail "gray-matter 未安装"
fi
else
check_warn "node_modules 目录不存在(需要运行 npm install)"
fi
echo ""
# 5. 检查构建状态
echo "5. 检查构建状态"
if [ -d ".next" ]; then
check_pass ".next 目录存在(已构建)"
if [ -d ".next/standalone" ]; then
check_pass "standalone 构建完成(Docker 部署可用)"
else
check_warn "standalone 构建不完整"
fi
else
check_warn ".next 目录不存在(需要运行 npm run build)"
fi
echo ""
# 6. 检查必要目录
echo "6. 检查目录结构"
for dir in logs backups recycle public src; do
if [ -d "$dir" ]; then
check_pass "$dir/ 目录存在"
else
check_warn "$dir/ 目录不存在(将自动创建)"
fi
done
echo ""
# 7. 检查端口
echo "7. 检查端口占用"
PORT=${PORT:-8016}
if command -v lsof &> /dev/null; then
if lsof -i :"$PORT" &> /dev/null; then
check_warn "端口 $PORT 已被占用"
echo " 占用进程:"
lsof -i :"$PORT" | head -n 3
else
check_pass "端口 $PORT 可用"
fi
elif command -v netstat &> /dev/null; then
if netstat -tulpn 2>/dev/null | grep -q ":$PORT "; then
check_warn "端口 $PORT 已被占用"
else
check_pass "端口 $PORT 可用"
fi
else
check_warn "无法检查端口(lsof/netstat 未安装)"
fi
echo ""
# 8. 检查 PM2(可选)
echo "8. 检查进程管理器"
if command -v pm2 &> /dev/null; then
PM2_VERSION=$(pm2 --version)
check_pass "PM2 已安装: $PM2_VERSION"
# 检查是否有运行中的进程
if pm2 list 2>/dev/null | grep -q "write-server"; then
check_pass "write-server 进程已运行"
else
check_warn "write-server 进程未运行"
fi
else
check_warn "PM2 未安装(可选,用于进程管理)"
fi
echo ""
# 9. 检查系统资源
echo "9. 检查系统资源"
# 内存
TOTAL_MEM=$(free -m 2>/dev/null | awk '/^Mem:/{print $2}' || echo "0")
AVAIL_MEM=$(free -m 2>/dev/null | awk '/^Mem:/{print $7}' || echo "0")
if [ "$TOTAL_MEM" -gt 0 ]; then
echo " 💾 内存: ${AVAIL_MEM}MB 可用 / ${TOTAL_MEM}MB 总计"
if [ "$AVAIL_MEM" -lt 256 ]; then
check_warn "可用内存较低(< 256MB)"
else
check_pass "内存充足"
fi
fi
# 磁盘
DISK_AVAIL=$(df -h . 2>/dev/null | awk 'NR==2{print $4}' || echo "unknown")
echo " 💿 磁盘: $DISK_AVAIL 可用"
echo ""
# 总结
echo "==================================="
echo " 检查完成"
echo "==================================="
echo ""
if [ $ERRORS -gt 0 ]; then
echo -e "${RED}发现 $ERRORS 个错误${NC}"
echo "请修复上述错误后再启动服务"
exit 1
elif [ $WARNINGS -gt 0 ]; then
echo -e "${YELLOW}发现 $WARNINGS 个警告${NC}"
echo "服务可以启动,但某些功能可能不可用"
exit 0
else
echo -e "${GREEN}所有检查通过!${NC}"
echo "可以启动服务:./scripts/start.sh"
exit 0
fi