魔百盒 私有网盘seafile搭建

先挂载硬盘,半自动挂载

复制代码
nano semi_auto_mount.sh

粘贴代码

复制代码
#!/bin/bash
set -e

echo "=== 半自动硬盘挂载工具(支持格式化为 ext4 + 永久挂载 fstab) ==="

# 安装文件系统工具
apt update -y
apt install -y ntfs-3g exfat-fuse exfatprogs e2fsprogs

echo
echo ">> 正在扫描未挂载磁盘..."

# 搜索未挂载分区
UNMOUNTED=$(lsblk -lnpo NAME,TYPE | grep "part" | awk '{print $1}' | while read P; do
    if ! mount | grep -q "$P"; then
        echo "$P"
    fi
done)

if [ -z "$UNMOUNTED" ]; then
    echo "没有找到未挂载的分区,退出。"
    exit 0
fi

echo "找到以下未挂载分区:"
echo "---------------------------------"
echo "$UNMOUNTED"
echo "---------------------------------"
echo

read -p "请输入要挂载的分区(例如 /dev/sda1): " PART

if [ ! -b "$PART" ]; then
    echo "错误:分区不存在 $PART"
    exit 1
fi

# 检查是否已挂载
if mount | grep -q "$PART"; then
    echo "分区 $PART 已挂载,请先卸载。"
    exit 1
fi

# 获取文件系统类型
FSTYPE=$(blkid -o value -s TYPE "$PART")

echo "检测到文件系统:${FSTYPE:-无(可能是空盘)}"

# 询问是否格式化为 ext4
read -p "是否将 $PART 格式化为 ext4?(y/N):" FM

if [[ "$FM" == "y" || "$FM" == "Y" ]]; then
    echo
    echo "⚠ 警告:将要格式化 $PART,所有数据会被删除!"
    read -p "再次确认格式化?输入 YES 才继续:" CONFIRM

    if [ "$CONFIRM" != "YES" ]; then
        echo "已取消格式化。"
    else
        echo ">> 正在格式化 $PART 为 ext4 ..."
        mkfs.ext4 -F "$PART"
        FSTYPE="ext4"
        echo ">> 格式化完成。"
    fi
fi

# 确保文件系统类型存在
if [ -z "$FSTYPE" ]; then
    echo "无法识别文件系统,请格式化后再挂载。"
    exit 1
fi

# 输入挂载目录名
read -p "请输入挂载目录名称(如 data): " DIRNAME
MOUNT_POINT="/mnt/$DIRNAME"

mkdir -p "$MOUNT_POINT"

echo
echo ">> 正在挂载 $PART 到 $MOUNT_POINT"

case "$FSTYPE" in
    ntfs)
        mount -t ntfs-3g "$PART" "$MOUNT_POINT"
        ;;
    exfat)
        mount -t exfat "$PART" "$MOUNT_POINT"
        ;;
    ext4|ext3|ext2|xfs|btrfs)
        mount "$PART" "$MOUNT_POINT"
        ;;
    *)
        echo "不支持的文件系统:$FSTYPE"
        exit 1
        ;;
esac

echo ">> 挂载成功!"

# 写入 fstab
if ! grep -q "$PART" /etc/fstab; then
    echo "$PART  $MOUNT_POINT  $FSTYPE  defaults  0  0" >> /etc/fstab
    echo ">> 已写入 /etc/fstab(永久自动挂载)"
else
    echo ">> fstab 已存在该分区记录,跳过写入"
fi

echo
echo "===================================================="
echo "挂载完成!"
echo "分区:$PART"
echo "挂载到:$MOUNT_POINT"
echo "文件系统:$FSTYPE"
echo "永久挂载:已写入 /etc/fstab"
echo "===================================================="

给权限运行

复制代码
chmod 777 semi_auto_mount.sh

./semi_auto_mount.sh

然后修改yml中路径为实际挂载的路径 ,创建软连接

复制代码
rm -rf /opt/seafile/seafile-data
ln -s /mnt/seafile-data /opt/seafile/seafile-data

1.创建sh脚本,自动安装

复制代码
nano seafile_install.sh

2.粘贴脚本

复制代码
#!/bin/bash
set -e

echo "=== Seafile Docker 一键安装脚本(Armbian ARM64) ==="

# ------------------------------
# 1. 检查 root
# ------------------------------
if [ "$EUID" -ne 0 ]; then
    echo "请用 root 运行: sudo bash $0"
    exit 1
fi

# ------------------------------
# 2. 检查 Docker
# ------------------------------
if command -v docker >/dev/null 2>&1; then
    echo ">> Docker 已安装,跳过安装。"
else
    echo ">> 未检测到 Docker,正在安装..."
    curl -fsSL https://get.docker.com | bash
    systemctl enable docker
    systemctl start docker
fi

# ------------------------------
# 3. 检查 Docker Compose
# ------------------------------
if docker compose version >/dev/null 2>&1; then
    echo ">> Docker Compose 已安装,跳过。"
else
    echo ">> 未检测到 Docker Compose,正在安装..."
    mkdir -p /usr/local/lib/docker/cli-plugins
    curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-aarch64 \
         -o /usr/local/lib/docker/cli-plugins/docker-compose
    chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
fi

# ------------------------------
# 4. 停止宿主机 Nginx(避免端口冲突)
# ------------------------------
if systemctl is-active --quiet nginx; then
    echo ">> 检测到宿主机 Nginx,正在停止..."
    systemctl stop nginx
    systemctl disable nginx
fi

# ------------------------------
# 5. 创建 Seafile 数据目录
# ------------------------------
echo ">> 创建 Seafile 数据目录..."
mkdir -p /opt/seafile/seafile-data
cd /opt/seafile

