SeaDoc Not Working (Seafile 12 + OnlyOffice Running Fine, Plesk-Nginx Setup)

Hi everyone,

I’m running Seafile Pro 12 with OnlyOffice and everything works smoothly — except SeaDoc, which I really need for the Wiki functionality. I suspect the issue is small but can’t seem to locate it. I’m using Plesk with Nginx, not Caddy.

Here’s my setup and what I’ve tried so far:

Docker Setup:

version: '3.7'

services:
  seafilepro-mysql:
    image: mariadb:10.11
    container_name: seafilepro-mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD}
      - MYSQL_LOG_CONSOLE=true
      - MARIADB_AUTO_UPGRADE=1
    volumes:
      - ${SEAFILE_MYSQL_VOLUME}:/var/lib/mysql
    networks:
      - seafilepro-net

  seafilepro-memcached:
    image: memcached:1.6.29
    container_name: seafilepro-memcached
    restart: always
    command: ["memcached", "-m", "256", "-vv"]
    networks:
      - seafilepro-net

  seafilepro-seasearch:
    image: ${SEASEARCH_IMAGE}
    container_name: seafilepro-seasearch
    restart: always
    environment:
      - SS_STORAGE_TYPE=disk
      - SS_DATA_PATH=/seasearch-data
    volumes:
      - ${SS_DATA_PATH}:/seasearch-data
    ports:
      - "8085:8080"
    networks:
      - seafilepro-net

  seafilepro-notification:
    image: ${NOTIFICATION_SERVER_IMAGE}
    container_name: seafilepro-notification
    restart: always
    volumes:
      - ${NOTIFICATION_SERVER_VOLUME}:/notification-data
      - ${SEAFILE_VOLUME}:/shared
    networks:
      - seafilepro-net

  seafilepro-seadoc:
    image: ${SEADOC_IMAGE}
    container_name: seafilepro-seadoc
    restart: always
    environment:
      - SEAFILE_SERVER=http://seafilepro-core:8081
      - SEADOC_SERVER_NAME=seadoc
      - SEADOC_ADMIN_PASSWORD=${INIT_SEAFILE_ADMIN_PASSWORD}
      - JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY}
      - TIME_ZONE=${TIME_ZONE}
    volumes:
      - ${SEADOC_VOLUME}:/seadoc-data
    ports:
      - "8888:8888"
    networks:
      - seafilepro-net

  seafilepro-core:
    image: ${SEAFILE_IMAGE}
    container_name: seafilepro-core
    restart: always
    environment:
      - DB_HOST=seafilepro-mysql
      - DB_PORT=3306
      - DB_USER=${SEAFILE_MYSQL_DB_USER}
      - DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD}
      - DB_ROOT_PASSWD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD}
      - SEAFILE_ADMIN_EMAIL=${INIT_SEAFILE_ADMIN_EMAIL}
      - SEAFILE_ADMIN_PASSWORD=${INIT_SEAFILE_ADMIN_PASSWORD}
      - SEAFILE_SERVER_HOSTNAME=${SEAFILE_SERVER_HOSTNAME}
      - SEAFILE_SERVER_PROTOCOL=${SEAFILE_SERVER_PROTOCOL}
      - MEMCACHED_HOST=seafilepro-memcached
      - SITE_ROOT=/
      - NON_ROOT=${NON_ROOT:-false}
      - TIME_ZONE=${TIME_ZONE}
      - ENABLE_SEADOC=true
      - SEADOC_SERVER_URL=https://my.subdomain.com/sdoc-server
      - ENABLE_SEARCH=true
      - SEARCH_SERVER_URL=http://localhost:8085
      - JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY}
      - ENABLE_ONLYOFFICE=true
      - ONLYOFFICE_APIJS_URL=https://my.subdomain.com/web-apps/apps/api/documents/api.js
      - ONLYOFFICE_FILE_EXTENSION=doc,docx,ppt,pptx,xls,xlsx,odt,fodt,odp,fodp,ods,fods,csv,ppsx,pps
      - ONLYOFFICE_JWT_SECRET=SECRETKEY
    depends_on:
      - seafilepro-mysql
      - seafilepro-memcached
    volumes:
      - ${SEAFILE_VOLUME}:/shared
    ports:
      - "8081:80"
    networks:
      - seafilepro-net

