Initial release: cloud browser with auth and one-click deploy on port 32450
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# 云端浏览器一键部署脚本
|
||||
# 安装路径: /opt/cloud-browser
|
||||
# 运行用户: root
|
||||
# 默认端口: 32450
|
||||
# 默认账号: admin / admin
|
||||
#
|
||||
set -euo pipefail
|
||||
|
||||
INSTALL_DIR="/opt/cloud-browser"
|
||||
REPO_URL="https://git.bz121.com/dekun/cloud-browser.git"
|
||||
APP_PORT="32450"
|
||||
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
log() { echo -e "${GREEN}[INFO]${NC} $*"; }
|
||||
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||||
err() { echo -e "${RED}[ERROR]${NC} $*" >&2; }
|
||||
|
||||
if [[ "$(id -u)" -ne 0 ]]; then
|
||||
err "请使用 root 用户运行此脚本"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
install_docker() {
|
||||
if command -v docker &>/dev/null; then
|
||||
log "Docker 已安装: $(docker --version)"
|
||||
return
|
||||
fi
|
||||
warn "未检测到 Docker,正在安装..."
|
||||
curl -fsSL https://get.docker.com | sh
|
||||
systemctl enable docker
|
||||
systemctl start docker
|
||||
log "Docker 安装完成"
|
||||
}
|
||||
|
||||
install_compose() {
|
||||
if docker compose version &>/dev/null; then
|
||||
log "Docker Compose 已就绪"
|
||||
return
|
||||
fi
|
||||
err "Docker Compose 不可用,请手动安装后重试"
|
||||
exit 1
|
||||
}
|
||||
|
||||
clone_or_update() {
|
||||
if [[ -d "${INSTALL_DIR}/.git" ]]; then
|
||||
log "更新代码: ${INSTALL_DIR}"
|
||||
git -C "${INSTALL_DIR}" pull --rebase
|
||||
else
|
||||
log "克隆代码到 ${INSTALL_DIR}"
|
||||
mkdir -p "$(dirname "${INSTALL_DIR}")"
|
||||
git clone "${REPO_URL}" "${INSTALL_DIR}"
|
||||
fi
|
||||
}
|
||||
|
||||
setup_env() {
|
||||
cd "${INSTALL_DIR}"
|
||||
if [[ ! -f .env ]]; then
|
||||
cp .env.example .env
|
||||
log "已创建 .env 配置文件"
|
||||
fi
|
||||
mkdir -p data
|
||||
chmod 700 data
|
||||
}
|
||||
|
||||
start_service() {
|
||||
cd "${INSTALL_DIR}"
|
||||
log "构建并启动容器..."
|
||||
docker compose up -d --build
|
||||
}
|
||||
|
||||
wait_health() {
|
||||
local retries=30
|
||||
log "等待服务启动..."
|
||||
while [[ $retries -gt 0 ]]; do
|
||||
if curl -sf "http://127.0.0.1:${APP_PORT}/api/health" &>/dev/null; then
|
||||
log "服务已就绪"
|
||||
return 0
|
||||
fi
|
||||
retries=$((retries - 1))
|
||||
sleep 2
|
||||
done
|
||||
err "服务启动超时,请检查日志: docker compose -f ${INSTALL_DIR}/docker-compose.yml logs -f app"
|
||||
exit 1
|
||||
}
|
||||
|
||||
print_summary() {
|
||||
local ip
|
||||
ip=$(curl -s --max-time 3 ifconfig.me 2>/dev/null || hostname -I 2>/dev/null | awk '{print $1}' || echo "YOUR_SERVER_IP")
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo " 云端浏览器部署完成"
|
||||
echo "=========================================="
|
||||
echo " 访问地址: http://${ip}:${APP_PORT}"
|
||||
echo " 默认账号: admin"
|
||||
echo " 默认密码: admin"
|
||||
echo " 安装目录: ${INSTALL_DIR}"
|
||||
echo ""
|
||||
echo " 登录后请立即修改用户名和密码"
|
||||
echo " 反向代理请自行在宝塔/Nginx 中配置"
|
||||
echo ""
|
||||
echo " 常用命令:"
|
||||
echo " 查看日志: cd ${INSTALL_DIR} && docker compose logs -f app"
|
||||
echo " 重启服务: cd ${INSTALL_DIR} && docker compose restart"
|
||||
echo " 停止服务: cd ${INSTALL_DIR} && docker compose down"
|
||||
echo " 更新部署: bash ${INSTALL_DIR}/deploy.sh"
|
||||
echo "=========================================="
|
||||
}
|
||||
|
||||
main() {
|
||||
log "开始部署云端浏览器..."
|
||||
install_docker
|
||||
install_compose
|
||||
clone_or_update
|
||||
setup_env
|
||||
start_service
|
||||
wait_health
|
||||
print_summary
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user