在Ubuntu 24.04 LTS中部署Seafile Pro 11.0云盘系统

大家好!Seafile是著名的云盘、同步盘与企业协作软件,与OwnCloud, NextCloud等程序齐名。它拥有非常优秀的版本控制系统,以及快速高效的多端文件同步能力。我个人使用Seafile已经有9年了,一直非常稳定。

很久之前,我们介绍过Seafile 5.0与Seafile 7.1版本在Linux服务器中的安装。今天,我们介绍一下最新版本Seafile Pro 11.0在Ubuntu 24.04 LTS系统中的部署。Seafile Pro对于个人或者3人以内的组织是完全免费的。

本文作者为香菇肥牛,原文链接为https://qing.su/article/seafile-11-ubuntu-cloud-storage.html, 转载请注明原文链接。谢谢!

 

1. 系统环境需求

本文使用的操作环境是Ubuntu 24.04 LTS 64 bit.  如果您使用Ubuntu 22.04 LTS或者对应的Debian 11/12,基本流程将会类似。

Seafile对服务器配置要求较高。如果您不需使用全文搜索功能,则需要1核 CPU / 2 GB左右的内存。如果需要使用全文搜索功能,则需要2核CPU / 4 GB左右的内存。硬盘容量按照您自己的需求来选择。

在安装开始前,请将您的域名(比如box.qing.su)解析到您的VPS服务器上。请确保您的服务器为干净、新装的系统,系统中没有安装宝塔等面板,且80/443/8000/9200端口未被占用。

接下来,我们就开始一步步安装部署。

 

2. 安装配置MySQL数据库

我们直接从源安装MySQL.

1
2
apt-get update -y && apt-get upgrade -y
apt-get install mysql-server -y

然后执行下面的指令来进行MySQL基础安全设置;全部选择Y即可。

1
mysql_secure_installation

接着,我们设置数据库root账户的密码。需要注意的是,Seafile使用mysql_native_password方式验证,因此在设置密码时我们也要用这种方式。

1
mysql -u root -p
1
2
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'ROOT_PASSWORD';
QUIT;

这样,我们就设置好了MySQL数据库的root账户密码。在Seafile安装过程中,安装脚本会引导我们再新建一个用户及3个数据库。

 

3. 安装Seafile程序

然后,我们在SSH中使用一键脚本安装Seafile程序。首先,从官网下载安装包(点这里查看最新安装包)。

1
2
3
4
5
6
wget "https://download.seafile.com/d/6e5297246c/files/?p=%2Fpro%2Fseafile-pro-server_11.0.16_x86-64_Ubuntu.tar.gz&dl=1" -O seafile-pro.tar.gz
tar zxf *.gz
mkdir /opt/seafile
mv seafile-pro-server-11.0.16 /opt/seafile/
cd /opt/seafile/seafile-pro-server-11.0.16
apt-get install -y python3 python3-dev python3-setuptools python3-pip libmysqlclient-dev ldap-utils libldap2-dev python3.12-venv memcached libmemcached-dev

Seafile不能运行在root用户中。我们新建一个seafile用户,用来运行Seafile程序。

1
2
adduser seafile
chown -R seafile: /opt/seafile

这个seafile用户仅仅是用来运行Seafile程序的,我们并不希望它能够登录SSH,造成安全隐患。因此,最好设置禁止seafile用户登录SSH.  编辑文件/etc/ssh/sshd_config, 加入下面一行

1
DenyUsers seafile

保存退出,然后重启SSH服务。

1
service ssh restart

这样,seafile用户就不能登录SSH了。

接下来,安装Seafile需要的Python组件。需要注意的是,从Ubuntu 24.04开始,Python组件默认运行于虚拟环境(VENV),而非系统全局,以避免程序之间的依赖冲突。因此,我们需要生成一个虚拟环境,并在VENV中安装组件。

1
2
3
4
5
su seafile
python3 -m venv python-venv
./python-venv/bin/pip3 install --timeout=3600 django==4.2.* future==0.18.* mysqlclient==2.1.* \
pymysql pillow==10.2.* pylibmc captcha==0.5.* markupsafe==2.0.1 jinja2 sqlalchemy==2.0.18 \
psd-tools django-pylibmc django_simple_captcha==0.6.* djangosaml2==1.5.* pysaml2==7.2.* pycryptodome==3.16.* cffi==1.16.0 lxml python-ldap==3.4.3

组件安装完毕后,使用一键脚本安装Seafile。

1
2
source ./python-venv/bin/activate
./setup-seafile-mysql.sh

根据脚本提示,输入网站名(随便写), 域名, 自行设定的数据库用户名(我这里用的是seafileuser), 密码,以及将要建立的三个数据库名等,如下图。请注意,数据库服务器地址需要写127.0.0.1,如果写localhost之后会运行失败。

脚本执行完毕后,会看到类似下面的提示,说明安装成功了。

然后,配置memcached.  编辑文件/opt/seafile/conf/seahub_settings.py, 加入下面一段:

1
2
3
4
5
6
CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
    },
}

之前说过,Seafile使用mysql_native_password方式验证密码,因此我们还需要设置刚才一键脚本中新建的seafileuser数据库账户的密码。用exit返回root用户,然后登录MySQL.

1
2
exit
mysql -u root -p
1
2
ALTER USER 'seafileuser'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASSWORD';
QUIT;

这样,我们就可以运行Seafile了。

