duidui_admin_web/deploy/deploy.sh
2026-03-27 10:38:12 +08:00

96 lines
2.8 KiB
Bash
Executable File
Raw Permalink 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
# 部署脚本 - 在服务器上运行
# 用法: ./deploy.sh [端口号,默认 49999]
set -e
IMAGE_NAME="duidui-admin-web"
CONTAINER_NAME="duidui-admin-web-container"
TAR_FILE="duidui-admin-web.tar"
NETWORK_NAME="dd.net"
PORT=${1:-49999}
echo "=========================================="
echo "开始部署 $IMAGE_NAME"
echo "=========================================="
# 检查 tar 文件是否存在
if [ ! -f "$TAR_FILE" ]; then
echo "错误: 找不到 $TAR_FILE 文件"
exit 1
fi
# 停止并删除旧容器(如果存在)
echo "检查并清理旧容器..."
if [ "$(docker ps -a -q -f name=$CONTAINER_NAME)" ]; then
echo "停止旧容器..."
docker stop $CONTAINER_NAME || true
echo "删除旧容器..."
docker rm $CONTAINER_NAME || true
fi
# 删除旧镜像(如果存在)
echo "检查并清理旧镜像..."
if [ "$(docker images -q $IMAGE_NAME)" ]; then
echo "删除旧镜像..."
docker rmi $IMAGE_NAME || true
fi
# 加载镜像
echo "加载 Docker 镜像..."
docker load -i $TAR_FILE
# 处理镜像标签(兼容 podman 构建时的 localhost/ 前缀)
if ! docker image inspect $IMAGE_NAME:latest >/dev/null 2>&1; then
if docker image inspect localhost/$IMAGE_NAME:latest >/dev/null 2>&1; then
echo "检测到镜像标签为 localhost/$IMAGE_NAME:latest重新标记为 $IMAGE_NAME:latest"
docker tag localhost/$IMAGE_NAME:latest $IMAGE_NAME:latest
fi
fi
# 检查并创建网络(如果不存在)
echo "检查 Docker 网络..."
if ! docker network ls | grep -q "$NETWORK_NAME"; then
echo "创建 Docker 网络: $NETWORK_NAME"
docker network create $NETWORK_NAME
else
echo "网络 $NETWORK_NAME 已存在"
fi
# 运行容器
echo "启动容器..."
docker run -d \
--name $CONTAINER_NAME \
--network $NETWORK_NAME \
--restart unless-stopped \
-p $PORT:80 \
$IMAGE_NAME
# 检查容器状态
echo "等待容器启动..."
sleep 2
if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then
echo "=========================================="
echo "部署成功!"
echo "=========================================="
echo "容器名称: $CONTAINER_NAME"
echo "Docker 网络: $NETWORK_NAME"
echo "访问地址: http://localhost:$PORT"
echo ""
echo "查看容器状态: docker ps -a | grep $CONTAINER_NAME"
echo "查看容器日志: docker logs $CONTAINER_NAME"
echo "查看网络信息: docker network inspect $NETWORK_NAME"
echo "停止容器: docker stop $CONTAINER_NAME"
echo "启动容器: docker start $CONTAINER_NAME"
echo "删除容器: docker rm -f $CONTAINER_NAME"
else
echo "=========================================="
echo "部署失败!请检查日志"
echo "=========================================="
docker logs $CONTAINER_NAME
exit 1
fi