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 下请按照以下步骤添加
- 创建文件
/etc/nginx/site-available/seafile.conf
,并拷贝以下内容 - 删除
/etc/nginx/site-enabled/default
:rm /etc/nginx/site-enabled/default
- 创建符号链接:
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