介绍
Seafile是一个开源、自托管、文件同步和共享平台。用户可以在自己的服务器上存储和选择性地加密数据,存储空间是唯一的限制。使用 Seafile,您可以使用跨平台同步和受密码保护的链接共享文件和文件夹,这些链接指向具有到期日期的文件。文件版本控制功能意味着用户可以恢复已删除和修改的文件或文件夹。
在本教程中,您将在 Ubuntu 20.04 服务器上安装和配置 Seafile。您将使用 MariaDB 为 Seafile 的不同组件存储数据,并使用 Apache 作为代理服务器来处理 Web 流量。完成本教程后,您将能够使用 Web 界面从桌面或移动客户端访问 Seafile,允许您与服务器上的其他用户或群组或公众同步和共享您的文件。
先决条件
在开始本指南之前,您需要具备以下条件:
- 按照 Ubuntu 20.04初始服务器设置教程设置一台至少具有 2GB RAM 的 Ubuntu 20.04 服务器,包括 sudo 非 root 用户和防火墙。
- 安装并配置了 MariaDB 数据库服务器。按照如何在 Ubuntu 20.04 上安装 MariaDB教程中的步骤进行操作。
- 按照如何在 Ubuntu 20.04 上安装 Apache Web 服务器,为注册域配置虚拟主机的 Apache Web 服务器。
- 按照此如何在 Ubuntu 20.04 上使用 Let’s Encrypt 来保护 Apache教程,在您的服务器上安装 SSL 证书。
- 完全注册的域名。本教程将
your_domain
贯穿始终。 - 为您的服务器设置的以下两个 DNS 记录。您可以按照DigitalOcean DNS的介绍了解有关如何添加它们的详细信息。
your_domain
指向您服务器的公共 IP 地址的 A 记录。www.your_domain
指向您服务器的公共 IP 地址的 A 记录。
步骤 1 — 为 Seafile 组件创建数据库
Seafile 需要三个组件才能正常工作。这三个组成部分是:
- Seahub:Seafile 的 Web 前端,使用Django Web 框架用 Python 编写。从 Seahub,您可以使用 Web 浏览器访问、管理和共享您的文件。
- Seafile 服务器:管理原始文件上传、下载和同步的数据服务守护进程。您不直接与服务器交互,而是使用客户端程序之一或 Seahub Web 界面。
- ccnet server : RPC 服务守护进程,用于启用 Seafile 不同组件之间的内部通信。例如,当您使用 Seahub 时,它能够使用 Ccnet RPC 服务从 Seafile 服务器访问数据。
这些组件中的每一个都将其数据分别存储在自己的数据库中。在此步骤中,您将在继续设置服务器之前创建三个 MariaDB 数据库和一个用户。
首先,使用您的用户名和 IP 地址使用 SSH 登录到服务器:
- ssh sammy@your_server_ip
以管理员(root)身份连接到 MariaDB 数据库服务器:
- sudo mariadb
在 MariaDB 提示符下,使用以下 SQL 命令创建数据库用户:
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
接下来,您将创建以下数据库来存储三个 Seafile 组件的数据:
ccnetdb
用于 ccnet 服务器。seahubdb
用于 Seahub Web 前端。seafiledb
用于 Seafile 文件服务器。
在 MariaDB 提示符下,创建您的数据库:
- CREATE DATABASE `ccnetdb` CHARACTER SET = 'utf8';
- CREATE DATABASE `seafiledb` CHARACTER SET = 'utf8';
- CREATE DATABASE `seahubdb` CHARACTER SET = 'utf8';
然后,授予 Seafile 数据库用户所有权限以访问和更改这些数据库:
- GRANT ALL PRIVILEGES ON `ccnetdb`.* to `sammy`@localhost;
- GRANT ALL PRIVILEGES ON `seafiledb`.* to `sammy`@localhost;
- GRANT ALL PRIVILEGES ON `seahubdb`.* to `sammy`@localhost;
输入exit
以下命令退出 MariaDB 提示符:
- exit
现在您已经为每个 Seafile 组件创建了存储数据所需的用户和数据库,您将安装配置 Seafile 服务器包所需的依赖项。
步骤 2 — 安装依赖项并下载 Seafile
Seafile 的某些部分是用 Python 编写的,因此需要额外的 Python 模块和程序才能工作。在这一步中,您将在下载和解压 Seafile 服务器包之前安装这些必需的依赖项。
首先,安装pip — Python 包管理器。相应的 Debian 软件包称为python3-pip
. 您可以使用apt
以下方法安装它:
- sudo apt install -y python3-pip
安装 pip 后,您可以使用以下pip3
命令从 Python 包索引 (PyPI) 安装其他依赖项:
- pip3 install Pillow captcha django-simple-captcha
注意:不需要sudo
与上述pip3 install
命令一起使用。这些包会安装在sammy
用户的家目录下,所以不需要root权限。/home/sammy/.local/lib/python3.8/site-packages
Seafile需要Pillow
,用于图像处理的Python库,并captcha
和django-simple-captcha
提供用于验证的验证码的支持。
现在您已经安装了必要的依赖项,您可以下载 Seafile 服务器包。
Seafile 在安装过程中创建额外的目录。为了让它们井井有条,创建一个新目录并更改为:
- mkdir seafile
- cd seafile
您现在可以通过运行以下命令7.1.4
从网站下载最新版本的 Seafile 服务器(截至撰写本文时):
- wget https://download.seadrive.org/seafile-server_7.1.4_x86-64.tar.gz
Seafile 将下载作为压缩的 tar 存档分发,这意味着您需要在继续之前将其解压缩。使用tar
以下命令提取存档:
- tar -zxvf seafile-server_7.1.4_x86-64.tar.gz
现在切换到解压目录:
- cd seafile-server-7.1.4
在此阶段,您已经下载并解压缩 Seafile 服务器包,并且还安装了必要的依赖项。您现在已准备好配置 Seafile 服务器。
步骤 3 — 配置 Seafile 服务器
在您第一次启动服务之前,Seafile 需要一些关于您的设置的信息。这包括域名和数据库配置等详细信息。要启动一系列问题提示以提供此信息,您可以运行脚本setup_seafile_mysql.sh
,该脚本包含在您在上一步中提取的存档中。
使用bash
以下命令运行脚本:
- bash setup-seafile-mysql.sh
按ENTER
继续。
该脚本现在将提示您一系列问题。无论在哪里提到默认值,按下该ENTER
键都将使用该值。
本教程Seafile
用作服务器名称,但您可以根据需要更改它。
What is the name of the server?
It will be displayed on the client. 3 - 15 letters or digits
[ server name ] Seafile
接下来,输入此 Seafile 实例的域名。
What is the ip or domain of the server?.
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ] your_domain
对于文件服务器端口,按ENTER
接受默认值。
Which port do you want to use for the seafile fileserver?
[ default "8082" ]
下一个提示允许您确认数据库配置。您可以创建新数据库或使用现有数据库进行设置。对于本教程,您已在步骤 1 中创建了必要的数据库,因此请2
在此处选择选项。
-------------------------------------------------------
Please choose a way to initialize seafile databases:
-------------------------------------------------------
[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases
[ 1 or 2 ] 2
剩下的问题与 MariaDB 数据库服务器有关。您只需要提供的用户名和密码MariaDB的,你在步骤1.按创建的用户ENTER
接受默认值host
和port
。
What is the host of mysql server?
[ default "localhost" ]
What is the port of mysql server?
[ default "3306" ]
Which mysql user to use for seafile?
[ mysql user for seafile ] sammy
What is the password for mysql user "seafile"?
[ password for seafile ] password
提供密码后,脚本将请求 Seafile 数据库的名称。在本教程中使用ccnetdb
、seafiledb
和seahubdb
。然后,脚本将在继续显示初始配置摘要之前验证是否成功连接到数据库。
Enter the existing database name for ccnet:
[ ccnet database ] ccnetdb
verifying user "sammy" access to database ccnetdb ... done
Enter the existing database name for seafile:
[ seafile database ] seafiledb
verifying user "sammy" access to database seafiledb ... done
Enter the existing database name for seahub:
[ seahub database ] seahubdb
verifying user "sammy" access to database seahubdb ... done
---------------------------------
This is your configuration
---------------------------------
server name: Seafile
server ip/domain: your_domain
seafile data dir: /home/sammy/seafile/seafile-data
fileserver port: 8082
database: use existing
ccnet database: ccnetdb
seafile database: seafiledb
seahub database: seahubdb
database user: sammy
--------------------------------
Press ENTER to continue, or Ctrl-C to abort
---------------------------------
按ENTER
确认。
OutputGenerating ccnet configuration ...
done
Successly create configuration dir /home/sammy/seafile/ccnet.
Generating seafile configuration ...
done
Generating seahub configuration ...
----------------------------------------
Now creating seahub database tables ...
----------------------------------------
creating seafile-server-latest symbolic link ... done
-----------------------------------------------------------------
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------
run seafile server: ./seafile.sh { start | stop | restart }
run seahub server: ./seahub.sh { start <port> | stop | restart <port> }
-----------------------------------------------------------------
If you are behind a firewall, remember to allow input/output of these tcp ports:
-----------------------------------------------------------------
port of seafile fileserver: 8082
port of seahub: 8000
When problems occur, Refer to
https://github.com/haiwen/seafile/wiki
for information.
由于您将在 Apache 后面运行 Seafile ,因此不需要在防火墙中打开端口8082
和8000
,因此您可以忽略这部分输出。
您已完成服务器的初始配置。在下一步中,您将在启动 Seafile 服务之前配置 Apache Web 服务器。
第 4 步 – 配置 Apache Web 服务器
在此步骤中,您将配置 Apache Web 服务器以将所有请求转发到 Seafile。以这种方式使用 Apache 允许您使用没有端口号的 URL,启用到 Seafile 的 HTTPS 连接,并利用 Apache 提供的缓存功能来提高性能。
要开始转发请求,您需要proxy_http
在 Apache 配置中启用该模块。该模块提供代理 HTTP 和 HTTPS 请求的功能。以下命令将启用该模块:
- sudo a2enmod proxy_http
注意:此设置还需要Apache重写和ssl模块。在先决条件部分列出的第二个 Apache 教程中,您已经在配置 Let’s Encrypt 的过程中启用了这些模块。
接下来,更新虚拟主机配置your_domain
以将请求转发到 Seafile 文件服务器和 Seahub Web 界面。
在文本编辑器中打开配置文件:
- sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf
ServerAdmin
toSSLCertificateKeyFile
中的行是作为先决条件的一部分设置的初始 Apache 和 Let’s Encrypt 配置的一部分。添加突出显示的内容,Alias
以ProxyPassReverse
指令开头和结尾:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@your_domain
ServerName your_domain
ServerAlias www.your_domain
DocumentRoot /var/www/your_domain/html
ErrorLog ${APACHE_LOG_DIR}/your_domain-error.log
CustomLog ${APACHE_LOG_DIR}/your_domain-access.log combined
SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
Alias /media /home/sammy/seafile/seafile-server-latest/seahub/media
<Location /media>
Require all granted
</Location>
# seafile fileserver
ProxyPass /seafhttp http://127.0.0.1:8082
ProxyPassReverse /seafhttp http://127.0.0.1:8082
RewriteEngine On
RewriteRule ^/seafhttp - [QSA,L]
# seahub web interface
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
ProxyPass / http://127.0.0.1:8000/
ProxyPassReverse / http://127.0.0.1:8000/
</VirtualHost>
</IfModule>
Alias 指令将 URL 路径 your_domain/media 映射到 Seafile 使用的文件系统中的本地路径。以下Location
指令允许访问此目录中的内容。在ProxyPass
和ProxyPassReverse
指令让Apache作为此主机的反向代理,请求转发到/
和/seafhttp
到Seafile Web界面和文件服务器上的本地主机端口上运行8000
,并8082
分别。该RewriteRule
指令将所有请求传递给/seafhttp
不变并停止处理进一步的规则 ( [QSA,L]
)。
保存并退出文件。
测试虚拟主机配置是否有语法错误:
- sudo apache2ctl configtest
如果它报告Syntax OK
,则说明您的配置没有问题。重新启动 Apache 以使更改生效:
- sudo systemctl restart apache2
您现在已将 Apache 配置为充当 Seafile 文件服务器和 Seahub 的反向代理。接下来,您将在启动服务之前更新 Seafile 配置中的 URL。
步骤 5 — 更新 Seafile 的配置和启动服务
由于您现在使用 Apache 将所有请求代理到 Seafile,因此您需要conf
在启动 Seafile 服务之前使用文本编辑器更新目录中 Seafile 配置文件中的 URL 。
ccnet.conf
在文本编辑器中打开:
- nano /home/sammy/seafile/conf/ccnet.conf
修改SERVICE_URL
文件中的设置以指向新的 HTTPS URL,不带端口号,例如:
SERVICE_URL = https://your_domain
添加内容后,保存并退出文件。
现在seahub_settings.py
在文本编辑器中打开:
- nano /home/sammy/seafile/conf/seahub_settings.py
您现在可以FILE_SERVER_ROOT
在文件中添加一个设置来指定文件服务器侦听文件上传和下载的路径:
SECRET_KEY = "..."
FILE_SERVER_ROOT = 'https://your_domain/seafhttp'
保存并退出seahub_settings.py
。
现在可以启动 Seafile 服务和 Seahub 界面了:
- cd /home/sammy/seafile/seafile-server-7.1.4
- ./seafile.sh start
- ./seahub.sh start
由于这是您第一次启动 Seahub 服务,它会提示您创建一个管理员帐户。为此管理员用户输入有效的电子邮件地址和密码:
OutputWhat is the email for the admin account?
[ admin email ] admin@your_domain
What is the password for the admin account?
[ admin password ] password-here
Enter the password again:
[ admin password again ] password-here
----------------------------------------
Successfully created seafile admin
----------------------------------------
Seahub is started
Done.
在 Web 浏览器中打开并使用您的 Seafile 管理员电子邮件地址和密码登录。https://your_domain
成功登录后,您可以访问管理界面或创建新用户。
现在您已经验证了 Web 界面是否正常工作,您可以在下一步中启用这些服务在系统启动时自动启动。
步骤 6 — 启用 Seafile 服务器以在系统启动时启动
要使文件服务器和 Web 界面在启动时自动启动,您可以创建相应的systemd
服务文件并激活它们。
systemd
为 Seafile 文件服务器创建服务文件:
- sudo nano /etc/systemd/system/seafile.service
将以下内容添加到文件中:
[Unit]
Description=Seafile
After=network.target mariadb.service
[Service]
Type=forking
ExecStart=/home/sammy/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/sammy/seafile/seafile-server-latest/seafile.sh stop
User=sammy
Group=sammy
[Install]
WantedBy=multi-user.target
在这里,ExectStart
和ExecStop
行表示运行以启动和停止 Seafile 服务的命令。该服务将sammy
作为User
和运行Group
。该After
行指定 Seafile 服务将在网络和 MySQL 服务启动后启动。
保存seafile.service
并退出。
systemd
为 Seahub 网页界面创建服务文件:
- sudo nano /etc/systemd/system/seahub.service
这类似于 Seafile 服务。唯一不同的是web界面是在Seafile服务之后启动的。将以下内容添加到此文件中:
[Unit]
Description=Seafile hub
After=network.target seafile.service
[Service]
Type=forking
ExecStart=/home/sammy/seafile/seafile-server-latest/seahub.sh start
ExecStop=/home/sammy/seafile/seafile-server-latest/seahub.sh stop
User=sammy
Group=sammy
[Install]
WantedBy=multi-user.target
保存seahub.service
并退出。
您可以在了解 Systemd 单位和单位文件教程中了解有关 systemd 单位文件的更多信息。
最后,要使 Seafile 和 Seahub 服务在启动时自动启动,请运行以下命令:
- sudo systemctl enable seafile.service
- sudo systemctl enable seahub.service
当服务器重新启动时,Seafile 将自动启动。
至此,您已经完成了服务器的设置,现在可以测试每个服务。
步骤 7 — 测试文件同步和共享功能
在此步骤中,您将测试已设置的服务器的文件同步和共享功能,并确保它们正常工作。为此,您需要在单独的计算机和/或移动设备上安装 Seafile 客户端程序。
访问Seafile 网站上的下载页面并按照说明在您的计算机上安装最新版本的程序。Seafile 客户端可用于各种 Linux 发行版(Ubuntu、Debian、Fedora、Centos/RHEL、Arch Linux)、MacOS 和 Windows。移动客户端可从相应的应用程序商店获得,适用于 Android 和 iPhone/iPad 设备。
安装 Seafile 客户端后,您可以测试文件同步和共享功能。
在您的计算机或设备上打开 Seafile 客户端程序。接受 Seafile 文件夹的默认位置,然后单击下一步。
在下一个窗口中,输入服务器地址、用户名和密码,然后单击登录。
在主页上,右键单击My Library并单击Sync this library。接受计算机或设备上位置的默认值。
将文件(例如文档或照片)添加到“我的图书馆”文件夹中。一段时间后,文件将上传到服务器。以下屏幕截图显示了复制到“我的库”文件夹中的文件 photo.jpg。
现在,登录到 Web 界面并验证您的文件是否存在于服务器上。https://your_domain
单击文件旁边的共享以生成此文件的下载链接,您可以共享该链接。
您已确认文件同步工作正常,并且您可以使用 Seafile 从多个设备同步和共享文件和文件夹。
结论
在本教程中,您将设置 Seafile 服务器的私有实例。现在,您可以开始使用服务器同步文件、添加用户和组以及在它们之间或与公众共享文件,而无需依赖外部服务。
当服务器的新版本可用时,请参阅手册的升级部分以了解执行升级的步骤。