前言
自之前的那篇静态文章 “Docker 安装 Seafile 私有云记录” 丢失后就一直搁置,这之间因为各种原因在服务器和本地都来回重装了几次,那么今天就简单来聊下这个私有云的搭建流程,也当做个记录了(@一下催更本文的Ying酱/滑稽)
私有云
一般来说,线上网盘用的最多的是百度云盘,不过限速的尿性大家都知道,然后其他比较良心的要不就没得赚开不了几天,要不就用户少直接没了,总之线上网盘市场早就被百度垄断了。那么后续就衍生出了私人 nas 存储系统,市面上常见的 nas 服务商有群晖(synology)威联通等,用户可以购买他们的硬件设备及硬盘后使用他们提供的 nas 软件存储服务,市场上是比较认可的。
另外还有一些比如坚果云,oneDrive、ownCloud、Syncthing、Seafile、Nextcloud 这类云储存服务商,提供付费计划及开发私有部署支持,这里我选的是 Seafile 作为私人网盘来使用。
Seafile
作为一款开源的企业云盘,首先 seafile 提供了各平台客户端(Windows, Mac, Linux, iOS, Android)以便在任意环境中搭建使用,而在云存储服务方面提供了文件实时同步、支持多人协同工作、以及类似微软 onedrive 的挂载盘等特性(更多特性查看官网:Seafile – 开源的企业私有网盘 私有云存储软件 企业维基 知识管理)
ok,切回正题。
搭建 Seafile 环境
在 seafile 官方文档 中,seafile可在 windows(已过时) Linux 环境下部署,建议在 linux 环境下搭建 seafile,但如果你像我一样有在 windows 下搭建 seafile 的需求,那么可以在 windows 下的 WSL(windows subsystem for linux)环境下进行搭建(此环境下需安装 docker desktop 客户端,详见:Windows Docker 安装)。因为我是在 wsl2 中使用 docker 进行搭建的,其他搭建环境请在 seafile 官方文档中查阅。
docker 部署
seafile 分为 社区开源版 及 付费专业版,选择需要的版本后再进行安装。首先安装 docker
代码语言:javascript复制# for CentOS
yum -y install docker
# for Ubuntu
apt-get install docker -y
设置开机自动启动
代码语言:javascript复制# for CentOS
systemctl start docker
systemctl enable docker
安装 docker-compose 管理依赖
代码语言:javascript复制# for CentOS
yum install docker-compose -y
# for Ubuntu
apt-get install docker-compose -y
下载并修改 docker-compose.yml
(此处演示 9.0 社区版,其他版本 yml 配置下载在 用Docker部署Seafile.md 文档中查阅)一般情况只需要修改 seafile 中的 ports
(seafile服务访问端口)、SEAFILE_ADMIN_EMAIL
(默认管理员邮箱)、SEAFILE_ADMIN_PASSWORD
(默认管理员密码)即可。
代码语言:javascript复制注意:如需搭建专业版,此处需提前注册 seafile 并在用户中心查看密码后通过
docker login docker.seadrive.org
登入 seafile 后使用 docker 选择并拉取最新专业版镜像:docker pull docker.seadrive.org/seafileltd/seafile-pro-mc:latest
version: '2.0'
services:
db:
image: mariadb:10.5
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=db_dev # Requested, set the root's password of MySQL service.
- MYSQL_LOG_CONSOLE=true
volumes:
- /opt/seafile-mysql/db:/var/lib/mysql # Requested, specifies the path to MySQL data persistent store.
networks:
- seafile-net
memcached:
image: memcached:1.6
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile-net
seafile:
image: seafileltd/seafile-mc:latest
container_name: seafile
ports:
- "9527:80" # 自定义 80 访问端口
# - "443:443" # If https is enabled, cancel the comment.
volumes:
- /opt/seafile-data:/shared # Requested, specifies the path to Seafile data persistent store.
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=db_dev # Requested, the value shuold be root's password of MySQL service.
# - TIME_ZONE=Asia/Shanghai # Optional, default is UTC. Should be uncomment and set to your local time zone.
- SEAFILE_ADMIN_EMAIL=me@example.com # Specifies Seafile admin user, default is 'me@example.com'.
- SEAFILE_ADMIN_PASSWORD=asecret # Specifies Seafile admin password, default is 'asecret'.
- SEAFILE_SERVER_LETSENCRYPT=false # Whether use letsencrypt to generate cert.
- SEAFILE_SERVER_HOSTNAME=seafile.example.com # Specifies your host name.
depends_on:
- db
- memcached
networks:
- seafile-net
networks:
seafile-net:
修改完 docker-compose.yml
配置文件后,将其放入需要安装 seafile 的文件夹路径中(此处为 /opt
)后启动 Seafile 服务:
代码语言:javascript复制注意 seafile 9.0 专业版 需要手动在宿主机上创建 elasticsearch 的映射路径,并且给 777 权限,否则 elasticsearch 启动会报路径权限问题:
mkdir -p /opt/seafile-elasticsearch/data && chmod 777 -R /opt/seafile-elasticsearch/data
(这个很坑,会导致 seafile 专业版搜索服务自动停止,需要多尝试几次)
cd /opt # 定位 docker-compose.yml 所在路径
docker-compose up -d # 启动 seafile 服务
此时,在浏览器中访问 localhost(或你的服务器外网域名) docker-compose.yml
配置文件中绑定的 80 端口即可访问 seafile 服务(默认管理员邮件及密码均在 docker-compose.yml
中),如果需要以域名方式访问服务,可以使用 nginx 反代()或配置本地路由ddns转发(tplink支持tpddns免费域名)
记得登录后在 系统管理 中设置
SERVICE_URL
及FILE_SERVER_ROOT
为实际域名路径,否则将影响文件上下载等问题。
到这里如果是搭建在云服务器上就已经搭建完成了,但如果用作本地 nas 存储则还需要在本地路由上将 seafile 配置文件中的端口转发到本机ip内外网端口上(如绑定端口9527,本机ip为192.168.0.108,则在路由上设置如下:
外部端口 | 内部端口 | IP地址 | 协议类型 |
---|---|---|---|
9527 | 9527 | 192.168.0.108 | ALL |
另外如需在内网环境下访问时速度最大化,需要路由器支持 端口回流(Nat Loopback) 功能,或做内网穿透)另外为防止开关机后本机 ip 变动,还需将本机 ip 与 mac 地址进行绑定(类似tp路由上的 IP与MAC绑定)
部署 onlyOffice
搭建完 seafile 服务后,如需使用 office 在线协同编辑功能,需要另外部署 onlyoffice 免费版,以下
代码语言:javascript复制docker pull onlyoffice/documentserver # 使用 docker 拉取 onlyoffice 镜像
# 安装 onlyoffice
cd /opt
mkdir seafile-onlyoffice
cd seafile-onlyoffice
mkdir log
mkdir data
mkdir lib
mkdir db
# 初始化 onlyoffice(默认8088端口,可选 -p 8088:443)
docker run -i -t -d -p 8088:80 --name onlyoffice --restart=always -v /opt/seafile-onlyoffice/log:/var/log/onlyoffice -v /opt/seafile-onlyoffice/data:/var/www/onlyoffice/Data -v /opt/seafile-onlyoffice/lib:/var/lib/onlyoffice -v /opt/seafile-onlyoffice/db:/var/lib/postgresql onlyoffice/documentserver
完成之后在浏览器输入 localhost 绑定端口(8088)
即可查看其是否正常运行,之后在 /opt/seafile-data/seafile/conf
中编辑 seahub_settings.py
配置文件,在其末尾添加如下代码以启用 onlyoffice(其中需要修改 ONLYOFFICE_APIJS_URL 中的 localhost 为绑定域名)
# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
ONLYOFFICE_APIJS_URL = 'http://localhost:8088/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('docx', 'pptx', 'xlsx')
完成后 cd /opt
使用 docker-compose restart
命令重启 seafile 服务即可。需要注意的是,其 8088 端口也需在路由器设置端口转发,如下
外部端口 | 内部端口 | IP地址 | 协议类型 |
---|---|---|---|
8088 | 8088 | 192.168.0.108 | ALL |
其他事项
基本上配置完成就能满足个人使用了,因为专业版免费用户 3 个,社区开源版则无限制(功能上有些区别,可上官网查看),如果需要开放用户注册,管理员身份登录后在后台设置中勾选 允许用户注册 及 发送激活邮件,发送邮件需在 seahub_settings.py
配置文件中添加如下 smtp 内容(示例为腾讯企业邮箱)
EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.exmail.qq.com' # 服务商 host
EMAIL_HOST_USER = 'admin@example.com' # 邮件地址
EMAIL_HOST_PASSWORD = 'smtppassword' # smtp邮件密码
EMAIL_PORT = 465
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER
保存后执行同样执行 docker-compose restart
命令重启 seafile 服务即可生效。
专业版搜索问题
专业版需要设置 elasticsearch 目录的 777 权限,我设置过好几次,有时候不生效,有时候又可以,问题就是导致其搜索服务一直返回错误(开源版则没有这个问题)seafile 论坛基本已经没人了,提了几个问题都没有人回答。
配置默认用户容量大小在 seafile.conf 中配置,其他配置项参考:seafile.conf 配置
代码语言:javascript复制[quota]
default = 5
最后附带一些常用的 seahub_settings.py
配置项,其他配置项参考:Seahub 配置(注意修改后执行 docker-compose restart
重启 seafile 生效
# 在线预览的文件大小上限,默认为 30M.
FILE_PREVIEW_MAX_SIZE = 30 * 1024 * 1024
# 缩略图
ENABLE_THUMBNAIL = True
THUMBNAIL_IMAGE_SIZE_LIMIT = 300
THUMBNAIL_ROOT = '/opt/seahub-data/thumbnail/thumb/'
THUMBNAIL_SIZE_FOR_ORIGINAL = 1024
# Disable Admin Dashboard Controls
# ENABLE_SETTINGS_VIA_WEB = False
# Enable Admin view any repo but encrypted
ENABLE_SYS_ADMIN_VIEW_REPO = True
垃圾回收
docker gc:docker exec seafile /scripts/gc.sh
[history]
keep_days = 7
[library_trash]
expire_days = 30