部署社区版

环境要求
安装Seafile社区版至少需要 2核CPU 和 2GB 内存。
文档约定
本文档使用以下约定:
  • /opt/seafile是存储Seafile docker compose文件的目录。如果您将Seafile放在不同的目录中,请相应地调整所有路径。
  • Seafile 使用两个 Docker 卷 来保存其数据库和 Seafile Docker 容器中生成的数据。卷的主机路径分别是/opt/seafile-mysql和/opt/seafile-data,不建议更改这些路径。 如果您修改了路径,请在按照这些说明进行操作时考虑到这一点。
  • Seafile 和 Nginx 的所有配置和日志文件都存储在 Seafile 容器的卷中。
安装 Docker
请选择适用于您的操作系统进行安装 docker官方安装指南
下载并修改 .env
从 Seafile Docker 12.0开始,我们使用以下三个配置文件:.env, seafile-server.yml和caddy.yml 。
mkdir/opt/seafile
cd/opt/seafile

#SeafileCE12.0
wget-O.envhttps://manual.seafile.com/12.0/repo/docker/ce/env
wgethttps://manual.seafile.com/12.0/repo/docker/seadoc.yml
wgethttps://manual.seafile.com/12.0/repo/docker/ce/seafile-server.yml
wgethttps://manual.seafile.com/12.0/repo/docker/caddy.yml

#SeafileCE13.0
wget-O.envhttps://manual.seafile.com/13.0/repo/docker/ce/env
wgethttps://manual.seafile.com/13.0/repo/docker/ce/seafile-server.yml
wgethttps://manual.seafile.com/13.0/repo/docker/seadoc.yml
wgethttps://manual.seafile.com/13.0/repo/docker/caddy.yml

nano.env
【12.0】以下字段需要特别注意:
变量名
描述
默认值
SEAFILE_VOLUME
Seafile 数据目录
/opt/seafile-data
SEAFILE_MYSQL_VOLUME
MySQL 数据目录
/opt/seafile-mysql/db
SEAFILE_CADDY_VOLUME
用于存储从 Let's Encrypt 获得的证书的 Caddy 数据目录。
/opt/seafile-caddy
INIT_SEAFILE_MYSQL_ROOT_PASSWORD
MySQL root的密码
(仅在首次部署时需要)
SEAFILE_MYSQL_DB_USER
MySQL 的用户(可在conf/seafile.conf中找到)。
seafile
SEAFILE_MYSQL_DB_PASSWORD
MySQL seafile用户密码
(必填)
SEAFILE_MYSQL_DB_CCNET_DB_NAME
ccnet 数据库名称
ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME
seafile 数据库名称
seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME
seahub 数据库名称
seahub_db
JWT
JWT 私钥,Seafile 需要一个长度不小于 32 个字符的随机字符串,可以使用`pwgen -s 40 1`生成。
(必填)
SEAFILE_SERVER_HOSTNAME
Seafile服务器的主机名或域名
(必填)
SEAFILE_SERVER_PROTOCOL
Seafile服务器协议(http或https)
http
TIME_ZONE
时区
UTC
INIT_SEAFILE_ADMIN_EMAIL
初始化管理员用户名
me@example.com(建议修改)
INIT_SEAFILE_ADMIN_PASSWORD
初始化管理员密码
asecret(建议修改)
【13.0】新增了以下字段:
变量名
描述
默认值
SEAFILE_MYSQL_DB_HOST
MySQL 的host
db
SEAFILE_MYSQL_DB_PORT
MySQL 的Port
3306
CACHE_PROVIDER
用于 Seafile 的缓存服务器。可用选项包括 redis 和 memcached 。从 Seafile 13 开始,建议使用 redis 作为缓存服务来支持新功能,以及 默认情况下,memcached 将不再集成到 Seafile Docker 中。
redis
REDIS_HOST
Redis 服务地址
redis
REDIS_PORT
Redis 服务端口
6379
REDIS_PASSWORD
Redis 服务密码
空
MEMCACHED_HOST
Memcached 服务地址
memcached
MEMCACHED_PORT
Memcached 服务端口
11211
ENABLE_NOTIFICATION_SERVER
启用 (true) 或禁用 (false) Seafile 的通知功能
false
NOTIFICATION_SERVER_URL
通知服务地址
空
MD_FILE_COUNT_LIMIT
(仅在部署元数据服务器时有效)。元数据功能允许的存储库中最大文件数。如果仓库中的文件数超过此值,则不会为仓库启用元数据管理功能。对于启用了元数据管理的仓库,如果其中的记录数达到此值,但仍有一些文件未记录在元数据服务器中,则将跳过未记录文件的元数据管理。
100000
NON_ROOT
在没有 root 用户的情况下运行 Seafile 容器
false
启动Seafile服务
执行以下命令启动 Seafile 服务
dockercomposeup-d
ERROR: Named volume "xxx" is used in service "xxx" but no declaration was found in the volumes section

当您的 Docker(或 docker-compose)版本过低时,您可能会遇到此问题。您可以根据 Docker 官方文档升级或重新安装 Docker 服务来解决这个问题。
注意:你必须在包含.env的目录中运行上述命令。如果.env文件在其他目录,请运行
dockercompose--env-file/path/to/.envup-d
启动服务后,您可以通过跟踪容器 seafile 的日志(即 docker logs seafile -f)查看进度。
---------------------------------
This is your configuration
---------------------------------

    server name: seafile
    server ip/domain: seafile.example.com

    seafile data dir: /opt/seafile/seafile-data
    fileserver port: 8082

    database: create new
    ccnet database: ccnet_db
    seafile database: seafile_db
    seahub database: seahub_db
    database user: seafile


Generating seafile configuration ...

done
Generating seahub configuration ...

