Hello friends
I gave seafile another chance and found a very good tutorial to install seafile with docker and traefik https://goneuland.de/seafile-server-mit-docker-compose-und-traefik-installieren/. The installation with the code below is done within 5 minutes.
Now I have trouble with the integration of collabora. A similar topic doesn´t help me.
If I click e.g. on an odt-file, I got

Domain Details Page - no api or wopi in the url (chatgpt said it should be in the url).
I tried with chatgpt (I hate its positivity, which doesn´t help at all …)
I have no idea where to search for the error …
Thank you all very much!!!
My installation routine
mkdir seafile
cat <<'EOF' > ~/seafile/docker-compose.yml
services:
seafile-mysql:
image: ${SEAFILE_DB_IMAGE}
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD}
- MYSQL_LOG_CONSOLE=true
- MARIADB_AUTO_UPGRADE=1
volumes:
- ./seafile-mysql:/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
seafile-memcached:
image: ${SEAFILE_MEMCACHED_IMAGE}
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile_net
seafile-elasticsearch:
image: ${SEAFILE_ELASTICSEARCH_IMAGE}
container_name: seafile-elasticsearch
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- "xpack.security.enabled=false"
volumes:
- ./seafile-elasticsearch/data:/usr/share/elasticsearch/data
networks:
- seafile_net
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 4g
seafile:
image: ${SEAFILE_IMAGE}
container_name: seafile
volumes:
- ./seafile-data:/shared
# - ./seafile-data/seafile/conf/seahub_settings.py:/shared/seafile/conf/seahub_settings.py
environment:
- DB_HOST=${SEAFILE_MYSQL_DB_HOST}
- DB_PORT=${SEAFILE_MYSQL_DB_PORT}
- DB_USER=${SEAFILE_MYSQL_DB_USER}
- DB_ROOT_PASSWD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD}
- DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD}
- SEAFILE_MYSQL_DB_CCNET_DB_NAME=${SEAFILE_MYSQL_DB_CCNET_DB_NAME}
- SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=${SEAFILE_MYSQL_DB_SEAFILE_DB_NAME}
- SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME}
- TIME_ZONE=${TIME_ZONE}
- INIT_SEAFILE_ADMIN_EMAIL=${INIT_SEAFILE_ADMIN_EMAIL}
- INIT_SEAFILE_ADMIN_PASSWORD=${INIT_SEAFILE_ADMIN_PASSWORD}
- SEAFILE_SERVER_HOSTNAME=${SEAFILE_SERVER_HOSTNAME}
- SEAFILE_SERVER_PROTOCOL=${SEAFILE_SERVER_PROTOCOL}
- SITE_ROOT=${SITE_ROOT}
- NON_ROOT=${NON_ROOT}
- JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY}
- SEAFILE_LOG_TO_STDOUT=${SEAFILE_LOG_TO_STDOUT}
depends_on:
- seafile-mysql
- seafile-memcached
- seafile-elasticsearch
networks:
- seafile_net
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.seafile.rule=Host(`${SEAFILE_SERVER_HOSTNAME}`)"
- "traefik.http.routers.seafile.entrypoints=websecure"
- "traefik.http.routers.seafile.tls=true"
- "traefik.http.routers.seafile.tls.certresolver=http_resolver"
- "traefik.http.services.seafile.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
networks:
seafile_net:
driver: bridge
proxy:
external: true
EOF
.env-file
cat <<'EOF' > ~/seafile/.env
### Seafile admin user
INIT_SEAFILE_ADMIN_EMAIL=x@gmail.com
INIT_SEAFILE_ADMIN_PASSWORD=x
SEAFILE_SERVER_HOSTNAME=seafile.x.de
## Images
SEAFILE_IMAGE=seafileltd/seafile-mc:12.0-latest
SEAFILE_DB_IMAGE=mariadb:10.11
SEAFILE_MEMCACHED_IMAGE=memcached:1.6.29
SEAFILE_ELASTICSEARCH_IMAGE=elasticsearch:8.15.0
## Database
SEAFILE_MYSQL_DB_HOST=seafile-mysql
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=x
SEAFILE_MYSQL_DB_PORT=3306
SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db
## Scheme
SEAFILE_SERVER_PROTOCOL=https
SITE_ROOT=/
NON_ROOT=false
SEAFILE_LOG_TO_STDOUT=false
## Startup parameters
TIME_ZONE=Europe/Berlin
JWT_PRIVATE_KEY=x
### Database root password
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=x
# Collabora Einstellungen
COLLABORA_IMAGE=collabora/code:24.04.5.1.1
COLLABORA_PORT=6232
COLLABORA_USERNAME=admin
COLLABORA_PASSWORD=x
COLLABORA_ENABLE_ADMIN_CONSOLE=true
COLLABORA_REMOTE_FONT=
COLLABORA_ENABLE_FILE_LOGGING=false
EOF
docker compose -f ~/seafile/docker-compose.yml down && docker compose -f ~/seafile/docker-compose.yml up -d
Collabora docker-compose
mkdir collabora
cat <<'EOF' > ~/collabora/docker-compose.yml
services:
collabora:
image: collabora/code
container_name: collabora_app
networks:
- proxy
# - seafile_net
cap_add:
- MKNOD
environment:
- aliasgroup1=https://seafile.x.de
- username=admin
- password=x
- dictionaries=de_DE en_GB en_US es_ES
# - extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:wopi.allow_hosts=seafile.x.de
- "extra_params=--o:ssl.enable=false --o:ssl.termination=true"
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.collabora.entrypoints=websecure"
- "traefik.http.routers.collabora.rule=(Host(`collabora.x.de`))"
# - "traefik.http.routers.collabora.rule=Host(`collabora.x.de`) && (PathPrefix(`/hosting/discovery`) || PathPrefix(`/lool`) || PathPrefix(`/loleaflet`) || PathPrefix(`/browser`) || PathPrefix(`/cool`))"
- "traefik.http.routers.collabora.tls=true"
- "traefik.http.routers.collabora.tls.certresolver=http_resolver"
- "traefik.http.routers.collabora.service=collabora"
- "traefik.http.services.collabora.loadbalancer.server.port=9980"
- "traefik.docker.network=proxy"
networks:
proxy:
external: true
# seafile_net:
# external: true
EOF
docker compose -f ~/collabora/docker-compose.yml up -d && docker compose -f ~/seafile/docker-compose.yml down && docker compose -f ~/seafile/docker-compose.yml up -d && docker restart seafile
seahub_settings.py
sudo nano ~/seafile/seafile-data/seafile/conf/seahub_settings.py
## ganz unten folgendes eingeben:
# Collabora Integration
OFFICE_SERVER_TYPE = 'CollaboraOffice'
ENABLE_OFFICE_WEB_APP = True
OFFICE_WEB_APP_BASE_URL = 'http://collabora:9980/hosting/discovery'
#OFFICE_WEB_APP_BASE_URL = 'http://collabora.x.de/hosting/discovery'
WOPI_ACCESS_TOKEN_EXPIRATION = 30 * 60 # seconds
OFFICE_WEB_APP_FILE_EXTENSION = ('odp', 'ods', 'odt', 'xls', 'xlsb', 'xlsm', 'xlsx','ppsx', 'ppt', 'pptm', 'pptx', 'doc', 'docm', 'docx')
ENABLE_OFFICE_WEB_APP_EDIT = True
OFFICE_WEB_APP_EDIT_FILE_EXTENSION = ('odp', 'ods', 'odt', 'xls', 'xlsb', 'xlsm', 'xlsx','ppsx', 'ppt', 'pptm', 'pptx', 'doc', 'docm', 'docx')
If something is going wrong
## LÖSCHEN
docker ps -a --filter "name=seafile" --format "{{.ID}}" | xargs -r docker stop
docker ps -a --filter "name=collabora" --format "{{.ID}}" | xargs -r docker stop
docker ps -a --filter "name=seafile" --format "{{.ID}}" | xargs -r docker rm
docker ps -a --filter "name=collabora" --format "{{.ID}}" | xargs -r docker rm
docker images --filter=reference="*seafile*" --format "{{.ID}}" | xargs -r docker rmi -f
docker images --filter=reference="*collabora*" --format "{{.ID}}" | xargs -r docker rmi -f
docker volume ls --filter name=seafile --format "{{.Name}}" | xargs -r docker volume rm
docker volume ls --filter name=collabora --format "{{.Name}}" | xargs -r docker volume rm
docker network ls --filter name=seafile --format "{{.Name}}" | xargs -r docker network rm
docker network ls --filter name=collabora --format "{{.Name}}" | xargs -r docker network rm
docker rmi -f $(docker images --filter=reference='collabora/*' --quiet)
docker rmi -f $(docker images --filter=reference='seafileltd/*' --quiet)
sudo rm -rf ~/seafile
sudo rm -rf ~/collabora
# Kontrolle
docker ps -a | grep -iE 'seafile|collabora'
docker images | grep -iE 'seafile|collabora'
docker volume ls | grep -iE 'seafile|collabora'
docker network ls | grep -iE 'seafile|collabora'
ls -ld ~/seafile ~/collabora