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 数据
- /opt/seafile-data:/shared # 指定宿主机路径 /opt/seafile-data 用于存储 Seafile 数据
- 端口映射 “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-mysqlenvironment: # 设置环境变量- 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-memcachedentrypoint: memcached -m 256 # 设置 Memcached 启动时的命令,指定内存大小为 256MBnetworks: # 定义服务所连接的网络- seafile-net # 连接到 seafile-net 网络seafile: # Seafile 主服务image: seafileltd/seafile-mc:11.0-latest # 使用 Seafile 官方提供的最新版本镜像container_name: seafile # 容器名称为 seafileports: # 映射端口- "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 # 依赖缓存服务 memcachednetworks: # 定义服务所连接的网络- 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 is-enabled docker
开机启动 container
参考
- Docker开机自启动与容器自动重启设置指南
- docker设置开机启动 docker设置容器开机自启
查看 container是不是在运行
docker ps -a

图片中可以看出,seafile 需要运行的 container 有:
- seafile
- seafile-mysql
- 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>
可选操作
- 增加一个新的管理员
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同时访问和上传文件
相关文章:
Ubuntu 24.04 LTS 通过 docker desktop 安装 seafile 搭建个人网盘
准备 Ubuntu 24.04 LTSUbuntu 空闲硬盘挂载Ubuntu 安装 Docker Desktop [我的Ubuntu服务器折腾集](https://blog.csdn.net/jh1513/article/details/145222679。 安装 seafile 参考资料 Docker安装 Seafile OnlyOffice 并配置OnlyOffice到Seafile,实现在线编辑…...
Open3D 最小二乘拟合平面(直接求解法)【2025最新版】
目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 博客长期更新,本文最近更新时间为:2025年1月18日。 一、算法原理 平面方程的一般表达式为:...
【CC2640R2F】香瓜CC2640R2F之SPI读写W25Q80
本文最后修改时间:2022年01月08日 10:45 一、本节简介 本节以simple_peripheral工程为例,介绍如何使用SPI读写W25Q80(外部flash)。 二、实验平台 1)CC2640R2F平台 ①协议栈版本:CC2640R2 SDK v1.40.00.4…...
探秘Shortest与Stagehand:开启高效测试与自动化新篇
探秘Shortest与Stagehand:开启高效测试与自动化新篇 在数字化浪潮的推动下,网页自动化工具如同繁星般涌现,为众多行业带来了效率的变革。在这些工具中,Shortest和Stagehand凭借其出色的表现,成为了众多开发者、测试人…...
llama 3 笔记
0.简介 llama 3 是在 15 万亿个 Token 上预训练的语言模型,具有 8B 和 70B 两种参数规模,可以支持广泛的用户场景,在各种行业基准上取得了最先进的性能,并提供了一些新功能,包括改进的推理能力。 1.改进亮点 参数规模与模型架构:Llama 3提供了8B和70B两种参数规模的模…...
写作利器:如何用 PicGo + GitHub 图床提高创作效率
你好呀,欢迎来到 Dong雨 的技术小栈 🌱 在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。 👉 我的小世界:Dong雨 📌 分享我的学习旅程 🛠️ 提供贴心的实用工具 💡 记…...
【文件篇】11.磁盘文件系统
上一篇博客中我们介绍到如果我们要访问文件首先需要打开这个文件,而文件是在磁盘上存储的,也就是说需要在磁盘上找到这个文件的路径。但是磁盘上有很多文件,这些文件都有自己的路径的,这些文件还有内容和属性,它们都是…...
嵌入式产品级-超小尺寸热成像相机(从0到1 硬件-软件-外壳)
Thermal_Imaging_Camera This is a small thermal imaging camera that includes everything from hardware and software. 小尺寸热成像相机-Pico-LVGL-RTOS 基于RP2040 Pico主控与RTOS,榨干双核性能实现LVGL和成图任务并行。ST7789驱动240280屏,CST8…...
三维扫描赋能文化:蔡司3D扫描仪让木质文化遗产焕发新生-沪敖3D
挪威文化历史博物馆在其修复工作中融入现代3D扫描技术,让数百年的历史焕发新生。 文化历史博物馆的工作 文化历史博物馆是奥斯陆大学的一个院系。凭借其在文化历史管理、研究和传播方面的丰富专业知识,该博物馆被誉为挪威博物馆研究领域的领先机构。馆…...
《自动驾驶与机器人中的SLAM技术》ch8:基于预积分和图优化的紧耦合 LIO 系统
目录 1 预积分 LIO 系统的经验 2 预积分图优化的顶点 3 预积分图优化的边 3.1 NDT 残差边(观测值维度为 3 维的单元边) 4 基于预积分和图优化 LIO 系统的实现 4.1 IMU 静止初始化 4.2 使用预积分预测 4.3 使用 IMU 预测位姿进行运动补偿 4.4 位姿配准部…...
Linux下PostgreSQL-12.0安装部署详细步骤
一、安装环境 postgresql-12.0 CentOS-7.6 注意:确认linux系统可以正常连接网络,因为在后面需要添加依赖包。 二、pg数据库安装包下载 下载地址:PostgreSQL: File Browser 选择要安装的版本进行下载: 三、安装依赖包 在要安…...
STL—stack与queue
目录 Stack stack的使用 stack的模拟实现 queue queue的使用 queue的模拟实现 priority_queue priority_queue的用法 priority_queue的模拟实现 容器适配器 种类 Stack http://www.cplusplus.com/reference/stack/stack/?kwstack stack是栈,后入先出 stack的…...
docker 使用远程镜像启动一个容器
使用前提: 首先你得安装docker,其次你得拥有一个远程镜像 docker run --name io_11281009 --rm -it -p 2233:22 -v .:/root/py -e ed25519_rootAAAAC3NzaC1lZDI1********Oy7zR7l7aUniR2rul ghcr.lizzie.fun/fj0r/io srv对上述命令解释: 1.docker run:…...
简述mysql 主从复制原理及其工作过程,配置一主两从并验证
第一种基于binlog的主从同步 首先对主库进行配置: [rootopenEuler-1 ~]# vim /etc/my.cnf 启动服务 [rootopenEuler-1 ~]# systemctl enable --now mysqld 主库的配置 从库的配置 第一个从库 [rootopenEuler-1 ~]# vim /etc/my.cnf [rootopenEuler-1 ~]# sys…...
oracle之行转列
对于Oracle的行转列功能一直云里雾里,马马虎虎,对行转列的使用场景和使用方法都不够深刻,最近有空理解一下。 Oracle 11g后有专门的函数pivot,对于特定的场景可以直接套用。 需求:求各份job不同员工工资是多少…...
Windows电脑安装USB Redirector并实现内外网跨网USB共享通信访问
文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 我们每天都在与各种智能设备打交道,从手机到电脑,再到各种外设,它们已经…...
kafka学习笔记4-TLS加密 —— 筑梦之路
1. 准备证书文件 mkdir /opt/kafka/pkicd !$# 生成CA证书 openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout ca.key -out ca.crt -subj "/CNKafka-CA"# 生成私钥 openssl genrsa -out kafka.key 4096# 生成证书签名请求 (CSR) openssl req -new -key …...
grafana + Prometheus + node_exporter搭建监控大屏
本文介绍生产系统监控大屏的搭建,比较实用也是实际应用比较多的方式,希望能够帮助大家对监控系统有一定的认识。 0、规划 grafana主要是展示和报警,Prometheus用于保存监控数据,node_exporter用于实时采集各个应用服务器的事实状…...
深度学习在语音识别中的应用
引言 语音识别技术是人工智能领域中的一个重要分支,它使得机器能够理解和转换人类的语音为文本。深度学习的出现极大地推动了语音识别技术的发展。本文将介绍如何使用深度学习构建一个基本的语音识别系统,并提供一个实践案例。 环境准备 在开始之前&a…...
RabbitMQ 高级特性
目录 1.消息确认 1.1 消息确认机制 1.2 手动确认方法 1. 2.1肯定确认 1.2.2 否定确认 1.3 SpringBoot 代码示例 1.3.1 配置确认机制 1.3.2 配置队列,交换机,绑定关系 1.3.3 生产者(向 rabbitmq 发送消息) 1.3.4 消费者(消费队列中的信息) 2.持久性 2.1 交换机…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...
「Java基本语法」变量的使用
变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...
