在Ubuntu 16.04上安装Seafile并配置Nginx

在Ubuntu 16.04上安装Seafile并配置Nginx

Seafile是一个跨平台的文件托管工具,包含了适用于Linux和Windows的服务器应用程序,以及适用于Android,iOS,Linux,OS X和Windows的GUI客户端。它支持文件版本控制和快照,双重身份验证,WebDAV(Web-based Distributed Authoring and Versioning),并且可以配合Nginx和Apache使用以启用HTTPS。

Seafile有两个版本:免费的开源社区版和付费的专业版。虽然专业版最多可供3位用户免费使用,本教程还是将使用Seafile的社区版本,使用Nginx作为服务器提供HTTPS连接,后端使用MySQL数据库。

准备Ubuntu环境

注意

本指南是为非root用户编写的,会在需要提升权限的命令之前加上sudo。如果您不熟悉sudo命令,请参阅Linux用户和用户组指南。

1.升级系统:

apt update && apt upgrade

2.使用root权限创建标准用户账户。本例中,我们将创建一个名为 sfadmin 的用户:

adduser sfadmin
adduser sfadmin sudo

3.注销您已登录Linode的root账户,然后以 sfadmin 的身份重新登录:

exit
ssh sfadmin@<your_linode's_ip>

4.现在您应该已经以 sfadmin 的身份登录到您的Linode服务器。请参考保护您的服务器安全指南以提高SSH访问的安全性。

5.设置UFW防火墙规则。UFW是Ubuntu的防火墙控制器,它让设置防火墙规则变得更加简单。有关UFW的更多信息,请参阅使用UFW配置防火墙指南。使用以下命令允许SSH和HTTP(S)通过防火墙:

sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable

之后检查防火墙规则的状态,并以标号列表的形式列出:

sudo ufw status numbered

输出应与下面的示例相似:

Status: active

To                         Action      From
--                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 80                         ALLOW IN    Anywhere
[ 3] 443                        ALLOW IN    Anywhere
[ 4] 22 (v6)                    ALLOW IN    Anywhere (v6)
[ 5] 80 (v6)                    ALLOW IN    Anywhere (v6)
[ 6] 443 (v6)                   ALLOW IN    Anywhere (v6)

注意

如果不希望UFW在22端口上允许来自IPv4与IPv6的SSH连接,您可以删除对应的规则。例如,您可以运行sudo ufw delete 4命令来删除允许来自IPv6的SSH连接通过的规则。

6.设置Linode主机名,这里我们设置为 seafile

sudo hostnamectl set-hostname seafile

7.在/etc/hosts中添加新主机名。该文件的第二行应该类似下面的示例:

127.0.1.1    members.linode.com     seafile

8.首次启动时,您的Linode服务器时区会被设置为UTC(Coordinated Universal Time,世界协调时间)。更改时区是可选项,如果您希望这么做,请运行以下命令:

sudo dpkg-reconfigure tzdata

安装并配置MySQL

1.安装程序将要求您为MySQL的root用户设置密码。请确保您安装的是mysql-server-5.7,而不是mysql-server。这是因为如果您通过mysql-server包安装MySQL,一个来自上游的问题将导致MySQL服务在启动时出现错误。

sudo apt install mysql-server-5.7

2.运行 mysql_secure_installation 脚本:

sudo mysql_secure_installation

有关MySQL的更多信息,请参阅在Ubuntu上安装MySQL指南。

创建可供Nginx使用的TLS证书

如果您还没有SSL/TLS证书,可以现在创建一个。这是一个自签名证书,并让Web浏览器拒绝未经认证的连接。您应该验证浏览器证书的SHA256指纹与服务器证书的SHA256指纹是否相同,并在浏览器中添加例外以永久信任该证书。

1.切换到证书文件存储的路径,并使用密钥创建服务器证书:

cd /etc/ssl
sudo openssl genrsa -out privkey.pem 4096
sudo openssl req -new -x509 -key privkey.pem -out cacert.pem

安装并配置Nginx

1.通过Ubuntu的软件库安装Nginx:

sudo apt install nginx

2.创建站点配置文件。您唯一需要修改的一行是server_name。有关HTTPS的更多配置选项,请参阅Nginx的TLS最佳实践指南。

server{
    listen 80;
    server_name example.com;
    rewrite ^ https://$http_host$request_uri? permanent;
    proxy_set_header X-Forwarded-For $remote_addr;
    }
 server {
    listen 443 ssl http2;
    ssl on;
    ssl_certificate /etc/ssl/cacert.pem;
    ssl_certificate_key /etc/ssl/privkey.pem;
    server_name example.com;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    add_header   Strict-Transport-Security "max-age=31536000; includeSubdomains";
    add_header   X-Content-Type-Options nosniff;
    add_header   X-Frame-Options DENY;
    ssl_session_cache shared:SSL:10m;
    ssl_ciphers  "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH !RC4";
    ssl_prefer_server_ciphers   on;

    fastcgi_param   HTTPS               on;
    fastcgi_param   HTTP_SCHEME         https;

  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;
        client_max_body_size 0;
    }

    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;
        proxy_request_buffering off;
    }

    location /media {
        root /home/sfadmin/sfroot/seafile-server-latest/seahub;
    }
    }

3.禁用默认的站点配置并启用刚刚创建的站点配置:

sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf

4.运行Nginx配置测试并重启Web服务器。如果测试失败,终端会显示简要的错误描述信息,以便您能借此解决问题。

sudo nginx -t
sudo systemctl restart nginx

