feat(dev): 增加独立分销前台端口5191、标签页会话隔离与免hosts二级域名支持

This commit is contained in:
yml2213
2026-09-08 13:39:12 +08:00
parent 74ef817c41
commit a61828c6ca
10 changed files with 148 additions and 103 deletions
+47 -4
View File
@@ -20,6 +20,8 @@ MYSQL_DATABASE="${DEV_MYSQL_DATABASE:-hfb_sys}"
BACKEND_PORT="${DEV_BACKEND_PORT:-18088}"
FRONTEND_PORT="${DEV_FRONTEND_PORT:-5189}"
DISTRIBUTION_PORT="${DEV_DISTRIBUTION_PORT:-5190}"
DISTRIBUTION_STOREFRONT_PORT="${DEV_DISTRIBUTION_STOREFRONT_PORT:-5191}"
DISTRIBUTION_STOREFRONT_SITE_CODE="${DEV_DISTRIBUTION_STOREFRONT_SITE_CODE:-test_1}"
MYSQL_PORT="${DEV_MYSQL_PORT:-13306}"
REDIS_PORT="${DEV_REDIS_PORT:-16379}"
MINIO_API_PORT="${DEV_MINIO_API_PORT:-19090}"
@@ -27,6 +29,7 @@ MINIO_CONSOLE_PORT="${DEV_MINIO_CONSOLE_PORT:-19091}"
BACKEND_HEALTH_URL="${DEV_BACKEND_HEALTH_URL:-http://127.0.0.1:${BACKEND_PORT}/health}"
FRONTEND_HEALTH_URL="${DEV_FRONTEND_HEALTH_URL:-http://127.0.0.1:${FRONTEND_PORT}/}"
DISTRIBUTION_HEALTH_URL="${DEV_DISTRIBUTION_HEALTH_URL:-http://127.0.0.1:${DISTRIBUTION_PORT}/}"
DISTRIBUTION_STOREFRONT_HEALTH_URL="${DEV_DISTRIBUTION_STOREFRONT_HEALTH_URL:-http://127.0.0.1:${DISTRIBUTION_STOREFRONT_PORT}/}"
HTTP_READY_TIMEOUT="${DEV_HTTP_READY_TIMEOUT:-120}"
AUTO_KILL_PORTS="${DEV_AUTO_KILL_PORTS:-1}"
FORCE_NPM_CI="${DEV_FORCE_NPM_CI:-0}"
@@ -36,6 +39,7 @@ GOOSE_BIN="${GOOSE_BIN:-}"
BACKEND_PID=""
FRONTEND_PID=""
DISTRIBUTION_PID=""
DISTRIBUTION_STOREFRONT_PID=""
CLEANED_UP=0
# 颜色定义
@@ -78,6 +82,8 @@ show_help() {
--no-frontend 不启动主站前端
--no-backend 不启动后端
--no-distribution 不启动分销后台
--no-distribution-storefront
不启动分销前台商城
-h, --help 显示帮助信息
环境变量:
@@ -124,6 +130,7 @@ NO_MIGRATE=0
NO_FRONTEND=0
NO_BACKEND=0
NO_DISTRIBUTION=0
NO_DISTRIBUTION_STOREFRONT=0
while [[ $# -gt 0 ]]; do
case "$1" in
@@ -147,6 +154,10 @@ while [[ $# -gt 0 ]]; do
NO_DISTRIBUTION=1
shift
;;
--no-distribution-storefront)
NO_DISTRIBUTION_STOREFRONT=1
shift
;;
-h|--help)
show_help
;;
@@ -163,11 +174,14 @@ cleanup() {
fi
CLEANED_UP=1
if [[ -z "${FRONTEND_PID}" && -z "${BACKEND_PID}" && -z "${DISTRIBUTION_PID}" ]]; then
if [[ -z "${FRONTEND_PID}" && -z "${BACKEND_PID}" && -z "${DISTRIBUTION_PID}" && -z "${DISTRIBUTION_STOREFRONT_PID}" ]]; then
return
fi
log "正在停止前后端开发进程..."
if [[ -n "${DISTRIBUTION_STOREFRONT_PID}" ]] && kill -0 "${DISTRIBUTION_STOREFRONT_PID}" >/dev/null 2>&1; then
kill "${DISTRIBUTION_STOREFRONT_PID}" >/dev/null 2>&1 || true
fi
if [[ -n "${DISTRIBUTION_PID}" ]] && kill -0 "${DISTRIBUTION_PID}" >/dev/null 2>&1; then
kill "${DISTRIBUTION_PID}" >/dev/null 2>&1 || true
fi
@@ -619,6 +633,21 @@ start_distribution() {
DISTRIBUTION_PID="$!"
}
start_distribution_storefront() {
ensure_frontend_dependencies
log "启动分销前台:http://localhost:${DISTRIBUTION_STOREFRONT_PORT} (分销站: ${DISTRIBUTION_STOREFRONT_SITE_CODE})"
(
cd "${FRONTEND_DIR}"
export DEV_FRONTEND_PORT="${DISTRIBUTION_STOREFRONT_PORT}"
export DEV_BACKEND_PORT="${BACKEND_PORT}"
export VITE_API_PROXY_TARGET="${VITE_API_PROXY_TARGET:-http://127.0.0.1:${BACKEND_PORT}}"
export VITE_DISTRIBUTION_SITE_CODE="${DISTRIBUTION_STOREFRONT_SITE_CODE}"
npm run dev
) &
DISTRIBUTION_STOREFRONT_PID="$!"
}
watch_processes() {
while true; do
if [[ -n "${BACKEND_PID}" ]] && ! kill -0 "${BACKEND_PID}" >/dev/null 2>&1; then
@@ -636,6 +665,11 @@ watch_processes() {
printf "分销后台进程已退出\n" >&2
exit 1
fi
if [[ -n "${DISTRIBUTION_STOREFRONT_PID}" ]] && ! kill -0 "${DISTRIBUTION_STOREFRONT_PID}" >/dev/null 2>&1; then
wait "${DISTRIBUTION_STOREFRONT_PID}" || true
printf "分销前台商城进程已退出\n" >&2
exit 1
fi
sleep 2
done
}
@@ -698,7 +732,13 @@ main() {
wait_http_ready "${DISTRIBUTION_HEALTH_URL}" "分销后台" "${DISTRIBUTION_PID}"
fi
if [[ -z "${BACKEND_PID}" && -z "${FRONTEND_PID}" && -z "${DISTRIBUTION_PID}" ]]; then
if [[ "${NO_DISTRIBUTION_STOREFRONT}" == "0" && "${NO_FRONTEND}" == "0" ]]; then
ensure_port_free "${DISTRIBUTION_STOREFRONT_PORT}" "分销前台"
start_distribution_storefront
wait_http_ready "${DISTRIBUTION_STOREFRONT_HEALTH_URL}" "分销前台" "${DISTRIBUTION_STOREFRONT_PID}"
fi
if [[ -z "${BACKEND_PID}" && -z "${FRONTEND_PID}" && -z "${DISTRIBUTION_PID}" && -z "${DISTRIBUTION_STOREFRONT_PID}" ]]; then
log "仅启动 Docker 开发依赖,前后端与分销端未启动"
return 0
fi
@@ -706,12 +746,15 @@ main() {
log_success "开发环境已就绪"
if [[ "${NO_FRONTEND}" == "0" ]]; then
local admin_base_path="${VITE_ADMIN_BASE_PATH:-/admin}"
log "前台地址:http://localhost:${FRONTEND_PORT}"
log "后台地址:http://localhost:${FRONTEND_PORT}${admin_base_path%/}/login"
log "主站前台:http://localhost:${FRONTEND_PORT}"
log "主站后台:http://localhost:${FRONTEND_PORT}${admin_base_path%/}/login"
fi
if [[ "${NO_DISTRIBUTION}" == "0" && -d "${DISTRIBUTION_DIR}" ]]; then
log "分销后台:http://localhost:${DISTRIBUTION_PORT}"
fi
if [[ "${NO_DISTRIBUTION_STOREFRONT}" == "0" && "${NO_FRONTEND}" == "0" ]]; then
log "分销前台:http://localhost:${DISTRIBUTION_STOREFRONT_PORT} (直连分销站: ${DISTRIBUTION_STOREFRONT_SITE_CODE})"
fi
log "按 Ctrl+C 停止所有服务;Docker 依赖会保留运行"