33 lines
1.1 KiB
Bash
33 lines
1.1 KiB
Bash
#!/usr/bin/env bash
|
||
# 部署脚本:在部署机上停止旧容器并启动新版镜像
|
||
# 由 CI/CD 通过 ssh 调用,CI/CD 通过 IMAGE_TAG 环境变量传入本次镜像 tag
|
||
# 依赖:本机已安装 docker;工作目录 /app/registry 用于持久化 data/
|
||
|
||
set -euo pipefail
|
||
|
||
IMAGE_NAME="registry"
|
||
IMAGE_TAG="${IMAGE_TAG:-latest}"
|
||
CONTAINER_NAME="registry"
|
||
HOST_PORT="${HOST_PORT:-8008}"
|
||
APP_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
DATA_DIR="${APP_DIR}/data"
|
||
|
||
echo "[start.sh] 使用镜像:${IMAGE_NAME}:${IMAGE_TAG}"
|
||
mkdir -p "${DATA_DIR}/configs"
|
||
|
||
# 停止并清理旧容器(若不存在则忽略)
|
||
if docker ps -a --format '{{.Names}}' | grep -qx "${CONTAINER_NAME}"; then
|
||
echo "[start.sh] 停止并删除旧容器 ${CONTAINER_NAME}"
|
||
docker rm -f "${CONTAINER_NAME}" >/dev/null
|
||
fi
|
||
|
||
# 启动新容器:数据目录挂载到宿主机以持久化
|
||
echo "[start.sh] 启动新容器"
|
||
docker run -d \
|
||
--name "${CONTAINER_NAME}" \
|
||
--restart unless-stopped \
|
||
-p "${HOST_PORT}:3000" \
|
||
-v "${DATA_DIR}:/app/data" \
|
||
"${IMAGE_NAME}:${IMAGE_TAG}"
|
||
|
||
echo "[start.sh] 部署完成:http://localhost:${HOST_PORT}" |