Seafile 私有云盘部署教程

Seafile 是一个开源云存储系统,具有隐私保护和团队协作功能。文件的集合称为库。每个库可以单独同步。还可以使用用户选择的密码对库进行加密。Seafile 还允许用户创建群组并轻松地将文件共享到群组中。

Seafile 简介

Seafile 不仅仅是一个简单的云盘,它更像是一个功能齐全的私人数据中心。它拥有以下令人心动的特性:

  • 文件同步: Seafile 支持选择性同步,这意味着你可以选择只同步你需要的文件夹,节省带宽和存储空间。它还能智能处理文件冲突,确保你的数据始终保持一致。
  • 共享与协作: 轻松与朋友、家人或同事共享文件和文件夹,并可设置密码保护和上传链接,让分享更安全便捷。
  • 版本控制: Seafile 会记录文件的每个版本,让你可以随时回溯到之前的版本,避免误删或修改带来的损失。
  • 客户端加密: Seafile 提供客户端加密功能,这意味着只有你拥有解密数据的密钥,即使服务器管理员也无法访问你的文件,最大程度地保障你的数据隐私。
  • 在线文档编辑: Seafile 支持在线 Markdown 编辑,方便你随时随地创建和编辑文档。
  • 知识管理: Seafile 提供了丰富的知识管理功能,包括文件标签、相关文件、维基模式等,帮助你更好地组织和管理你的知识库。

接下来,我们将分别介绍两种部署 Seafile 的方式:命令行安装和 Docker 安装!


服务器准备

必要准备

  • 一个聪明的大脑

  • 一台Linux服务器(推荐腾讯云、阿里云或雨云等)

我将会以 雨云 为例,带大家创建一台自己的云服务器,以便尝试本篇文章的内容。

注册链接 : https://www.rainyun.com/NTEzMTM1_?s=blog

创建云服务器

以下内容只是参考,具体按照自己的需求选择配置即可。

点击"云产品"→"云服务器"→"立即购买"。

建议选择距离你较近的区域,以降低延迟。

选择配置。

选择Ubuntu 22.04版本,勾选预装 Docker 最新版。

点击"立即购买",并完成后续购买流程。 购买完成后,等待服务器部署完毕,进入管理面板,找到远程连接信息。

使用PowerShell进行远程连接:输入ssh root@你的服务器IP (例如ssh root@154.9.227.239),首次连接需输入yes,然后回车即可登录。

到这里,我们的服务器就创建完毕,并且能够远程SSH访问了。

命令行安装 Seafile

1. 下载 Seafile 服务器安装包

访问 Seafile 官网下载页面,下载最新的 Seafile 服务器安装包。下载地址:https://www.seafile.com/download/ 选择适合你服务器架构的版本。

bash 复制代码
wget https://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_11.0.13_x86-64.tar.gz

2. 目录创建

假设你已经下载 seafile-server_*/opt/seafile目录下。 我们建议这样的目录结构:

bash 复制代码
mkdir /opt/seafile
mv seafile-server_* /opt/seafile
cd /opt/seafile
tar -xzf seafile-server_*
mkdir installed
mv seafile-server_* installed

现在,你的目录看起来应该像这样:

bash 复制代码
#tree seafile -L 2
dir
├── installed
│   └── seafile-server_11.0.13_x86-64.tar.gz
└── seafile-server_11.0.13
    ├── reset-admin.sh
    ├── runtime
    ├── seafile
    ├── seafile.sh
    ├── seahub
    ├── seahub.sh
    ├── setup-seafile-mysql.sh
    └── upgrade

这样设计目录的好处在于

  • 和 seafile 相关的配置文件都可以放在 /opt/seafile/conf 目录下,便于集中管理.
  • 后续升级时,你只需要解压最新的安装包到 /opt/seafile 目录下.

3. 安装相关依赖

我这里以 Ubuntu 为例在安装 Seafile 服务器之前,需要安装一些必要的软件包:

bash 复制代码
sudo apt-get update
sudo apt-get install -y python3 python3-setuptools python3-pip libmysqlclient-dev   ldap-utils libldap2-dev
sudo apt-get install -y memcached libmemcached-dev
sudo pip3 install --timeout=3600 django==3.2.* future==0.18.* mysqlclient==2.1.* pymysql pillow==10.0.* pylibmc captcha==0.4 markupsafe==2.0.1 jinja2 sqlalchemy==2.0.18 psd-tools django-pylibmc django_simple_captcha==0.5.* djangosaml2==1.5.* pysaml2==7.2.* pycryptodome==3.16.* cffi==1.15.1 python-ldap==3.4.3 lxml

