大家好!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, 转载请注明原文链接。谢谢!