96 lines
2.8 KiB
Bash
Executable File
96 lines
2.8 KiB
Bash
Executable File
#!/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
|
||
|