如何在 CentOS 7 上使用 Nginx 安装 Seafile
在此页
- 先决条件
- 第 1 步 - 为 Seafile 准备 CentOS
- 第 2 步 - 安装 Seafile 依赖项
- 第 3 步 - 配置 MariaDB
- 第 4 步 - 安装 Seafile
- 第 5 步 - 配置 Seafile 和 Seahub 服务
- 第 6 步 - 生成 SSL 证书文件
- 第 7 步 - 将 Nginx 配置为反向代理
- 第 8 步 - 配置 FirewallD
- 第 9 步 - 测试 Seafile
- 结论
Seafile 是一种私有云软件,提供与 Dropbox、mega.co.nz 等类似的功能,只是托管在您自己的服务器上。 Seafile 基于 python 编程语言,并在开源许可下发布,因此您可以创建自己的私有云,并且会更加安全。
Seafile 支持加密以安全地存储您的数据。要对存储库中的文件进行加密,您需要在创建库时设置密码。密码不会存储在 Seafile 云中。因此,即使是服务器管理员也无法在没有密码的情况下查看您的加密数据。
在本教程中,我将在 CentOS 7 上安装 Seafile,使用 Nginx Web 服务器和 MariaDB 作为数据库服务器。
先决条件
- CentOS 7 服务器
- 根权限
第 1 步 - 为 Seafile 准备 CentOS
使用您的 ssh root 密码登录到 centOS 服务器。
ssh
TYPE YOUR PASSWORD
使用 vim 编辑 SELinux 配置文件。
vim /etc/sysconfig/selinux
用 disabled 替换 value enforcing。
SELINUX=disabled
保存文件并退出编辑器。
重新启动服务器以应用 SELinux 策略的更改。
reboot
等待服务器重新启动,然后以 root 用户身份再次登录到您的服务器。
使用以下命令检查 selinux:
getenforce
您应该会看到 Disabled 作为结果。
第 2 步 - 安装 Seafile 依赖项
Seafile是基于python的,所以我们需要先安装python进行安装。 Seafile 支持 SQLite 和 MySQL/MariaDB 数据库,我将在这里使用 MariaDB 作为 Seafile 的数据库,因为它提供比 SQLite 更好的性能。 Nginx 被用作 Seafile 和 Seahub 的反向代理。
在这一步中,我们将安装几个 python 包,MariaDB 和 Nginx。我们首先在我们的 CentOS 服务器上安装 EPEL 存储库。
yum -y install epel-release
接下来,安装 python 包、MariaDB 和 Nginx。
yum -y install python-imaging MySQL-python python-simplejson python-setuptools mariadb mariadb-server nginx
等待所有软件包安装完毕。
第 3 步 - 配置 MariaDB
在第2步中,我们已经安装好了MariaDB服务器,现在我们只需要启动该服务并配置root密码即可。
启动 MariaDB 并使用以下命令配置 root 密码:
systemctl start mariadb
mysql_secure_installation
输入您的根密码。
Set root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
MariaDB root 密码已配置,我们现在可以登录 mysql shell。
注意:MariaDB 命令行 shell 名为 mysql。
我们将为 seafile 创建 3 个数据库:
- ccnet_db
- seafile_db
- seahub_db
我们将使用密码 yourpassword 创建一个新用户 seacloud。用安全密码替换您的密码!
使用 mysql 客户端登录到 mysql shell。
mysql -u root -p
TYPE YOUR PASSWORD
运行下面的 mysql 查询来为 seafile 安装创建数据库和用户。
create database ccnet_db character set = 'utf8';
create database seafile_db character set = 'utf8';
create database seahub_db character set = 'utf8';
create user identified by 'yourpassword';
flush privileges;
exit
将上述命令中的 yourpassword 替换为您自己的密码。