4. 安装 Seafile

bash 复制代码
cd seafile-server-*
./setup-seafile-mysql.sh

如果你的系统中没有安装上面的某个软件,那么 Seafile初始化脚本会提醒你安装相应的软件包.

该脚本会依次询问你一些问题,从而一步步引导你配置 Seafile 的各项参数:

在这里, 你会被要求选择一种创建 Seafile 数据库的方式:

bash 复制代码
-------------------------------------------------------
Please choose a way to initialize seafile databases:
-------------------------------------------------------
[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases
  • 如果选择1, 你需要提供根密码. 脚本程序会创建数据库和用户。
  • 如果选择2, ccnet/seafile/seahub 数据库应该已经被你(或者其他人)提前创建。

如果安装正确完成,你会看到成功的信息。

现在你的目录结构看起来应该是这样:

bash 复制代码
#tree seafile -L 2
seafile
├── conf
│   └── ccnet.conf
│   └── seafile.conf
│   └── seahub_settings.py
│   └── gunicorn.conf
├── installed
│   └── seafile-server_11.0.13_x86-64.tar.gz
├── seafile-data
├── seafile-server_11.0.13  # active version
│   ├── reset-admin.sh
│   ├── runtime
│   ├── seafile
│   ├── seafile.sh
│   ├── seahub
│   ├── seahub.sh
│   ├── setup-seafile-mysql.sh
│   └── upgrade
├── seafile-server-latest  # symbolic link to seafile-server_11.0.13
├── seahub-data
│   └── avatars

seafile-server-latest文件夹为指向当前 Seafile 服务器文件夹的符号链接. 将来你升级到新版本后, 升级脚本会自动更新使其始终指向最新的 Seafile 服务器文件夹。

5. 配置 Memcached

安装 Memcached 软件

bash 复制代码
apt-get install memcached libmemcached-dev -y
pip3 install --timeout=3600 pylibmc django-pylibmc
systemctl enable --now memcached

将以下配置添加到 seahub_settings.py 中:

复制代码
CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
    },
}

6. 配置 Nginx (可选)

安装 Nginx:

bash 复制代码
sudo apt install nginx -y

然后我们添加 Nginx 的配置文件。Ubuntu 下请按照以下步骤添加

  1. 创建文件 /etc/nginx/site-available/seafile.conf,并拷贝以下内容
  2. 删除 /etc/nginx/site-enabled/default: rm /etc/nginx/site-enabled/default
  3. 创建符号链接: ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf
nginx 复制代码
server {
    listen 80;
    server_name seafile.example.com;
    proxy_set_header X-Forwarded-For $remote_addr;
    location / {
         proxy_pass         http://127.0.0.1:8000;
         proxy_set_header   Host $http_host;
         proxy_set_header   X-Real-IP $remote_addr;
         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header   X-Forwarded-Host $server_name;
         proxy_read_timeout  1200s;
         # used for view/edit office file via Office Online Server
         client_max_body_size 0;
         access_log      /var/log/nginx/seahub.access.log;
         error_log       /var/log/nginx/seahub.error.log;
    }
    location /seafhttp {
        rewrite ^/seafhttp(.*)$ $1 break;
        proxy_pass http://127.0.0.1:8082;
        client_max_body_size 0;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout  36000s;
        proxy_read_timeout  36000s;
        proxy_send_timeout  36000s;
        send_timeout  36000s;
    }
    location /media {
        root /opt/seafile/seafile-server-latest/seahub;
    }
}

Nginx 默认设置 "client_max_body_size" 为 1M。如果上传文件大于这个值的话,会报错,相关 HTTP 状态码为 423 ("Request Entity Too Large"). 你可以将值设为 0 以禁用此功能.

如果要上传大于 4GB 的文件,默认情况下 Nginx 会把整个文件存在一个临时文件中,然后发给上游服务器 (seaf-server),这样容易出错。使用 1.8.0 以上版本同时在 Nginx 配置文件中设置以下内容能解决这个问题:

复制代码
    location /seafhttp {
        ... ...
        proxy_request_buffering off;
    }

7. 修改 Seafile 配置文件

下面还需要更新 SERVICE_URL 和 FILE_SERVER_ROOT 这两个配置项。否则无法通过 Web 正常的上传和下载文件。

您可以直接通过管理员 Web 界面来设置这两个值 (注意,如果同时在 Web 界面和配置文件中设置了这个值,以 Web 界面的配置为准。)

