大致介绍🏀
简而言之,Seafile 是一款开源的专业级云存储与协作平台,专注于为个人、企业及机构提供安全可控的私有云解决方案, 其亮点是多人在线协作。
部署方向⚽
按照部署的方式有直接部署和docker部署两类,其中每类有兼具不同平台(linux, windows, mac)的部署方式,docker在每类平台的部署基本一致。
- 出于部署和维护的简便性,我们选择docker部署方式;
- 出于服务稳定性考虑,我们选择在linux平台部署。
版本选择🎾
测试平台: Linux
部署方式: Docker
部署版本: 推荐v11.0版本(https://cloud.seafile.com/d/f4e8883db63845d29350/)
推荐原因:迭代版本已至稳定,目录结构和前代产品类似,部署方式也类似,遇到问题有究可循。
用docker compose 启动服务🏈
为了方便容器编排,其中包括环境配置、依赖等等,官方给出了docker compose服务。
确保部署的linux系统中已安装了docker compose 服务,docker compose 服务是通常在安装docker服务时自带的插件, 也可以自行安装,自行安装的指令为docker-compose
, 而插件为docker compose
, 本文默认使用docker compose
。
我们下载docker-compose.yml部署文件之后首先要修改一些内容以适配服务器部署需求
services:
db:
image: mariadb:10.11
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=db_dev # 需要修改,就是你mysql数据库的密码
- MYSQL_LOG_CONSOLE=true
- MARIADB_AUTO_UPGRADE=1
volumes:
- /home/test/seafile/mysql:/var/lib/mysql # 需要修改,本地持久化存储目录,你建立的所有文档都在这里
networks:
- seafile-net
memcached:
image: memcached:1.6.18
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile-net
seafile:
image: seafileltd/seafile-mc:11.0-latest
container_name: seafile
ports:
- "8080:80" # 前面是宿主机端口,后面容器内部虚拟网络的端口,建议修改宿主机端口,这里用8080展示
# - "443:443" # 假如需要https安全访问,就打开443接口
volumes:
- /home/test/seafile/shared:/shared # 需要修改,本地持久化存储目录
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=db_dev # 需要修改,和mysql数据库的密码一致,用于seafile可以访问后端数据库
- TIME_ZONE=Asia/Shanghai # 选择时区,想要的时区网上搜一下
- SEAFILE_ADMIN_EMAIL=me@example.com # 需要设置,管理员账户名
- SEAFILE_ADMIN_PASSWORD=asecret # 需要设置,管理员密码
- SEAFILE_SERVER_LETSENCRYPT=false # 是否使用letsencrypt工具来生成免费证书(https安全访问需要ssl证书)
- SEAFILE_SERVER_HOSTNAME=seafile.example.com # 需要设置,seafile服务的域名,局域网部署可以填ip地址
depends_on:
- db
- memcached
networks:
- seafile-net
networks:
seafile-net:
这个yml配置简单说明一下, 就是三个容器通过一个内部虚拟网络连接在了一起,seafile的web服务依赖于后端数据库,用户编辑的文件都存储在数据库里。
在linux用户目录下新建seafile文件夹
cd ~
mkdir seafile
进入seafile目录, 将下载的docker-compose.yml
放入该目录(重要),并新建持久化存储目录
cd seafile
mkdir mysql shared
这个持久化存储目录很重要,后面需要项目迁移的时候,只要保留持久化存储目录,资料就不会丢失;==这里要额外强调一下docker挂载券的机制,也就是在yml中volumes参数, 只有首次挂载宿主机空目录时,容器会把文件复制给宿主机目录,之后再挂载都是宿主机覆盖容器内部目录。==
接下来运行服务:
docker compose up -d
如果这个时候seafile目录下没有docker-compose.yml
, 那么这个指令就找不到配置文件!查看服务运行日志
docker compose logs
以上步骤最关键最容易出问题的是mysql数据库。
访问页面测试功能🏸
这里我们在内网测试,假如我们内网ip是192.168.1.4
, 那么docker-compose.yml
的配置
SEAFILE_SERVER_HOSTNAME=192.168.1.4:8080
这个8080端口来自于上面的yml文件端口映射,是宿主机对外的端口,我们访问的时候就是访问
192.168.1.4:8080
正常登录到
我们用yml设置的用户邮箱密码登录即可, 进入界面,我们新建一个md文档
点击进去,发现根本打不开这个文件,而是一直在加载,这个是因为内部打开这个文件指向的是宿主机的ip,就是
192.168.1.4
, 这个是不带端口的,我们在启动容器的时候,内部自动化配置只是简单的把192.168.1.4
写到了/shared/seafile/conf/seahub_settings.py
中, 导致我们无法正常访问数据内容。
只要我们进入seahub_settings.py中修改如下两个位置的ip添加端口即可
SERVICE_URL = "http://192.168.1.4:8080"
FILE_SERVER_ROOT = "http://192.168.1.4:8080/seafhttp"
接下来我们保存修改并重启服务
docker compose down && docker compose up -d
重新打开网页,点击修改文件会发现可以正常修改了
总结: seafile在用户配置层面并没有做到非常的合理化,导致某些细节性的部署配置需要用户自己摸索
设置https安全访问🎱
上述内容主要针对内网访问和测试,如果要实现外网访问,首先需要保证通信数据的加密,就是你访问我的服务,服务返回的信息都是加密的,如果传输过程被截取也都是乱码。
这个数据加密的方法就是基于一套加密算法,而加密算法就需要密钥对,而服务器端为了证明自己的身份同样需要一个网络“身份证”,于是就有了ssl证书,目前主流的免费证书就是Let’s Encrypt,当然像阿里、华为和腾讯这种也都提供免费证书,但是都有一些额外限制,推荐用Let’s Encrypt。
准备工作
- 购买域名或者利用github申请免费域名,最好自己购买,一般域名不贵,只有好的域名才贵
- 公网IP,可以是私人家庭的,也可以是云服务商的;有必要提及家庭的公网IP都是默认关闭了80和443以及22端口,也就是说想建立web服务必须端口转发,说到底还是得买云服务商的服务器。
部署https
修改yml配置文件
- SEAFILE_SERVER_LETSENCRYPT=true
- SEAFILE_SERVER_HOSTNAME=yourdomain.com
修改/shared/seafile/conf/seahub_settings.py
SERVICE_URL = "https://yourdomain.com"
FILE_SERVER_ROOT = "https://yourdomain.com/seafhttp"
如果出现问题可以参考:官方部署
注意:云服务器直接部署要求较高的存储和处理性能,这往往需要较高规格的云服务器,不适合私人低成本部署,后续会更新低成本解决方案。