----------------------------------------
Now creating seafevents database tables ...

----------------------------------------
----------------------------------------
Now creating ccnet database tables ...

----------------------------------------
----------------------------------------
Now creating seafile database tables ...

----------------------------------------
----------------------------------------
Now creating seahub database tables ...

----------------------------------------

creating seafile-server-latest symbolic link ... done

-----------------------------------------------------------------
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------
然后,你可以看到 Seafile 服务器成功启动的以下消息:
Starting seafile server, please wait ...
Seafile server started

Done.

Starting seahub at port 8000 ...

----------------------------------------
Successfully created seafile admin
----------------------------------------

Seahub is started

Done.
最后,您可以访问 http://example.seafile.com来使用 Seafile。
Seafile 目录结构
/opt/seafile-data
共享卷的挂载点,您可以选择在容器外部存储某些持久性信息。在这个目录中,我们会在外部保存各种日志文件和上传数据,这使您可以轻松重建容器而不会丢失重要信息。
  • /opt/seafile-data/seafile: Seafile 服务的配置文件以及数据文件
    • /opt/seafile-data/seafile/logs: Seafile 服务运行产生的日志文件目录。例如,您可以在/opt/seafile-data/seafile/logs/seafile.log中找到 seaf-server 日志。
  • /opt/seafile-data/logs: 日志目录
    • /opt/seafile-data/logs/var-log: 我们将容器内的/var/log链接到本目录。您可以在/opt/seafile-data/logs/var-log/nginx/中找到 nginx 的日志文件
提示:从Seafile Docker 12.0开始,我们使用 Caddy 代理Web服务,如果您想访问Caddy的日志,可以使用以下命令:
dockerlogsseafile-caddy--follow
查找日志
在容器外查看日志,命令如下:
#if the `.env` file is in current directory:
dockercomposelogs--follow
#if the `.env` file is elsewhere:
dockercompose--env-file/path/to/.envlogs--follow

#youcanalsospecifycontainername:
dockercomposelogsseafile--follow
#or,ifthe`.env`fileiselsewhere:
dockercompose--env-file/path/to/.envlogsseafile--follow
Seafile 容器中 Seafile 服务本身的日志文件存放在 /shared/logs/seafile 目录下,或者您可以在宿主机上 Seafile 容器的卷目录中找到这些日志,例如:/opt/seafile-data/logs/seafile
同样 Seafile 容器的系统日志存放在 /shared/logs/var-log 目录下,或者宿主机目录 /opt/seafile-data/logs/var-log。
在容器外查看Seafile的所有日志,运行以下命令:
sudotail-f$(find/opt/seafile-data/-typef-name*.log2>/dev/null)
更多配置项
Seafile 的配置文件位于/opt/seafile-data/seafile/conf。您可以根据配置部分修改配置项。
增加一个新的管理员
确保各容器正常运行,然后执行以下命令:
dockerexec-itseafile/opt/seafile/seafile-server-latest/reset-admin.sh
根据提示输入用户名和密码,您现在有了一个新的管理员帐户。
备份和恢复
请参考手册:备份和恢复
垃圾回收
在 seafile 中,当文件被删除时,组成这些文件的块数据不会立即删除,因为可能有其他文件也会引用这些块数据(用于去重功能的实现)。为了真正删除无用的块数据,还需要额外运行"GC"程序。GC 会自动检测到哪些数据块不再被任何文件所引用,并清除它们。
常见问题
如何进入docker 容器内部排查错误?
dockerexec-itseafile/bin/bash
如果忘记了Seafile的管理员账号或密码,如何创建新的管理员账户?
dockerexec-itseafile/opt/seafile/seafile-server-latest/reset-admin.sh
运行命令时,Seafile 服务必须处于运行状态。
如果安装失败,如何恢复初始状态重新开始安装?
删除opt/seafile, /opt/seafile-data 和 /opt/seafile-mysql 这三个目录即可重新开始。
容器启动期间出现了问题,如何查看更多信息?
可以使用此命令查看 Docker 日志:docker compose logs -f。
Seafile 如何使用缓存?
Seafile 在许多情况下使用缓存来提高性能。内容包括但不限于用户会话信息、头像、个人资料、数据库记录等。从 Seafile Docker 13 开始,Redis 作为默认缓存服务器来支持新功能(请参阅upgradte notes),它已集成在 Seafile Docker 13 中,可以直接在.env中进行配置,默认情况下不需要额外的设置)
集成在 Seafile Docker 中的 Redis 安全吗?它有访问密码吗?
Seafile Docker 集成的 Redis 默认没有设置密码,只能通过 Docker 专网访问,不会对外暴露服务端口。当然,如有必要,您也可以为其设置密码。您可以在.env设置REDIS_PASSWORD并移除seafile-server.yml中注释内容来启用 Redis 密码:
services:
    ...
    redis:
    image: ${SEAFILE_REDIS_IMAGE:-redis}
    container_name: seafile-redis
    # remove the following comment markers
    command:
        - /bin/sh
        - -c
        - redis-server --requirepass "$${REDIS_PASSWORD:?Variable is not set or empty}"
    networks:
    - seafile-net
    ...
出于某种原因,如果仍然必须使用 Memcached 作为缓存服务器,应该怎么做?
如果您仍想使用 Memcached(Seafile Docker 13 未提供),只需按照以下步骤作:
  • 将CACHE_PROVIDER设置为memcached并修改.env中的MEMCACHED_xxx
  • 删除在 seafile-server.yml 的redis部分和redis依赖项部分。
也可以在服务启动后对缓存服务器进行更改(通过在.env),但相应的配置文件不会直接更新(例如seahub_settings.py,seafile.conf和seafevents.conf)中。为避免歧义,我们建议您更新这些配置文件。