跳至正文

Ubuntu 搭建 Seafile 开源私有云盘

前言

在之前的文章中,我们在 Windows 平台上部署 Seafile 服务器,但 Windows 版 Seafile 已经停止更新,距离最后一次更新2016年已经过去了6年。而目前 Seafile 继续更新的平台只有 Linux 和树莓派,若要获得 Seafile 更好的性能和安全性改进,就必须抛弃 Windows 平台转向 Linux 下部署 Seafile 服务器,以得到最新的功能。

部署平台

  • Ubuntu 20.04

服务器内存需求

最低内存需求 2GB,建议内存 2GB 更高。

部署方式

使用 Seafile 一键安装脚本

Seafile 官方的安装脚本可以帮助您快速安装好 Seafile 服务器,并配置好 MariaDB, Memcached, WebDAV, Ngnix 和开机自启动。

Github地址:https://github.com/haiwen/seafile-server-installer-cn

Coding镜像地址:https://kingsonho.coding.net/public/seafile/seafile-server-installer-cn/git/files

*一键安装部署方式可以查看一键安装脚本内的说明,本文章将会详细讲解手动部署 Seafile 服务器的过程,有关使用 Docker 部署 Seafile 的方式将会在下篇文章推出,自 Seafile 8.0 版本开始官方建议使用一键安装脚本或者通过 Docker 去部署 Seafile 以减少不必要的错误。

手动部署 Seafile 服务器

安装 Mariadb 数据库
sudo apt update
sudo apt install mariadb-server -y
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
mysql_secure_installation

下载最新的服务器安装包

目前Linux服务端最新版本为 9.0.5,进入 /opt 目录并且下载安装包。

cd /opt
sudo wget https://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_9.0.5_x86-64.tar.gz

创建 /opt/seafile 目录并且将安装包解压入去。

sudo mkdir /opt/seafile
sudo mv /opt/seafile-server_9.0.5_x86-64.tar.gz /opt/seafile
cd /opt/seafile
sudo tar -xzf seafile-server_9.0.5_x86-64.tar.gz
sudo rm seafile-server_9.0.5_x86-64.tar.gz

完成操作后目录结构应该为这样。

seafile
└── seafile-server-9.0.5
    ├── check_init_admin.py
    ├── reset-admin.sh
    ├── runtime
    ├── seaf-fsck.sh
    ├── seaf-fuse.sh
    ├── seaf-gc.sh
    ├── seafile
    ├── seafile.sh
    ├── seahub
    ├── seahub.sh
    ├── setup-seafile-mysql.py
    ├── setup-seafile-mysql.sh
    ├── setup-seafile.sh
    ├── sql
    └── upgrade
预安装软件

安装 Seafile 服务器之前,请确认已安装以下软件:

适用于Seafile 9.0.x 版本

