Seafile 是国产开源的一个自建网盘,作为网盘十分优越,客户端支持多平台,支持团队协作,可以在线编辑Office文件,最重要的是支持自行部署。
Seafile 是一个可自建的网盘。社区版开源免费,pro版闭源收费。最初自建网盘的时候考虑过 NextCloud Cloudreve 但最终还是选择了 Seafile。
本文跟官方 Docker 教程不同,官方教程是使用了 seafile 镜像内置的 Nginx 来处理 ssl,很方便,但占用了 443 端口,会导致这个服务器不方便部署别的服务。因此本文在官方教程基础上进行了修改。seafile 容器暴露 8000 端口,映射容器 80 端口,宿主机和容器间不加密通信,用宿主机的 Nginx 反代到 8000 端口并处理https
先浏览器打开英文版官方网站,再去 customer center 注册账号并登录。 就可以免费下载pro版。
官方教程 Deploy Seafile Pro Edition
docker pull docker.seadrive.org/seafileltd/seafile-pro-mc:latest
docker 和 docker-compose请自行在本博客中搜索相应文章
#创建数据存储目录,本文存放在 `/opt/seafile` 下,目录可以自己定义;如自己定义了目录请一并修改 `docker-compose.yml` 中的目录
mkdir -p /opt/seafile/data && mkdir -p /opt/seafile/mysql/db && mkdir -p /opt/seafile/elasticsearch/data
cd /opt/seafile
chmod 777 -R elasticsearch/data/ # seafile版本9以上需要
vim docker-compose.yml
填入以下内容
version: '2.0'
services:
db:
image: mariadb:10.5
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=frae439DFREW32 # Requested, set the root's password of MySQL service.
- MYSQL_LOG_CONSOLE=true
volumes:
- /opt/seafile/mysql/db:/var/lib/mysql # Requested, specifies the path to MySQL data persistent store.
networks:
- seafile-net
memcached:
image: memcached:1.6
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile-net
elasticsearch:
image: elasticsearch:7.16.2
container_name: seafile-elasticsearch
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 2g
volumes:
- /opt/seafile/elasticsearch/data:/usr/share/elasticsearch/data # Requested, specifies the path to Elasticsearch data persistent store.
networks:
- seafile-net
seafile:
image: docker.seadrive.org/seafileltd/seafile-pro-mc:latest
container_name: seafile
ports:
- "127.0.0.1:8000:80"
# - "127.0.0.1:4433:443" # If https is enabled, cancel the comment.
volumes:
- /opt/seafile/data:/shared # Requested, specifies the path to Seafile data persistent store.
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=frae439DFREW32 # Requested, the value should be root's password of MySQL service.
- TIME_ZONE=Asia/Shanghai # Optional, default is UTC. Should be uncomment and set to your local time zone.
- SEAFILE_ADMIN_EMAIL=你的邮箱 # Specifies Seafile admin user, default is 'me@example.com'
- SEAFILE_ADMIN_PASSWORD=Password # Specifies Seafile admin password, default is 'asecret'
- SEAFILE_SERVER_LETSENCRYPT=false # Whether to use https or not
- SEAFILE_SERVER_HOSTNAME=example.seafile.com # Specifies your host name if https is enabled
depends_on:
- db
- memcached
- elasticsearch
networks:
- seafile-net
networks:
seafile-net:
server {
listen 80;
server_name example.com default_server;
location / {
rewrite ^ https://$host$request_uri? permanent;
}
}
server {
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
server_name example.com;
add_header Strict-Transport-Security max-age=15768000;
client_max_body_size 10m;
location / {
proxy_pass http://127.0.0.1:8000/;
proxy_read_timeout 310s;
# 重要
proxy_redirect http:// https://;
proxy_set_header Host $host;
proxy_set_header Forwarded "for=$remote_addr;proto=$scheme";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Connection "";
proxy_http_version 1.1;
client_max_body_size 0;
access_log /var/log/nginx/seafile.access.log;
error_log /var/log/nginx/seafile.error.log;
}
}
重启 Nginx
systemctl reload nginx
systemctl restart nginx
Seafile 的配置文件存放在 shared/seafile/conf
目录下,您可以根据Seafile手册 的指导来修改这些配置项。
一旦修改了配置文件,您需要重启服务以使其生效: 推荐这个:
docker-compose restart
docker-compose logs -f
Seafile 容器中 Seafile 服务本身的日志文件存放在 /shared/logs/seafile
目录下,或者您可以在宿主机上 Seafile 容器的卷目录中找到这些日志,例如:/opt/seafile/data/logs/seafile
同样 Seafile 容器的系统日志存放在 /shared/logs/var-log
目录下,或者宿主机目录 /opt/seafile/data/logs/var-log
。
登录网站,进入 https://你的域名/sys/users/
,添加用户,然后把用户设置成管理员。
服务器运行脚本增加,确保各容器正常运行,然后执行以下命令:
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh
根据提示输入用户名和密码,您现在有了一个新的管理帐户。
在Web界面上传大文件时,如果网络不可靠,则可能会中断上传。如果上传可以从上次停止的地方恢复,将会很方便。在 Seafile 专业版 4.4.0及更新版本中,支持断点续传功能。
断点续传的工作原理如下:
限制:
只支持重新上传;文件更新和文件夹上传无法断点续传。
只支持 Chrome, Firefox, IE 10+ 。
要启用断点续传功能,请添加如下配置到 seahub_settings.py 中:
ENABLE_RESUMABLE_FILEUPLOAD = True
在 Seafile 集群中,为了使此功能如期工作,必须执行以下两个特殊配置之一: