Files
2026-06-21 20:42:44 +08:00

276 lines
6.9 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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