引子
Seafile是一款开源的同步云盘,分为社区版和专业版,社区版相较于企业版会少一些功能,具体区别请见此处。对于专业版,三个用户及以下是免费使用的。以下对Seafile专业版10.x(含内置office预览)安装过程简单记录,对于以下没有涉及到的内容,可以查看服务器手册。
使用docker安装Seafile专业版(含内置office预览)
在使用docker安装Seafile前需要安装docker和docker-compose。
下载并修改 docker-compose.yml
官方提供一个样例,但并不包含office预览部分(在9.0前内置于Seafile中,9.0后独立为单独的镜像office-preview),此处修改docker-compose.yml使其与其他部分一起部署:
services:
db:
image: mariadb:10.11
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=db_dev # 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.18
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile-net
elasticsearch:
image: elasticsearch:8.6.2
container_name: seafile-elasticsearch
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
volumes:
- /opt/seafile-elasticsearch/data:/usr/share/elasticsearch/data # Requested, specifies the path to Elasticsearch data persistent store.
networks:
- seafile-net
# 部署office-preview
office:
image: seafileltd/office-preview:latest
container_name: seafile-office-preview
ports:
- "8089:8089"
command: bash start.sh
volumes:
- /opt/seafile-office-preview/office:/shared
networks:
- seafile-net
seafile:
image: docker.seafile.top/seafileltd/seafile-pro-mc:latest
container_name: seafile
ports:
- "80:80"
# - "443: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=db_dev # Requested, the value shuold 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=me@example.com # Specifies Seafile admin user, default is 'me@example.com'
- SEAFILE_ADMIN_PASSWORD=asecret # Specifies Seafile admin password, default is 'asecret'
- SEAFILE_SERVER_LETSENCRYPT=false # Whether to use https or not
- SEAFILE_SERVER_HOSTNAME=seafile.example.com # Specifies your host name if https is enabled
depends_on:
- db
- memcached
- elasticsearch
- office ## 添加office-preview
networks:
- seafile-net
networks:
seafile-net:
修改MYSQL_ROOT_PASSWORD、DB_ROOT_PASSWD(两者需要相同)、SEAFILE_ADMIN_EMAIL、SEAFILE_ADMIN_PASSWORD和数据目录等设置,并启动Seafile:
docker compose up -d
部署完成后就可以使用http://<你的 seafile 域名>
来打开Seafile。
服务器配置
具体配置文件选项请参考服务器手册。
启用office预览
配置seahub_settings.py,添加以下内容:
SECRET_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
OFFICE_CONVERTOR_ROOT = 'http://office:8089'
在office的配置文件office_convertor_settings.py中的SECRET_KEY要和seahub_settings.py的保持一致
在线预览大小超过上限
Seafile限制office预览的默认大小为2MiB。在seafevents.conf中配置[OFFICE CONVERTER]下的max-size似乎在9.0以后已失效。经查,这一配置需要到seafile镜像中修改,打开镜像中的/opt/seafile/seafile-pro-server-10.0.x/seahub/seahub/utils/__init__.py
文件(其中的x需要替换为相应的版本号),并修改以下配置:
OFFICE_PREVIEW_MAX_SIZE = 2 * 1024 * 1024
OFFICE_PREVIEW_MAX_PAGES = 50
office预览字体不正确
这是由于office-preview中没有包含对应的字体导致的。将字体文件复制到office-preview镜像中的/usr/share/fonts
或其子目录下,然后运行命令fc-cache -fv
即可。如要查看已安装的字体可以使用命令fc-list
,查看中文字体使用命令fc-list :lang=zh
。
使用非常规端口(80,443外的端口)导致头像无法加载、认证问题
需要将nginx配置(位于share\nginx\conf\seafile.nginx.conf)中的$host
改为$http_host
。
webdav 访问无法加载资源(图片等无法显示)
这是由于webdav没有在根目录运行,需要在nginx配置(位于share\nginx\conf\seafile.nginx.conf)中添加
location /:dir_browser {
proxy_pass http://127.0.0.1:8080/:dir_browser;
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_set_header X-Forwarded-Proto $scheme;
}
使用自定义的的css(使其支持黑暗模式等)
seafile自身没有适配黑暗模式,但Seafile支持自定义css,PierreBrisorgueil的SeafileStyle就支持自动黑暗模式,并默认为迷之蓝色。在后台 > 设置 > 定制的 CSS 中填入即可。若只想要他的黑暗模式,可以把没有媒体查询的部分全部放置在媒体查询中:
/******************
MAIN PAGE
*****************/
@media (prefers-color-scheme: dark) {
.star-empty {
color: var(--dark-font);
}
/******************
省略很多很多行
*****************/
.css-1tlqf55 {
color: var(--main-font) !important;
}
}