Files
full-stack-doc/backend/install_user.sh
2025-10-14 20:05:29 +08:00

154 lines
3.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"