#!/bin/bash # 生产环境容器优化脚本 # 用途:优化容器自动重启策略和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" } separator() { echo "======================================================================" } separator echo "生产环境容器优化脚本" echo "执行时间: $(date)" separator # 1. 更新容器重启策略 log_info "步骤1: 更新容器重启策略" separator CONTAINERS=( "woodpecker-server" "woodpecker-agent" "novalon-nginx" "novalon-website" "forgejo" "postgresql" "registry" ) for container in "${CONTAINERS[@]}"; do if docker ps -a --format "{{.Names}}" | grep -q "^${container}$"; then log_info "更新 $container 重启策略为 always" docker update --restart=always "$container" || log_warning "无法更新 $container" else log_warning "容器 $container 不存在" fi done log_success "容器重启策略更新完成" # 2. 优化Nginx配置 log_info "步骤2: 优化Nginx配置" separator NGINX_CONF="/home/novalon/docker-app/novalon-nginx/nginx.conf" if [ -f "$NGINX_CONF" ]; then # 备份原配置 cp "$NGINX_CONF" "${NGINX_CONF}.backup.$(date +%Y%m%d_%H%M%S)" # 添加Docker DNS解析器 if ! grep -q "resolver 127.0.0.11" "$NGINX_CONF"; then log_info "添加Docker DNS解析器到Nginx配置" # 在http块中添加resolver sed -i '/http {/a\ # Docker DNS resolver for dynamic container name resolution\n resolver 127.0.0.11 valid=30s ipv6=off;\n' "$NGINX_CONF" log_success "Nginx配置已优化" else log_info "Nginx配置已包含DNS解析器" fi else log_warning "未找到Nginx配置文件: $NGINX_CONF" fi # 3. 重启Nginx应用新配置 log_info "步骤3: 重启Nginx应用新配置" separator docker restart novalon-nginx sleep 3 if docker ps --format "{{.Names}}\t{{.Status}}" | grep "novalon-nginx" | grep -q "Up"; then log_success "Nginx重启成功" else log_error "Nginx重启失败" exit 1 fi # 4. 验证服务状态 log_info "步骤4: 验证服务状态" separator echo "" log_info "容器状态:" docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -E "NAME|woodpecker|nginx|novalon|forgejo|postgres|registry" echo "" log_info "容器重启策略:" for container in "${CONTAINERS[@]}"; do if docker ps -a --format "{{.Names}}" | grep -q "^${container}$"; then RESTART_POLICY=$(docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' "$container") echo " $container: $RESTART_POLICY" fi done echo "" log_info "测试服务访问:" if curl -I --connect-timeout 5 http://localhost:80 2>&1 | grep -q "HTTP"; then log_success "HTTP服务正常" else log_warning "HTTP服务异常" fi if curl -I --connect-timeout 5 https://localhost:443 -k 2>&1 | grep -q "HTTP"; then log_success "HTTPS服务正常" else log_warning "HTTPS服务异常" fi separator log_success "容器优化完成" separator echo "" log_info "优化摘要:" echo " ✅ 所有容器重启策略已更新为 always" echo " ✅ Nginx已配置Docker DNS解析器" echo " ✅ 服务状态已验证" echo "" log_warning "后续建议:" echo " 1. 监控容器状态: docker ps" echo " 2. 查看容器日志: docker logs " echo " 3. 配置监控告警: 设置定时检查脚本" separator