魔百盒 私有网盘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

等待一会,访问即可

相关推荐
大树8810 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠10 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质10 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush410 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52010 小时前
Linux 11 动态监控指令top
linux
Inhand陈工11 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
网络研究院12 小时前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智12 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest12 小时前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
不会C语言的男孩12 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言