seafile开源私有网盘保姆级部署

185次阅读
没有评论

大致介绍🏀

简而言之,Seafile 是一款开源的专业级云存储与协作平台,专注于为个人、企业及机构提供安全可控的私有云解决方案, 其亮点是多人在线协作。

部署方向⚽

​ 按照部署的方式有直接部署和docker部署两类,其中每类有兼具不同平台(linux, windows, mac)的部署方式,docker在每类平台的部署基本一致。

  • 出于部署和维护的简便性,我们选择docker部署方式;
  • 出于服务稳定性考虑,我们选择在linux平台部署。

版本选择🎾

测试平台: Linux

部署方式: Docker

部署版本: 推荐v11.0版本(https://cloud.seafile.com/d/f4e8883db63845d29350/

seafile开源私有网盘保姆级部署

推荐原因:迭代版本已至稳定,目录结构和前代产品类似,部署方式也类似,遇到问题有究可循。

用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

正常登录到

seafile开源私有网盘保姆级部署

我们用yml设置的用户邮箱密码登录即可, 进入界面,我们新建一个md文档

seafile开源私有网盘保姆级部署

点击进去,发现根本打不开这个文件,而是一直在加载,这个是因为内部打开这个文件指向的是宿主机的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开源私有网盘保姆级部署

总结: 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"

如果出现问题可以参考:官方部署

注意:云服务器直接部署要求较高的存储和处理性能,这往往需要较高规格的云服务器,不适合私人低成本部署,后续会更新低成本解决方案

正文完
 0
下水草牛
版权声明:本站原创文章,由 下水草牛 于2025-03-26发表,共计3357字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)