1. jest.setup.js: - 添加 Request/Response/Headers 全局对象 mock - 解决 'Request is not defined' 错误 2. .eslintrc.json: - 将 jest.setup.js 添加到忽略列表 3. shared-mocks.tsx: - 添加 ArrowUp 图标 mock 4. back-to-top.test.tsx: - 重写测试使用 import 语法 - 使用 fireEvent.scroll 触发滚动事件 - 修复组件渲染测试
This commit is contained in:
Executable
+237
@@ -0,0 +1,237 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 方案A: 服务重启脚本
|
||||
# 用途:快速重启Docker容器和Nginx服务
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
separator() {
|
||||
echo "======================================================================"
|
||||
}
|
||||
|
||||
# 记录日志
|
||||
LOG_FILE="/tmp/service-restart-$(date +%Y%m%d_%H%M%S).log"
|
||||
exec > >(tee -a "$LOG_FILE") 2>&1
|
||||
|
||||
separator
|
||||
echo "方案A: 服务重启脚本"
|
||||
echo "执行时间: $(date)"
|
||||
separator
|
||||
|
||||
# 1. 检查当前状态
|
||||
log_info "步骤1: 检查当前服务状态"
|
||||
separator
|
||||
|
||||
echo ""
|
||||
log_info "当前Docker容器状态:"
|
||||
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||
|
||||
echo ""
|
||||
log_info "当前Nginx状态:"
|
||||
systemctl status nginx --no-pager | head -10
|
||||
|
||||
echo ""
|
||||
log_info "当前系统资源:"
|
||||
echo "CPU和内存:"
|
||||
top -bn1 | head -5
|
||||
echo ""
|
||||
echo "磁盘使用:"
|
||||
df -h | grep -E "Filesystem|/$"
|
||||
|
||||
# 2. 查找docker-compose文件
|
||||
log_info "步骤2: 查找docker-compose配置文件"
|
||||
separator
|
||||
|
||||
POSSIBLE_PATHS=(
|
||||
"/opt/novalon-website"
|
||||
"/var/www/novalon-website"
|
||||
"/home/novalon-website"
|
||||
"/root/novalon-website"
|
||||
"/srv/novalon-website"
|
||||
"."
|
||||
)
|
||||
|
||||
COMPOSE_FILE=""
|
||||
PROJECT_DIR=""
|
||||
|
||||
for path in "${POSSIBLE_PATHS[@]}"; do
|
||||
if [ -f "$path/docker-compose.prod.yml" ]; then
|
||||
PROJECT_DIR="$path"
|
||||
COMPOSE_FILE="$path/docker-compose.prod.yml"
|
||||
log_success "找到docker-compose.prod.yml: $COMPOSE_FILE"
|
||||
break
|
||||
elif [ -f "$path/docker-compose.yml" ]; then
|
||||
PROJECT_DIR="$path"
|
||||
COMPOSE_FILE="$path/docker-compose.yml"
|
||||
log_success "找到docker-compose.yml: $COMPOSE_FILE"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "$COMPOSE_FILE" ]; then
|
||||
log_error "未找到docker-compose配置文件"
|
||||
log_info "请手动指定项目目录:"
|
||||
read -p "请输入项目目录路径: " PROJECT_DIR
|
||||
|
||||
if [ -f "$PROJECT_DIR/docker-compose.prod.yml" ]; then
|
||||
COMPOSE_FILE="$PROJECT_DIR/docker-compose.prod.yml"
|
||||
elif [ -f "$PROJECT_DIR/docker-compose.yml" ]; then
|
||||
COMPOSE_FILE="$PROJECT_DIR/docker-compose.yml"
|
||||
else
|
||||
log_error "指定目录中未找到docker-compose文件"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
log_info "项目目录: $PROJECT_DIR"
|
||||
log_info "配置文件: $COMPOSE_FILE"
|
||||
|
||||
# 3. 重启Docker容器
|
||||
log_info "步骤3: 重启Docker容器"
|
||||
separator
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
echo ""
|
||||
log_info "停止Docker容器..."
|
||||
docker-compose -f "$COMPOSE_FILE" stop
|
||||
|
||||
echo ""
|
||||
log_info "启动Docker容器..."
|
||||
docker-compose -f "$COMPOSE_FILE" up -d
|
||||
|
||||
echo ""
|
||||
log_info "等待服务启动(10秒)..."
|
||||
sleep 10
|
||||
|
||||
echo ""
|
||||
log_info "检查容器状态:"
|
||||
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||
|
||||
# 检查容器是否正常运行
|
||||
RUNNING_CONTAINERS=$(docker ps -q | wc -l)
|
||||
STOPPED_CONTAINERS=$(docker ps -f "status=exited" -q | wc -l)
|
||||
|
||||
if [ "$STOPPED_CONTAINERS" -gt 0 ]; then
|
||||
log_warning "发现已停止的容器:"
|
||||
docker ps -f "status=exited" --format "table {{.Names}}\t{{.Status}}"
|
||||
|
||||
echo ""
|
||||
log_info "查看容器日志:"
|
||||
for container in $(docker ps -f "status=exited" -q); do
|
||||
CONTAINER_NAME=$(docker inspect --format='{{.Name}}' $container | sed 's/\///')
|
||||
echo ""
|
||||
log_info "容器: $CONTAINER_NAME"
|
||||
docker logs --tail 30 $container
|
||||
done
|
||||
else
|
||||
log_success "所有容器运行正常"
|
||||
fi
|
||||
|
||||
# 4. 重启Nginx
|
||||
log_info "步骤4: 重启Nginx服务"
|
||||
separator
|
||||
|
||||
echo ""
|
||||
log_info "测试Nginx配置..."
|
||||
if nginx -t; then
|
||||
log_success "Nginx配置正确"
|
||||
else
|
||||
log_error "Nginx配置错误,请检查配置文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
log_info "重启Nginx..."
|
||||
systemctl restart nginx
|
||||
|
||||
echo ""
|
||||
log_info "检查Nginx状态:"
|
||||
systemctl status nginx --no-pager | head -15
|
||||
|
||||
if systemctl is-active --quiet nginx; then
|
||||
log_success "Nginx运行正常"
|
||||
else
|
||||
log_error "Nginx启动失败"
|
||||
journalctl -u nginx --no-pager | tail -20
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 5. 验证服务
|
||||
log_info "步骤5: 验证服务状态"
|
||||
separator
|
||||
|
||||
echo ""
|
||||
log_info "测试本地应用连接..."
|
||||
if curl -I --connect-timeout 5 http://localhost:3000 2>&1 | grep -q "HTTP"; then
|
||||
log_success "应用服务响应正常"
|
||||
curl -I http://localhost:3000 2>&1 | head -10
|
||||
else
|
||||
log_error "应用服务无响应"
|
||||
log_info "查看应用日志:"
|
||||
docker logs --tail 50 $(docker ps -q | head -1)
|
||||
fi
|
||||
|
||||
echo ""
|
||||
log_info "检查端口监听:"
|
||||
netstat -tlnp | grep -E ":(3000|80|443)" || ss -tlnp | grep -E ":(3000|80|443)"
|
||||
|
||||
echo ""
|
||||
log_info "测试外部访问..."
|
||||
if curl -I --connect-timeout 10 https://novalon.cn 2>&1 | grep -q "HTTP"; then
|
||||
log_success "外部访问正常"
|
||||
curl -I https://novalon.cn 2>&1 | head -10
|
||||
else
|
||||
log_warning "外部访问仍可能需要等待DNS传播或CDN刷新"
|
||||
fi
|
||||
|
||||
# 6. 显示最终状态
|
||||
separator
|
||||
log_info "服务重启完成"
|
||||
separator
|
||||
|
||||
echo ""
|
||||
log_success "执行摘要:"
|
||||
echo " ✅ Docker容器已重启"
|
||||
echo " ✅ Nginx服务已重启"
|
||||
echo " ✅ 服务状态已验证"
|
||||
|
||||
echo ""
|
||||
log_info "详细日志已保存到: $LOG_FILE"
|
||||
|
||||
echo ""
|
||||
log_warning "后续建议:"
|
||||
echo " 1. 监控服务状态: watch -n 5 'docker ps && systemctl status nginx'"
|
||||
echo " 2. 查看实时日志: docker logs -f \$(docker ps -q | head -1)"
|
||||
echo " 3. 检查应用日志: tail -f /var/log/nginx/error.log"
|
||||
echo " 4. 验证外部访问: curl -I https://novalon.cn"
|
||||
|
||||
echo ""
|
||||
log_info "如果问题仍然存在,请运行完整诊断:"
|
||||
echo " /tmp/remote-server-diagnosis.sh --full"
|
||||
|
||||
separator
|
||||
Reference in New Issue
Block a user