79 lines
2.7 KiB
Bash
79 lines
2.7 KiB
Bash
#!/usr/bin/env sh
|
|
|
|
# If you could not download the model from the official site, you can use the mirror site.
|
|
# Just remove the comment of the following line .
|
|
# 如果你无法从官方网站下载模型,你可以使用镜像网站。
|
|
# 只需要移除下面一行的注释即可。
|
|
|
|
# export HF_ENDPOINT=https://hf-mirror.com
|
|
|
|
CURRENT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
|
export PYTHONPATH="$CURRENT_DIR${PYTHONPATH:+:$PYTHONPATH}"
|
|
|
|
# 0.0.0.0 只能表示“监听所有网卡”,不适合作为浏览器访问地址。
|
|
# macOS/Linux 下浏览器打开 http://0.0.0.0:8501 可能会经过代理或网关,
|
|
# 最终出现 502。默认绑定并打开 127.0.0.1,与 Windows 启动脚本保持一致。
|
|
MPT_WEBUI_HOST="${MPT_WEBUI_HOST:-127.0.0.1}"
|
|
MPT_WEBUI_PORT="${MPT_WEBUI_PORT:-8501}"
|
|
|
|
if [ -x "$CURRENT_DIR/.venv/bin/python" ]; then
|
|
PORT_CHECK_CMD="$CURRENT_DIR/.venv/bin/python"
|
|
set -- "$CURRENT_DIR/.venv/bin/python" -m streamlit
|
|
elif command -v uv >/dev/null 2>&1; then
|
|
PORT_CHECK_CMD="uv run python"
|
|
set -- uv run streamlit
|
|
elif command -v streamlit >/dev/null 2>&1; then
|
|
echo "***** Warning: using streamlit from PATH. If dependencies fail, run 'uv sync --frozen' first. *****"
|
|
PORT_CHECK_CMD="python3"
|
|
set -- streamlit
|
|
else
|
|
echo "***** Neither project Python, uv, nor streamlit was found. Please install dependencies first. *****"
|
|
exit 1
|
|
fi
|
|
|
|
find_available_port() {
|
|
WEBUI_HOST="$MPT_WEBUI_HOST" WEBUI_PORT="$MPT_WEBUI_PORT" "$@" - <<'PY' 2>/dev/null
|
|
import os
|
|
import socket
|
|
import sys
|
|
|
|
host = os.environ.get("WEBUI_HOST", "127.0.0.1")
|
|
preferred = int(os.environ.get("WEBUI_PORT", "8501"))
|
|
candidates = [preferred] + [port for port in range(8502, 8600) if port != preferred]
|
|
|
|
for port in candidates:
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
|
try:
|
|
sock.bind((host, port))
|
|
except OSError:
|
|
continue
|
|
print(port)
|
|
sys.exit(0)
|
|
|
|
sys.exit(1)
|
|
PY
|
|
}
|
|
|
|
# 用 Python 做端口探测,避免依赖 lsof/nc 在不同 macOS/Linux 发行版上的差异。
|
|
# shellcheck disable=SC2086
|
|
SELECTED_WEBUI_PORT=$(find_available_port $PORT_CHECK_CMD)
|
|
|
|
if [ -z "$SELECTED_WEBUI_PORT" ]; then
|
|
echo "***** No available WebUI port found in 8501-8599 for $MPT_WEBUI_HOST. *****"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$SELECTED_WEBUI_PORT" != "$MPT_WEBUI_PORT" ]; then
|
|
echo "***** Port $MPT_WEBUI_PORT is unavailable, using $SELECTED_WEBUI_PORT instead. *****"
|
|
fi
|
|
|
|
MPT_WEBUI_PORT="$SELECTED_WEBUI_PORT"
|
|
|
|
echo "***** WebUI address: http://$MPT_WEBUI_HOST:$MPT_WEBUI_PORT *****"
|
|
"$@" run "$CURRENT_DIR/webui/Main.py" \
|
|
--server.address="$MPT_WEBUI_HOST" \
|
|
--server.port="$MPT_WEBUI_PORT" \
|
|
--browser.serverAddress="$MPT_WEBUI_HOST" \
|
|
--browser.gatherUsageStats=False \
|
|
--server.enableCORS=True
|