#!/bin/bash # 云盘后端服务用户级安装脚本(无需sudo权限) set -e # 配置变量 SERVICE_NAME="cloud-drive" INSTALL_DIR="$HOME/cloud-drive" LOG_DIR="$HOME/.local/share/cloud-drive/logs" UPLOAD_DIR="$HOME/.local/share/cloud-drive/uploads" echo "=== 云盘后端服务用户级安装脚本 ===" # 检查系统 if [ -f /etc/os-release ]; then . /etc/os-release echo "检测到系统: $NAME $VERSION" else echo "警告: 无法检测系统版本" fi # 创建安装目录 echo "创建安装目录..." mkdir -p "$INSTALL_DIR" mkdir -p "$LOG_DIR" mkdir -p "$UPLOAD_DIR" # 复制文件 echo "复制服务文件..." if [ -f "deploy/cloud-drive-server" ]; then cp deploy/cloud-drive-server "$INSTALL_DIR/" chmod +x "$INSTALL_DIR/cloud-drive-server" echo "✓ 复制可执行文件" else echo "错误: 未找到可执行文件,请先运行打包脚本" exit 1 fi if [ -f "deploy/.env.example" ]; then cp deploy/.env.example "$INSTALL_DIR/.env.example" echo "✓ 复制配置文件模板" fi # 创建启动脚本 echo "创建启动脚本..." cat > "$INSTALL_DIR/start.sh" << EOF #!/bin/bash # 云盘后端服务启动脚本(用户级) # 设置环境变量 export PYTHONPATH=\${PYTHONPATH}:$(dirname "$0") # 进入脚本所在目录 cd "\$(dirname "$0")" # 检查环境文件 if [ ! -f ".env" ]; then echo "警告: .env 文件不存在,将使用默认配置" if [ -f ".env.example" ]; then cp .env.example .env echo "已复制 .env.example 为 .env,请根据需要修改配置" fi fi # 启动服务 echo "启动云盘后端服务..." ./cloud-drive-server EOF chmod +x "$INSTALL_DIR/start.sh" echo "✓ 创建启动脚本" # 创建停止脚本 cat > "$INSTALL_DIR/stop.sh" << 'EOF' #!/bin/bash # 云盘后端服务停止脚本 echo "停止云盘后端服务..." pkill -f cloud-drive-server || echo "服务未运行" EOF chmod +x "$INSTALL_DIR/stop.sh" echo "✓ 创建停止脚本" # 创建状态检查脚本 cat > "$INSTALL_DIR/status.sh" << 'EOF' #!/bin/bash # 云盘后端服务状态检查脚本 if pgrep -f cloud-drive-server > /dev/null; then echo "云盘后端服务正在运行" echo "进程ID: $(pgrep -f cloud-drive-server)" echo "端口: 8000" else echo "云盘后端服务未运行" fi EOF chmod +x "$INSTALL_DIR/status.sh" echo "✓ 创建状态检查脚本" # 创建systemd用户服务文件(可选) echo "创建systemd用户服务文件..." mkdir -p "$HOME/.config/systemd/user" cat > "$HOME/.config/systemd/user/$SERVICE_NAME.service" << EOF [Unit] Description=Cloud Drive Backend Service (User) Documentation=https://github.com/your-repo/cloud-drive After=network.target [Service] Type=simple WorkingDirectory=$INSTALL_DIR ExecStart=$INSTALL_DIR/cloud-drive-server Restart=always RestartSec=10 StandardOutput=journal StandardError=journal SyslogIdentifier=cloud-drive [Install] WantedBy=default.target EOF echo "✓ 创建systemd用户服务文件" # 重载systemd用户服务 systemctl --user daemon-reload echo "✓ systemd用户服务已加载" # 提示配置 echo "" echo "=== 用户级安装完成 ===" echo "安装目录: $INSTALL_DIR" echo "日志目录: $LOG_DIR" echo "上传目录: $UPLOAD_DIR" echo "" echo "手动启动方式:" echo "1. 编辑配置文件: nano $INSTALL_DIR/.env" echo "2. 启动服务: $INSTALL_DIR/start.sh" echo "3. 查看状态: $INSTALL_DIR/status.sh" echo "4. 停止服务: $INSTALL_DIR/stop.sh" echo "" echo "systemd用户服务方式:" echo "1. 启用服务: systemctl --user enable $SERVICE_NAME" echo "2. 启动服务: systemctl --user start $SERVICE_NAME" echo "3. 查看状态: systemctl --user status $SERVICE_NAME" echo "4. 查看日志: journalctl --user -u $SERVICE_NAME -f" echo "" echo "服务将在以下地址提供API:" echo "- API文档: http://localhost:8000/docs" echo "- 健康检查: http://localhost:8000/api/v1/health" echo "" echo "注意: 如需绑定到特权端口(如80)或访问系统资源,请使用sudo运行install.sh"