118 lines
3.0 KiB
Bash
118 lines
3.0 KiB
Bash
#!/bin/bash
|
||
# 云盘后端服务安装脚本
|
||
|
||
set -e
|
||
|
||
# 配置变量
|
||
SERVICE_NAME="cloud-drive"
|
||
SERVICE_USER="cloud-drive"
|
||
INSTALL_DIR="/opt/cloud-drive"
|
||
SERVICE_FILE="cloud-drive.service"
|
||
|
||
echo "=== 云盘后端服务安装脚本 ==="
|
||
|
||
# 检查是否为root用户
|
||
if [ "$EUID" -ne 0 ]; then
|
||
echo "错误: 请使用root权限运行此脚本"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查系统
|
||
if [ -f /etc/os-release ]; then
|
||
. /etc/os-release
|
||
echo "检测到系统: $NAME $VERSION"
|
||
else
|
||
echo "警告: 无法检测系统版本"
|
||
fi
|
||
|
||
# 创建服务用户
|
||
echo "创建服务用户..."
|
||
if ! id "$SERVICE_USER" &>/dev/null; then
|
||
useradd -r -s /bin/false -d "$INSTALL_DIR" "$SERVICE_USER"
|
||
echo "✓ 创建用户 $SERVICE_USER"
|
||
else
|
||
echo "✓ 用户 $SERVICE_USER 已存在"
|
||
fi
|
||
|
||
# 创建安装目录
|
||
echo "创建安装目录..."
|
||
mkdir -p "$INSTALL_DIR"
|
||
mkdir -p "$INSTALL_DIR/logs"
|
||
mkdir -p "$INSTALL_DIR/uploads"
|
||
|
||
# 复制文件
|
||
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 "设置文件权限..."
|
||
chown -R "$SERVICE_USER:$SERVICE_USER" "$INSTALL_DIR"
|
||
chmod 755 "$INSTALL_DIR"
|
||
chmod 755 "$INSTALL_DIR/cloud-drive-server"
|
||
chmod 755 "$INSTALL_DIR/logs"
|
||
chmod 755 "$INSTALL_DIR/uploads"
|
||
|
||
# 安装systemd服务
|
||
echo "安装systemd服务..."
|
||
cp "$SERVICE_FILE" "/etc/systemd/system/"
|
||
systemctl daemon-reload
|
||
systemctl enable "$SERVICE_NAME"
|
||
echo "✓ 服务已安装并启用"
|
||
|
||
# 配置防火墙(如果存在)
|
||
echo "配置防火墙..."
|
||
if command -v firewall-cmd &> /dev/null; then
|
||
firewall-cmd --permanent --add-port=8000/tcp
|
||
firewall-cmd --reload
|
||
echo "✓ 防火墙配置完成 (firewalld)"
|
||
elif command -v ufw &> /dev/null; then
|
||
ufw allow 8000/tcp
|
||
echo "✓ 防火墙配置完成 (ufw)"
|
||
else
|
||
echo "注意: 未检测到防火墙管理工具,请手动开放8000端口"
|
||
fi
|
||
|
||
# 创建日志轮转配置
|
||
echo "配置日志轮转..."
|
||
cat > /etc/logrotate.d/cloud-drive << EOF
|
||
$INSTALL_DIR/logs/*.log {
|
||
daily
|
||
missingok
|
||
rotate 30
|
||
compress
|
||
delaycompress
|
||
notifempty
|
||
create 644 $SERVICE_USER $SERVICE_USER
|
||
postrotate
|
||
systemctl reload cloud-drive || true
|
||
endscript
|
||
}
|
||
EOF
|
||
echo "✓ 日志轮转配置完成"
|
||
|
||
# 提示配置
|
||
echo ""
|
||
echo "=== 安装完成 ==="
|
||
echo "安装目录: $INSTALL_DIR"
|
||
echo ""
|
||
echo "下一步操作:"
|
||
echo "1. 编辑配置文件: nano $INSTALL_DIR/.env"
|
||
echo "2. 启动服务: systemctl start $SERVICE_NAME"
|
||
echo "3. 查看状态: systemctl status $SERVICE_NAME"
|
||
echo "4. 查看日志: journalctl -u $SERVICE_NAME -f"
|
||
echo ""
|
||
echo "服务将在以下地址提供API:"
|
||
echo "- API文档: http://$(hostname -I | awk '{print $1}'):8000/docs"
|
||
echo "- 健康检查: http://$(hostname -I | awk '{print $1}'):8000/api/v1/health" |