123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #!/bin/bash
- # 参数解析
- BUILD_API=false
- BUILD_TASK=false
- NO_CACHE=false
- FORCE_RECREATE=false
- while [ $# -gt 0 ]; do
- case "$1" in
- --api) BUILD_API=true ;;
- --task) BUILD_TASK=true ;;
- --all) BUILD_API=true; BUILD_TASK=true ;;
- --no-cache) NO_CACHE=true ;;
- --force) FORCE_RECREATE=true ;;
- *) echo "未知参数: $1"; exit 1 ;;
- esac
- shift
- done
- # 默认构建全部
- if [ "$BUILD_API" = false ] && [ "$BUILD_TASK" = false ]; then
- BUILD_API=true
- BUILD_TASK=true
- fi
- # 构建参数
- BUILD_ARGS=""
- if [ "$NO_CACHE" = true ]; then
- BUILD_ARGS="$BUILD_ARGS --no-cache"
- fi
- echo "开始部署..."
- # 确保目录存在
- echo "创建日志目录并设置权限"
- mkdir -p /www/wwwroot/nunu/storage/logs
- # 创建按天分割的日志目录结构
- current_date=$(date +"%Y-%m-%d")
- touch "/www/wwwroot/nunu/storage/logs/api-${current_date}.log"
- touch "/www/wwwroot/nunu/storage/logs/task-${current_date}.log"
- # 设置权限
- chmod -R 777 /www/wwwroot/nunu/storage
- # 创建Docker卷(用于缓存Go构建)
- if ! docker volume inspect go-mod-cache > /dev/null 2>&1; then
- echo "创建Go模块缓存卷..."
- docker volume create go-mod-cache
- fi
- # 构建并部署API服务
- if [ "$BUILD_API" = true ]; then
- echo "构建API服务..."
- docker build $BUILD_ARGS -t nunu-api:v1 \
- --build-arg APP_NAME=app \
- --build-arg APP_RELATIVE_PATH=./cmd/server/main.go \
- -f deploy/build/Dockerfile .
- if [ "$FORCE_RECREATE" = true ] || ! docker ps -q -f name=nunu-api > /dev/null 2>&1; then
- echo "停止并移除旧的API容器..."
- docker stop nunu-api 2>/dev/null || true
- docker rm nunu-api 2>/dev/null || true
-
- echo "启动新的API容器..."
- docker run -d --restart=always --name nunu-api \
- -e TZ=Asia/Shanghai \
- -e SERVICE_TYPE=api \
- -p 8000:8000 \
- -v /www/wwwroot/nunu/storage:/data/app/storage \
- -v /www/wwwroot/nunu/config:/data/app/config \
- -v go-mod-cache:/go/pkg/mod \
- nunu-api:v1
- else
- echo "API容器已在运行中,如需重新创建请使用 --force 参数"
- fi
- fi
- # 构建并部署Task服务
- if [ "$BUILD_TASK" = true ]; then
- echo "构建Task服务..."
- docker build $BUILD_ARGS -t nunu-task:v1 \
- --build-arg APP_NAME=task \
- --build-arg APP_RELATIVE_PATH=./cmd/task/main.go \
- -f deploy/build/Dockerfile .
- if [ "$FORCE_RECREATE" = true ] || ! docker ps -q -f name=nunu-task > /dev/null 2>&1; then
- echo "停止并移除旧的Task容器..."
- docker stop nunu-task 2>/dev/null || true
- docker rm nunu-task 2>/dev/null || true
-
- echo "启动新的Task容器..."
- docker run -d --restart=always --name nunu-task \
- -e TZ=Asia/Shanghai \
- -e SERVICE_TYPE=task \
- -v /www/wwwroot/nunu/storage:/data/app/storage \
- -v /www/wwwroot/nunu/config:/data/app/config \
- -v go-mod-cache:/go/pkg/mod \
- nunu-task:v1
- else
- echo "Task容器已在运行中,如需重新创建请使用 --force 参数"
- fi
- fi
- echo "\n部署完成!"
- [ "$BUILD_API" = true ] && echo "API服务运行在端口: 8000"
- echo "日志保存在: /www/wwwroot/nunu/storage/logs/server.log"
- echo "\n使用方法:"
- echo " ./deploy.sh --api # 仅构建和部署API服务"
- echo " ./deploy.sh --task # 仅构建和部署Task服务"
- echo " ./deploy.sh --all # 构建和部署所有服务(默认)"
- echo " ./deploy.sh --no-cache # 不使用Docker缓存构建"
- echo " ./deploy.sh --force # 强制重新创建容器"
|