#!/bin/bash # Hexo Container v0.0.3 运行测试脚本 (Linux) # run_test.sh # 确保脚本在正确的目录下执行 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # 参数设置 TAG=${1:-"hexo-test:v0.0.3"} CONTAINER_NAME=${2:-"hexo-test-v003"} HTTP_PORT=${3:-8080} SSH_PORT=${4:-2222} PUID=${5:-1000} PGID=${6:-1000} TIMEZONE=${7:-"Asia/Shanghai"} echo "=== Hexo Container v0.0.3 运行测试 ===" echo "工作目录: $SCRIPT_DIR" # 创建日志目录 (在测试脚本目录下) LOG_DIR="./logs" mkdir -p "$LOG_DIR" # 创建测试数据目录 (在测试脚本目录下) TEST_DATA_DIR="./test_data" HEXO_SITE_DIR="$TEST_DATA_DIR/hexo_site" SSH_KEYS_DIR="$TEST_DATA_DIR/ssh_keys" echo "创建测试数据目录..." mkdir -p "$HEXO_SITE_DIR" mkdir -p "$SSH_KEYS_DIR" # 创建测试用的 HTML 文件 echo "创建测试网站文件..." cat > "$HEXO_SITE_DIR/index.html" << 'EOF' Hexo v0.0.3 Test Site

Hexo Container v0.0.3 测试站点

测试时间:

版本: v0.0.3

状态: 运行中

v0.0.3 新功能测试

测试链接

EOF # 生成 SSH 密钥对 (如果不存在) SSH_KEY_PATH="$SSH_KEYS_DIR/test_key" if [ ! -f "$SSH_KEY_PATH" ]; then echo "生成 SSH 密钥对..." if ssh-keygen -t rsa -b 4096 -f "$SSH_KEY_PATH" -N "" -q; then echo "[SUCCESS] SSH 密钥生成成功" else echo "[FAIL] SSH 密钥生成失败" fi fi # 停止并删除已存在的容器 echo "清理旧容器..." docker stop "$CONTAINER_NAME" 2>/dev/null || true docker rm "$CONTAINER_NAME" 2>/dev/null || true # 检查端口是否被占用 if netstat -tlnp 2>/dev/null | grep -q ":$HTTP_PORT "; then echo "[WARNING] 警告: 端口 $HTTP_PORT 已被占用" fi if netstat -tlnp 2>/dev/null | grep -q ":$SSH_PORT "; then echo "[WARNING] 警告: 端口 $SSH_PORT 已被占用" fi # 构建 Docker 运行命令 echo "" echo "启动容器..." DOCKER_CMD="docker run -d \ --name $CONTAINER_NAME \ -p $HTTP_PORT:80 \ -p $SSH_PORT:22 \ -e PUID=$PUID \ -e PGID=$PGID \ -e TZ=$TIMEZONE \ -e HTTP_PORT=80 \ -e SSH_PORT=22 \ -v $SCRIPT_DIR/test_data/hexo_site:/home/www/hexo \ -v $SCRIPT_DIR/test_data/ssh_keys:/home/hexo/.ssh \ -v $SCRIPT_DIR/logs:/var/log/container \ $TAG" echo "执行命令:" echo "$DOCKER_CMD" # 执行 Docker 运行命令 if CONTAINER_ID=$($DOCKER_CMD); then echo "" echo "=== 容器启动成功 ===" echo "容器 ID: $CONTAINER_ID" echo "容器名称: $CONTAINER_NAME" # 等待容器启动 echo "" echo "等待容器完全启动 (增加等待时间)..." sleep 30 # MODIFIED: Increased sleep time to 30 seconds # 检查容器状态 echo "" echo "=== 容器状态 ===" docker ps --filter "name=$CONTAINER_NAME" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" # 显示访问信息 echo "" echo "=== 访问信息 ===" LOCAL_IP=$(hostname -I | awk '{print $1}') echo "HTTP 访问地址: http://$LOCAL_IP:$HTTP_PORT" echo "健康检查地址: http://$LOCAL_IP:$HTTP_PORT/health" echo "SSH 连接命令: ssh -p $SSH_PORT -i test_data/ssh_keys/test_key hexo@$LOCAL_IP" # 显示容器日志 echo "" echo "=== 容器启动日志 (最后20行) ===" docker logs "$CONTAINER_NAME" --tail 20 # 基础健康检查 echo "" echo "=== 基础健康检查 ===" sleep 5 # 健康检查 if curl -f "http://localhost:$HTTP_PORT/health" --max-time 10 >/dev/null 2>&1; then echo "[SUCCESS] 健康检查通过" else echo "[FAIL] 健康检查失败" fi # HTTP 服务检查 if curl -f "http://localhost:$HTTP_PORT" --max-time 10 >/dev/null 2>&1; then echo "[SUCCESS] HTTP 服务正常" else echo "[FAIL] HTTP 服务异常" fi echo "" echo "=== 运行测试完成 ===" echo "容器已成功启动并运行。使用以下命令进行进一步测试:" echo " ./functional_test.sh # 功能测试" echo " ./log_rotation_test.sh # 日志轮转测试" echo " ./cleanup_test.sh # 清理测试环境" exit 0 else echo "" echo "=== 容器启动失败 ===" echo "[ERROR] Docker 容器启动失败" # 尝试显示错误日志 if docker logs "$CONTAINER_NAME" 2>/dev/null; then echo "" echo "=== 容器错误日志 ===" docker logs "$CONTAINER_NAME" fi exit 1 fi