mirror of
https://github.com/zhinianboke/xianyu-auto-reply.git
synced 2025-08-02 20:47:35 +08:00
168 lines
4.1 KiB
Bash
168 lines
4.1 KiB
Bash
#!/bin/bash
|
|
|
|
# 修复数据库权限问题的脚本
|
|
# 解决Docker容器中数据库无法创建的问题
|
|
|
|
set -e
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
print_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
echo "========================================"
|
|
echo " 数据库权限修复脚本"
|
|
echo "========================================"
|
|
echo ""
|
|
|
|
# 1. 停止现有容器
|
|
print_info "停止现有容器..."
|
|
docker-compose down 2>/dev/null || true
|
|
|
|
# 2. 检查并创建目录
|
|
print_info "检查并创建必要目录..."
|
|
for dir in data logs backups; do
|
|
if [ ! -d "$dir" ]; then
|
|
print_info "创建目录: $dir"
|
|
mkdir -p "$dir"
|
|
fi
|
|
|
|
# 设置权限
|
|
chmod 755 "$dir"
|
|
|
|
# 检查权限
|
|
if [ ! -w "$dir" ]; then
|
|
print_error "目录 $dir 没有写权限"
|
|
|
|
# 尝试修复权限
|
|
print_info "尝试修复权限..."
|
|
sudo chmod 755 "$dir" 2>/dev/null || {
|
|
print_error "无法修复权限,请手动执行: sudo chmod 755 $dir"
|
|
exit 1
|
|
}
|
|
fi
|
|
|
|
print_success "目录 $dir 权限正常"
|
|
done
|
|
|
|
# 3. 检查现有数据库文件
|
|
if [ -f "data/xianyu_data.db" ]; then
|
|
print_info "检查现有数据库文件权限..."
|
|
if [ ! -w "data/xianyu_data.db" ]; then
|
|
print_warning "数据库文件没有写权限,尝试修复..."
|
|
chmod 644 "data/xianyu_data.db"
|
|
print_success "数据库文件权限已修复"
|
|
else
|
|
print_success "数据库文件权限正常"
|
|
fi
|
|
fi
|
|
|
|
# 4. 检查Docker用户映射
|
|
print_info "检查Docker用户映射..."
|
|
CURRENT_UID=$(id -u)
|
|
CURRENT_GID=$(id -g)
|
|
|
|
print_info "当前用户 UID:GID = $CURRENT_UID:$CURRENT_GID"
|
|
|
|
# 5. 创建测试数据库
|
|
print_info "测试数据库创建..."
|
|
python3 -c "
|
|
import sqlite3
|
|
import os
|
|
|
|
db_path = 'data/test_db.sqlite'
|
|
try:
|
|
conn = sqlite3.connect(db_path)
|
|
conn.execute('CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY)')
|
|
conn.commit()
|
|
conn.close()
|
|
print('✅ 数据库创建测试成功')
|
|
os.remove(db_path)
|
|
except Exception as e:
|
|
print(f'❌ 数据库创建测试失败: {e}')
|
|
exit(1)
|
|
" || {
|
|
print_error "数据库创建测试失败"
|
|
exit 1
|
|
}
|
|
|
|
# 6. 更新docker-compose.yml用户映射
|
|
print_info "检查docker-compose.yml用户映射..."
|
|
if ! grep -q "user:" docker-compose.yml; then
|
|
print_info "添加用户映射到docker-compose.yml..."
|
|
|
|
# 备份原文件
|
|
cp docker-compose.yml docker-compose.yml.backup
|
|
|
|
# 在xianyu-app服务中添加user配置
|
|
sed -i '/container_name: xianyu-auto-reply/a\ user: "'$CURRENT_UID':'$CURRENT_GID'"' docker-compose.yml
|
|
|
|
print_success "用户映射已添加"
|
|
else
|
|
print_info "用户映射已存在"
|
|
fi
|
|
|
|
# 7. 重新构建并启动
|
|
print_info "重新构建并启动服务..."
|
|
docker-compose build --no-cache
|
|
docker-compose up -d
|
|
|
|
# 8. 等待服务启动
|
|
print_info "等待服务启动..."
|
|
sleep 10
|
|
|
|
# 9. 检查服务状态
|
|
print_info "检查服务状态..."
|
|
if docker-compose ps | grep -q "Up"; then
|
|
print_success "服务启动成功"
|
|
|
|
# 检查日志
|
|
print_info "检查启动日志..."
|
|
docker-compose logs --tail=20 xianyu-app
|
|
|
|
# 测试健康检查
|
|
print_info "测试健康检查..."
|
|
sleep 5
|
|
if curl -f http://localhost:8080/health >/dev/null 2>&1; then
|
|
print_success "健康检查通过"
|
|
else
|
|
print_warning "健康检查失败,但服务可能仍在启动中"
|
|
fi
|
|
else
|
|
print_error "服务启动失败"
|
|
print_info "查看错误日志:"
|
|
docker-compose logs xianyu-app
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
print_success "数据库权限修复完成!"
|
|
echo ""
|
|
print_info "服务信息:"
|
|
echo " Web界面: http://localhost:8080"
|
|
echo " 健康检查: http://localhost:8080/health"
|
|
echo " 默认账号: admin / admin123"
|
|
echo ""
|
|
print_info "常用命令:"
|
|
echo " 查看日志: docker-compose logs -f"
|
|
echo " 重启服务: docker-compose restart"
|
|
echo " 停止服务: docker-compose down"
|