1
2
3
4
su seafile
source /opt/seafile/seafile-server-latest/python-venv/bin/activate
/opt/seafile/seafile-server-latest/seafile.sh start
/opt/seafile/seafile-server-latest/seahub.sh start

第一次运行时,会提示新建管理员用户名核密码。

如果没有上面几步都没有报错,说明Seafile已经安装成功。

 

4. 安装配置Nginx反代与Let’s Encrypt SSL

刚刚安装好的Seafile默认监听本地8000端口,且默认不开启远程访问。我们最好用web服务器反代一下Seafile,这样也便于后面配置SSL.  这里我们用简单的Nginx来配置。回到root用户后,执行下面的指令。

1
apt-get install nginx certbot python3-certbot-nginx -y

新建一个配置文件 /etc/nginx/conf.d/seafile.conf, 加入下面的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
log_format seafileformat '$http_x_forwarded_for $remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_response_time';

server {
    listen 80;
    server_name box.qing.su;

    proxy_set_header X-Forwarded-For $remote_addr;

    location / {
        proxy_pass         http://127.0.0.1:8000;
        proxy_set_header   Host $http_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_read_timeout  1200s;
        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;
        proxy_send_timeout  36000s;
        send_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;
    }
}

请将上面的box.qing.su替换成你自己的域名。然后重新载入Nginx配置使其生效。

1
2
nginx -t
service nginx reload

这时,我们访问http://box.qing.su (替换为你自己的域名),就能看到类似下面的登录界面了。

最后,用Certbot一键部署Let’s Encrypt SSL.  执行:

1
certbot --nginx --hsts --staple-ocsp -d box.qing.su

请将上面的box.qing.su替换为你自己的域名。这里我们还需要稍微修改一下Nginx配置,否则HTTPS登录时会报错。编辑/etc/nginx/conf.d/seafile.conf, 在443端口的location /模块中增加一行:

1
proxy_set_header X-Forwarded-Proto https;

保存退出,并重新载入使其生效。

1
2
nginx -t
service nginx reload

至此,Seafile程序安装完毕,我们可以登录使用,并且下载安装客户端同步文件了。

 

5. 配置Seafile开机后自动启动

刚刚安装好的Seafile主要由两个模块组成,Seafile与Seahub。我们需要分别配置这两个模块开机启动。由于Seafile与Seahub的运行需要启用Python虚拟环境,因此配置开机启动也比较麻烦。首先新建一个启动脚本 /opt/seafile/startup.sh, 内容如下。

1
2
3
4
5
6
7
8
#!/bin/bash
dir_name="/opt/seafile"
source "${dir_name}/seafile-server-latest/python-venv/bin/activate"
script="$1"
shift 1

echo "${dir_name}/seafile-server-latest/${script}" "$@"
"${dir_name}/seafile-server-latest/${script}" "$@"

保存退出后,给这个脚本执行权限。

1
chmod +x /opt/seafile/startup.sh

然后,依次新建seafile与seahub的SystemD服务。

新建文件/etc/systemd/system/seafile.service, 内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=Seafile
After=network.target mysql.service

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

[Install]
WantedBy=multi-user.target

新建文件/etc/systemd/system/seahub.service,内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Seafile hub
After=network.target mysql.service seafile.service

[Service]
Type=forking
ExecStart=bash /opt/seafile/startup.sh seahub.sh start
ExecStop=bash /opt/seafile/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target

然后,设置开机启动Seafile与Seahub服务。

1
2
3
systemctl daemon-reload
systemctl enable seafile.service
systemctl enable seahub.service

这样,就配置好了Seafile的开机自动启动。

 

6. 安装ElasticSearch (可选)

Seafile作为多功能云盘程序,不仅可以用来作为储存,也可以用来办公协作。如果需要实现文件的全文搜索功能,就要安装ElasticSearch.  我们可以直接用Docker来安装。

首先安装Docker.

1
2
3
4
5
6
7
apt-get install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

然后,使用Docker安装ElasticSearch.

1
2
3
4
5
6
7
8
9
10
docker pull elasticsearch:7.16.2
mkdir -p /opt/seafile-elasticsearch/data  && chmod -R 777 /opt/seafile-elasticsearch/data/
docker run -d \
--name es \
-p 9200:9200 \
-e "discovery.type=single-node" -e "bootstrap.memory_lock=true" \
-e "ES_JAVA_OPTS=-Xms2g -Xmx2g" -e "xpack.security.enabled=false" \
--restart=always \
-v /opt/seafile-elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.16.2

这样就装好了ElasticSearch.  程序运行于9200端口,我们可以禁止相关端口的远程访问,仅允许本地访问。

1
2
ufw deny 9200
ufw deny 8000

配置Seafile, 使其能够调用ElasticSearch.  编辑文件 /opt/seafile/conf/seafevents.conf, 找到其中[INDEX FILES]语段,作如下设置。

1
2
3
enabled = true
es_host = 127.0.0.1
es_port = 9200

最后,重启seafile与seahub服务。

1
2
service seafile restart
service seahub restart

这样,我们就安装配置好了ElasticSearch.

 

至此,我们完整地安装并配置好了Seafile Pro 11.0云盘同步盘服务器,可以开始共享和使用了。如果您有任何疑问,欢迎留言,我将尽量解答。本文作者为香菇肥牛,原文链接为https://qing.su/article/seafile-11-ubuntu-cloud-storage.html, 转载请注明原文链接。谢谢!

Leave a Comment