apt-get install -y python3 python3-setuptools python3-pip python3-ldap memcached openjdk-8-jre libmemcached-dev libreoffice-script-provider-python libreoffice pwgen curl nginx libmysqlclient-dev
systemctl enable nginx
pip3 install --timeout=3600 django==3.2.* future mysqlclient pymysql Pillow pylibmc captcha markupsafe==2.0.1 jinja2 sqlalchemy==1.4.3 psd-tools django-pylibmc django-simple-captcha pycryptodome==3.12.0 cffi==1.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
service memcached start
systemctl enable memcached
配置 Nginx
rm /etc/nginx/sites-enabled/*
nano /etc/nginx/sites-available/seafile.conf
server {
    listen 80;
    server_name seafile.example.com;

    proxy_set_header X-Forwarded-For $remote_addr;

    location / {
         proxy_pass         http://127.0.0.1:8000;
         proxy_set_header   Host $host;
         proxy_set_header   X-Real-IP $remote_addr;
         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header   X-Forwarded-Host $server_name;
         proxy_set_header   X-Forwarded-Proto $scheme;
         proxy_read_timeout  1200s;

         # used for view/edit office file via Office Online Server
         client_max_body_size 0;

         access_log      /var/log/nginx/seahub.access.log seafileformat;
         error_log       /var/log/nginx/seahub.error.log;
    }

    location /seafhttp {
         rewrite ^/seafhttp(.*)$ $1 break;
         proxy_pass http://127.0.0.1:8082;
         client_max_body_size 0;
         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_connect_timeout  36000s;
         proxy_read_timeout  36000s;

        access_log      /var/log/nginx/seafhttp.access.log seafileformat;
        error_log       /var/log/nginx/seafhttp.error.log;
    }
    location /media {
        root /opt/seafile/seafile-server-latest/seahub;
    }
    location /seafdav {
        proxy_pass         http://127.0.0.1:8080/seafdav;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_read_timeout  1200s;

        client_max_body_size 0;

        access_log      /var/log/nginx/seafdav.access.log seafileformat;
        error_log       /var/log/nginx/seafdav.error.log;
    }
}

替换 server_name 为你的域名或 IP

*若服务器 HTTP 或 HTPPS 服务不是用正常 80 和 443端口,请自行更改里面的 proxy_set_header Host $host;proxy_set_header Host $host:你的端口;

检查 Nginx 文件

nginx -t

创建链接

ln -sf /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf

重启 Nginx

service nginx restart
创建 Seafile 数据库
cd /opt/seafile/seafile-server-9.0.5
./setup-seafile-mysql.sh

根据安装脚本的提示进行设置,在这里, 将会被要求选择一种创建 Seafile 数据库的方式:

-----------------------------------------------------
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 ]
  • 如果选择1, 你需要提供 MySQL 的 root 密码. 脚本程序会自动创建数据库和用户。
  • 如果选择2,需要提前手动创建 ccnet / seafile /seahub 数据库。

若安装成功将可以看到以下输出。

--------------------------------------------------------------------
Your seafile server configuration has been finished successfully.
--------------------------------------------------------------------

run seafile server: ./seafile.sh { start | stop | restart }
run seahub server: ./seahub.sh { start | stop | restart }

--------------------------------------------------------------------
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://download.seafile.com/published/seafile-manual/home.md
for information.

现在Seafile的目录结构应该像这样:

seafile
├── ccnet
├── conf
│   ├── ccnet.conf
│   ├── gunicorn.conf.py
│   ├── seafdav.conf
│   ├── seafile.conf
│   └── seahub_settings.py
├── seafile-data
│   └── library-template
├── seafile-server-9.0.5
│   ├── check_init_admin.py
│   ├── reset-admin.sh
│   ├── runtime
│   ├── seaf-fsck.sh
│   ├── seaf-fuse.sh
│   ├── seaf-gc.sh
│   ├── seafile
│   ├── seafile.sh
│   ├── seahub
│   ├── seahub.sh
│   ├── setup-seafile-mysql.py
│   ├── setup-seafile-mysql.sh
│   ├── setup-seafile.sh
│   ├── sql
│   └── upgrade
├── seafile-server-latest -> seafile-server-9.0.5
└── seahub-data
    └── avatars

*seafile-server-latest 文件夹为指向当前 Seafile 服务器文件夹的符号链接. 将来你升级到新版本后, 升级脚本会自动更新使其始终指向最新的 Seafile 服务器文件夹.

启动 Seafile
  • 启动 Seafile:
cd /opt/seafile/seafile-server-latest
./seafile.sh start
  • 启动 Seahub
./seahub.sh start

* 第一次启动 seahub 时,seahub.sh 脚本会提示你创建一个 seafile 管理员帐号。

*由于7.0.x 版本之后,8000端口默认监听在127.0.0.1地址上,将无法直接通过8000端口访问Seafile服务,所以需要配置反向代理。

修改 SERVICE_URL 和 FILE_SERVER_ROOT

还需要更新 SERVICE_URL 和 FILE_SERVER_ROOT 这两个配置项。否则无法通过 Web 正常的上传和下载文件。

Seafile 5.0 版本开始,可以直接登陆 Seafile 页面在系统设置中来设置这两个值 (注意,如果同时在 Web 界面和配置文件中设置了这个值,以 Web 界面的配置为准。)

SERVICE_URL: http://www.myseafile.com
FILE_SERVER_ROOT: http://www.myseafile.com/seafhttp

重新启动 Seafile 和 Seahub,修改地址之后需要重启 Seafile 服务器

cd /opt/seafile/seafile-server-latest
./seafile.sh restart
./seahub.sh restart
创建 systemd service 文件使 Seafile 开机自启动
sudo nano /etc/systemd/system/seafile.service
[Unit]
Description=Seafile
# add mysql.service or postgresql.service depending on your database to the line below
After=network.target mariadb.service

[Service]
Type=forking
ExecStart=/opt/seafile/seafile-server-latest/seafile.sh start
ExecStop=/opt/seafile/seafile-server-latest/seafile.sh stop
LimitNOFILE=infinity
User=root
Group=root

[Install]
WantedBy=multi-user.target
sudo systemctl enable seafile.service
sudo nano /etc/systemd/system/seahub.service
[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
Type=forking
# change start to start-fastcgi if you want to run fastcgi
ExecStart=/opt/seafile/seafile-server-latest/seahub.sh start
ExecStop=/opt/seafile/seafile-server-latest/seahub.sh stop
User=root
Group=root

[Install]
WantedBy=multi-user.target
sudo systemctl enable seahub.service

参考文档:https://cloud.seafile.com/published/seafile-manual-cn/deploy/README.md


发表评论须遵守中华人民共和国相关法律法规。违规评论将会被删除。

Comments must subject to the relevant laws and regulations of the People’s Republic of China. Offending comments will be deleted.

发表回复

您的电子邮箱地址不会被公开。