跳转至

Seafile 与 OnlyOffice 部署

以 Seafile 8.0.7(容器版)为例,说明如何部署 Seafile 并集成 OnlyOffice 在线文档编辑。

🟢部署步骤

1. 使用 docker-compose 部署

docker-compose.yml
services:
  db:
    image: mariadb:10.11
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=1111111111
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - /root/seafile-mysql/db:/var/lib/mysql
    networks:
      - seafile-net

  memcached:
    image: memcached:1.6
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net

  seafile:
    image: seafileltd/seafile-mc:10.0.1
    container_name: seafile
    volumes:
      - /root/seafile-data:/opt/seafile/seafile-data-v2/
      # 启动建议进去软连接:ln -s /opt/seafile/seafile-data-v2/ /opt/seafile/seafile-data
    ports:
      - "37881:80"
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=1111111111  # MySQL root 密码
      - TIME_ZONE=Asia/Shanghai    # 可选,默认 UTC,建议设置本地时区
      - SEAFILE_ADMIN_EMAIL=me@example.com  # 管理员邮箱
      - SEAFILE_ADMIN_PASSWORD=BL5moOjPnU   # 管理员密码
      - SEAFILE_SERVER_LETSENCRYPT=false    # 是否使用 letsencrypt 生成证书
      - SEAFILE_SERVER_HOSTNAME=doc.tech.intra.nsfocus.com  # 主机名
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net

networks:
  seafile-net:

2. 链接 MySQL 的特殊设置

create user 'seafile'@'%' identified by '密码';
grant all privileges  on *.* to 'seafile'@'%';
flush privileges;

3. 进入 Seafile 执行初始化

docker exec -it seafile bash
rm -rf seafile-server-latest ccnet
cd seafile-server-8.0.7 && ./setup-seafile-mysql.sh
# 按提示执行:先输入 MySQL 的 root 密码(compose 中设置),再输入 seafile 的密码(第 2 步设置的)

4. 重启

docker-compose restart

5. 部署 OnlyOffice

docker run -id -p 8022:80 --restart=always -e JWT_SECRET=my_jwt_secret onlyoffice/documentserver

6. 联通 Seafile 与 OnlyOffice

修改 /opt/seafile/conf/seahub_settings.py,添加:

/opt/seafile/conf/seahub_settings.py
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
ONLYOFFICE_APIJS_URL = 'http{s}://{your OnlyOffice server's domain or IP}/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('docx', 'pptx', 'xlsx')
ONLYOFFICE_JWT_SECRET = 'your-secret-string'   # 自定义 secret

7. 启动服务并初始化用户

./seahub.sh start
./seafile.sh start

🟢常见问题

request-filtering-agent · JWT · X-Forwarded-* · client_max_body_size。OnlyOffice 预览、令牌、下载与 Seafile 大文件上传的典型故障。

OnlyOffice 预览失败

修改 /etc/onlyoffice/documentserver/default.json

"request-filtering-agent" : {
        "allowPrivateIPAddress": true,
        "allowMetaIPAddress": true
},

经 Nginx 反向代理时

注意保留 proxy_set_header Host $http_host;

OnlyOffice 安全令牌失败

cd /etc/onlyoffice/documentserver
sed -i 's/true/false/g' local.json
supervisorctl restart all

sed 是全局替换

该命令会把 local.json 中所有 true 都改成 false,执行前建议先备份原文件。

OnlyOffice 在 Nginx 后的文件下载失败

需正确转发 HostX-Forwarded-* 等头部并放大超时,Nginx 反向代理配置见 Nginx 实战实例 中的 Seafile 实例。

上传大文件失败

除官方 Nginx 配置外,反向代理需额外调整:

proxy_pass http://10.44.16.249:8800/;
client_max_body_size 0;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout  36000s;
proxy_read_timeout     36000s;
proxy_send_timeout     36000s;
send_timeout           36000s;

🟢定制

修改默认登录页面

修改 settings.py
# LOGIN_URL = '/accounts/login/'
LOGIN_URL = '/sso/'

自定义文件、文件夹删除功能

seahub/api2/endpoints/file.py   # FileView
seahub/api2/endpoints/dir.py    # DirView

🟢版本说明

latest · seafile-mc:10.0.1。官方 latest 与固定 tag 的取舍。

2024-02-20

官方版本 latest 出现异常,按上述方法基本可解决启动失败问题。若不想处理,可使用 tag seafileltd/seafile-mc:10.0.1,该版本问题较少。