fix(docker): adapt Dockerfile.prod for Next.js 16 standalone output structure
ci/woodpecker/push/woodpecker Pipeline failed
ci/woodpecker/push/woodpecker Pipeline failed
- Fix standalone path: dist/standalone/novalon-website/ - Update static files path: dist/static - Replace curl with wget in health checks (Alpine compatibility) - Add monitoring and optimization scripts - Configure external network for docker-compose This resolves the deployment failure caused by Next.js 16's new standalone output structure.
This commit is contained in:
+147
@@ -0,0 +1,147 @@
|
||||
#!/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 <container-name>"
|
||||
echo " 3. 配置监控告警: 设置定时检查脚本"
|
||||
|
||||
separator
|
||||
Reference in New Issue
Block a user