复制代码
SERVICE_URL: http://seafile.example.com
FILE_SERVER_ROOT: http://seafile.example.com/seafhttp

或者修改seahub_settings.py 文件

bash 复制代码
SERVICE_URL = 'http://seafile.example.com'
FILE_SERVER_ROOT = 'http://seafile.example.com/seafhttp'

8. 启动 Seafile 服务器

启动 Seafile 服务器和 Seahub 网站

在 seafile-server-latest 目录下,运行如下命令

bash 复制代码
./seafile.sh start # 启动 Seafile 服务
./seahub.sh start  # 启动 Seahub 网站 

你第一次启动 seahub 时,seahub.sh 脚本会提示你创建一个 seafile 管理员帐号。

9. 关闭/重启 Seafile 和 Seahub

关闭

bash 复制代码
./seahub.sh stop # 停止 Seahub
./seafile.sh stop # 停止 Seafile 进程

重启

bash 复制代码
./seafile.sh restart # 停止当前的 Seafile 进程,然后重启 Seafile
./seahub.sh restart  # 停止当前的 Seahub 进程,并在 8000 端口重新启动 Seahub

如果停止/重启的脚本运行失败

大多数情况下 seafile.sh seahub.sh 脚本可以正常工作。如果遇到问题:

  • 使用pgrep命令检查 seafile/seahub 进程是否还在运行中
bash 复制代码
pgrep -f seafile-controller # 查看 Seafile 进程
pgrep -f "seahub" # 查看 Seahub 进程
  • 使用pkill命令杀掉相关进程
bash 复制代码
pkill -f seafile-controller # 结束 Seafile 进程
pkill -f "seahub" # 结束 Seafile 进程

Docker 方式安装

创建并编辑 docker-compose.yaml 文件:

yaml 复制代码
services:
  db:
    image: mariadb:10.11
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=db_dev  # 必需,设置 MySQL 服务的 root 用户密码。
      - MYSQL_LOG_CONSOLE=true
      - MARIADB_AUTO_UPGRADE=1
    volumes:
      - /opt/seafile-mysql/db:/var/lib/mysql  # 必需,指定 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:
      - "8000:80"
    #  - "443:443"  # 如果启用 https,请取消注释。
    volumes:
      - /opt/seafile-data:/shared   # 必需,指定 Seafile 数据持久化存储的路径。
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=db_dev  # 必需,该值应与 MySQL 服务的 root 密码相同。
      - TIME_ZONE=Asia/Shanghai # 可选,默认为 UTC。建议取消注释并设置为您的本地时区。
      - SEAFILE_ADMIN_EMAIL=seafile@example.com # 指定 Seafile 管理员用户的邮箱地址,默认为 'me@example.com'。
      - SEAFILE_ADMIN_PASSWORD=password     # 指定 Seafile 管理员用户的密码,默认为 'asecret'。
      - SEAFILE_SERVER_LETSENCRYPT=false   # 是否使用 letsencrypt 生成证书。
      - SEAFILE_SERVER_HOSTNAME=you_server_ip:8000 # 指定您的主机名,关系到登录成功后是否可以正常的文件上传和下载,填写 your_server_ip:8000。
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net

networks:
  seafile-net:

主要环境变量说明:

  • SEAFILE_ADMIN_EMAIL : Seafile 的管理员登录账号
  • SEAFILE_ADMIN_PASSWORD : Seafile 的管理员登录密码
  • SEAFILE_SERVER_HOSTNAME : 与 seafile 暴露出的 8000 端口一致,填写 you_server_ip:8000 ,这个关系到登录成功后是否可以正常的文件上传和下载。

启动 Docker :

bash 复制代码
docker compose up -d

相关链接

雨云 - 新一代云服务提供商: https://www.rainyun.com/NTEzMTM1_?s=blog

我的博客:https://blog.ivwv.site

相关推荐
修己xj12 分钟前
FossFLOW:开源等距图表工具,为技术文档注入立体活力!
开源
兆龙电子单片机设计12 分钟前
【STM32项目开源】STM32单片机多功能电子秤
stm32·单片机·开源·毕业设计·智能家居
小白跃升坊22 分钟前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
向哆哆26 分钟前
高校四六级报名管理系统的考试信息模块实现:Flutter × OpenHarmony 跨端开发实践
flutter·开源·鸿蒙·openharmony·开源鸿蒙
跃渊Yuey41 分钟前
【Linux】线程同步与互斥
linux·笔记
杨江41 分钟前
seafile docker安装说明
运维
舰长11543 分钟前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀1 小时前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng1 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.1 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居