#!/bin/bash # Docker环境日系动漫风格404页面一键部署脚本 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 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" } # 检查Docker环境 check_docker_nginx() { log_info "检查Docker Nginx容器..." # 查找运行的Nginx容器 local nginx_container=$(docker ps --filter "name=nginx" --format "{{.Names}}" | head -1) if [ -z "$nginx_container" ]; then nginx_container=$(docker ps --filter "publish=80" --format "{{.Names}}" | head -1) fi if [ -z "$nginx_container" ]; then nginx_container=$(docker ps --filter "publish=443" --format "{{.Names}}" | head -1) fi if [ -n "$nginx_container" ]; then log_success "找到Nginx容器: $nginx_container" echo "$nginx_container" return 0 else log_error "未找到运行的Nginx容器" return 1 fi } # 创建404页面到宿主机目录 create_404_page() { local host_data_dir="/boot/data/dataxn" log_info "正在创建日系动漫风格404页面..." # 检查宿主机目录是否存在 if [ ! -d "$host_data_dir" ]; then log_warning "目录 $host_data_dir 不存在,正在创建..." mkdir -p "$host_data_dir" fi local html_path="$host_data_dir/404.html" cat > "$html_path" << 'EOF' 页面未找到 - 404错误
🌸
🐱
404

おっと!ページが見つかりません

申し訳ありませんが、お探しのページは存在しないか、移動した可能性があります。
迷子になったキャラクターのように、ページもどこかへ行ってしまったようです。

ホームに戻る 前のページに戻る
EOF log_success "404页面已创建: $html_path" } # 为Docker容器创建Nginx配置 create_nginx_config() { local container_name="$1" log_info "为容器 $container_name 创建Nginx配置..." # 检查容器内的Nginx配置路径 local nginx_conf_path="/etc/nginx/conf.d/custom_404.conf" # 创建配置内容 local config_content=$(cat << 'EOF' # 自定义404错误页面配置 error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; internal; allow all; } EOF ) # 将配置写入容器 echo "$config_content" | docker exec -i "$container_name" tee "$nginx_conf_path" > /dev/null if [ $? -eq 0 ]; then log_success "Nginx配置已写入容器: $nginx_conf_path" else log_error "无法写入容器配置,请检查容器权限" return 1 fi } # 测试Nginx配置 test_nginx_config() { local container_name="$1" log_info "测试容器Nginx配置..." if docker exec "$container_name" nginx -t; then log_success "Nginx配置测试通过" return 0 else log_error "Nginx配置测试失败" return 1 fi } # 重新加载Nginx reload_nginx() { local container_name="$1" log_info "重新加载容器Nginx配置..." if docker exec "$container_name" nginx -s reload; then log_success "Nginx配置已重新加载" return 0 else log_error "Nginx重新加载失败" return 1 fi } # 显示Docker特定信息 show_docker_info() { local container_name="$1" echo log_success "日系动漫风格404页面部署完成!" echo log_info "部署详情:" log_info "- 宿主机404页面: /boot/data/dataxn/404.html" log_info "- Nginx容器: $container_name" log_info "- 容器内配置: /etc/nginx/conf.d/custom_404.conf" echo log_info "目录映射关系:" log_info "- 宿主机: /boot/data/dataxn → 容器: (请检查您的具体映射路径)" echo log_info "测试方法:" log_info "1. 访问一个不存在的页面: curl http://your-domain/not-exist-page" log_info "2. 或直接在浏览器中访问不存在的URL" echo log_warning "如果您的目录映射不是默认的/usr/share/nginx/html,请手动调整配置" } # 主函数 main() { echo log_info "开始为Docker Nginx部署日系动漫风格404页面..." echo # 检查Docker环境 local container_name=$(check_docker_nginx) if [ $? -ne 0 ]; then exit 1 fi # 执行部署步骤 create_404_page create_nginx_config "$container_name" # 测试并重新加载Nginx if test_nginx_config "$container_name"; then reload_nginx "$container_name" show_docker_info "$container_name" else log_error "部署失败,请检查Nginx配置" exit 1 fi } # 显示使用说明 usage() { echo "Docker环境日系动漫风格404页面一键部署脚本" echo echo "使用方法: $0 [选项]" echo echo "选项:" echo " -h, --help 显示此帮助信息" echo " -i, --install 执行安装部署" echo echo "示例:" echo " $0 --install 部署404页面" } # 参数处理 case "${1:-}" in -h|--help) usage exit 0 ;; -i|--install|"") main ;; *) log_error "未知选项: $1" usage exit 1 ;; esac