如何在 Debian 10 上使用 Seafile 同步和共享文件

介绍

Seafile是一个开源,自托,文件同步和共享平台. 用户可以在自己的服务器上存储和可选地加密数据,以存储空间作为唯一的限制。 使用Seafile,您可以使用跨平台同步和密码保护的链接共享文件和文件夹,以期限日期的文件。 文件版本功能意味着用户可以恢复已删除和修改的文件或文件夹。

在本教程中,您将在 Debian 10 服务器上安装和配置 Seafile. 您将使用 MariaDB(Debian 10 上的默认 MySQL 变体)来存储 Seafile 的不同组件的数据,并将 Apache 作为代理服务器来处理 Web 流量. 完成本教程后,您将能够使用 Web 接口从桌面或移动客户端访问 Seafile,允许您同步和与服务器上的其他用户或群体或公众共享您的文件。

前提条件

在您开始本指南之前,您将需要以下内容:

  • 1台Debian 10服务器,最少安装2GB的RAM,通过此跟踪Initial Server setup with Debian 10教程,包括一个sudo非root用户和一个防火墙.
  • Apache网络服务器,其虚拟主机通过遵循[如何在Debian 10上安装Apache网络服务器(https://andsky.com/tech/tutorials/how-to-install-the-apache-web-server-on-debian-10)来配置注册域. 当您遵循此指南时, 请确定 [设置虚拟主机] (https://andsky.com/tech/tutorials/how-to-install-the-apache-web-server-on-debian-10#step-5-%E2%80%94-setting-up-virtual-hosts-(recommended]] 指向您的域名 。
  • 安装并配置了一个 MariaDB 数据库服务器 。 遵循 [如何在 Debian 10 上安装 MariaDB (https://andsky.com/tech/tutorials/how-to-install-mariadb-on-debian-10 ) 教程中的步骤来设置此功能 。 跳过此教程的第3步 — (可选) 调整用户认证和特权 。 您只会对数据库服务器进行本地连接, 因此不需要更改根用户的认证方法 。
  • 在您的服务器上安装了 SSL 证书, 方法是遵循此 [如何用 Debian 10 加密方式保护 Apache (https://andsky.com/tech/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-10) 教程 。
  • 一个完全注册的域名. 此教程将始终使用 您的域
  • 为您服务器设置的以下DNS记录中均有. 您可以遵循此[引入到 DigitalOcean DNS] (https://www.digitalocean.com/docs/networking/dns/)来了解如何添加它们的细节.
  • 显示您服务器公共IP地址的您的域记录。
  • 一个记录,上面有www.your_domain指向您的服务器的公开IP地址。 (英语)

步骤 1 – 创建海洋元件的数据库

Seafile 需要三个组件才能正常工作:

  • Seahub:Seafile的网页前端,用Python编写使用Django(https://www.djangoproject.com/)网页框架. 从Seahub你可以使用网页浏览器访问、管理和共享你的文件。
  • Seafile服务器:管理原始文件上传、下载和同步的数据服务大师。你不会直接与服务器交互,而是使用客户端程序或Seahub网页接口。
  • Ccnet服务器:RPC服务大师能够在Seafile的不同组件之间进行内部通信。例如,当你使用Seafah,它可以使用Ccnet RPC服务访问来自Seafile服务器的数据。

每个组件将其数据单独存储在其自己的数据库中. 在此步骤中,您将创建三个MariaDB数据库和一个用户,然后继续设置服务器。

首先,使用 SSH 登录服务器,使用您的用户名和 IP 地址:

1[environment local]
2ssh sammy@your_server_ip

连接到 MariaDB 数据库服务器作为管理员(根):

1sudo mysql

在 MariaDB 提示中,使用以下 SQL 命令创建数据库用户:

1CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

接下来,您将创建以下数据库来存储三个Seafile组件的数据:

  • ccnet-db 用于 Ccnet 服务器.
  • seahub-db 用于 Seahub 网页前端.
  • seafile-db 用于 Seafile 文件服务器.

在 MariaDB 提示中,创建您的数据库:

1CREATE DATABASE 'ccnet-db' CHARACTER SET = 'utf8';
2CREATE DATABASE 'seafile-db' CHARACTER SET = 'utf8';
3CREATE DATABASE 'seahub-db' CHARACTER SET = 'utf8';

然后,向数据库用户授予所有权限,以访问并对这些数据库进行更改:

1GRANT ALL PRIVILEGES ON 'ccnet-db'.* to 'sammy'@localhost;
2GRANT ALL PRIVILEGES ON 'seafile-db'.* to 'sammy'@localhost;
3GRANT ALL PRIVILEGES ON 'seahub-db'.* to 'sammy'@localhost;

退出 MariaDB 提示,键入退出:

1exit

现在你已经创建了一个用户和存储每个 Seafile 组件的数据所需的数据库,你将安装依赖程序来下载 Seafile 服务器包。

步骤 2 — 安装依赖并下载 Seafile

Seafile 的某些部分是用 Python 编写的,因此需要额外的 Python 模块和程序来工作. 在此步骤中,您将在下载和提取 Seafile 服务器包之前安装这些必要的依赖。

若要使用apt来安装依赖,请执行以下命令:

1sudo apt install python-setuptools python-pip python-urllib3 python-requests python-mysqldb ffmpeg

python-setuptoolspython-pip 依赖性监督安装和管理 Python 包. python-urllib3python-requests 包向网站发送请求。

Seafile 需要Pillow,一个用于图像处理的 python 库,以及moviepy来处理电影文件小图。这些模块在 Debian 包存储中不可用,所以用pip来安装:

1sudo pip install Pillow moviepy

现在你已经安装了必要的依赖,你可以下载Seafile服务器包。

Seafile 在设置过程中创建额外的目录. 要保持它们的所有组织,创建一个新的目录并更改它:

1mkdir seafile
2cd seafile

您现在可以从 项目网站下载 Seafile 服务器的最新版本(7.0.4)通过运行以下命令:

1wget https://download.seadrive.org/seafile-server_7.0.4_x86-64.tar.gz

Seafile 将下载分发为压缩的 tar 档案,这意味着您需要在继续之前提取它。

1tar -zxvf seafile-server_7.0.4_x86-64.tar.gz

现在转到提取的目录:

1cd seafile-server-7.0.4

在此阶段,您已下载并提取了Seafile服务器包,并安装了必要的依赖程序,您现在已经准备好配置Seafile服务器。

步骤 3 – 配置 Seafile 服务器

Seafile 需要一些关于您的设置的信息,在您第一次启动服务之前. 这包括域名、数据库配置和将数据存储的路径等细节. 要启动提供这些信息的请求系列,您可以运行setup_seafile_mysql.sh脚本,该脚本包含在您在上一步中提取的档案中。

运行使用bash的脚本:

1bash setup-seafile-mysql.sh

Enter以在提示时继续。

脚本现在会提示你一系列问题. 任何提到默认值的地方,按ENTER键将使用该值。

本教程使用Seafile作为服务器名称,但如果您想要的话,您可以更改它:

1Question 1
2
3What is the name of the server?
4It will be displayed on the client. 3 - 15 letters or digits
5[ server name ] Seafile

对于问题2,请输入此 Seafile 实例的域名。

1Question 2
2
3What is the ip or domain of the server?.
4For example: www.mycompany.com, 192.168.1.101
5[ This server's ip or domain ] your_domain

如果您已设置外部存储,例如使用 NFS 或区块存储,则需要在此处指定到该位置的路径。

1Question 3
2
3Where do you want to put your seafile data?
4Please use a volume with enough free space
5[ default "/home/sammy/seafile/seafile-data" ]

对于问题4来说,请按ENTER来接受默认端口号。

1Question 4
2
3Which port do you want to use for the seafile fileserver?
4[ default "8082" ]

下一个提示允许您确认数据库配置. 您可以创建新的数据库或使用现有数据库进行设置. 对于本教程,您已经在步骤 1 中创建了必要的数据库,所以在这里选择选项 2

1-------------------------------------------------------
2Please choose a way to initialize seafile databases:
3-------------------------------------------------------
4
5[1] Create new ccnet/seafile/seahub databases
6[2] Use existing ccnet/seafile/seahub databases
7
8[ 1 or 2 ] 2

您需要提供您在步骤 1 中创建的 MySQL 用户的用户名和密码,但您可以按ENTER来接受主机端口的默认值。

 1What is the host of mysql server?
 2
 3[ default "localhost" ]
 4
 5What is the port of mysql server?
 6
 7[ default "3306" ]
 8
 9Which mysql user to use for seafile?
10
11[ mysql user for seafile ] sammy
12
13What is the password for mysql user "seafile"?
14
15[ password for seafile ] password

提供密码后,脚本将要求 Seafile 数据库的名称。 使用ccnet-db,seafile-dbseahub-db为本教程。 然后,脚本将检查是否有成功连接到数据库,然后继续显示初始配置的摘要。

 1Enter the existing database name for ccnet:
 2[ ccnet database ] ccnet-db
 3
 4verifying user "sammy" access to database ccnet-db ... done
 5
 6Enter the existing database name for seafile:
 7[ seafile database ] seafile-db
 8
 9verifying user "sammy" access to database seafile-db ... done
10
11Enter the existing database name for seahub:
12[ seahub database ] seahub-db
13
14verifying user "sammyFor this tutorial you have" access to database seahub-db ... done
15
16---------------------------------
17This is your configuration
18---------------------------------
19
20    server name:            Seafile
21    server ip/domain:       your_domain
22
23    seafile data dir:       /home/sammy/seafile/seafile-data
24    fileserver port:        8082
25
26    database:               use existing
27    ccnet database:         ccnet-db
28    seafile database:       seafile-db
29    seahub database:        seahub-db
30    database user:          sammy
31
32--------------------------------
33Press ENTER to continue, or Ctrl-C to abort
34---------------------------------

点击进入来确认。

 1[secondary_label Output]
 2Generating ccnet configuration ...
 3done
 4Successly create configuration dir /home/sammy/seafile/ccnet.
 5
 6Generating seafile configuration ...                
 7done
 8
 9Generating seahub configuration ...
10----------------------------------------
11Now creating seahub database tables ...
12----------------------------------------
13creating seafile-server-latest symbolic link ... done
14
15-----------------------------------------------------------------
16Your seafile server configuration has been finished successfully.
17-----------------------------------------------------------------
18run seafile server:     ./seafile.sh { start | stop | restart }
19run seahub server:     ./seahub.sh  { start <port> | stop | restart <port> }
20-----------------------------------------------------------------
21If you are behind a firewall, remember to allow input/output of these tcp ports:
22-----------------------------------------------------------------
23port of seafile fileserver:   8082
24port of seahub:               8000
25
26When problems occur, Refer to
27        https://github.com/haiwen/seafile/wiki
28for information.

您将在Apache后面运行Seafile,您已经通过服务器的防火墙启用了它,因此,您不必担心打开端口80828000,您可以忽略输出的那个部分。

您已经完成了服务器的初始配置,下一步,您将在启动 Seafile 服务之前配置 Apache 网页服务器。

步骤 4 – 配置 Apache Web Server

在此步骤中,您将配置 Apache 网页服务器将所有请求转发到 Seafile. 使用 Apache 以这种方式允许您使用没有端口号的 URL,启用 HTTPS 连接到 Seafile,并利用 Apache 提供的缓存功能以获得更好的性能。

要开始转发请求,您需要在Apache配置中启用proxy_http模块,该模块提供了代理 HTTP 和 HTTPS 请求的功能。

1sudo a2enmod proxy_http

<$>[注] 注: Apache ** rewrite** 和 ** ssl** 模块也需要用于此设置. 您已经在预先条件部分列出的第二个 Apache 教程中启用了这些模块作为配置 Let's Encrypt 的一部分。

接下来,更新your_domain的虚拟主机配置,将请求转发到Seafile文件服务器和Seahub Web接口。

在文本编辑器中打开配置文件:

1sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf

ServerAdminSSLCertificateKeyFile的行是您在先决条件教程中设置的初始Apache和Let's Encrypt配置的一部分。

 1[label /etc/apache2/sites-enabled/your_domain-le-ssl.conf]
 2
 3<IfModule mod_ssl.c>
 4<VirtualHost *:443>
 5    ServerAdmin admin@your_email_domain
 6    ServerName your_domain
 7    ServerAlias www.your_domain
 8    DocumentRoot /var/www/your_domain/html
 9    ErrorLog ${APACHE_LOG_DIR}/your_domain-error.log
10    CustomLog ${APACHE_LOG_DIR}/your_domain-access.log combined
11
12    Include /etc/letsencrypt/options-ssl-apache.conf
13    SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
14    SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem
15
16    Alias /media  /home/sammy/seafile/seafile-server-latest/seahub/media
17    <Location /media>
18    	Require all granted
19    </Location>
20
21    # seafile fileserver
22    ProxyPass /seafhttp http://127.0.0.1:8082
23    ProxyPassReverse /seafhttp http://127.0.0.1:8082
24    RewriteEngine On
25    RewriteRule ^/seafhttp - [QSA,L]
26
27    # seahub web interface
28    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
29    ProxyPass / http://127.0.0.1:8000/
30    ProxyPassReverse / http://127.0.0.1:8000/
31</VirtualHost>
32</IfModule>

以下位置指令允许访问该目录中的内容。ProxyPassProxyPassReverse指令使Apache作为这个主机的反向代理,将请求转发到//seafhttp到Seafile的Web接口和运行在本地主机端口80008082上的文件服务器。

保存和退出文件。

测试虚拟主机配置中是否存在任何语法错误:

1sudo apache2ctl configtest

如果它报告Syntax OK,那么您的配置没有问题。重新启动Apache,以便更改生效:

1sudo systemctl restart apache2

您现在已经配置了 Apache 作为 Seafile 文件服务器和 Seahub 的反向代理服务器,然后在开始服务之前,您将更新 Seafile 配置中的 URL。

步骤 5 — 更新 Seafile 配置和启动服务

由于您现在正在使用 Apache 来向 Seafile 提供所有请求的代理,您需要在启动 Seafile 服务之前使用文本编辑器在conf 目录中更新 Seafile 配置文件中的 URL。

在文本编辑器中打开ccnet.conf:

1nano /home/sammy/seafile/conf/ccnet.conf

在文件的顶部,在[一般]块中,是SERVICE_URL指令。

1[label Update /home/sammy/seafile/conf/ccnet.conf]
2. . .
3SERVICE_URL=http://www.example.com:8000
4. . .

修改此设置以指向您的域名. 请确保您提供的 URL 使用 HTTPS 协议,并且不包含任何端口号码:

1[label Update /home/sammy/seafile/conf/ccnet.conf]
2. . .
3SERVICE_URL = https://your_domain
4. . .

保存和退出文件,一旦您添加了内容。

现在在文本编辑器中打开seahub_settings.py:

1nano /home/sammy/seafile/conf/seahub_settings.py

在文件中添加一个FILE_SERVER_ROOT设置,以指定文件服务器正在收听文件上传和下载的路径:

1[label Update /home/sammy/seafile/conf/seahub_settings.py]
2# -*- coding: utf-8 -*-
3SECRET_KEY = "..."
4FILE_SERVER_ROOT = 'https://your_domain/seafhttp'
5# ...

保存并退出seahub_settings.py

现在您可以启动 Seafile 服务和 Seahub 接口:

1cd /home/sammy/seafile/seafile-server-7.0.4
2./seafile.sh start
3./seahub.sh start

因为这是你第一次开始Seahub服务,它会提示你创建一个管理员帐户. 输入这个管理员用户的有效电子邮件地址和密码:

 1[secondary_label Output]
 2What is the email for the admin account?
 3[ admin email ] admin@your_email_domain
 4
 5What is the password for the admin account?
 6[ admin password ] password-here
 7
 8Enter the password again:
 9[ admin password again ] password-here
10
11----------------------------------------
12Successfully created seafile admin
13----------------------------------------
14Seahub is started
15
16Done.

在 Web 浏览器中打开 https://your_domain,并使用您的 Seafile 管理员电子邮件地址和密码登录。

Login screen of the Seafile web interface

一旦成功登录,您可以访问管理员界面或创建新的用户。

现在您已经验证了 Web 界面正常工作,您可以在下一步启动这些服务在系统启动时自动启动。

步骤 6 – 允许 Seafile 服务器在系统启动时启动

要允许文件服务器和 Web 接口在启动时自动启动,您可以创建各自的systemd服务文件并激活它们。

為 Seafile 檔案伺服器建立「systemd」服務檔案:

1sudo nano /etc/systemd/system/seafile.service

将以下内容添加到文件中:

 1[label Create /etc/systemd/system/seafile.service]
 2[Unit]
 3Description=Seafile
 4After=network.target mysql.service
 5
 6[Service]
 7Type=forking
 8ExecStart=/home/sammy/seafile/seafile-server-latest/seafile.sh start
 9ExecStop=/home/sammy/seafile/seafile-server-latest/seafile.sh stop
10User=sammy
11Group=sammy
12
13[Install]
14WantedBy=multi-user.target

在这里,ExectStartExecStop行表示启动和停止Seafile服务的命令.该服务将以sammy用户运行。

保存seafile.service和退出。

為 Seahub 網頁接口建立「systemd」服務檔案:

1sudo nano /etc/systemd/system/seahub.service

这与Seafile服务类似,唯一的区别在于Web接口在Seafile服务后启动。

 1[label Create /etc/systemd/system/seahub.service]
 2[Unit]
 3Description=Seafile hub
 4After=network.target seafile.service
 5
 6[Service]
 7Type=forking
 8ExecStart=/home/sammy/seafile/seafile-server-latest/seahub.sh start
 9ExecStop=/home/sammy/seafile/seafile-server-latest/seahub.sh stop
10User=sammy
11Group=sammy
12
13[Install]
14WantedBy=multi-user.target

保存seahub.service和退出。

您可以在 理解 Systemd 单元和单元文件教程中了解有关 systemd 单元文件的更多信息。

最后,要允许 Seafile 和 Seahub 服务在启动时自动启动,请执行以下命令:

1sudo systemctl enable seafile.service
2sudo systemctl enable seahub.service

当服务器重新启动时,Seafile将自动启动。

此时,您已经完成了服务器的设置,现在可以测试每个服务。

步骤 7 – 测试文件同步和共享功能

在此步骤中,您将测试您设置的服务器的文件同步和共享功能,并确保它们正常工作. 要做到这一点,您需要在单独的计算机和/或移动设备上安装 Seafile 客户端程序。

请访问 Seafile 网站上的 下载页面,并按照指示在您的计算机上安装客户端程序的最新版本。 Seafile 客户端可用于各种 Linux 发行版(Ubuntu、Debian、Fedora、Centos/RHEL、Arch Linux)、MacOS 和 Windows。

一旦安装了Seafile客户端,您可以测试文件同步和共享功能。

在您的计算机或设备上打开 Seafile 客户端程序. 接受 Seafile 文件夹的默认位置,然后单击 Next

在下一个窗口中,输入服务器地址、用户名和密码,然后单击 ** 登录**。

在主页上,右键单击我的图书馆并单击同步此图书馆 接受计算机或设备上的位置的默认值。

Seafile client — Sync the default library

将文件,例如文件或照片,添加到我的图书馆 ** 文件夹. 过了一段时间,该文件将上传到服务器. 下面的屏幕截图显示了文件 photo.jpg 复制到我的图书馆 ** 文件夹。

Add a file to the default library from the computer

现在,登录到https://your_domain的 Web 界面,并验证您的文件是否存在于服务器上。

My Library page to verify file sync

点击文件旁边的 Share 以生成您可以共享的此文件的下载链接。

您已经验证了文件同步是否正常工作,并且您可以使用 Seafile 同步和共享来自多个设备的文件和文件夹。

结论

在本教程中,您设置了Seafile服务器的私人实例,现在您可以开始使用该服务器来同步文件,添加用户和组,并在不依赖外部服务的情况下与他们或公众共享文件。

当新版本的服务器可用时,请参阅手册的 升级部分,以了解执行升级的步骤。

Published At
Categories with 技术
comments powered by Disqus