#!/bin/bash # SMS Forwarder Docker 部署脚本 set -e echo "🚀 SMS Forwarder Docker 部署脚本" echo "================================" # 检查 Docker 和 Docker Compose check_docker() { if ! command -v docker &> /dev/null; then echo "❌ Docker 未安装,请先安装 Docker" exit 1 fi if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then echo "❌ Docker Compose 未安装,请先安装 Docker Compose" exit 1 fi echo "✅ Docker 环境检查通过" } # 检查配置文件 check_config() { if [ ! -f "config.yaml" ]; then echo "⚠️ 配置文件不存在,从示例文件创建..." if [ -f "config.example.yaml" ]; then cp config.example.yaml config.yaml echo "📝 请编辑 config.yaml 文件配置你的推送服务" echo "是否现在编辑配置文件? (y/N)" read -r response if [[ "$response" =~ ^[Yy]$ ]]; then ${EDITOR:-nano} config.yaml fi else echo "❌ 配置文件模板不存在" exit 1 fi else echo "✅ 配置文件存在" fi } # 构建镜像 build_image() { echo "🔨 构建 Docker 镜像..." docker build -t sms-forwarder:latest . echo "✅ 镜像构建完成" } # 部署服务 deploy_service() { echo "🚀 部署服务..." # 停止现有服务 if docker ps -q --filter "name=sms-forwarder" | grep -q .; then echo "⏹️ 停止现有服务..." docker-compose down fi # 启动新服务 echo "▶️ 启动服务..." docker-compose up -d # 等待服务启动 echo "⏳ 等待服务启动..." sleep 10 # 检查服务状态 if docker ps --filter "name=sms-forwarder" --filter "status=running" | grep -q sms-forwarder; then echo "✅ 服务启动成功" else echo "❌ 服务启动失败" docker-compose logs sms-forwarder exit 1 fi } # 测试服务 test_service() { echo "🧪 测试服务..." # 等待服务完全启动 sleep 5 # 健康检查 if curl -f http://localhost:12152/health &> /dev/null; then echo "✅ 健康检查通过" else echo "❌ 健康检查失败" docker-compose logs sms-forwarder exit 1 fi # 状态检查 if curl -f http://localhost:12152/status &> /dev/null; then echo "✅ 状态接口正常" else echo "❌ 状态接口异常" fi } # 显示部署信息 show_info() { echo "" echo "🎉 部署完成!" echo "" echo "服务信息:" echo " - 服务地址: http://localhost:12152" echo " - API 文档: http://localhost:12152/docs" echo " - 健康检查: http://localhost:12152/health" echo " - 服务状态: http://localhost:12152/status" echo "" echo "管理命令:" echo " - 查看日志: docker-compose logs -f sms-forwarder" echo " - 重启服务: docker-compose restart sms-forwarder" echo " - 停止服务: docker-compose down" echo " - 查看状态: docker-compose ps" echo "" echo "测试命令:" echo " - 发送测试通知: ./scripts/test-docker.sh" echo "" } # 主函数 main() { check_docker check_config build_image deploy_service test_service show_info } # 运行主函数 main "$@"