摘要訊息 : 對 Seafile 進行進階的配置.

0. 前言

本文目錄中的標題過長, 可能影響內容的排版和閱讀體驗, 因此本文的目錄需要閣下手動展開.

本文于 2022 年 3 月 18 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.

1. 开机启动

每一次重新启动之后, 都要进入 Seafile 的目录, 启动 Seafile 是一件很麻烦的事情. 我们需要在 /etc/systemd/system 创建 seafile.service : vim /etc/systemd/system/seafile.service, 添加

[Unit]

Description=Seafile
After=network.target

[Service]

Type=oneshot
ExecStart=/www/cloud/seafile-server-latest/seafile.sh start
ExecStop=/www/cloud/seafile-server-latest/seafile.sh stop
RemainAfterExit=yes
User=root

[Install]

WantedBy=multi-user.target
vim /etc/systemd/system/seahub.service

/etc/systemd/system 创建 seahub.service : vim /etc/systemd/system/seahub.service, 添加

[Unit]

Description=Seafile hub
After=network.target seafile.service

[Service]

ExecStart=/www/cloud/seafile-server-latest/seahub.sh start-fastcgi
ExecStop=/www/cloud/seafile-server-latest/seahub.sh stop
User=root
Type=oneshot
RemainAfterExit=yes

[Install]

WantedBy=multi-user.target

完成之后我们重新加载 systemd 的守护进程 : systemctl daemon-reload. 之后就可以使用 systemctl 命令启动 Seafile : systemctl start seafile, systemctl start seahub.

设定开机启动 : systemctl enable seafile, systemctl enable seahub; 取消开机启动 : systemctl disable seafile, systemctl disable seahub.

2. Logrotate

Logrotate 的作用是剪切日志文件的时候可以不需要关闭服务器, Logrotate 默认存储在 /etc/logrotate.d. 我们创建 Seafile 相关的文件 : vim /etc/logrotate.d/seafile, 添加

/www/cloud/logs/seaf-server.log
{
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    sharedscripts
    postrotate
    [ ! -f /www/cloud/pids/seaf-server.pid ] || kill -USR1 `cat /www/cloud/pids/seaf-server.pid`
    endscript
}
/www/cloud/logs/ccnet.log
{
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    sharedscripts
    postrotate
    [ ! -f /www/cloud/pids/ccnet.pid ] || kill -USR1 `cat /www/cloud/pids/ccnet.pid`
    endscript
}

3. Memcached

安装使用 Memcached 可以大幅度提高性能. 首先需要安装相关依赖 : yum install -y gcc libffi-devel python-devel openssl-devel libmemcached libmemcached-devel memcached, pip install pylibmc django-pylibmc.

之后在 seahub_settings.py 中添加如下配置

CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

4. 断点续传

这个功能对于我们来说非常有用, 有时候因为电脑或者网络的原因, 在上传文件的时候, 会意外断开. 如果没有这个功能, 我们只能重新上传, 那么有了断点续传, 我们就可以在上次停止的地方继续上传. 我们只需要在 seafile_settings.py 中添加 ENABLE_RESUMABLE_FILEUPLOAD = True 即可.

5. 用户角色与权限

5.1 访客邀请功能

需要赋予用户 can_invite_guest 权限之外, 还需要在 seahub_settings.py 中添加 ENABLE_GUEST_INVITATION = True.

5.2 更改用户权限与新增用户

代码中的 guestdefault 属于默认配置, 你可以更改其中的选项, 也可以复制下面的选项新增一个用户 :

ENABLED_ROLE_PERMISSIONS = {
    'default': {
        'can_add_repo': True,
        'can_add_group': True,
        'can_view_org': True,
        'can_use_global_address_book': True,
        'can_generate_share_link': True,
        'can_generate_upload_link': True,
        'can_invite_guest': True,
        'can_connect_with_android_clients': True,
        'can_connect_with_ios_clients': True,
        'can_connect_with_desktop_clients': True,
        'role_quota': '',
    },
    'guest': {
        'can_add_repo': False,
        'can_add_group': False,
        'can_view_org': True,
        'can_use_global_address_book': False,
        'can_generate_share_link': False,
        'can_generate_upload_link': False,
        'can_invite_guest': False,
        'can_connect_with_android_clients': False,
        'can_connect_with_ios_clients': False,
        'can_connect_with_desktop_clients': False,
        'role_quota': '',
    }
}

6. 在线 Office

待补充...

7. Office Online Server 集成

待补充...

8. 病毒扫描

待补充...

9. 多机构支持

多机构支持可以让 Seafile 像一个企业一样添加多个下属机构, 每一个机构中都可以有管理员 (类似于一个简化的组织). 我们需要在 seahub_settings.py 中添加如下配置 :

MULTI_INSTITUTION = True
EXTRA_MIDDLEWARE_CLASSES = (
    'seahub.institutions.middleware.InstitutionMiddleware',
)

之后可以在管理者界面看到 "机构" 的配置选项.

10. 双重认证

开启双重认证基本上杜绝了盗号的可能, 就算知道密码也无法登陆. 我们需要在 seahub_settings.py 中添加 ENABLE_TOW_FACTOR_AUTH = True.

通过 Twilio 服务, 可以支持短信验证. 首先需要安装依赖 : pip install twilio, 之后在 seahub_settings.py 中添加

TWO_FACTOR_SMS_GATEWAY = 'seahub_extra.two_factor.gateways.twilio.gateway.Twilio'
TWILIO_ACCOUNT_SID = '你的帐户 SID'
TWILIO_AUTH_TOKEN = '你的帐户验证 TOKEN'
TWILIO_CALLER_ID = '你的 CALLER ID'
EXTRA_MIDDLEWARE_CLASSES = (
    'seahub_extra.two_factor.gateways.twilio.middleware.ThreadLocals',
)

