erp-java/services/logistics-service/scripts/deploy.sh

166 lines
4.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
#============================================
# 物流服务部署脚本
#============================================
set -e
SERVICE_NAME="logistics-service"
SERVICE_PORT=8086
IMAGE_NAME="erp-java-backend/${SERVICE_NAME}"
CONTAINER_NAME="${SERVICE_NAME}"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查Docker是否运行
check_docker() {
if ! docker info > /dev/null 2>&1; then
log_error "Docker未运行请先启动Docker"
exit 1
fi
}
# 停止并删除旧容器
stop_container() {
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
log_info "停止旧容器..."
docker stop ${CONTAINER_NAME} 2>/dev/null || true
docker rm ${CONTAINER_NAME} 2>/dev/null || true
fi
}
# 构建Docker镜像
build_image() {
log_info "构建Docker镜像..."
docker build -t ${IMAGE_NAME}:latest .
docker tag ${IMAGE_NAME}:latest ${IMAGE_NAME}:$(date +%Y%m%d%H%M%S)
}
# 启动容器
start_container() {
log_info "启动容器..."
docker run -d \
--name ${CONTAINER_NAME} \
--restart unless-stopped \
-p ${SERVICE_PORT}:8086 \
-e DB_HOST=${DB_HOST:-111.229.80.149} \
-e DB_PORT=${DB_PORT:-3306} \
-e DB_NAME=${DB_NAME:-erp_db} \
-e DB_USER=${DB_USER:-root} \
-e DB_PASSWORD=${DB_PASSWORD:-nihao588+} \
-e REDIS_HOST=${REDIS_HOST:-111.229.80.149} \
-e REDIS_PORT=${REDIS_PORT:-6379} \
-e REDIS_PASSWORD=${REDIS_PASSWORD:-Y(@r5tGk9\$Lp2} \
-e NACOS_HOST=${NACOS_HOST:-111.229.80.149} \
-e NACOS_PORT=${NACOS_PORT:-8848} \
-e NACOS_NAMESPACE=${NACOS_NAMESPACE:-public} \
-e JAVA_OPTS="-Xms256m -Xmx512m" \
--health-cmd "curl -f http://localhost:8086/actuator/health || exit 1" \
--health-interval=30s \
--health-timeout=10s \
--health-retries=3 \
--health-start-period=60s \
${IMAGE_NAME}:latest
log_info "容器已启动,等待健康检查..."
sleep 30
# 检查容器状态
if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
log_info "容器运行正常"
else
log_error "容器启动失败查看日志docker logs ${CONTAINER_NAME}"
exit 1
fi
}
# 查看日志
show_logs() {
docker logs -f ${CONTAINER_NAME}
}
# 查看状态
show_status() {
echo "=== 容器状态 ==="
docker ps -a --filter "name=${CONTAINER_NAME}" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo ""
echo "=== 健康检查 ==="
curl -s http://localhost:${SERVICE_PORT}/actuator/health | python3 -m json.tool 2>/dev/null || echo "无法获取健康状态"
}
# 执行数据库迁移
run_migration() {
log_info "执行数据库初始化..."
docker exec -it ${CONTAINER_NAME} bash -c "mysql -h\${DB_HOST} -u\${DB_USER} -p\${DB_PASSWORD} \${DB_NAME} < /app/db/init.sql" || true
}
# 主流程
main() {
log_info "开始部署 ${SERVICE_NAME}..."
check_docker
stop_container
build_image
start_container
log_info "部署完成!"
echo ""
echo "服务地址: http://localhost:${SERVICE_PORT}"
echo "API文档: http://localhost:${SERVICE_PORT}/doc.html"
echo ""
echo "常用命令:"
echo " 查看日志: ./deploy.sh logs"
echo " 查看状态: ./deploy.sh status"
echo " 停止服务: ./deploy.sh stop"
echo " 重启服务: ./deploy.sh restart"
}
# 根据参数执行不同操作
case "${1:-deploy}" in
deploy)
main
;;
start)
start_container
;;
stop)
stop_container
log_info "服务已停止"
;;
restart)
stop_container
start_container
;;
logs)
show_logs
;;
status)
show_status
;;
rebuild)
stop_container
build_image
start_container
;;
*)
echo "用法: $0 {deploy|start|stop|restart|logs|status|rebuild}"
exit 1
;;
esac