作者选择了Wikimedia Foundation Inc.作为Write for DOnations计划的一部分进行捐赠。
介绍
Seafile是一个开源的,自托管的文件同步和共享平台。 用户可以在自己的服务器上存储和选择加密数据,并将存储空间作为唯一限制。 使用Seafile,您可以使用跨平台同步和受密码保护的链接来共享文件和文件夹,这些链接指向具有到期日期的文件。 文件版本控制功能意味着用户可以恢复已删除和修改的文件或文件夹。
在本教程中,您将在Ubuntu 18.04服务器上安装和配置Seafile。 您将使用MySQL来存储Seafile的不同组件的数据,并使用Apache作为代理服务器来处理Web流量。 完成本教程后,您将能够使用Web界面从桌面或移动客户端访问Seafile,从而允许您与服务器上的其他用户或组以及公众同步和共享文件。
先决条件
在开始本指南之前,您需要以下内容:
- 一个Ubuntu 18.04服务器,通过遵循Ubuntu 18.04教程的初始服务器设置 ,包括一个sudo非root用户和防火墙,设置了至少2GB的RAM。
- 通过遵循如何在Ubuntu 18.04上安装Apache Web服务器为具有为注册域配置的虚拟主机的Apache Web服务器 。
- 在Ubuntu 18.04上按照如何使用Let的加密保护Apache教程,在服务器上安装了SSL证书。
- 完全注册的域名。 本教程将始终使用
example.com
。 为您的服务器设置了以下两个DNS记录。 您可以按照DigitalOcean DNS的介绍了解有关如何添加它们的详细信息。
- 带有
example.com
的A记录,指向服务器的公共IP地址。 - 带有
www.example.com
的A记录,指向服务器的公共IP地址。
- 带有
安装并配置了MySQL数据库服务器。 按照如何在Ubuntu 18.04上安装MySQL教程中的步骤进行操作。 跳过本教程的第3步 – “调整用户身份验证和权限”。 您将只与数据库服务器建立本地连接,因此无需更改root用户的身份验证方法。
第1步 – 为Seafile组件创建数据库
Seafile需要三个组件才能正常工作。 这三个组成部分是:
- Seahub :Seafile的Web前端,使用Django Web框架用Python编写。 从Seahub,您可以使用Web浏览器访问,管理和共享文件。
- Seafile服务器 :管理原始文件上载,下载和同步的数据服务守护程序。 您不直接与服务器交互,而是使用其中一个客户端程序或Seahub Web界面。
- Ccnet服务器 :RPC服务守护程序,用于启用Seafile的不同组件之间的内部通信。 例如,当您使用Seahub时,它可以使用Ccnet RPC服务从Seafile服务器访问数据。
这些组件中的每一个都将其数据分别存储在自己的数据库中 在此步骤中,您将创建三个MySQL数据库和一个用户,然后再继续设置服务器。
首先,使用SSH使用您的用户名和IP地址登录服务器:
ssh sammy@your_server_ip
以管理员(root)身份连接到MySQL数据库服务器:
sudo mysql
在MySQL提示符下,使用以下SQL命令创建数据库用户:
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
接下来,您将创建以下数据库来存储三个Seafile组件的数据:
-
ccnet-db
用于Ccnet服务器。 -
seahub-db
为Seahub网络前端。 - Seafile文件服务器的
seafile-db
。
在MySQL提示符下,创建数据库:
CREATE DATABASE `ccnet-db` CHARACTER SET = 'utf8';CREATE DATABASE `seafile-db` CHARACTER SET = 'utf8';CREATE DATABASE `seahub-db` CHARACTER SET = 'utf8';
然后,授予Seafile数据库用户所有权限以访问这些数据库并进行更改:
GRANT ALL PRIVILEGES ON `ccnet-db`.* to `sammy`@localhost;GRANT ALL PRIVILEGES ON `seafile-db`.* to `sammy`@localhost;GRANT ALL PRIVILEGES ON `seahub-db`.* to `sammy`@localhost;
键入exit
退出MySQL提示符:
exit
现在您已经创建了一个用户以及为每个Seafile组件存储数据所需的数据库,您将安装依赖项以下载Seafile服务器软件包。
第2步 – 安装依赖项和下载Seafile
Seafile的某些部分是用Python编写的,因此需要额外的Python模块和程序才能工作。 在此步骤中,您将在下载和解压缩Seafile服务器软件包之前安装这些必需的依赖项。
要使用apt
安装依赖项,请运行以下命令:
sudo apt install python-setuptools python-pip python-urllib3 python-requests python-mysqldb ffmpeg
python-setuptools
和python-pip
依赖关系监督安装和管理Python包。 python-urllib3
和python-requests
包向网站发出请求。 最后, python-mysqldb
是一个从Python使用MySQL的库, ffmpeg
处理多媒体文件。
Seafile所需的pillow
和moviepy
Python模块在Ubuntu软件包库中不可用。 您将使用pip
手动安装它们:
sudo pip install pillow moviepy
Seafile需要pillow
,用于图像处理的python库和用于处理电影文件缩略图的moviepy
。
注意:在发布新版本时,您还需要手动升级这些软件包。 升级命令是:
sudo pip install --upgrade pillow moviepy
现在您已经安装了必要的依赖项,您可以下载Seafile服务器软件包。
Seafile在安装过程中创建其他目录。 要将它们全部组织起来,请创建一个新目录并进行更改:
mkdir seafilecd seafile
您现在可以通过运行以下命令从网站下载Seafile服务器的最新版本(撰写本文时为6.3.4
):
wget https://download.seadrive.org/seafile-server_6.3.4_x86-64.tar.gz
Seafile将下载分发为压缩的tar存档,这意味着您需要在继续之前将其解压缩。 使用tar
提取存档:
tar -zxvf seafile-server_6.3.4_x86-64.tar.gz
现在更改为解压缩的目录:
cd seafile-server-6.3.4
在此阶段,您已下载并解压缩Seafile服务器软件包,并且还安装了必要的依赖项。 您现在可以配置Seafile服务器了。
第3步 – 配置Seafile服务器
在您第一次启动服务之前,Seafile需要一些有关您的设置的信息。 其中包括域名,数据库配置以及存储数据的路径等详细信息。 要启动一系列问题提示以提供此信息,您可以运行脚本setup_seafile_mysql.sh
,该脚本包含在您在上一步中提取的存档中。
使用bash
运行脚本:
bash setup-seafile-mysql.sh
按ENTER
继续。
该脚本现在将提示您一系列问题。 无论何处提到默认值,按ENTER
键都将使用该值。
本教程使用Seafile
作为服务器名称,但您可以根据需要进行更改。
**Question 1** What is the name of the server? It will be displayed on the client. 3 - 15 letters or digits [ server name ] Seafile
输入此Seafile实例的域名。
**Question 2** What is the ip or domain of the server?. For example: www.mycompany.com, 192.168.1.101 [ This server's ip or domain ] example.com
对于Question 3
按ENTER
接受默认值。 如果您已设置外部存储(例如,使用NFS或块存储),则需要在此处指定该位置的路径。
**Question 3** Where do you want to put your seafile data? Please use a volume with enough free space [ default "/home/sammy/seafile/seafile-data" ]
对于Question 4
按ENTER
接受默认值。
**Question 4** 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
问题6-9与MySQL数据库服务器有关。 您只需要提供在第1步中创建的mysql用户的用户名和密码。按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数据库的名称。 在本教程中使用ccnet-db
, seafile-db
和seahub-db
。 然后,脚本将验证是否存在与数据库的成功连接,然后再继续显示初始配置的摘要。
Enter the existing database name for ccnet:[ ccnet database ] ccnet-dbverifying user "sammy" access to database ccnet-db ... doneEnter the existing database name for seafile:[ seafile database ] seafile-dbverifying user "sammy" access to database seafile-db ... doneEnter the existing database name for seahub:[ seahub database ] seahub-dbverifying user "sammy" access to database seahub-db ... done---------------------------------This is your configuration--------------------------------- server name: Seafile server ip/domain: example.com seafile data dir: /home/sammy/seafile/seafile-data fileserver port: 8082 database: use existing ccnet database: ccnet-db seafile database: seafile-db seahub database: seahub-db database user: sammy--------------------------------Press ENTER to continue, or Ctrl-C to abort---------------------------------
按ENTER
确认。
Generating ccnet configuration ...doneSuccessly create configuration dir /home/sammy/seafile/ccnet.Generating seafile configuration ... doneGenerating 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: 8082port of seahub: 8000When problems occur, Refer to https://github.com/haiwen/seafile/wikifor information.
由于您将在Apache后面运行Seafile,因此无需在防火墙中打开端口8082
和8000
,因此您可以忽略此部分输出。
您已完成服务器的初始配置。 在下一步中,您将在启动Seafile服务之前配置Apache Web服务器。
第4步 – 配置Apache Web服务器
在此步骤中,您将配置Apache Web服务器以将所有请求转发给Seafile。 以这种方式使用Apache允许您使用没有端口号的URL,启用与Seafile的HTTPS连接,并利用Apache提供的缓存功能来提高性能。
要开始转发请求,您需要在Apache配置中启用proxy_http
模块。 此模块提供用于代理HTTP和HTTPS请求的功能。 以下命令将启用该模块:
sudo a2enmod proxy_http
注意:此设置还需要Apache 重写和ssl模块。 您已经在先决条件部分列出的第二个Apache教程中配置了Let’s Encrypt,从而启用了这些模块。
接下来,更新example.com
的虚拟主机配置,以将请求转发到Seafile文件服务器和Seahub Web界面。
在文本编辑器中打开配置文件:
sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf
从ServerAdmin
到SSLCertificateKeyFile
的行是您作为先决条件的一部分设置的初始Apache和Let的加密配置的一部分。 添加突出显示的内容,从Alias
开始,以ProxyPassReverse
指令结束:
<IfModule mod_ssl.c><VirtualHost *:443> ServerAdmin [email protected] ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/html ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem 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路径example.com/media映射到Seafile使用的文件系统中的本地路径。 以下Location
指令允许访问此目录中的内容。 ProxyPass
和ProxyPassReverse
指令使Apache充当该主机的反向代理, /seafhttp
/
和/seafhttp
请求转发到分别在本地主机端口8000
和8082
上运行的Seafile Web界面和文件服务器。 RewriteRule
指令将所有请求传递给/seafhttp
不变,并停止处理更多规则( [QSA,L]
)。
保存并退出该文件。
测试虚拟主机配置中是否存在任何语法错误:
sudo apache2ctl configtest
如果它报告Syntax OK
,那么您的配置没有问题。 重新启动Apache以使更改生效:
sudo systemctl restart apache2
您现在已将Apache配置为Seafile文件服务器和Seahub的反向代理。 接下来,您将在启动服务之前更新Seafile配置中的URL。
第5步 – 更新Seafile的配置和启动服务
由于您现在使用Apache代理所有对Seafile的请求,因此在启动Seafile服务之前,需要使用文本编辑器更新conf
目录中Seafile配置文件中的URL。
在文本编辑器中打开ccnet.conf
:
nano /home/sammy/seafile/conf/ccnet.conf
修改文件中的SERVICE_URL
设置以指向没有端口号的新HTTPS URL,例如:
SERVICE_URL = https://example.com
添加完内容后,保存并退出文件。
现在在文本编辑器中打开seahub_settings.py
:
nano /home/sammy/seafile/conf/seahub_settings.py
您现在可以在文件中添加FILE_SERVER_ROOT
设置,以指定文件服务器正在监听文件上载和下载的路径:
# -*- coding: utf-8 -*-SECRET_KEY = "..."FILE_SERVER_ROOT = 'https://example.com/seafhttp'# ...
保存并退出seahub_settings.py
。
现在您可以启动Seafile服务和Seahub界面:
cd /home/sammy/seafile/seafile-server-6.3.4./seafile.sh start./seahub.sh start
由于这是您第一次启动Seahub服务,它将提示您创建管理员帐户。 输入此管理员用户的有效电子邮件地址和密码:
What is the email for the admin account?[ admin email ] [email protected]What is the password for the admin account?[ admin password ] password-hereEnter the password again:[ admin password again ] password-here----------------------------------------Successfully created seafile admin----------------------------------------Seahub is startedDone.
在Web浏览器中打开https:// example.com
,然后使用您的Seafile管理员电子邮件地址和密码登录。
成功登录后,您可以访问管理界面或创建新用户。
现在您已验证Web界面是否正常工作,您可以启用这些服务以在下一步中自动启动系统引导。
第6步 – 启用Seafile Server以系统引导启动
要使文件服务器和Web界面在引导时自动启动,您可以创建相应的systemd
服务文件并激活它们。
为Seafile文件服务器创建systemd
服务文件:
sudo nano /etc/systemd/system/seafile.service
将以下内容添加到文件中:
[Unit]Description=SeafileAfter=network.target mysql.service[Service]Type=forkingExecStart=/home/sammy/seafile/seafile-server-latest/seafile.sh startExecStop=/home/sammy/seafile/seafile-server-latest/seafile.sh stopUser=sammyGroup=sammy[Install]WantedBy=multi-user.target
这里, ExectStart
和ExecStop
行指示用于启动和停止Seafile服务的命令。 该服务将以sammy
作为User
和Group
。 After
行指定Seafile服务将在网络和MySQL服务启动后启动。
保存seafile.service
并退出。
为Seahub Web界面创建systemd
服务文件:
sudo nano /etc/systemd/system/seahub.service
这与Seafile服务类似。 唯一的区别是Web界面是在Seafile服务之后启动的。 将以下内容添加到此文件:
[Unit]Description=Seafile hubAfter=network.target seafile.service[Service]Type=forkingExecStart=/home/sammy/seafile/seafile-server-latest/seahub.sh startExecStop=/home/sammy/seafile/seafile-server-latest/seahub.sh stopUser=sammyGroup=sammy[Install]WantedBy=multi-user.target
保存seahub.service
并退出。
您可以在“ 了解系统单元和单元文件”教程中了解有关systemd单元文件的更多信息。
最后,要启用Seafile和Seahub服务以在引导时自动启动,请运行以下命令:
sudo systemctl enable seafile.servicesudo 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文件夹的默认位置,然后单击“ 下一步” 。
在下一个窗口中,输入服务器地址,用户名和密码,然后单击“ 登录” 。
在主页上,右键单击“ 我的媒体库” ,然后单击“ 同步此库” 。 接受计算机或设备上的位置的默认值。
将文件(例如文档或照片)添加到“ 我的库”文件夹中。 一段时间后,该文件将上传到服务器。 以下屏幕截图显示了复制到“我的库”文件夹的文件photo.jpg。
现在,登录https:// example.com
上的Web界面,验证您的文件是否存在于服务器上。
单击文件旁边的“ 共享 ”以生成可以共享的此文件的下载链接。
您已验证文件同步工作正常,并且您可以使用Seafile同步和共享来自多个设备的文件和文件夹。
结论
在本教程中,您将设置Seafile服务器的私有实例。 现在,您可以开始使用服务器来同步文件,添加用户和组,以及在它们之间或与公众共享文件,而无需依赖外部服务。
当新版本的服务器可用时,请参阅手册的升级部分以了解执行升级的步骤。