fix:新增功能并优化

This commit is contained in:
Daniel
2026-04-02 11:15:21 +08:00
parent 0304805ce1
commit 8d69c0979c
13 changed files with 1283 additions and 214 deletions

View File

@@ -4,6 +4,22 @@ set -euo pipefail
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "${PROJECT_DIR}"
usage() {
echo "用法: $0 [端口]"
echo " 端口: 可选,映射到本机 HTTP容器内固定 5180。也可用环境变量 HOST_PORT。"
echo " 数据: 宿主机目录通过 HOST_DATA_DIR 指定,默认 <项目目录>/data与容器 /app/data 绑定,避免重建容器丢数据。"
echo "示例:"
echo " $0 # 交互输入端口,默认 5180"
echo " $0 8080 # 使用 8080"
echo " HOST_PORT=3000 $0"
echo " HOST_DATA_DIR=$HOME/vfxdemo-data $0 9000"
}
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
usage
exit 0
fi
if ! command -v docker >/dev/null 2>&1; then
echo "未检测到 docker请先安装 Docker Desktop 或 Docker Engine。"
exit 1
@@ -26,26 +42,49 @@ fi
export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1
find_free_port() {
local port="$1"
while lsof -nP -iTCP:"${port}" -sTCP:LISTEN >/dev/null 2>&1; do
port=$((port + 1))
done
echo "${port}"
resolve_port() {
if [ -n "${1:-}" ]; then
printf '%s' "$1"
return
fi
if [ -n "${HOST_PORT:-}" ]; then
printf '%s' "${HOST_PORT}"
return
fi
if [ -t 0 ]; then
read -r -p "映射到本机的 HTTP 端口 [5180]: " _p
printf '%s' "${_p:-5180}"
return
fi
printf '%s' "5180"
}
HOST_PORT="$(find_free_port 5180)"
HOST_PORT="$(resolve_port "${1:-}")"
if ! [[ "$HOST_PORT" =~ ^[0-9]+$ ]] || [ "$HOST_PORT" -lt 1 ] || [ "$HOST_PORT" -gt 65535 ]; then
echo "无效端口: ${HOST_PORT}"
exit 1
fi
export HOST_PORT
echo "==> 使用国内镜像源构建并启动 VFXdemo"
echo " - Node 基础镜像: docker.m.daocloud.io"
echo " - npm registry: registry.npmmirror.com"
echo " - Host 端口: ${HOST_PORT}"
DATA_DEFAULT="${PROJECT_DIR}/data"
export HOST_DATA_DIR="${HOST_DATA_DIR:-${DATA_DEFAULT}}"
mkdir -p "${HOST_DATA_DIR}"
export HOST_DATA_DIR="$(cd "${HOST_DATA_DIR}" && pwd)"
if command -v lsof >/dev/null 2>&1; then
if lsof -nP -iTCP:"${HOST_PORT}" -sTCP:LISTEN >/dev/null 2>&1; then
echo "警告: 本机端口 ${HOST_PORT} 已被占用compose 可能启动失败。请换端口: $0 <端口>"
fi
fi
echo "==> VFXdemo国内镜像源构建"
echo " 本机端口: ${HOST_PORT} -> 容器 5180"
echo " 数据目录: ${HOST_DATA_DIR} -> /app/data"
"${COMPOSE_CMD[@]}" build --pull
"${COMPOSE_CMD[@]}" up -d
echo
echo "启动完成: http://localhost:${HOST_PORT}"
echo "查看日志: ${COMPOSE_CMD[*]} logs -f"
echo "停止服务: ${COMPOSE_CMD[*]} down"
echo "访问: http://localhost:${HOST_PORT}"
echo "日志: ${COMPOSE_CMD[*]} logs -f"
echo "停止: ${COMPOSE_CMD[*]} down"