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

相关推荐
LIKEYYLL1 小时前
GNU Octave:特性、使用案例、工具箱、环境与界面
服务器·gnu
云云3212 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云3212 小时前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
pubuzhixing2 小时前
开源白板新方案:Plait 同时支持 Angular 和 React 啦!
前端·开源·github
cominglately2 小时前
centos单机部署seata
linux·运维·centos
魏 无羡2 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse2 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
Karoku0663 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
忆源3 小时前
3.3.2.3 开源项目有锁队列实现--魔兽世界tinityCore
开源
木子Linux3 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算