# ------------------------------
# 6. 自动获取局域网 IP
# ------------------------------
LOCAL_IP=$(hostname -I | awk '{print $1}')
echo ">> 检测到局域网 IP:$LOCAL_IP"

# ------------------------------
# 7. 生成随机管理员密码
# ------------------------------
ADMIN_PASS=$(openssl rand -base64 12)
echo ">> 生成管理员密码:$ADMIN_PASS"

# ------------------------------
# 8. 写入 docker-compose.yml
# ------------------------------
echo ">> 生成 docker-compose.yml..."

cat > docker-compose.yml <<EOF
version: '3.8'
services:
  db:
    image: mariadb:10.11
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=seafile_root
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - ./seafile-data/db:/var/lib/mysql
    restart: always

  memcached:
    image: memcached:1.6
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    restart: always

  seafile:
    image: seafileltd/seafile-mc-arm64:10.0.1
    container_name: seafile
    ports:
      - "80:80"
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=seafile_root
      - SEAFILE_SERVER_HOSTNAME=$LOCAL_IP
      - SEAFILE_ADMIN_EMAIL=admin@example.com
      - SEAFILE_ADMIN_PASSWORD=$ADMIN_PASS
    volumes:
      - ./seafile-data:/shared
    depends_on:
      - db
      - memcached
    restart: always
EOF

# ------------------------------
# 9. 启动 Seafile
# ------------------------------
echo ">> 启动 Seafile..."
docker compose up -d

echo
echo "===================================================="
echo "Seafile 安装完成!"
echo "访问地址: http://$LOCAL_IP/"
echo "初始管理员账号:admin@example.com"
echo "初始管理员密码:$ADMIN_PASS"
echo "数据目录:/opt/seafile/seafile-data"
echo "===================================================="

3.给权限

复制代码
chmod +x seafile_install.sh

4.运行

复制代码
sudo bash seafile_install.sh

5.compose armbian安装失败手动从GitHub拉一个安装,环境变量是临时代理

复制代码
#1️⃣ 临时环境变量(推荐)
#在同一个终端里执行:

export http_proxy="http://192.168.8.209:7897"
export https_proxy="http://192.168.8.209:7897"
export HTTP_PROXY=$http_proxy
export HTTPS_PROXY=$https_proxy


#然后直接下载:

# Docker Compose
mkdir -p /usr/local/lib/docker/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-aarch64 \
     -o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose

# 测试
docker compose version

重新运行一键脚本,用于失败清除容器

复制代码
地址:http://192.168.8.201/

管理员账号:admin@example.com

密码:seafile123

数据目录:/opt/seafile/seafile-data(宿主机上持久化数据)

一键清空脚本

复制代码
nano seafile_uninstall.sh

粘贴脚本

复制代码
#!/bin/bash
set -e

echo "=== Seafile Docker 一键卸载清理脚本 ==="

# ------------------------------
# 1. 停止并删除 Seafile 容器
# ------------------------------
echo ">> 停止 Seafile 相关容器..."
docker stop seafile seafile-mysql seafile-memcached 2>/dev/null || true
docker rm seafile seafile-mysql seafile-memcached 2>/dev/null || true

# ------------------------------
# 2. 删除 Seafile Docker 网络(如果有的话)
# ------------------------------
echo ">> 删除 Seafile Docker 网络(如果存在)..."
docker network rm seafile_default 2>/dev/null || true

# ------------------------------
# 3. 删除 Seafile 数据目录
# ------------------------------
if [ -d /opt/seafile ]; then
    echo ">> 删除 Seafile 数据目录 /opt/seafile ..."
    rm -rf /opt/seafile
fi

# ------------------------------
# 4. 可选:卸载 Docker Compose
# ------------------------------
#if [ -f /usr/local/lib/docker/cli-plugins/docker-compose ]; then
 #   echo ">> 删除 Docker Compose..."
 #   rm -f /usr/local/lib/docker/cli-plugins/docker-compose
#fi

# ------------------------------
# 5. 可选:保留或卸载 Docker
# ------------------------------
# echo ">> 卸载 Docker(可选,如需保留,请注释掉下面行)"
# apt-get remove -y docker docker-engine docker.io containerd runc
# apt-get autoremove -y

echo
echo "===================================================="
echo "Seafile Docker 已卸载清理完成!"
echo "数据目录、容器、Compose 文件已删除。"
echo "如果希望卸载 Docker,请取消脚本中的相关注释。"
echo "===================================================="

给权限运行

复制代码
chmod +x seafile_uninstall.sh
sudo ./seafile_uninstall.sh

等待一会,访问即可

相关推荐
Joren的学习记录2 小时前
【Linux运维进阶知识】Nginx负载均衡
linux·运维·nginx
用户2190326527352 小时前
Java后端必须的Docker 部署 Redis 集群完整指南
linux·后端
专业开发者2 小时前
Wi-Fi®:可持续的优选连接方案
网络·物联网
胡先生不姓胡2 小时前
如何获取跨系统调用的函数调用栈
linux
GIS数据转换器3 小时前
综合安防数智管理平台
大数据·网络·人工智能·安全·无人机
Jtti3 小时前
服务器防御SYN Flood攻击的方法
运维·服务器
2501_941982053 小时前
RPA 的跨平台部署与统一自动化策略
运维·自动化·rpa
b***25113 小时前
电池自动分选机:精密分选保障新能源产业质量核心
运维·自动化·制造
数数科技的数据干货3 小时前
游戏流失分析:一套经实战检验的「流程化操作指南」
大数据·运维·人工智能·游戏
蒟蒻要翻身4 小时前
在同一局域网内共享打印机设置指南
运维