ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux|运维|docker+centos7部署最新版seafile私有网盘专业版+防病毒查杀+only office集成修订版-2026(可离线部署)

2026/8/26 15:08:34 拓冰建站 浏览量
Linux|运维|docker+centos7部署最新版seafile私有网盘专业版+防病毒查杀+only office集成修订版-2026(可离线部署) 前言Linux|运维|dockercentos7部署最新版seafile私有网盘专业版-2026可离线部署-CSDN博客接上回由于本机一个固态硬盘挂了导致系统崩溃因此上文部署的时候其实是有很多错误的但当时并不知情最终导致其实很多配置是过度或者错误的其次seafile网盘自身是没有在线文档编辑功能的只能在线编辑自身的sdoc类型文档而常用的word文件excel文件csv文件并没有编辑保存功能因此需要添加only office服务并将only office集成到seafile网盘内最后就是文档转换功能比如word文档转换成sdoc文档其次还有一个防病毒保护功能在上传文件的时候检查文件是否带有病毒这个安全功能是专业版独有的因此本文将该功能的完善也说一说最终还有一个文件内容检索功能虽然此功能和商业化的百度网盘相比差很多但也是聊胜于无本文也对如何快速检索文件内容做一个介绍相关离线安装部署的所有镜像和配置文件链接:https://pan.baidu.com/s/1Sy3KX3XxsPNBJX4lUg-Ehw?pwdy7zv 提取码:y7zv 复制这段内容后打开百度网盘手机App操作更方便哦一、架构和功能介绍所需镜像如下共计8个镜像[rootmycomputer ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE seafileltd/seafile-pro-mc 13.0-latest c8ffa835e6f2 5 days ago 1.88GB clamav/clamav latest 05b26ab97d33 2 weeks ago 234MB redis latest 0458cdd27215 2 weeks ago 146MB mariadb 10.11 1a3c5f4fdaa7 2 weeks ago 326MB lucaslorentz/caddy-docker-proxy 2.12-alpine 1d972a2c817f 2 months ago 61.6MB seafileltd/sdoc-server 2.0-latest a6cd4318bb58 9 months ago 1.14GB elasticsearch 8.15.0 a249dfc37cb5 2 years ago 1.26GB onlyoffice/documentserver 8.1.0.1 be37522b27a4 2 years ago 3.75GB1、lucaslorentz/caddy-docker-proxy该镜像是seafile的反代路由管理镜像本文所有流量路由由caddy镜像提供这样做的一个好处是安全底层镜像端口不暴露可以有效保护容器编排系统本文将只暴露端口10087和62332、elasticsearch该镜像是网盘文件内容检索功能的提供者每一个网盘内文件建立内容索引然后通过分词器功能提供检索服务但需要注意的是由于底层是分词器因此并不支持正则表达式该功能和商业化的百度网盘相比要差很多并且该服务也比较吃内存和cpu。因此如果想部署专业版的seafile建议内存至少为4G以上最好是16G3、clamav该镜像提供防病毒功能在上传的文件同时进行病毒扫描如该文件病毒特征比较明显会立刻阻止上传。4、onlyoffice/documentserver该镜像是网盘文件编辑文档转换功能提供者可编辑的文件类型如下ONLYOFFICE_FILE_EXTENSION ( doc, docx, ppt, pptx, xls, xlsx, odt, fodt, odp, fodp, ods, fods, ppsx, pps, csv )可新建的文件类型如下文档间的转换5、mariadb该镜像是整个seafile的元数据保存数据库文件变动变更记录好像也是存在此数据库内数据库存的内容ccnet_db​用户账户、群组、部门、角色、SSO 配置seafile_db​资料库repo元数据、文件夹结构、文件基本信息名字、大小、ID、最新版本号、共享权限seahub_db​前端所有行为数据活动流谁上传了什么、通知、Wiki 页面内容、收藏、标签、评论、WebDAV 令牌、API Token6、seafileltd/seafile-pro-mcseafile私有网盘的主镜像该镜像包含前后端后端Web 层是 Python/Django但底层文件引擎是 C 写的。进程语言干什么的gunicorn​ (多个 worker)Python跑 Djangoseahub处理浏览器请求、API、登录、文件管理页面seaf-server​C核心文件引擎处理同步协议、块存储、版本管理、资料库操作nginx​C容器内部反向代理把 80 端口的请求分发给 gunicorn 和 seaf-serverseaf-daemon​C客户端同步用的后台进程服务器端也有7、seafileltd/sdoc-serverSeaDoc 是 Seafile 的一个扩展组件提供轻量级的在线协作文档编辑能力sdoc文档是seafile私有网盘的专有格式类似markdown文档8、RedisSeafile 13 最重要的架构变更之一从 Seafile 13 开始默认缓存服务器从 Memcached 切换到了 Redis​ 。Redis 的作用Seafile 官方手册明确 Redis 用于缓存大量高频访问的数据包括但不限于用户会话信息session用户头像用户 profile数据库查询结果缓存频繁访问的元数据二、全新部署seafile专业版1、docker runtime环境docker的版本仍然是20.10.1920.10.10之前的版本启动seafile的镜像会报一些莫名其妙的报错主要是容器安全相关的报错解压doker-20.10.19二进制压缩包后所有可执行文件放置到/usr/local/bin目录下systemd脚本如下该脚本不需要做任何修改cat /etc/systemd/system/docker.serviceEOF [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/local/bin/dockerd --graph/var/lib/docker ExecReload/bin/kill -s HUP $MAINPID LimitNOFILEinfinity LimitNPROCinfinity LimitCOREinfinity TimeoutStartSec0 Delegateyes KillModeprocess Restarton-failure StartLimitBurst3 StartLimitInterval60s [Install] WantedBymulti-user.target EOFdocker镜像加速和日志限额配置部分镜像可以直接拉取比如elasticsearch镜像redis镜像如果有此配置的话[rootmycomputer ~]# cat /etc/docker/daemon.json { registry-mirrors: [ https://dockerproxy.com, https://docker.mirrors.ustc.edu.cn, https://docker.nju.edu.cn, https://hub-mirror.c.163.com, https://docker.1ms.run, https://docker.xuanyuan.me, https://docker.m.daocloud.io, https://docker.xuanyuan.me, https://mirror.baidubce.com ], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, live-restore: true, storage-driver: overlay2 }最终docker 的信息如下[rootmycomputer ~]# docker info Client: Context: default Debug Mode: false Plugins: compose: Docker Compose (Docker Inc., v2.27.1) Server: Containers: 8 Running: 8 Paused: 0 Stopped: 0 Images: 8 Server Version: 20.10.19 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true userxattr: false Logging Driver: json-file Cgroup Driver: cgroupfs Cgroup Version: 1 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc Default Runtime: runc Init Binary: docker-init containerd version: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6 runc version: v1.1.4-0-g5fd4c4d1 init version: de40ad0 Security Options: seccomp Profile: default Kernel Version: 5.19.11 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 16 Total Memory: 15.55GiB Name: mycomputer ID: W242:IC5S:W6CT:6DBB:NWFS:BRKD:MPME:MMH3:M3EZ:UTHX:K7UF:JHAV Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Registry Mirrors: https://dockerproxy.com/ https://docker.mirrors.ustc.edu.cn/ https://docker.nju.edu.cn/ https://hub-mirror.c.163.com/ https://docker.1ms.run/ https://docker.xuanyuan.me/ https://docker.m.daocloud.io/ https://mirror.baidubce.com/ Live Restore Enabled: true Product License: Community Engine2、两个重要依赖-容器安全增强和docker compose容器编排插件libseccomp综合考虑了下是必须安装的否则容器会各种报错十分头疼docker-compose 在2版本后拆分成了 docker compose 这样的命令形式yum localinstall libseccomp-2.5.2-1.el8.x86_64.rpm docker-compose-plugin-2.27.1-1.el7.x86_64.rpm -y3、编排配置文件第一、基础环境配置文件.env[rootmycomputer seafile-image-pro]# cat .env ################################# Compose 文件列表 ################################# COMPOSE_FILEseafile-server.yml,caddy.yml,seadoc.yml,onlyoffice.yml,clamav.yml,elasticsearch.yml COMPOSE_PATH_SEPARATOR, ################################# 镜像 ################################# SEAFILE_IMAGEseafileltd/seafile-pro-mc:13.0-latest SEAFILE_DB_IMAGEmariadb:10.11 SEAFILE_REDIS_IMAGEredis SEAFILE_CADDY_IMAGElucaslorentz/caddy-docker-proxy:2.12-alpine SEADOC_IMAGEseafileltd/sdoc-server:2.0-latest ONLYOFFICE_IMAGEonlyoffice/documentserver:8.1.0.1 ################################# 数据卷路径 ################################# SEAFILE_VOLUME/opt/seafile-data SEAFILE_MYSQL_VOLUME/opt/seafile-mysql/db SEAFILE_CADDY_VOLUME/opt/seafile-caddy SEADOC_VOLUME/opt/seadoc-data ONLYOFFICE_VOLUME/opt/onlyoffice ################################# 服务访问地址 ################################# SEAFILE_SERVER_PROTOCOLhttp SEAFILE_SERVER_HOSTNAME192.168.1.8:10087 ################################# 时区 ################################# TIME_ZONEAsia/Shanghai ################################# JWT 密钥 ################################# JWT_PRIVATE_KEY4788a899971f47768a7a3450d8c42186d063aa7a ################################# 数据库 ################################# SEAFILE_MYSQL_DB_HOSTdb SEAFILE_MYSQL_DB_USERseafile SEAFILE_MYSQL_DB_PASSWORD密码 SEAFILE_MYSQL_DB_CCNET_DB_NAMEccnet_db SEAFILE_MYSQL_DB_SEAFILE_DB_NAMEseafile_db SEAFILE_MYSQL_DB_SEAHUB_DB_NAMEseahub_db INIT_SEAFILE_MYSQL_ROOT_PASSWORD密码 ################################# Redis ################################# CACHE_PROVIDERredis REDIS_HOSTredis REDIS_PORT6379 REDIS_PASSWORD ################################# 管理员 ################################# INIT_SEAFILE_ADMIN_EMAILalwaysbefine126.com INIT_SEAFILE_ADMIN_PASSWORD密码 ################################# SeaDoc ################################# ENABLE_SEADOCtrue ################################# OnlyOffice ################################# ONLYOFFICE_PORT6233 ONLYOFFICE_JWT_SECRET4788a899971f47768a7a3450d8c42186d063aa7a IS_PRO_VERSIONtrue这里需要注意密码用中文替代了自行修改即可JWT尽量使用复杂字符串后面要和其它配置文件相对应这里要把端口写好后面编排运行的时候这些变量会自动注入SEAFILE_SERVER_PROTOCOLhttp SEAFILE_SERVER_HOSTNAME192.168.1.8:10087第二、caddy.yml配置文件内容如下services: caddy: image: ${SEAFILE_CADDY_IMAGE:-lucaslorentz/caddy-docker-proxy:2.12-alpine} restart: unless-stopped container_name: seafile-caddy ports: - 10087:10087 - 6233:6233 environment: - CADDY_INGRESS_NETWORKSseafile-net volumes: - /var/run/docker.sock:/var/run/docker.sock - ${SEAFILE_CADDY_VOLUME:-/opt/seafile-caddy}:/data/caddy networks: - seafile-net healthcheck: test: [CMD-SHELL, curl --fail http://localhost:2019/metrics || exit 1] start_period: 20s interval: 20s timeout: 5s retries: 3 networks: seafile-net: name: seafile-net6233端口是only office容器的内部端口第三、 elasticsearch.yml该文件内容如下services: elasticsearch: image: ${SEAFILE_ELASTICSEARCH_IMAGE:-elasticsearch:8.15.0} container_name: seafile-elasticsearch restart: unless-stopped environment: - discovery.typesingle-node - bootstrap.memory_locktrue - ES_JAVA_OPTS-Xms2g -Xmx2g - xpack.security.enabledfalse ulimits: memlock: soft: -1 hard: -1 mem_limit: 4g volumes: - ${SEAFILE_ELASTICSEARCH_VOLUME:-/opt/seafile-elasticsearch/data}:/usr/share/elasticsearch/data networks: - seafile-net networks: seafile-net: name: seafile-net镜像名称那变量不动用.env文件的变量注入如果感觉文件内容检索过慢可以把mem_limit 调高第四、seafile-server.yml[rootmycomputer seafile-image-pro]# cat seafile-server.yml services: db: image: ${SEAFILE_DB_IMAGE:-mariadb:10.11} container_name: seafile-mysql restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-} - MYSQL_LOG_CONSOLEtrue - MARIADB_AUTO_UPGRADE1 volumes: - ${SEAFILE_MYSQL_VOLUME:-/opt/seafile-mysql/db}:/var/lib/mysql networks: - seafile-net healthcheck: test: [ CMD, /usr/local/bin/healthcheck.sh, --connect, --mariadbupgrade, --innodb_initialized, ] interval: 20s start_period: 30s timeout: 5s retries: 10 redis: image: ${SEAFILE_REDIS_IMAGE:-redis} container_name: seafile-redis restart: unless-stopped command: - /bin/sh - -c - exec redis-server --requirepass $$REDIS_PASSWORD --save --appendonly no environment: - REDIS_PASSWORD${REDIS_PASSWORD:-} networks: - seafile-net seafile: image: ${SEAFILE_IMAGE:-seafileltd/seafile-pro-mc:13.0-latest} container_name: seafile restart: unless-stopped #ports: # - 10087:80 # - 8082:8082 volumes: - ${SEAFILE_VOLUME:-/opt/seafile-data}:/shared environment: - INIT_SEAFILE_MYSQL_ROOT_PASSWORD${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-} - SEAFILE_MYSQL_DB_HOST${SEAFILE_MYSQL_DB_HOST:-db} - SEAFILE_MYSQL_DB_PORT${SEAFILE_MYSQL_DB_PORT:-3306} - SEAFILE_MYSQL_DB_USER${SEAFILE_MYSQL_DB_USER:-seafile} - SEAFILE_MYSQL_DB_PASSWORD${SEAFILE_MYSQL_DB_PASSWORD:?Variable is not set or empty} - SEAFILE_MYSQL_DB_CCNET_DB_NAME${SEAFILE_MYSQL_DB_CCNET_DB_NAME:-ccnet_db} - SEAFILE_MYSQL_DB_SEAFILE_DB_NAME${SEAFILE_MYSQL_DB_SEAFILE_DB_NAME:-seafile_db} - SEAFILE_MYSQL_DB_SEAHUB_DB_NAME${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME:-seahub_db} - TIME_ZONE${TIME_ZONE:-Etc/UTC} - INIT_SEAFILE_ADMIN_EMAIL${INIT_SEAFILE_ADMIN_EMAIL:-meexample.com} - INIT_SEAFILE_ADMIN_PASSWORD${INIT_SEAFILE_ADMIN_PASSWORD:-asecret} - SEAFILE_SERVER_HOSTNAME${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty} - SEAFILE_SERVER_PROTOCOL${SEAFILE_SERVER_PROTOCOL:-http} - SITE_ROOT${SITE_ROOT:-/} - NON_ROOT${NON_ROOT:-false} - JWT_PRIVATE_KEY${JWT_PRIVATE_KEY:?Variable is not set or empty} - SEAFILE_LOG_TO_STDOUT${SEAFILE_LOG_TO_STDOUT:-false} - ENABLE_GO_FILESERVER${ENABLE_GO_FILESERVER:-true} - ENABLE_SEADOC${ENABLE_SEADOC:-true} - SEADOC_SERVER_URL${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}/sdoc-server - CACHE_PROVIDER${CACHE_PROVIDER:-redis} - REDIS_HOST${REDIS_HOST:-redis} - REDIS_PORT${REDIS_PORT:-6379} - REDIS_PASSWORD${REDIS_PASSWORD:-} - MEMCACHED_HOST${MEMCACHED_HOST:-memcached} - MEMCACHED_PORT${MEMCACHED_PORT:-11211} - SEAF_SERVER_STORAGE_TYPE${SEAF_SERVER_STORAGE_TYPE:-} - S3_COMMIT_BUCKET${S3_COMMIT_BUCKET:-} - S3_FS_BUCKET${S3_FS_BUCKET:-} - S3_BLOCK_BUCKET${S3_BLOCK_BUCKET:-} - S3_KEY_ID${S3_KEY_ID:-} - S3_SECRET_KEY${S3_SECRET_KEY:-} - S3_USE_V4_SIGNATURE${S3_USE_V4_SIGNATURE:-true} - S3_AWS_REGION${S3_AWS_REGION:-us-east-1} - S3_HOST${S3_HOST:-} - S3_USE_HTTPS${S3_USE_HTTPS:-true} - S3_PATH_STYLE_REQUEST${S3_PATH_STYLE_REQUEST:-false} - S3_SSE_C_KEY${S3_SSE_C_KEY:-} - ENABLE_NOTIFICATION_SERVER${ENABLE_NOTIFICATION_SERVER:-false} - INNER_NOTIFICATION_SERVER_URL${INNER_NOTIFICATION_SERVER_URL:-http://notification-server:8083} - NOTIFICATION_SERVER_URL${NOTIFICATION_SERVER_URL:-${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}/notification} - ENABLE_SEAFILE_AI${ENABLE_SEAFILE_AI:-false} - ENABLE_FACE_RECOGNITION${ENABLE_FACE_RECOGNITION:-false} - SEAFILE_AI_SERVER_URL${SEAFILE_AI_SERVER_URL:-http://seafile-ai:8888} - SEAFILE_AI_SECRET_KEY${JWT_PRIVATE_KEY:?Variable is not set or empty} - MD_FILE_COUNT_LIMIT${MD_FILE_COUNT_LIMIT:-100000} labels: caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty} caddy.reverse_proxy: {{upstreams 80}} healthcheck: test: [CMD-SHELL, curl -f http://localhost:80 || exit 1] interval: 30s timeout: 10s retries: 3 start_period: 10s depends_on: db: condition: service_healthy redis: condition: service_started networks: - seafile-net networks: seafile-net: name: seafile-net该文件下载下来后不做任何改动端口暴露的事还是交给caddy服务去处理port那如果放开了就注释掉第五、seadoc.ymlsservices: seadoc: image: ${SEADOC_IMAGE:-seafileltd/sdoc-server:2.0-latest} container_name: seadoc restart: unless-stopped volumes: - ${SEADOC_VOLUME:-/opt/seadoc-data/}:/shared # ports: # - 80:80 environment: - DB_HOST${SEAFILE_MYSQL_DB_HOST:-db} - DB_PORT${SEAFILE_MYSQL_DB_PORT:-3306} - DB_USER${SEAFILE_MYSQL_DB_USER:-seafile} - DB_PASSWORD${SEAFILE_MYSQL_DB_PASSWORD:?Variable is not set or empty} - DB_NAME${SEADOC_MYSQL_DB_NAME:-${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME:-seahub_db}} - TIME_ZONE${TIME_ZONE:-Etc/UTC} - JWT_PRIVATE_KEY${JWT_PRIVATE_KEY:?Variable is not set or empty} - NON_ROOT${NON_ROOT:-false} - SEAHUB_SERVICE_URL${SEAHUB_SERVICE_URL:-http://seafile} labels: caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty} caddy.1_handle_path: /socket.io/* caddy.1_handle_path.0_rewrite: * /socket.io{uri} caddy.1_handle_path.1_reverse_proxy: {{upstreams 80}} caddy.2_handle_path: /sdoc-server/* caddy.2_handle_path.0_rewrite: * {uri} caddy.2_handle_path.1_reverse_proxy: {{upstreams 80}} depends_on: db: condition: service_healthy networks: - seafile-net networks: seafile-net: name: seafile-netseadoc-server这个服务的配置文件不需要任何修改第六、onlyoffice.ymlservices: onlyoffice: image: ${ONLYOFFICE_IMAGE:-onlyoffice/documentserver:8.1.0.1} restart: unless-stopped container_name: seafile-onlyoffice environment: - JWT_ENABLEDtrue - JWT_SECRET${ONLYOFFICE_JWT_SECRET:?Variable is not set or empty} volumes: - ${ONLYOFFICE_VOLUME:-/opt/onlyoffice}/logs:/var/log/onlyoffice - ${ONLYOFFICE_VOLUME:-/opt/onlyoffice}/data:/var/www/onlyoffice/Data - ${ONLYOFFICE_VOLUME:-/opt/onlyoffice}/lib:/var/lib/onlyoffice labels: caddy: http://192.168.1.8:6233 caddy.reverse_proxy: http://seafile-onlyoffice:80 networks: - seafile-net networks: seafile-net: name: seafile-netJWT那不需要显式指定这里主要是labels标签的修改部分含义caddy.reverse_proxyCaddy Docker Proxy 识别的 label 键告诉 Caddy 对这个服务启用反向代理seafile-onlyofficeDocker 容器名。Docker 内置 DNS 会自动把它解析成容器的内部 IP如172.19.0.5不需要写死 IP80OnlyOffice 容器内部nginx 监听的端口。OnlyOffice 官方镜像里nginx 默认就监听 80三、docker compose 容器编排管理和最终的功能测试ok上面将配置文件已经都讲完了那么可以知道容器的持久化第一次启动后有一些容器内部的配置文件需要修改其中也有一个bug主要是关于elasticsearch的docker compose up -d #没有权限在宿主机的 ES 数据目录上创建 node.lock 文件所以启动直接 fatal。Seafile 官方论坛里一模一样的案例Daniel Pan 本人回复这是宿主机 ES 数据目录权限问题需要让 ES 进程UID 1000能写入注意这是一个BUG 。在宿主机执行以下命令chown -R 1000:1000 /opt/seafile-elasticsearch/data然后重启elasticsearch容器注意这里是restart后面接service名称service名称是通过 docker compose ps 查询出来的如果不加服务名那么就是所有容器组重启docker compose restart elasticsearch[rootmycomputer seafile-image-pro]# docker compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS seadoc seafileltd/sdoc-server:2.0-latest /sbin/my_init -- /s… seadoc 26 hours ago Up 11 hours 80/tcp seafile seafileltd/seafile-pro-mc:13.0-latest /sbin/my_init -- /s… seafile 26 hours ago Up 11 hours (healthy) 80/tcp seafile-caddy lucaslorentz/caddy-docker-proxy:2.12-alpine /bin/caddy docker-p… caddy 26 hours ago Up 11 hours (healthy) 80/tcp, 443/tcp, 0.0.0.0:6233-6233/tcp, :::6233-6233/tcp, 2019/tcp, 0.0.0.0:10087-10087/tcp, :::10087-10087/tcp seafile-clamav clamav/clamav:latest /init av 26 hours ago Up 11 hours (healthy) 3310/tcp, 7357/tcp seafile-elasticsearch elasticsearch:8.15.0 /bin/tini -- /usr/l… elasticsearch 26 hours ago Up 11 hours 9200/tcp, 9300/tcp seafile-mysql mariadb:10.11 docker-entrypoint.s… db 26 hours ago Up 11 hours (healthy) 3306/tcp seafile-onlyoffice onlyoffice/documentserver:8.1.0.1 /app/ds/run-documen… onlyoffice 26 hours ago Up 11 hours 80/tcp, 443/tcp seafile-redis redis docker-entrypoint.s… redis 26 hours ago Up 11 hours 6379/tcp容器资源监控例如查看db容器的cpu内存使用情况docker compose stats db 输出如下如果省略服务名那么会显示所有容器服务的资源使用情况only office的集成vim /opt/seafile-data/seafile/conf/seahub_settings.py# -*- coding: utf-8 -*- SECRET_KEY nudmz*q3))armp#jecgr2uk06uc$pp5nwsck%%x)l0w4c TIME_ZONE Asia/Shanghai # OnlyOffice 集成 ENABLE_ONLYOFFICE True VERIFY_ONLYOFFICE_CERTIFICATE False ONLYOFFICE_APIJS_URL http://192.168.1.8:6233/web-apps/apps/api/documents/api.js ONLYOFFICE_JWT_SECRET 4788a899971f47768a7a3450d8c42186d063aa7a # 以下有默认值不用显式写 # ONLYOFFICE_FILE_EXTENSION (doc, docx, ppt, pptx, xls, xlsx, odt, fodt, odp, fodp, ods, fods, ppsx, pps, csv) # ONLYOFFICE_EDIT_FILE_EXTENSION (docx, pptx, xlsx, csv) OFFICE_PREVIEW_MAX_SIZE 30 * 1024 * 1024防病毒开启宿主机编辑文件vim /opt/seafile-data/seafile/conf/seafile.conf 此文件末尾添加如下[virus_scan] scan_command clamdscan virus_code 1 nonvirus_code 0 scan_interval 5 scan_size_limit 20 threads 2 [fileserver] check_virus_on_web_upload true.env文件末尾添加SEAFILE__virus_scan__enabledtrue SEAFILE__virus_scan__scan_commandclamdscan SEAFILE__virus_scan__virus_code1 SEAFILE__virus_scan__nonvirus_code0 SEAFILE__virus_scan__scan_interval5 SEAFILE__virus_scan__scan_size_limit20 SEAFILE__virus_scan__threads2 # 上传链接分享链接上传时扫描 SEAHUB__ENABLE_UPLOAD_LINK_VIRUS_CHECKTrue # 网页端所有上传都扫描Pro 11.0.7 SEAFILE__fileserver__check_virus_on_web_uploadtrue然后所有服务关闭等待1 2分钟后在启动所有容器服务docker compose down sleep 120 docker compose up -d此时随便编辑一个txt文件文件内容如下并上传到网盘X5O!P%AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$HH*会提示该文件带病毒并阻止上传也就是实时扫描或者上传后在系统管理后台可以看到查杀记录Seafile 专业版也支持手动触发扫描任务 docker exec seafile bash -c cd /opt/seafile/seafile-server-latest python3 pro/pro.py virus_scan输出如下(可以看到确实扫描到了病毒)[rootmycomputer seafile-image-pro]# docker exec seafile bash -c cd /opt/seafile/seafile-server-latest python3 pro/pro.py virus_scan 2026-08-25 22:44:23,297 Load disk config: storage_dir/opt/seafile/seafile-data/storage/blocks 2026-08-25 22:44:23,297 Load disk config: storage_dir/opt/seafile/seafile-data/storage/fs 2026-08-25 22:44:23,297 Load disk config: storage_dir/opt/seafile/seafile-data/storage/commits 2026-08-25 22:44:23,610 Start to scan virus for repo cb66ea95. 2026-08-25 22:44:23,634 File /eicar.com.txt virus scan by clamdscan: Found virus. 2026-08-25 22:44:23,649 Virus scan for repo cb66ea95 finished: 1 virus, 0 non virus, 0 failed. 2026-08-25 22:44:24,340 Load disk config: storage_dir/opt/seafile/seafile-data/storage/blocks 2026-08-25 22:44:24,340 Load disk config: storage_dir/opt/seafile/seafile-data/storage/fs 2026-08-25 22:44:24,340 Load disk config: storage_dir/opt/seafile/seafile-data/storage/commits页面功能测试docker exec seafile-onlyoffice curl -s -o /dev/null -w %{http_code} http://127.0.0.1:80/web-apps/apps/api/documents/api.js返回应该是200其它的都行表示服务有问题。这个测试时表示only office容器内部正确映射了80端口核心api功能正常只探测only office服务的80端口是否正常[rootmycomputer seafile-image-pro]# docker exec seafile-onlyoffice ss -tlnp | grep :80 LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((nginx,pid827,fd7)) LISTEN 0 511 [::]:80 [::]:* users:((nginx,pid827,fd8)) LISTEN 0 511 *:8000 *:*手动更新所有网盘内文件的索引docker exec -it seafile bash -c cd seafile-server-latest/pro/ python3 pro.py search --update输出如下Updating file index, this may take a while... 2026-08-25 21:09:42,197 Load disk config: storage_dir/opt/seafile/seafile-data/storage/blocks 2026-08-25 21:09:42,198 Load disk config: storage_dir/opt/seafile/seafile-data/storage/fs 2026-08-25 21:09:42,198 Load disk config: storage_dir/opt/seafile/seafile-data/storage/commits 2026-08-25 21:09:42,441 storage: using filesystem storage backend 2026-08-25 21:09:42,441 index office pdf: True 2026-08-25 21:09:42,449 Index process initialized. 2026-08-25 21:09:42,449 starting worker0 worker threads for indexing 2026-08-25 21:09:42,450 starting worker1 worker threads for indexing 2026-08-25 21:09:44,458 worker0 worker updated at 2026-08-25 21:09 time 2026-08-25 21:09:44,458 worker0 worker get 0 error 2026-08-25 21:09:44,460 worker1 worker updated at 2026-08-25 21:09 time 2026-08-25 21:09:44,460 worker1 worker get 0 error 2026-08-25 21:09:44,460 All worker threads has stopped. 2026-08-25 21:09:44,460 index updated, total time 2.0111243724823 seconds 2026-08-25 21:09:44,460 start to clear deleted repo 2026-08-25 21:09:44,472 0 repos need to be deleted. 2026-08-25 21:09:44,472 deleted repo has been cleared 2026-08-25 21:09:44,472 Index updated, statistic report: 2026-08-25 21:09:44,472 [commit read] 0 2026-08-25 21:09:44,473 [dir read] 0 2026-08-25 21:09:44,473 [file read] 0 2026-08-25 21:09:44,473 [block read] 0 Updating wiki index, this may take a while... 2026-08-25 21:09:45,474 Load disk config: storage_dir/opt/seafile/seafile-data/storage/blocks 2026-08-25 21:09:45,475 Load disk config: storage_dir/opt/seafile/seafile-data/storage/fs 2026-08-25 21:09:45,475 Load disk config: storage_dir/opt/seafile/seafile-data/storage/commits 2026-08-25 21:09:45,719 storage: using filesystem storage backend 2026-08-25 21:09:45,727 Index process initialized. 2026-08-25 21:09:45,727 starting worker0 worker threads for indexing 2026-08-25 21:09:45,728 starting worker1 worker threads for indexing 2026-08-25 21:09:47,728 worker0 worker updated at 2026-08-25 21:09 time 2026-08-25 21:09:47,728 worker0 worker get 0 error 2026-08-25 21:09:47,729 worker1 worker updated at 2026-08-25 21:09 time 2026-08-25 21:09:47,729 worker1 worker get 0 error 2026-08-25 21:09:47,729 All worker threads has stopped. 2026-08-25 21:09:47,730 wiki index updated, total time 2.0022218227386475 seconds 2026-08-25 21:09:47,730 start to clear deleted wiki 2026-08-25 21:09:47,740 0 wikis need to be deleted. 2026-08-25 21:09:47,741 deleted wiki has been cleared 2026-08-25 21:09:47,741 Index updated, statistic report: 2026-08-25 21:09:47,741 [commit read] 0 2026-08-25 21:09:47,741 [dir read] 0 2026-08-25 21:09:47,741 [file read] 0 2026-08-25 21:09:47,742 [block read] 0only office 服务确认是否正常浏览器打开输入IP6233/welcome所有配置文件和依赖libseccomp的下载地址# Seafile PRO 13.0 wget -O .env https://manual.seafile.com/13.0/repo/docker/pro/env wget https://manual.seafile.com/13.0/repo/docker/seadoc.yml wget https://manual.seafile.com/13.0/repo/docker/pro/seafile-server.yml wget https://manual.seafile.com/13.0/repo/docker/caddy.yml wget https://manual.seafile.com/13.0/repo/docker/pro/elasticsearch.yml wget https://manual.seafile.com/13.0/repo/docker/pro/clamav.yml wget https://manual.seafile.com/13.0/repo/docker/onlyoffice.yml wget https://mirrors.aliyun.com/centos/8-stream/BaseOS/x86_64/os/Packages/libseccomp-2.5.2-1.el8.x86_64.rpm登陆seafile私有网盘clamav