deploy.sh 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #!/bin/bash
  2. # 参数解析
  3. BUILD_API=false
  4. BUILD_TASK=false
  5. NO_CACHE=false
  6. FORCE_RECREATE=false
  7. while [ $# -gt 0 ]; do
  8. case "$1" in
  9. --api) BUILD_API=true ;;
  10. --task) BUILD_TASK=true ;;
  11. --all) BUILD_API=true; BUILD_TASK=true ;;
  12. --no-cache) NO_CACHE=true ;;
  13. --force) FORCE_RECREATE=true ;;
  14. *) echo "未知参数: $1"; exit 1 ;;
  15. esac
  16. shift
  17. done
  18. # 默认构建全部
  19. if [ "$BUILD_API" = false ] && [ "$BUILD_TASK" = false ]; then
  20. BUILD_API=true
  21. BUILD_TASK=true
  22. fi
  23. # 构建参数
  24. BUILD_ARGS=""
  25. if [ "$NO_CACHE" = true ]; then
  26. BUILD_ARGS="$BUILD_ARGS --no-cache"
  27. fi
  28. echo "开始部署..."
  29. # 确保目录存在
  30. echo "创建日志目录并设置权限"
  31. mkdir -p /www/wwwroot/nunu/storage/logs
  32. # 创建按天分割的日志目录结构
  33. current_date=$(date +"%Y-%m-%d")
  34. echo "===== 创建日志目录 (当前日期: ${current_date}) ====="
  35. mkdir -p /www/wwwroot/nunu/storage/logs/
  36. # 创建日志文件并设置正确的权限
  37. touch "/www/wwwroot/nunu/storage/logs/api-${current_date}.log"
  38. touch "/www/wwwroot/nunu/storage/logs/task-${current_date}.log"
  39. touch "/www/wwwroot/nunu/storage/logs/server.log"
  40. # 设置权限
  41. chmod -R 777 /www/wwwroot/nunu/storage
  42. # 输出目录和文件状态以便调试
  43. echo "日志目录内容和权限:"
  44. ls -la /www/wwwroot/nunu/storage/logs/
  45. # 确保配置文件包含正确的日志配置
  46. echo "创建/更新日志配置..."
  47. cat > "/www/wwwroot/nunu/config/log_config.yml" << EOL
  48. log:
  49. log_level: info
  50. encoding: json
  51. log_format: "2006-01-02"
  52. api_log_file: "./storage/logs/api-%s.log"
  53. task_log_file: "./storage/logs/task-%s.log"
  54. log_file_name: "./storage/logs/server.log"
  55. max_backups: 30
  56. max_age: 30
  57. max_size: 200
  58. compress: true
  59. EOL
  60. echo "配置文件已创建,确保它被正确加载"
  61. # 创建Docker卷(用于缓存Go构建)
  62. if ! docker volume inspect go-mod-cache > /dev/null 2>&1; then
  63. echo "创建Go模块缓存卷..."
  64. docker volume create go-mod-cache
  65. fi
  66. # 构建并部署API服务
  67. if [ "$BUILD_API" = true ]; then
  68. echo "构建API服务..."
  69. docker build $BUILD_ARGS -t nunu-api:v1 \
  70. --build-arg APP_NAME=app \
  71. --build-arg APP_RELATIVE_PATH=./cmd/server/main.go \
  72. -f deploy/build/Dockerfile .
  73. if [ "$FORCE_RECREATE" = true ] || ! docker ps -q -f name=nunu-api > /dev/null 2>&1; then
  74. echo "停止并移除旧的API容器..."
  75. docker stop nunu-api 2>/dev/null || true
  76. docker rm nunu-api 2>/dev/null || true
  77. echo "启动新的API容器..."
  78. docker run -d --restart=always --name nunu-api \
  79. --env SERVICE_TYPE=api \
  80. --env APP_CONF=config/prod.yml \
  81. -p 8000:8000 \
  82. -v /www/wwwroot/nunu/storage:/data/app/storage \
  83. -v /www/wwwroot/nunu/config:/data/app/config \
  84. -v go-mod-cache:/go/pkg/mod \
  85. nunu-api:v1 \
  86. ./app -conf config/prod.yml
  87. else
  88. echo "API容器已在运行中,如需重新创建请使用 --force 参数"
  89. fi
  90. fi
  91. # 构建并部署Task服务
  92. if [ "$BUILD_TASK" = true ]; then
  93. echo "构建Task服务..."
  94. docker build $BUILD_ARGS -t nunu-task:v1 \
  95. --build-arg APP_NAME=task \
  96. --build-arg APP_RELATIVE_PATH=./cmd/task/main.go \
  97. -f deploy/build/Dockerfile .
  98. if [ "$FORCE_RECREATE" = true ] || ! docker ps -q -f name=nunu-task > /dev/null 2>&1; then
  99. echo "停止并移除旧的Task容器..."
  100. docker stop nunu-task 2>/dev/null || true
  101. docker rm nunu-task 2>/dev/null || true
  102. echo "启动新的Task容器..."
  103. docker run -d --restart=always --name nunu-task \
  104. --env APP_CONF=config/prod.yml \
  105. -v /www/wwwroot/nunu/storage:/data/app/storage \
  106. -v /www/wwwroot/nunu/config:/data/app/config \
  107. -v go-mod-cache:/go/pkg/mod \
  108. nunu-task:v1 \
  109. ./task -conf config/prod.yml
  110. else
  111. echo "Task容器已在运行中,如需重新创建请使用 --force 参数"
  112. fi
  113. fi
  114. echo "\n部署完成!"
  115. [ "$BUILD_API" = true ] && echo "API服务运行在端口: 8000"
  116. echo "日志保存在: /www/wwwroot/nunu/storage/logs/server.log"
  117. echo "\n使用方法:"
  118. echo " ./deploy.sh --api # 仅构建和部署API服务"
  119. echo " ./deploy.sh --task # 仅构建和部署Task服务"
  120. echo " ./deploy.sh --all # 构建和部署所有服务(默认)"
  121. echo " ./deploy.sh --no-cache # 不使用Docker缓存构建"
  122. echo " ./deploy.sh --force # 强制重新创建容器"