networks:
  seafilepro-net:
    name: seafilepro-net

ENVs:

SEAFILE_IMAGE=seafileltd/seafile-pro-mc:12.0-latest
SEASEARCH_IMAGE=seafileltd/seasearch:0.9-latest
SEADOC_IMAGE=seafileltd/sdoc-server:1.0-latest
NOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:12.0-latest
SEAFILE_VOLUME=/srv/docker/seafilepro/seafile-data
SEAFILE_MYSQL_VOLUME=/srv/docker/seafilepro/mysql
SEADOC_VOLUME=/srv/docker/seafilepro/seadoc-data
NOTIFICATION_SERVER_VOLUME=/srv/docker/seafilepro/notification-data
SS_DATA_PATH=/srv/docker/seafilepro/seasearch-data
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=PASSWORD
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=ROOTPASSWORD
SEAFILE_SERVER_HOSTNAME=my.subdomain.com
SEAFILE_SERVER_PROTOCOL=https
TIME_ZONE=Europe/Berlin
JWT_PRIVATE_KEY=KEY
INIT_SEAFILE_ADMIN_EMAIL=MAILADDRESS
INIT_SEAFILE_ADMIN_PASSWORD=PASSWORD
SEAFILE_CADDY_VOLUME=/srv/docker/seafilepro/caddy

Nginx Setup:

Default seafile.nginx.conf (auto-generated):

I’m not sure if this is used at all, since I configure everything through Plesk.

location /sdoc-server/ {
    proxy_pass http://seafilepro-seadoc:8084;
    ...
}

location /socket.io {
    proxy_pass http://seafilepro-seadoc:8084;
    ...
}

Plesk Additional Nginx Directives (active):

location /sdoc-server/ {
    proxy_pass http://127.0.0.1:8888/;
    proxy_set_header Host $host;
    ...
}

location /socket.io {
    proxy_pass http://127.0.0.1:8888;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    ...
}

Current Issues:

  • When accessing a SeaDoc link or trying to open a Wiki page, I get errors (Axiom, 403)
  • Direct call to subdomain.com - Subdomain.com
    • Was returning 403 Forbidden.
    • Now returns 502 Bad Gateway (probably due to testing changes).
  • SeaDoc never responded with version info or a valid page, always forbidden.

Key Questions

  1. Is it correct that Plesk’s Nginx directives override the default seafile.nginx.conf inside the container? That’s how I understood it.
  2. Is http://127.0.0.1:8888 the correct way to reach the seadoc container from the host (Plesk perspective)?
  3. Do I need to set an extra hostname or domain rule inside the container itself (like in Caddy)?
  4. Is the SeaDoc port maybe wrong? Should I expose 8084 as well?

What I Want to Achieve:

  • Seamless SeaDoc integration with Seafile Pro 12.
  • Ability to open and edit Wiki pages.
  • See a valid response when accessing /sdoc-server/ from browser.

Any help or ideas are very appreciated

Thanks a lot in advance!

Thanks for sharing your setup in such detail.

I noticed that some of the environment variables in your docker-compose.yml file might not be correctly configured. I recommend checking against the official documentation to ensure everything is set up properly:
https://manual.seafile.com/12.0/setup/setup_pro_by_docker/

The guide provides a clear overview of the required variables and recommended settings for each service, and it might help you identify the issue more easily.

Hope this helps.

I didn’t look in details into your setup. But what I noticed in my non-standard setup using systemd services and a diconnected network is that both seafile and seadoc should be able to see each other at their official DNS host and connection schema (e.g. https).

Also if this involves custom CA and certificates, they need to follow all current standards for AltName and type.

I have some notes here: Seadoc accesses seahub not through SEAHUB_SERVICE_URL - #9 by seadolphin

I didn’t have yet time for a detailed write-up.

Similar thread: "Load doc content error" - #11 by Cfile
where I posted that pulling the 2.0-latest image fixed it for me. Hopefully it does for you too