第 4 步 - 安装 Seafile
在这一步中,我们将安装 Seafile。 Seafile 将在 nginx 用户下执行,因此我们可以使用 nginx 作为 seafile 和 seahub 服务的反向代理。
我们将在 /var/www/seafile 目录下以 nginx 用户安装 seafile,创建该目录并使用 cd 进入。
mkdir -p /var/www/seafile
cd /var/www/seafile
使用 wget 命令下载 Seafile,并解压缩下载的存档。
wget https://bintray.com/artifact/download/seafile-org/seafile/seafile-server_6.0.5_x86-64.tar.gz
tar -xzvf seafile-server_6.0.5_x86-64.tar.gz
将目录重命名为 seafile-server 并切换到该目录。
mv seafile-server-6.0.5 seafile-server
cd seafile-server/
执行setup-seafile-mysql.sh 文件来配置数据库。
./setup-seafile-mysql.sh
按 Enter 键,系统会要求您提供以下信息:
- 服务器名称 - 我将使用服务器主机名 natsume
- 服务器 ip 或域 - 服务器的 ip 地址,在我的例子中是 192.168.1.115
- 默认数据目录 - 只需按 Enter
- 默认端口 - 按 Enter
- 现在进行数据库配置,选择数字 2
对于 MySQL 配置:
- 使用默认主机 - localhost
- 默认端口 - 3306
- mysql 用户 - seacloud
- 密码是 yourpassword
- ccnet 数据库是 ccnet_db
- seafile 数据库是 seafile_db
- seahub 数据库是seahub_db
按回车键,脚本将为 seafile 创建数据库表。

现在我们可以启动 seafile 和 seahub 服务了。
./seafile.sh start
./seahub.sh start
当执行 seahub.sh 文件时,我们将被要求提供管理配置。
输入你的管理员邮箱和密码,seahub 服务就会运行。

Seafile 现在已安装并运行,我们可以使用端口 8000 上的服务器 IP(在我的例子中是 192.168.1.115:8000)从 Web 浏览器访问 Seafile,但我们现在不会这样做,因为我们将使用反向代理seafile 服务器,我们将使用 systemd 服务文件运行 seafile。
所以我们需要暂时停止 seafile 和 seahub 服务。
./seafile.sh stop
./seahub.sh stop
第 5 步 - 配置 Seafile 和 Seahub 服务
我们将以 nginx 用户运行 seafile,因此我们需要将 seafile 安装目录和 seahub_cache 目录的所有者更改为 nginx 用户:
cd /var/www/
chown -R nginx:nginx *
chown -R nginx:nginx /tmp/seahub_cache
接下来,转到 systemd 目录并使用 vim 创建一个 seafile.service 文件:
cd /etc/systemd/system/
vim seafile.service
在下面粘贴 seafile 服务配置:
[Unit]
Description=Seafile Server
Before=seahub.service
After=network.target mariadb.service
[Service]
Type=oneshot
ExecStart=/var/www/seafile/seafile-server/seafile.sh start
ExecStop=/var/www/seafile/seafile-server/seafile.sh stop
RemainAfterExit=yes
User=nginx
Group=nginx
[Install]
WantedBy=multi-user.target
保存并退出。
现在创建新的 seahub.service 文件。
vim seahub.service
并在下面粘贴配置。
[Unit]
Description=Seafile Hub
After=network.target seafile.target mariadb.service
[Service]
Type=oneshot
ExecStart=/var/www/seafile/seafile-server/seahub.sh start-fastcgi
ExecStop=/var/www/seafile/seafile-server/seahub.sh stop
RemainAfterExit=yes
User=nginx
Group=nginx
[Install]
WantedBy=multi-user.target
保存并退出。
重新加载 systemd 服务并使用 systemctl 启动 seafile 和 seahub。
systemctl daemon-reload
systemctl start seafile
systemctl start seahub
确保没有错误并检查 seafile 和 seahub 服务是否在端口 8082 和 8000 上运行。
netstat -plntu

