# Hexo Container v0.0.3 测试脚本使用说明 (Linux) ## 路径修正说明 本次更新修正了 `test/v0.0.3/linux` 目录下所有测试脚本的路径问题,确保脚本能够: 1. **正确调用对应文件** - 无论从哪个目录执行脚本 2. **正确生成文件** - 所有生成的文件都保存在测试目录及其子目录中 3. **使用相对路径** - 提高脚本的可移植性 ## 修正的关键问题 ### 1. 脚本工作目录统一 - 所有脚本现在都会自动切换到脚本所在目录作为工作目录 - 使用 `SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"` 获取脚本目录 - 使用 `cd "$SCRIPT_DIR"` 设置工作目录 ### 2. 路径引用修正 - **Dockerfile 路径**: `../../../Dockerfile_v0.0.3` (相对于测试脚本目录) - **日志目录**: `$SCRIPT_DIR/logs` (在测试脚本目录下) - **测试数据**: `$SCRIPT_DIR/test_data` (在测试脚本目录下) - **SSH 密钥**: `$SCRIPT_DIR/test_data/ssh_keys/test_key` ### 3. Docker 卷挂载路径修正 - 使用 `$SCRIPT_DIR` 构建绝对路径进行卷挂载 - 确保容器能正确访问主机文件 ### 4. 端口配置更新 - 默认 HTTP 端口从 8888 更新为 8080 - 避免与常见服务的端口冲突 ## 文件结构 ``` test/v0.0.3/linux/ ├── build_test.sh # 构建测试脚本 ├── run_test.sh # 运行测试脚本 ├── functional_test.sh # 功能测试脚本 ├── log_rotation_test.sh # 日志轮转测试脚本 (v0.0.3新功能) ├── test_log_size_reset.sh # 🆕 日志大小重置专项测试脚本 (容器重启修复验证) ├── cleanup_test.sh # 清理测试脚本 ├── start.sh # 一键测试套件 ├── test_paths.sh # 路径验证脚本 (新增) ├── README.md # 使用说明文档 (新增) ├── logs/ # 测试日志目录 (自动创建) └── test_data/ # 测试数据目录 (自动创建) ├── hexo_site/ # 测试站点文件 └── ssh_keys/ # SSH 密钥文件 ``` ## 使用方式 ### 方式1: 从测试目录运行 (推荐) ```bash cd "/path/to/dockerfiledir/test/v0.0.3/linux" ./start.sh ``` ### 方式2: 从任意目录运行 ```bash /path/to/dockerfiledir/test/v0.0.3/linux/start.sh ``` ### 方式3: 单独运行各个测试 ```bash cd "/path/to/dockerfiledir/test/v0.0.3/linux" ./build_test.sh # 构建镜像 ./run_test.sh # 启动容器 ./functional_test.sh # 功能测试 ./log_rotation_test.sh # 日志轮转测试 ./test_log_size_reset.sh # 🆕 日志大小重置测试 (容器重启修复验证) ./cleanup_test.sh # 清理环境 ``` ## 测试参数 ### start.sh 参数 - `--clean-start`: 清理后重新开始测试 - `--help`: 显示帮助信息 ### 各脚本参数 #### build_test.sh ```bash ./build_test.sh [TAG] [PLATFORM] # TAG: 镜像标签 (默认: hexo-test:v0.0.3) # PLATFORM: 平台架构 (默认: linux/amd64) ``` #### run_test.sh ```bash ./run_test.sh [TAG] [CONTAINER_NAME] [HTTP_PORT] [SSH_PORT] [PUID] [PGID] [TIMEZONE] # TAG: 镜像标签 (默认: hexo-test:v0.0.3) # CONTAINER_NAME: 容器名称 (默认: hexo-test-v003) # HTTP_PORT: HTTP端口 (默认: 8080) # SSH_PORT: SSH端口 (默认: 2222) # PUID: 用户ID (默认: 1000) # PGID: 组ID (默认: 1000) # TIMEZONE: 时区 (默认: Asia/Shanghai) ``` #### functional_test.sh ```bash ./functional_test.sh [CONTAINER_NAME] [HTTP_PORT] [SSH_PORT] # CONTAINER_NAME: 容器名称 (默认: hexo-test-v003) # HTTP_PORT: HTTP端口 (默认: 8080) # SSH_PORT: SSH端口 (默认: 2222) ``` #### log_rotation_test.sh ```bash ./log_rotation_test.sh [CONTAINER_NAME] [HTTP_PORT] [SSH_PORT] [OPTIONS] # CONTAINER_NAME: 容器名称 (默认: hexo-test-v003) # HTTP_PORT: HTTP端口 (默认: 8080) # SSH_PORT: SSH端口 (默认: 2222) # OPTIONS: --fast-test, --quick-gen, --log-threshold-mb N ``` #### test_log_size_reset.sh (🆕 容器重启修复验证) ```bash ./test_log_size_reset.sh [OPTIONS] # --container-name NAME 容器名称 (默认: hexo-test-v003) # --ssh-port PORT SSH端口 (默认: 2222) # --target-size-kb SIZE 目标日志大小KB (默认: 25) # --verbose 详细输出模式 # --help 显示帮助信息 ``` 此脚本专门验证容器重启时的日志监控修复功能,确保: - 容器重启后不会重复输出旧的Git部署信息 - 日志位置跟踪文件正确工作 - 部署日志监控在重启后正常恢复 #### cleanup_test.sh ```bash ./cleanup_test.sh [CONTAINER_NAME] [IMAGE_TAG] [OPTIONS] # CONTAINER_NAME: 容器名称 (默认: hexo-test-v003) # IMAGE_TAG: 镜像标签 (默认: hexo-test:v0.0.3) # OPTIONS: --remove-image, --remove-test-data, --remove-logs ``` ### 使用示例 ```bash # 完整测试 (清理模式) ./start.sh --clean-start # 自定义端口运行 ./run_test.sh "hexo-test:v0.0.3" "my-hexo-test" 9999 3333 # 🆕 容器重启修复验证测试 ./test_log_size_reset.sh # 详细模式运行重启修复测试 ./test_log_size_reset.sh --verbose # 自定义目标大小测试 ./test_log_size_reset.sh --target-size-kb 30 # 日志轮转快速测试 ./log_rotation_test.sh --fast-test # 彻底清理环境 ./cleanup_test.sh --remove-image --remove-test-data --remove-logs ``` ## 验证路径配置 运行路径验证脚本检查配置: ```bash ./test_paths.sh ``` 此脚本会检查所有关键路径是否正确,并自动创建必需的目录。 ## 系统要求 ### 基本要求 - **操作系统**: Linux (Ubuntu 18.04+, Debian 10+, CentOS 7+) - **Docker**: Docker Engine 20.10+ - **Shell**: Bash 4.0+ - **内存**: 至少 2GB 可用内存 - **磁盘**: 至少 5GB 可用磁盘空间 ### 必需的系统工具 - `docker` - Docker 容器引擎 - `curl` - HTTP 客户端工具 - `ssh` - SSH 客户端 - `ssh-keygen` - SSH 密钥生成工具 - `netstat` - 网络状态查看工具 ### 安装依赖 (Ubuntu/Debian) ```bash # 更新包管理器 sudo apt-get update # 安装 Docker sudo apt-get install docker.io # 安装其他工具 sudo apt-get install curl openssh-client net-tools # 将用户添加到 docker 组 sudo usermod -aG docker $USER newgrp docker ``` ### 安装依赖 (CentOS/RHEL) ```bash # 安装 Docker sudo yum install docker # 安装其他工具 sudo yum install curl openssh-clients net-tools # 启动 Docker 服务 sudo systemctl start docker sudo systemctl enable docker # 将用户添加到 docker 组 sudo usermod -aG docker $USER ``` ## 注意事项 1. **权限要求**: 确保有 Docker 使用权限(用户在 docker 组中) 2. **端口冲突**: 确保指定的端口未被占用 3. **SSH 密钥**: 测试脚本会自动生成 SSH 密钥对 4. **Docker 环境**: 确保 Docker 服务正在运行 5. **脚本权限**: 确保所有 .sh 文件有执行权限 ## 故障排除 ### 权限错误 ```bash # 设置脚本执行权限 chmod +x *.sh # 检查 Docker 权限 docker version ``` ### 路径不存在错误 ```bash # 运行路径验证 ./test_paths.sh ``` ### Docker 连接错误 ```bash # 检查 Docker 状态 sudo systemctl status docker # 启动 Docker 服务 sudo systemctl start docker ``` ### 端口占用错误 ```bash # 查看端口占用 netstat -tlnp | grep :8080 netstat -tlnp | grep :2222 # 杀死占用进程 sudo kill -9 ``` ### 日志查看 ```bash # 查看最新测试日志 ls -la logs/ | tail -5 # 查看特定日志 tail -f logs/test_suite_*.log # 搜索错误信息 grep -i error logs/*.log ``` ## 高级用法 ### 自定义配置 ```bash # 使用自定义镜像标签 export HEXO_IMAGE_TAG="my-hexo:custom" ./start.sh # 使用自定义容器名称 export HEXO_CONTAINER_NAME="my-hexo-container" ./start.sh ``` ### 批量测试 ```bash # 测试多个端口配置 for port in 8080 8081 8082; do ./run_test.sh "hexo-test:v0.0.3" "hexo-test-$port" $port $((port+1000)) ./functional_test.sh "hexo-test-$port" $port $((port+1000)) ./cleanup_test.sh "hexo-test-$port" done ``` ### 调试模式 ```bash # 启用详细输出 set -x ./start.sh set +x ``` ## 版本历史 ### v0.0.3-linux-update (2025年5月30日) - ✅ 修正了所有测试脚本的路径处理 - ✅ 统一了工作目录管理 - ✅ 更新了默认端口配置 (8888 → 8080) - ✅ 添加了路径验证工具 `test_paths.sh` - ✅ 改进了错误处理和日志记录 - ✅ 增强了脚本的可移植性和稳定性