如果之前定义过 EXTRA_MIDDLEWARE_CLASSES = (...), 那么需要替换成 EXTRA_MIDDLEWARE_CLASSES += (...).

11. seafile.conf 的相关配置

11.1 默认空间存储量设置

[quota]

default = 2    # 单位为 G

11.2 默认历史记录设置

[history]

keep_days = 30    # 单位为 天

11.3 文件服务器设置

[file server]

max_upload_size = 2048    # 最大上传文件大小, 单位为 M
max_download_dir_size = 2048    # 最大下载文件夹大小, 单位为 M
max_indexing_threads = 10    # 并发线程数
fixed_block_size = 2    # 文件切割块大小, 单位为 M
web_token_expire_time = 3600    # 令牌过期时间

11.4 ZIP 编码问题

下载的文件夹可以打包为 .zip 格式, 默认编码为 UTF-8. 但是 Windows 上默认不支持 UTF-8, 那么需要添加如下的配置 :

[zip]

windows_encoding = iso-8859-1

11.5 MySQL 连接池大小

[database]

max_connections = 200

11.6 文件锁定自动过期时间

[file_lock]

default_expire_hours = 12    # 单位为 小时

12. seahub_settings.py 相关配置

ENABLE_SETTINGS_VIA_WEB = False    # 禁用 Web 界面
SESSION_SAVE_EVERY_REQUEST = True    # 存储每次请求的会话数据
ENABLE_WIKI = True    # 开启个人 wiki 和群主 wiki
ENABLE_VIDEO_THUMBNAIL = True    # 开启视频缩略图
SITE_NAME = '私有云'    # 网站标题
SITE_TITLE = '私有云'    # Tab 标题
ENABLE_SYS_ADMIN_VIEW_REPO = True    # 开启管理员浏览资料库
ENABLE_SHARE_LINK_AUDIT = True    # 未登录用户下载前提供 E-mail
ENABLE_UPLOAD_LINK_VIRUS_CHECK = True    # 开启文件上传后病毒扫描
ENABLE_TERMS_AND_CONDITIONS = True    # 开启用户使用前需要同意网站协议
VIRUS_SCAN_NOTIFY_LIST = ['user_a@example.com', 'user_b@example.com']    # 病毒扫描通知 E-mail

13. seafevents.conf 相关配置

13.1 审计日志

[AUDIT]

enable = true

13.2 邮件通知

[SEAHUB EMAIL]

enable = true
interval = 30m    # 发送邮件间隔时间 : s (秒), m (分), h (小时), d (天)

14. 邮件发送

邮件提醒功能能够提供更好的用户体验, 我们需要在 seahub_settings.py 中添加 :

EMAIL_USE_TLS = 开启 TLS 这里改为 True, 否则改为 False
EMAIL_USE_SSL = 开启 SSL 这里改为 True, 否则改为 False
EMAIL_HOST = '伺服器地址'    # SMTP 服务器
EMAIL_HOST_USER = '帐户名称'    # 用户名和域名
EMAIL_HOST_PASSWORD = '帐户密码'    # 密码
EMAIL_PORT = '连接埠'    # 端口
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER

15. 自定义 Web

待补充...

16. 日常维护

16.1 数据库清理

进入 Seafile 档案夹 cd /www/cloud/seafile-pro-server-*, 执行指令 ./seahub.sh clearsession. 然后登录到 MySQL, 执行指令 use seahub_dbDELETE FROM Event WHERE to_days(now()) - to_days(timestamp) > 90;.

16.2 备份与恢复

待补充...

16.3 Seafile FSCK

简单来说, Seafile FSCK 能够帮助你恢复某些损坏了的对象. 它首先会检查资料库的完整性, 并且删掉已经毁坏的资料库, 然后将所有受损的资料恢复到最后一次正常的状态, 最后导出数据库. 你只需要按顺序执行下面的指令集即可 :

cd /www/cloud/seafile-pro-server-*
./seaf-fsck.sh
./seaf-fsck.sh --repair

当你想检查或者修复指定的资料库, 可以在后面添加参数 : [library-id1] [library-id2], [--repair|-r] [repo_id_1 [repo_id_2 ...]].

如果你想对资料库进行导出, 可以使用如下的命令 ./seaf-fsck.sh --export 改为汇出路径.

如果你想导出指定的资料库, 可以在指令后面添加参数 : [library-id1] [library-id2].

16.4 Seafile GC

简单来说, Seafile GC 是一个用于垃圾回收的操作. 进入 Seafile 档案夹 cd /www/cloud/seafile-pro-server-*. 如果你想仅仅查看 Seafile 在运行的过程中产生了多少垃圾, 你可以输入如下的命令 : ./seaf-gc.sh --dry-run.

如果你想对指定的资料库进行查看, 你可以在后面添加参数 [repo-id1] [repo-id2].

直接运行 ./seaf-gc.sh 将会对垃圾进行回收, 对指定的资料库的垃圾进行回收, 同样需要在后面添加参数 [repo-id1] [repo-id2].

如果你仅仅想删除第一类无用数据块 (属于删除的资料库), 而不想删除没有被删除的资料库产生的垃圾, 可以执行 ./seaf-gc.sh -r.

介绍一下其他关于 ./seaf-gc.sh 的命令 :

  • ./seaf-gc.sh run : 运行垃圾回收程式;
  • ./seaf-gc.sh verify : 检查是否误删了还在使用的数据块;
  • ./seaf-gc.sh force : 强制删除已经损坏的资料库.

17. WebDAV 扩展

待补充...

18. FUSE 扩展

待补充...