第 6 步 - 生成 SSL 证书文件
对于本教程,我们将通过 Nginx 代理运行 seafile,Nginx 将提供安全 (HTTPS) 连接以确保数据安全。我们可以使用免费的 SSL 证书文件或付费的 SSL 证书,这与配置无关。在此步骤中,我将在 /etc/nginx/ssl 目录中生成一个带有 OpenSSL 的自签名 SSL 证书文件。
创建 ssl 目录。
mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl
使用以下命令生成自签名证书文件和 dhparam 文件:
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
openssl req -new -x509 -sha256 -days 365 -newkey rsa:2048 -nodes -keyout server.key -out server.crt
根据 OpenSSL 的要求回答证书详细信息,例如您的姓名、州、电子邮件、域名等。然后更改目录和证书文件的权限。
chmod -R 700 /etc/nginx/ssl
chmod 400 server.*
chmod 400 dhparam.pem
已生成 SSL 证书文件。
第 7 步 - 将 Nginx 配置为反向代理
在此步骤中,我们将 Nginx 配置为 seafile-server 在端口 8000 和 8002 上的反向代理。
转到 nginx 配置目录并为 seafile 创建一个新的虚拟主机文件。
cd /etc/nginx/
vim conf.d/seafile.conf
在下面粘贴虚拟主机配置:
server {
listen 80;
server_name cloud.natsume.co;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name cloud.natsume.co;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4';
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_prefer_server_ciphers on;
location / {
fastcgi_pass 127.0.0.1:8000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REMOTE_ADDR $remote_addr;
access_log /var/log/nginx/seahub.access.log;
error_log /var/log/nginx/seahub.error.log;
fastcgi_read_timeout 36000;
}
# Reverse Proxy for seahub
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://127.0.0.1:8082;
client_max_body_size 0;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
send_timeout 36000s;
}
#CHANGE THIS PATH WITH YOUR OWN DIRECTORY
location /media {
root /var/www/seafile/seafile-server/seahub;
}
}
保存并退出。
我将使用 cloud.natsume.co 作为域名。请在上面的配置中将其替换为您自己的域名。
现在测试 Nginx 配置并确保没有错误。
nginx -t
使用 systemctl 命令启动 Nginx:
systemctl start nginx
确保端口 80 和 443 在 netstat 提供的列表中可用:
netstat -plntu

接下来,我们必须将域名添加到 seafile 配置中。转到 seafile 目录并编辑配置文件。
cd /var/www/seafile/
vim conf/ccnet.conf
将服务 URL 更改为您的域名。
SERVICE_URL = https://cloud.natsume.co
保存并退出。
编辑seahub配置文件。
vim conf/seahub_settings.py
在第二行,添加以下配置:
HTTP_SERVER_ROOT = 'https://cloud.natsume.co/seafhttp'
在此处再次将域名替换为您的域。保存并退出。
重新启动 seafile 并添加所有服务以在启动时启动:
systemctl restart seafile
systemctl restart seahub
systemctl enable nginx
systemctl enable mariadb
systemctl enable seafile
systemctl enable seahub
第 8 步 - 配置 FirewallD
在第 7 步中,我们将 Nginx 配置为使用 HTTP 和 HTTPS 端口。现在我们必须通过将它们添加到 firewalld 在防火墙中打开这些端口。
启动防火墙。
systemctl start firewalld
systemctl enable firewalld
使用以下 firewall-cmd 命令将 HTTP 和 HTTPS 端口添加到防火墙配置中:
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
重新加载防火墙配置并检查端口列表。
firewall-cmd --reload
firewall-cmd --list-all

第 9 步 - 测试 Seafile
打开浏览器,输入 seafile 域名,在我的例子中是 cloud.natsume.co,您将被重定向到 https 连接。
输入您的管理员电子邮件和密码,然后单击登录。

Seafile 管理仪表板:

Seafile 文件视图。

使用 Nginx 作为反向代理和 SSL 的 Seafile 已成功安装在 CentOS 7 服务器上。
结论
在云应用五花八门的今天,Seafile 是一个适合这个时代使用的私有云解决方案。借助库/文件夹级别的加密功能,您可以将数据安全地存储在 Seacloud 服务器上。除此之外,Seafile 很容易在您自己的服务器上配置和实施。