Add advanced canvas editing and Ubuntu deployment
This commit is contained in:
Executable
+153
@@ -0,0 +1,153 @@
|
||||
#!/usr/bin/env bash
|
||||
# WordCloud — Ubuntu 一键安装 / 启动脚本
|
||||
# 用法:
|
||||
# chmod +x install-ubuntu.sh
|
||||
# ./install-ubuntu.sh
|
||||
#
|
||||
# 可选环境变量:
|
||||
# SKIP_DOCKER_INSTALL=1 跳过 Docker 安装检测
|
||||
# NO_BUILD=1 不强制 --build(沿用已有镜像)
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
cd "$ROOT_DIR"
|
||||
|
||||
log() { echo "[INFO] $*"; }
|
||||
ok() { echo "[OK] $*"; }
|
||||
warn() { echo "[WARN] $*"; }
|
||||
err() { echo "[ERROR] $*" >&2; }
|
||||
|
||||
need_cmd() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
compose() {
|
||||
if docker compose version >/dev/null 2>&1; then
|
||||
docker compose "$@"
|
||||
elif need_cmd docker-compose; then
|
||||
docker-compose "$@"
|
||||
else
|
||||
err "未找到 docker compose / docker-compose"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
require_root_for_docker_install() {
|
||||
if [[ "${EUID}" -ne 0 ]]; then
|
||||
if need_cmd sudo; then
|
||||
SUDO="sudo"
|
||||
else
|
||||
err "需要 root 权限安装 Docker,请用 root 运行或安装 sudo"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
SUDO=""
|
||||
fi
|
||||
}
|
||||
|
||||
install_docker_ubuntu() {
|
||||
require_root_for_docker_install
|
||||
log "检测到未安装 Docker,开始在 Ubuntu 上安装..."
|
||||
|
||||
$SUDO apt-get update -y
|
||||
$SUDO apt-get install -y ca-certificates curl gnupg lsb-release
|
||||
|
||||
if [[ ! -f /etc/apt/keyrings/docker.gpg ]]; then
|
||||
$SUDO install -m 0755 -d /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | $SUDO gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
$SUDO chmod a+r /etc/apt/keyrings/docker.gpg
|
||||
fi
|
||||
|
||||
local codename
|
||||
codename="$(. /etc/os-release && echo "${VERSION_CODENAME:-$UBUNTU_CODENAME}")"
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu ${codename} stable" \
|
||||
| $SUDO tee /etc/apt/sources.list.d/docker.list >/dev/null
|
||||
|
||||
$SUDO apt-get update -y
|
||||
$SUDO apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
|
||||
$SUDO systemctl enable --now docker
|
||||
ok "Docker 安装完成"
|
||||
}
|
||||
|
||||
ensure_docker() {
|
||||
if need_cmd docker && docker info >/dev/null 2>&1; then
|
||||
ok "Docker 可用"
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ "${SKIP_DOCKER_INSTALL:-0}" == "1" ]]; then
|
||||
err "Docker 不可用,且设置了 SKIP_DOCKER_INSTALL=1"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -f /etc/os-release ]]; then
|
||||
# shellcheck disable=SC1091
|
||||
. /etc/os-release
|
||||
if [[ "${ID:-}" == "ubuntu" || "${ID_LIKE:-}" == *"ubuntu"* || "${ID_LIKE:-}" == *"debian"* ]]; then
|
||||
install_docker_ubuntu
|
||||
else
|
||||
err "当前系统不是 Ubuntu/Debian,请先手动安装 Docker 后再运行本脚本"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
err "无法识别操作系统,请先手动安装 Docker"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! docker info >/dev/null 2>&1; then
|
||||
warn "当前用户可能无 Docker 权限,尝试使用 sudo..."
|
||||
if need_cmd sudo && sudo docker info >/dev/null 2>&1; then
|
||||
DOCKER_PREFIX="sudo"
|
||||
else
|
||||
err "Docker 已安装但当前用户无权限。请执行: sudo usermod -aG docker \$USER 后重新登录"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
DOCKER_PREFIX=""
|
||||
run_compose() {
|
||||
if [[ -n "${DOCKER_PREFIX}" ]]; then
|
||||
$DOCKER_PREFIX docker compose "$@" 2>/dev/null || $DOCKER_PREFIX docker-compose "$@"
|
||||
else
|
||||
compose "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
echo "========================================="
|
||||
echo " WordCloud Ubuntu 一键部署"
|
||||
echo " 目录: $ROOT_DIR"
|
||||
echo "========================================="
|
||||
|
||||
if [[ ! -f "$ROOT_DIR/docker-compose.yml" ]]; then
|
||||
err "未找到 docker-compose.yml,请在 release 包根目录执行本脚本"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ensure_docker
|
||||
|
||||
log "构建并启动服务(首次会编译 C++ 扩展与前端,可能需要几分钟)..."
|
||||
if [[ "${NO_BUILD:-0}" == "1" ]]; then
|
||||
run_compose up -d
|
||||
else
|
||||
run_compose up -d --build
|
||||
fi
|
||||
|
||||
ok "服务已启动"
|
||||
echo ""
|
||||
echo "访问地址:"
|
||||
echo " 前端: http://<服务器IP>:3000"
|
||||
echo " 后端文档: http://<服务器IP>:8000/docs"
|
||||
echo " 健康检查: http://<服务器IP>:8000/api/health"
|
||||
echo ""
|
||||
echo "常用命令:"
|
||||
echo " make logs # 查看日志"
|
||||
echo " make down # 停止服务"
|
||||
echo " make restart # 重启服务"
|
||||
echo " ./install-ubuntu.sh # 再次执行可重建并启动"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user