先挂载硬盘,半自动挂载
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
等待一会,访问即可
