当前位置: 首页 > article >正文

Ubuntu 24.04 LTS 通过 docker desktop 安装 seafile 搭建个人网盘

准备

  • Ubuntu 24.04 LTS
  • Ubuntu 空闲硬盘挂载
  • Ubuntu 安装 Docker Desktop

[我的Ubuntu服务器折腾集](https://blog.csdn.net/jh1513/article/details/145222679。

安装 seafile

参考资料

  • Docker安装 Seafile + OnlyOffice 并配置OnlyOffice到Seafile,实现在线编辑功能
  • 官方教程 用 Docker 部署 Seafile 服务
  • 使用docker安装seafile 解决了seafile安装好后不能上传文件的问题

在外置硬盘上准备seafile文件夹

外置硬盘被挂在到 /media/mydisk了,在上面穿件文件夹 seafile,在 seafile 文件夹下创建 seafile-data 和 seafile-mysql 文件夹

cd /media/mydisk
mkdir seafile
cd seafile
mkdir seafile-data     # 我配置的Seafile数据持久化目录是 /data/seafile-data
mkdir seafile-mysql    # 我配置的MySQL数据持久化目录是 /data/seafile-mysql/db

下载 docker-compose.yml 文件

这个参考博文 使用 wget 下载 docker-compose.yml 文件,我发现下载下来的名字不对,直接在 Ubuntu 图形界面通过Firefox浏览器根据官方教程提供的下载链接把 11.0 版本的 docker-compose.yml 文件下载到本地。然后把这个文件拷贝进前面创建的文件夹 seafile-data 中。

docker-compose.yml 文件解析

需要修改的地方:

  • /opt/seafile-mysql/db:/var/lib/mysql # 指定宿主机路径 /opt/seafile-mysql/db 持久化 MySQL 数据,这里改为创建的 seafile-mysql/db
  • /opt/seafile-data:/shared # 指定宿主机路径 /opt/seafile-data 用于存储 Seafile 数据,改为创建的 seafile-data
  • 端口映射 “80:80” # 将宿主机的 80 端口映射到容器的 80 端口(HTTP)
  • DB_ROOT_PASSWD=db_dev # 设置数据库 root 用户的密码,必须与 db 服务中的密码一致
  • SEAFILE_ADMIN_EMAIL=me@example.com # 设置 Seafile 管理员的电子邮件地址
  • SEAFILE_ADMIN_PASSWORD=asecret # 设置 Seafile 管理员的密码
    后续登录 seafile需要用到上面设置好的用户名 me@example.com,密码:asecret
services:  # 定义服务(容器)部分
  db:  # 数据库服务
    image: mariadb:10.11               # 使用 MariaDB 10.11 版本的镜像
    container_name: seafile-mysql      # 容器名称为 seafile-mysql
    environment:  # 设置环境变量
      - MYSQL_ROOT_PASSWORD=db_dev     # 设置 MySQL root 用户的密码,默认为 db_dev============
      - MYSQL_LOG_CONSOLE=true         # 启用控制台日志输出
      - MARIADB_AUTO_UPGRADE=1         # 启用 MariaDB 自动升级功能
    volumes:  # 挂载数据卷,用于持久化存储
      - /opt/seafile-mysql/db:/var/lib/mysql  # 指定宿主机路径 /opt/seafile-mysql/db 持久化 MySQL 数据============
    networks:  # 定义服务所连接的网络
      - seafile-net                     # 连接到 seafile-net 网络

  memcached:  # 缓存服务
    image: memcached:1.6.18            # 使用 Memcached 1.6.18 版本的镜像
    container_name: seafile-memcached  # 容器名称为 seafile-memcached
    entrypoint: memcached -m 256      # 设置 Memcached 启动时的命令,指定内存大小为 256MB
    networks:  # 定义服务所连接的网络
      - seafile-net                    # 连接到 seafile-net 网络
          
  seafile:  # Seafile 主服务
    image: seafileltd/seafile-mc:11.0-latest  # 使用 Seafile 官方提供的最新版本镜像
    container_name: seafile             # 容器名称为 seafile
    ports:  # 映射端口
      - "80:80"                        # 将宿主机的 80 端口映射到容器的 80 端口(HTTP)============
#      - "443:443"                      # 如果启用了 HTTPS,可以取消注释该行来映射 443 端口
    volumes:  # 挂载数据卷,用于持久化存储
      - /opt/seafile-data:/shared       # 指定宿主机路径 /opt/seafile-data 用于存储 Seafile 数据============
    environment:  # 设置环境变量
      - DB_HOST=db                      # 指定 MySQL 数据库主机为 db(即上面的 db 服务)
      - DB_ROOT_PASSWD=db_dev           # 设置数据库 root 用户的密码,必须与 db 服务中的密码一致
      - TIME_ZONE=Asia/Shanghai         # 设置时区为上海时区(可选,默认为 UTC)
      - SEAFILE_ADMIN_EMAIL=me@example.com  # 设置 Seafile 管理员的电子邮件地址============
      - SEAFILE_ADMIN_PASSWORD=asecret  # 设置 Seafile 管理员的密码============
      - SEAFILE_SERVER_LETSENCRYPT=false # 是否使用 Let's Encrypt 来生成证书(false 表示不使用)
      - SEAFILE_SERVER_HOSTNAME=seafile.example.com  # 设置 Seafile 服务器的主机名
    depends_on:  # 依赖的服务
      - db                                  # 依赖数据库服务 db
      - memcached                           # 依赖缓存服务 memcached
    networks:  # 定义服务所连接的网络
      - seafile-net                        # 连接到 seafile-net 网络

networks:  # 网络定义部分
  seafile-net:  # 定义名为 seafile-net 的网络

在 Docker Desktop 中配置共享路径

在 Docker Desktop 中,特别是运行在 Ubuntu 上时,你需要配置共享文件夹路径,使得 Docker 能够访问宿主机上的某些路径。

  • 打开 docker desktop
  • 点击右上角设置
  • 左侧列表找到 resources -> file sharing
  • 右侧出现内容底部有 “virtual file shares”,其中有 browse 添加我外置硬盘上seafile路径 /media/mydisk/seafile

如果没有这么设置,在运行安装代码 docker compose up -d时会报错。

Error response from daemon: Mounts denied:
The path /media/mydisk/seafile/seafile-mysql/db is not shared from the host and is not known to Docker.
You can configure shared paths from Docker -> Preferences… -> Resources -> File Sharing.
See https://docs.docker.com/ for more info.

安装

在 docker-compose.yml 文件所在文件夹下运行docker compose up -d,等带进度条完成即可。

cd seafile-data
docker compose up -d

开机启动

基于Docker 部署 Seafile服务搭建提供了怎么设置seafile开机启动,但是我没有尝试成功。

开机启动 docker

查看 docker 是不是开机启动

sudo systemctl is-enabled docker

开机启动 docker

sudo systemctl enable docker
开机启动 container

参考

  • Docker开机自启动与容器自动重启设置指南
  • docker设置开机启动 docker设置容器开机自启

查看 container是不是在运行

docker ps -a

在这里插入图片描述
图片中可以看出,seafile 需要运行的 container 有:

  1. seafile
  2. seafile-mysql
  3. seafile-memcached
不在运行的container

对于不在运行的感觉要,要创建一个名为“my-container”的容器,并设置其为“always”重启策略,您可以使用以下命令:

docker run -d --restart=always --name my-container <image_name>
已经在运行的container

对于已经运行的容器,可以使用docker update命令来修改容器的重启策略。运行以下命令来更新容器的重启策略为“always”:

docker update --restart=always <container_id_or_name>

最开始,我重启 ubuntu 发现 container 没重启,所以进入ubuntu后我需要重启 container 再调用 docker update 命令,因为我不会处理上面不在运行的 container 情况。

启动停止的 container 命令

docker start <container_id_or_name>

可选操作

  1. 增加一个新的管理员
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh

登录 和 配置

浏览器输出 Ubuntu IP地址可以打开 seafile

按下图配置,不然文件无法上传,但可以创建文件夹。参考使用docker安装seafile 。
在这里插入图片描述

多域名访问

安装tailscale参考Ubuntu 24.04 LTS 安装 tailscale 并访问 SMB共享文件夹。我可以通过 tailscale IP 和本地Ubuntu IP 访问。但是,上图 SERICE_ROOT_URL和FILE_SERVER_ROOT只能填一个ip,所以我 Tailscale IP不能上传文件,参考怎么让seafile使用多域名访问.

期待有人能提供帮助与教程。

完美解决 seafile FILE_SERVER_ROOT 配置导致的内网外网不能同时访问和上传下载的问题,这篇博文使用了域名来实现内外访问。

我的解决办法:没有公网IP实现seafile本地IP访问和虚拟局域网IP同时访问和上传文件

修改端口号

参考外网上传下载和文件在线预览问题。

在 docker-compose.yml 文件中可以修改端口号。

    ports:  # 映射端口
      - "8080:80"                        # 将宿主机的 8080 端口映射到容器的 80 端口(HTTP)============
#      - "443:443"                      # 如果启用了 HTTPS,可以取消注释该行来映射 443 端口

修改 seahub_settings.py 文件,先查找它

sudo find / -name seahub_settings.py 2>/dev/null

得到 /media/mydisk/seafile/seafile-data/seafile/conf/seahub_settings.py。接着打开该文件

sudo vim ./???/conf/seahub_settings.py

主要修改

FILE_SERVER_ROOT = "http://192.168.XXX.XXX:80800/seafhttp"
SERVICE_URL = "http://192.168.XXX.XXX:8080"

完整如下

# -*- coding: utf-8 -*-
SECRET_KEY = "=!w0hvf=ja=gw*)bigf-=c$h%ut(2)*0sfcsx6sg(9^x6kbfdn"
SERVICE_URL = "http://192.168.XXX.XXX:8080"

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'seahub_db',
        'USER': 'seafile',
        'PASSWORD': '1f686687-064d-49e2-adc8-ad437da54856',
        'HOST': 'db',
        'PORT': '3306',
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}


CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': 'memcached:11211',
    },
    'locmem': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    },
}
COMPRESS_CACHE_BACKEND = 'locmem'
TIME_ZONE = 'Asia/Shanghai'
FILE_SERVER_ROOT = "http://192.168.XXX.XXX:80800/seafhttp"

最后重启。

https 访问

使用 Docker 部署 Seafile 文件管理系统


http://www.kler.cn/a/516471.html

相关文章:

  • 激光线扫相机无2D图像的标定方案
  • 【2025小年源码免费送】
  • 后端的config包中的常用配置
  • 15-spring整合mybatis方式一
  • 关于CAN(FD)转以太网详细介绍
  • uniapp+Vue3(<script setup lang=“ts“>)模拟12306城市左右切换动画效果
  • 分词器的词表大小以及如果分词器的词表比模型的词表大,那么模型的嵌入矩阵需要被调整以适应新的词表大小。
  • MySQL命令及用法(精华版)
  • 接口 V2 完善:基于责任链模式、Canal 监听 Binlog 实现数据库、缓存的库存最终一致性
  • 2024 行远自迩,笃行不怠
  • Geek Uninstaller,绿色免安装轻量的应用卸载工具!
  • 微软预测 AI 2025,AI Agents 重塑工作形式
  • 细节增强卷积DEConv详解及代码复现
  • 基于java的客户信息管理系统
  • Kafka面试题----Kafka中的Producer、Broker、Consumer以及Topic的概念
  • Python 快速下载依赖
  • 激光三角测量法精度计算
  • 为AI聊天工具添加一个知识系统 之65 详细设计 之6 变形机器人及伺服跟随
  • 单片机-STM32 IIC通信(OLED屏幕)(十一)
  • python-leetcode-随机链表的复制
  • 编写0号中断的处理程序
  • 【博客之星】年度总结:在云影与墨香中探寻成长的足迹
  • 牛客周赛 Round 77 A-C
  • 设计新的 Kibana 仪表板布局以支持可折叠部分等
  • Redis面试题每日20道【其二】
  • C语言二级