安装并配置Seafile

1.Seafile手册建议使用特定的目录结构来简化日后的升级过程。在这里我们也会这样做,只不过我们把在sfadmin家目录下创建的目录命名为sfroot,而不是Seafile手册示例中的haiwen

mkdir ~/sfroot && cd ~/sfroot

2.下载Seafile CE Linux服务端安装文件的64位版本。您需要从Seafile官网获取对应的下载链接。取得下载URL后,使用wget命令将其下载至~/sfadmin/sfroot

wget <link>

3.解压tarball,并将压缩包移动到installed目录:

tar -xzvf seafile-server*.tar.gz
mkdir installed && mv seafile-server*.tar.gz installed

4.安装Seafile的依赖包:

sudo apt install python2.7 libpython2.7 python-setuptools python-imaging python-ldap python-mysqldb python-memcache python-urllib3

5.运行安装脚本:

cd seafile-server-* && ./setup-seafile-mysql.sh

6.启动服务端程序。

./seafile.sh start
./seahub.sh start-fastcgi

seahub.sh脚本将创建用于登录Seafile的管理员用户账户。系统会要求您输入登录用的电子邮件账户并创建密码。

7.现在可以通过您Linode服务器的IP地址,或是之前在Nginx的seafile.conf配置文件中设置的server_name,在Web浏览器中访问Seafile。如之前所说,Nginx将重定向至HTTPS连接,由于您创建了自签名证书,因此您的浏览器将警告该HTTPS连接不是私有的。忽略浏览器警告并继续访问该网址,您将看到Seafile的登陆界面。

设置Seafile在服务器启动时自动启动

seafile.shseahub.sh脚本并不会自动在您的Linode服务器重启后运行,需要我们手动进行设置。

1.创建systemd单元文件:

/etc/systemd/system/seafile.service

[Unit]
Description=Seafile Server
After=network.target mysql.service

[Service]
Type=oneshot
ExecStart=/home/sfadmin/sfroot/seafile-server-latest/seafile.sh start
ExecStop=/home/sfadmin/sfroot/seafile-server-latest/seafile.sh stop
RemainAfterExit=yes
User=sfadmin
Group=sfadmin

[Install]
WantedBy=multi-user.target

/etc/systemd/system/seahub.service

[Unit]
Description=Seafile Hub
After=network.target seafile.service

[Service]
Type=oneshot
ExecStart=/home/sfadmin/sfroot/seafile-server-latest/seahub.sh start-fastcgi
ExecStop=/home/sfadmin/sfroot/seafile-server-latest/seahub.sh stop
RemainAfterExit=yes
User=sfadmin
Group=sfadmin

[Install]
WantedBy=multi-user.target

2.之后启动服务:

sudo systemctl enable seafile
sudo systemctl enable seahub

您可以使用以下命令验证服务是否成功启动:

sudo systemctl status seafile
sudo systemctl status seahub

3.重新启动Linode服务器验证自启动脚本是否生效。服务器启动后,当运行上一步中的验证命令时,Seafile和Seahub都应处于活跃状态。同样的,此时您应该也可以在浏览器中访问Seafile服务。

升级Seafile

有多种方法可供您升级Seafile。请参阅Seafile手册以了解最适合您需求的升级说明。

更多信息

要想获取该主题的其他信息,你可能需要参考以下资源。虽然我们出于帮助您的目的提供了这些资料,但请注意我们无法保证这些站外资源的准确性与时效性。

本文的版权归 苏易北 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿天地

Spring Cloud中如何保证各个微服务之间调用的安全性

一.背景 微服务架构下,我们的系统根据业务被拆分成了多个职责单一的微服务。 每个服务都有自己的一套API提供给别的服务调用,那么如何保证安全性呢? 不是说你想调...

667140
来自专栏Brian

Mac 配置终端环境

Mac 配置终端开发环境 ---- 概述 作为一个服务端开发人员基本上都是通过终端和服务器打交道,所以一个好个开发人员那么他的终端配置也是高效的。“工欲善事必先...

459110
来自专栏JadePeng的技术博客

K8S集群安装

主要参考 https://github.com/opsnull/follow-me-install-kubernetes-cluster

74720
来自专栏Netkiller

高级运维工程师面试题(更新中)

高级运维工程师 服务器硬件 RAID 磁盘阵列 简述 RAID? RAID 0 5 6 10 50 都适用于那些场景? 数据库适用那种 RAID? RAID 1...

1.2K40
来自专栏别先生

一脸懵逼学习Nginx及其安装,Tomcat的安装

1:Nginx的相关概念知识:   1.1:反向代理:     反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然...

267100
来自专栏Laoqi's Linux运维专列

Kubernetes 1.8.6 集群部署–所遇到的问题(八)

49950
来自专栏Android干货

Android项目实战(二十五):Android studio 混淆+打包+验证是否成功

36270
来自专栏从零开始学 Web 前端

linux内核移植过程问题总结

移植内核:2.6.30.4 内核根目录下的.config为当前配置内核的且已经配置好的内核配置。make zImage以此为依据 配置内核的过程: cd lin...

40020
来自专栏逸鹏说道

直传文件到Azure Storage的Blob服务中

题记:为了庆祝获得微信公众号赞赏功能,忙里抽闲分享一下最近工作的一点心得:如何直接从浏览器中上传文件到Azure Storage的Blob服务中。 为什么 如果...

37770
来自专栏抠抠空间

rest_framework基础

16900

扫码关注云+社区

领取腾讯云代金券