Run Seafile in docker behind Apache on host

Hello guys,

for days now I’m trying to run Seafile in container behind Apache. I’m not very good with these things, I can do some basic stuff but this is probably beyond my skills right now. I guess I don’t understand all the relations between docker and host system, as I never worked with docker containers before.

I installed Seafile in container using docker compose following instructions from the official website manual. All went quite well, the only thing I have changed in the .env file was the location of permanent data storage, which I changed to /data/HDD2/seafile and that looks like it was installed.

Then, I have Apache webserver serving a simple website. And I want to use that Apache webserver to pass the traffic to and from the seafile container as it’s set to always use SSL and has a valid letsencrypt certificate and that works just fine. I guess this traffic can be unencrypted just between the host and the container? But I don’t know how to configure that..

I couldn’t get seafile working with this setup, fiddling around I managed to get to 502 Bad gateway from Seafile’s nginx server, or error regarding SSL connection, but couldn’t get any further. Can you help me, please? I need someone to direct me, what should I put in those separate .yml files and what to put to Apache’s vhost configuration files. All is running on Debian 13.

Thanks for any help guys..

There is a document for using Nginx as reverse proxy: Use other reverse proxy - Seafile Admin Manual

The document on using Nginx as a reverse proxy for Seafile can be adapted to work with Apache. Below are the relevant sections modified to suit Apache’s configuration. This adaptation assumes you have already set up Seafile in Docker as specified in your requirements.


Use Other Reverse Proxy

Services That Require Reverse Proxy

Before making changes to the configuration files, be aware of the services that Seafile utilizes based on the integrated deployment.

Table of Services:

YML Service Suggest Exposed Port Service Listen Port Require WebSocket
seafile-server.yml seafile 80 80 No
seadoc.yml seadoc 8888 80 Yes
notification-server.yml notification-server 8083 8083 Yes

Modify YML Files

Refer to the appropriate exposed ports in Table 1. Modify the respective docker-compose.yml files:

  • For example, for seafile-server.yml:
services:
  seafile:
    image: ${SEAFILE_IMAGE:-seafileltd/seafile-pro-mc:13.0-latest}
    container_name: seafile
    ports:
      - "80:80"
    volumes:
      - ${SEAFILE_VOLUME:-/opt/seafile-data}:/shared
    # Remove any Caddy-related sections if present

Apache Configuration

To set up Apache as a reverse proxy, you will first need to enable mod_proxy and mod_ssl:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl

Then, create or modify the Apache configuration (e.g., /etc/apache2/sites-available/seafile.conf):

<VirtualHost *:80>
    ServerName your-domain.com
    Redirect permanent / https://your-domain.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName your-domain.com
    SSLEngine on
    SSLCertificateFile /path/to/certificate.crt
    SSLCertificateKeyFile /path/to/private.key

    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:80/
    ProxyPassReverse / http://127.0.0.1:80/

    # Proxy for Seafile services
    ProxyPass /sdoc-server/ http://127.0.0.1:8888/
    ProxyPassReverse /sdoc-server/ http://127.0.0.1:8888/

    # Optionally for WebSocket support
    ProxyPass /socket.io http://127.0.0.1:8888/socket.io
    ProxyPassReverse /socket.io http://127.0.0.1:8888/socket.io
</VirtualHost>

Modify .env

Ensure to remove caddy.yml from the COMPOSE_FILE entry in your .env file:

COMPOSE_FILE='seafile-server.yml' # remove caddy.yml

Starting Services

Once all configurations are properly set, restart your Docker containers and Apache:

docker-compose down
docker-compose up -d
sudo systemctl restart apache2

Conclusion

This modified guide allows you to set up Seafile using Apache as a reverse proxy instead of Nginx, ensuring proper SSL handling and service proxying necessary for seamless operation. Always test your configuration before going live to avoid service interruptions.

Thanks a lot for your reply, I tried following your instructions, but to no success.

Here is what I have in detail:

Docker compose files are in /home/esso/seafile-server

Storage is in /data/HDD2/seafile-server

My .env file:

#################################

Docker compose configurations

#################################
#COMPOSE_FILE=‘seafile-server.yml,caddy.yml,seadoc.yml’
COMPOSE_FILE=‘seafile-server.yml,seadoc.yml’
COMPOSE_PATH_SEPARATOR=‘,’

Images

SEAFILE_IMAGE=seafileltd/seafile-mc:13.0-latest
SEAFILE_DB_IMAGE=mariadb:10.11
SEAFILE_REDIS_IMAGE=redis
SEAFILE_CADDY_IMAGE=lucaslorentz/caddy-docker-proxy:2.9-alpine
SEADOC_IMAGE=seafileltd/sdoc-server:2.0-latest
NOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:13.0-latest
MD_IMAGE=seafileltd/seafile-md-server:13.0-latest

Persistent Storage

BASIC_STORAGE_PATH=/data/HDD2/seafile-server
SEAFILE_VOLUME=$BASIC_STORAGE_PATH/seafile-data
SEAFILE_MYSQL_VOLUME=$BASIC_STORAGE_PATH/seafile-mysql/db
SEAFILE_CADDY_VOLUME=$BASIC_STORAGE_PATH/seafile-caddy
SEADOC_VOLUME=$BASIC_STORAGE_PATH/seadoc-data

#################################

Startup parameters

#################################
SEAFILE_SERVER_HOSTNAME=mydomain.ddns.net
SEAFILE_SERVER_PROTOCOL=https
TIME_ZONE=Etc/UTC
JWT_PRIVATE_KEY=CVaOmz9nYPzBsAINMGf2sSIGlZULJA5FBSR7rjrn

#####################################

Third-party service configuration

#####################################

Database

SEAFILE_MYSQL_DB_HOST=db
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=password_removed
SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db

Cache

CACHE_PROVIDER=redis # or memcached

Redis

REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=

Memcached

MEMCACHED_HOST=memcached
MEMCACHED_PORT=11211

######################################

Initial variables

(Only valid in first-time startup)

######################################

Database root password, Used to create Seafile users

INIT_SEAFILE_MYSQL_ROOT_PASSWORD=password_removed

Seafile admin user

INIT_SEAFILE_ADMIN_EMAIL=my_email_here
INIT_SEAFILE_ADMIN_PASSWORD=password_removed

############################################

Additional configurations for extensions

############################################

SeaDoc service

ENABLE_SEADOC=true

Notification

ENABLE_NOTIFICATION_SERVER=false
NOTIFICATION_SERVER_URL=

Seafile AI

ENABLE_SEAFILE_AI=false
SEAFILE_AI_LLM_TYPE=openai
SEAFILE_AI_LLM_URL=
SEAFILE_AI_LLM_KEY= # your llm key
SEAFILE_AI_LLM_MODEL=gpt-4o-mini

Metadata server

MD_FILE_COUNT_LIMIT=100000

My seafile-server.yml

services:
db:
image: ${SEAFILE_DB_IMAGE:-mariadb:10.11}
container_name: seafile-mysql
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-}
- MYSQL_LOG_CONSOLE=true
- MARIADB_AUTO_UPGRADE=1
volumes:
- “${SEAFILE_MYSQL_VOLUME:-/opt/seafile-mysql/db}:/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

redis:
image: ${SEAFILE_REDIS_IMAGE:-redis}
container_name: seafile-redis
restart: unless-stopped
command:
- /bin/sh
- -c
- redis-server --requirepass “$$REDIS_PASSWORD”
environment:
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
networks:
- seafile-net

seafile:
image: ${SEAFILE_IMAGE:-seafileltd/seafile-mc:13.0-latest}
container_name: seafile
restart: unless-stopped
# ports:
# - “80:80”
volumes:
- ${SEAFILE_VOLUME:-/opt/seafile-data}:/shared
environment:

  - SEAFILE_MYSQL_DB_HOST=${SEAFILE_MYSQL_DB_HOST:-db}
  - SEAFILE_MYSQL_DB_PORT=${SEAFILE_MYSQL_DB_PORT:-3306}
  - SEAFILE_MYSQL_DB_USER=${SEAFILE_MYSQL_DB_USER:-seafile}
  - SEAFILE_MYSQL_DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD:?Variable is not set or empty}
  - INIT_SEAFILE_MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-}
  - SEAFILE_MYSQL_DB_CCNET_DB_NAME=${SEAFILE_MYSQL_DB_CCNET_DB_NAME:-ccnet_db}
  - SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=${SEAFILE_MYSQL_DB_SEAFILE_DB_NAME:-seafile_db}
  - SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME:-seahub_db}
  - TIME_ZONE=${TIME_ZONE:-Etc/UTC}
  - INIT_SEAFILE_ADMIN_EMAIL=${INIT_SEAFILE_ADMIN_EMAIL:-me@example.com}
  - INIT_SEAFILE_ADMIN_PASSWORD=${INIT_SEAFILE_ADMIN_PASSWORD:-asecret}
  - SEAFILE_SERVER_HOSTNAME=${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
  - SEAFILE_SERVER_PROTOCOL=${SEAFILE_SERVER_PROTOCOL:-http}
  - SITE_ROOT=${SITE_ROOT:-/}
  - NON_ROOT=${NON_ROOT:-false}
  - JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty}
  - SEAFILE_LOG_TO_STDOUT=${SEAFILE_LOG_TO_STDOUT:-false}
  - ENABLE_GO_FILESERVER=${ENABLE_GO_FILESERVER:-true}
  - ENABLE_SEADOC=${ENABLE_SEADOC:-true}
  - SEADOC_SERVER_URL=${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}/sdoc-server
  - CACHE_PROVIDER=${CACHE_PROVIDER:-redis}
  - REDIS_HOST=${REDIS_HOST:-redis}
  - REDIS_PORT=${REDIS_PORT:-6379}
  - REDIS_PASSWORD=${REDIS_PASSWORD:-}
  - MEMCACHED_HOST=${MEMCACHED_HOST:-memcached}
  - MEMCACHED_PORT=${MEMCACHED_PORT:-11211}
  - ENABLE_NOTIFICATION_SERVER=${ENABLE_NOTIFICATION_SERVER:-false}
  - INNER_NOTIFICATION_SERVER_URL=${INNER_NOTIFICATION_SERVER_URL:-http://notification-server:8083}
  - NOTIFICATION_SERVER_URL=${NOTIFICATION_SERVER_URL:-${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}/notification}
  - ENABLE_SEAFILE_AI=${ENABLE_SEAFILE_AI:-false}
  - SEAFILE_AI_SERVER_URL=${SEAFILE_AI_SERVER_URL:-http://seafile-ai:8888}
  - SEAFILE_AI_SECRET_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty}
  - MD_FILE_COUNT_LIMIT=${MD_FILE_COUNT_LIMIT:-100000}
#labels:
#  caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
#  caddy.reverse_proxy: "{{upstreams 80}}"
healthcheck:
  test: ["CMD-SHELL", "curl -f http://localhost:80 || exit 1"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 10s
depends_on:
  db:
    condition: service_healthy
  redis:
    condition: service_started
networks:
  - seafile-net

networks:
seafile-net:
name: seafile-net

my seadoc.yml:

services:

seadoc:
image: ${SEADOC_IMAGE:-seafileltd/sdoc-server:2.0-latest}
container_name: seadoc
restart: unless-stopped
volumes:
- ${SEADOC_VOLUME:-/opt/seadoc-data/}:/shared
ports:
- “8888:80”
environment:
- DB_HOST=${SEAFILE_MYSQL_DB_HOST:-db}
- DB_PORT=${SEAFILE_MYSQL_DB_PORT:-3306}
- DB_USER=${SEAFILE_MYSQL_DB_USER:-seafile}
- DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD:?Variable is not set or empty}
- DB_NAME=${SEADOC_MYSQL_DB_NAME:-${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME:-seahub_db}}
- TIME_ZONE=${TIME_ZONE:-Etc/UTC}
- JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty}
- NON_ROOT=${NON_ROOT:-false}
- SEAHUB_SERVICE_URL=${SEAFILE_SERVICE_URL:-http://seafile}
#labels:
#caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
#caddy.@ws.0_header: “Connection Upgrade”
#caddy.@ws.1_header: “Upgrade websocket”
#caddy.0_reverse_proxy: “@ws {{upstreams 80}}”
#caddy.1_handle_path: “/socket.io/"
#caddy.1_handle_path.0_rewrite: " /socket.io{uri}”
#caddy.1_handle_path.1_reverse_proxy: “{{upstreams 80}}”
#caddy.2_handle_path: “/sdoc-server/"
#caddy.2_handle_path.0_rewrite: " {uri}”
#caddy.2_handle_path.1_reverse_proxy: “{{upstreams 80}}”
depends_on:
db:
condition: service_healthy
networks:
- seafile-net

networks:
seafile-net:
name: seafile-net

/etc/apache2/sites-enabled/seafile.conf:

<VirtualHost *:80>
ServerName mydomain.ddns.net
Redirect permanent / https://mydomain.ddns.net/


<VirtualHost *:443>
ServerName mydomain.ddns.net
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/mydomain.ddns.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.ddns.net/privkey.pem

ProxyPreserveHost On
ProxyPass / http://127.0.0.1:80/
ProxyPassReverse / http://127.0.0.1:80/

# Proxy for Seafile services
ProxyPass /sdoc-server/ http://127.0.0.1:8888/
ProxyPassReverse /sdoc-server/ http://127.0.0.1:8888/

# Optionally for WebSocket support
ProxyPass /socket.io http://127.0.0.1:8888/socket.io
ProxyPassReverse /socket.io http://127.0.0.1:8888/socket.io
</VirtualHost>

seafile-monitor.log:

/opt/seafile/seafile-server-13.0.15/seafile-monitor.sh: line 242: 2890 Illegal instruction (core dumped) $PYTHON -m seafevents.main --config-file ${SEAFILE_CENTRAL_CONF_DIR}/seafevents.conf --logfile ${TOPDIR}/logs/seaf
[2026-01-09 08:39:29] Start seafevents.main.
/opt/seafile/seafile-server-13.0.15/seafile-monitor.sh: line 242: 2972 Illegal instruction (core dumped) $PYTHON -m seafevents.main --config-file ${SEAFILE_CENTRAL_CONF_DIR}/seafevents.conf --logfile ${TOPDIR}/logs/seaf
[2026-01-09 08:40:00] Start seafevents.main.
/opt/seafile/seafile-server-13.0.15/seafile-monitor.sh: line 242: 3061 Illegal instruction (core dumped) $PYTHON -m seafevents.main --config-file ${SEAFILE_CENTRAL_CONF_DIR}/seafevents.conf --logfile ${TOPDIR}/logs/seaf
[2026-01-09 08:40:32] Start seafevents.main.
/opt/seafile/seafile-server-13.0.15/seafile-monitor.sh: line 242: 3143 Illegal instruction (core dumped) $PYTHON -m seafevents.main --config-file ${SEAFILE_CENTRAL_CONF_DIR}/seafevents.conf --logfile ${TOPDIR}/logs/seaf
[2026-01-09 08:41:03] Start seafevents.main.
/opt/seafile/seafile-server-13.0.15/seafile-monitor.sh: line 242: 3224 Illegal instruction (core dumped) $PYTHON -m seafevents.main --config-file ${SEAFILE_CENTRAL_CONF_DIR}/seafevents.conf --logfile ${TOPDIR}/logs/seaf
[2026-01-09 08:41:34] Start seafevents.main.
/opt/seafile/seafile-server-13.0.15/seafile-monitor.sh: line 242: 3306 Illegal instruction (core dumped) $PYTHON -m seafevents.main --config-file ${SEAFILE_CENTRAL_CONF_DIR}/seafevents.conf --logfile ${TOPDIR}/logs/seaf
[2026-01-09 08:42:05] Start seafevents.main.
/opt/seafile/seafile-server-13.0.15/seafile-monitor.sh: line 242: 3387 Illegal instruction (core dumped) $PYTHON -m seafevents.main --config-file ${SEAFILE_CENTRAL_CONF_DIR}/seafevents.conf --logfile ${TOPDIR}/logs/seaf
[2026-01-09 08:42:36] Start seafevents.main.
/opt/seafile/seafile-server-13.0.15/seafile-monitor.sh: line 242: 3469 Illegal instruction (core dumped) $PYTHON -m seafevents.main --config-file ${SEAFILE_CENTRAL_CONF_DIR}/seafevents.conf --logfile ${TOPDIR}/logs/seaf
[2026-01-09 08:43:07] Start seafevents.main.

seahub.access.log:

127.0.0.1 [09/Jan/2026:08:34:54 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.985

127.0.0.1 [09/Jan/2026:08:35:25 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.967

127.0.0.1 [09/Jan/2026:08:35:57 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.941

127.0.0.1 [09/Jan/2026:08:36:28 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.956

127.0.0.1 [09/Jan/2026:08:36:59 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.934

127.0.0.1 [09/Jan/2026:08:37:30 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.942

127.0.0.1 [09/Jan/2026:08:38:01 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.936

127.0.0.1 [09/Jan/2026:08:38:33 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.936

127.0.0.1 [09/Jan/2026:08:39:04 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.931

127.0.0.1 [09/Jan/2026:08:39:35 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.952

127.0.0.1 [09/Jan/2026:08:40:06 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.965

127.0.0.1 [09/Jan/2026:08:40:37 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.929

127.0.0.1 [09/Jan/2026:08:41:08 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.937

127.0.0.1 [09/Jan/2026:08:41:40 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.938

127.0.0.1 [09/Jan/2026:08:42:11 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.930

127.0.0.1 [09/Jan/2026:08:42:42 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.942

127.0.0.1 [09/Jan/2026:08:43:13 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 1.101

127.0.0.1 [09/Jan/2026:08:43:45 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.955

127.0.0.1 [09/Jan/2026:08:44:16 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.934

127.0.0.1 [09/Jan/2026:08:44:47 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.966

127.0.0.1 [09/Jan/2026:08:45:18 +0000] “GET / HTTP/1.1” 502 150 “-” “curl/8.5.0” 0.966


seahub.error.log:

2026/01/09 08:43:13 [error] 42#42: *87 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: , request: “GET / HTTP/1.1”, upstream: “``http://127.0.0.1:8000/”``, host: “lo
calhost”
2026/01/09 08:43:45 [error] 42#42: *89 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: , request: “GET / HTTP/1.1”, upstream: “``http://127.0.0.1:8000/”``, host: “lo
calhost”
2026/01/09 08:44:16 [error] 42#42: *91 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: , request: “GET / HTTP/1.1”, upstream: “``http://127.0.0.1:8000/”``, host: “lo
calhost”
2026/01/09 08:44:47 [error] 42#42: *93 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: , request: “GET / HTTP/1.1”, upstream: “``http://127.0.0.1:8000/”``, host: “lo
calhost”
2026/01/09 08:45:18 [error] 42#42: *95 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: , request: “GET / HTTP/1.1”, upstream: “``http://127.0.0.1:8000/”``, host: “lo
calhost”
2026/01/09 08:45:49 [error] 42#42: *97 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: , request: “GET / HTTP/1.1”, upstream: “``http://127.0.0.1:8000/”``, host: “lo
calhost”
2026/01/09 08:46:21 [error] 42#42: *99 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: , request: “GET / HTTP/1.1”, upstream: “``http://127.0.0.1:8000/”``, host: “lo
calhost”

and finally, when I run docker logs seafile -f I get:

root@homeserv:/home/esso/docker/seafile-server# docker logs seafile -f
*** Running /etc/my_init.d/01_create_data_links.sh…
*** Booting runit daemon…
*** Runit started as PID 11
*** Running /scripts/enterpoint.sh…
2026-01-09 08:21:10 Waiting Nginx
nginx: [warn] conflicting server name “” on 0.0.0.0:80, ignored
2026-01-09 08:21:11 Nginx ready
2026-01-09 08:21:11 This is an idle script (infinite loop) to keep container running.
nginx: [warn] conflicting server name “” on 0.0.0.0:80, ignored
[2026-01-09 08:21:11] Now running setup-seafile-mysql.py in auto mode.
Checking python on this machine …

verifying password of user root …  done




This is your configuration

server name:            seafile
server ip/domain:       mydomain.ddns.net

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.

run seafile server:     ./seafile.sh { start | stop | restart }
run seahub  server:     ./seahub.sh  { start  | stop | restart  }




If you are behind a firewall, remember to allow input/output of these tcp ports:

port of seafile fileserver:   8082
port of seahub:               8000

When problems occur, Refer to

    https://download.seafile.com/published/seafile-manual/home.md

for information.

[2026-01-09 08:21:47] Updating version stamp

Starting seafile server, please wait …
Seafile server started

Done.

Starting seahub at port 8000 …




Successfully created seafile admin

Seahub is started

Done.

When I visit mydomain ddns net I only get the defaul apache config website. Can you please help further? Thank you very much for your time..

You are falling victim to this: https://forum.seafile.com/t/error-on-seafile-docker-upgrade-13-0-15-core-dump-because-of-numpy/24870/4 See the Illegal instruction (core dumped) errors in seafile-monitor.log. Running on a rather old cpu?

For a quick fix, manually install the older v.13.0.12, though I don’t know the downsides of this. Also there is a fix for the newer version in the thread above, however it’s more complicated.

That was the problem, thanks a lot for pointing that out. My CPU is an old AMD E350.

But still i can’t get it fully working, there is stuff beyond my skills right now.

What I did now is (while all of the above still is the same) to change seafile server port to 8080, so in my seafile-server.yml is now:

ports:
- “8080:80”

because I run apache on host on port 80.

Now when I enter the IP of my server on local network 192.168.24.10 I can see the website of /var/www/html annd that’s what I’d like to keep.

When I enter 192.168.24.10:8080 I can see http of seafile, so that also works. What doesn’t work is 192.168.24.10/seafile

When I enter the domain which I stated here as https://mydomain.ddns.net I can see the website, but when I enter https://mydomain.ddns.net:8080 or https://mydomain.ddns.net/seafile that also doesn’t work.

I include my seafile.conf which is the only site enabled in my apache2 configuration:

<VirtualHost *:80>
ServerName mydomain.ddns.net
Redirect permanent / https://mydomain.ddns.net/
Alias /media  /opt/seafile/seafile-server-latest/seahub/media

AllowEncodedSlashes On

RewriteEngine On

<Location /media>
    Require all granted
</Location>

#
# seafile fileserver
#
ProxyPass /seafhttp http://127.0.0.1:8080
ProxyPassReverse /seafhttp http://127.0.0.1:8080
RewriteRule ^/seafhttp - [QSA,L]

#
# seahub
#
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8000/
ProxyPassReverse / http://127.0.0.1:8000/

</VirtualHost>

<VirtualHost *:443>
ServerName mydomain.ddns.net
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/mydomain.ddns.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.ddns.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

ProxyPreserveHost On
ProxyPass /seafile/ http://127.0.0.1:8080/
ProxyPassReverse /seafile/ http://127.0.0.1:8080/

# Proxy for Seafile services
ProxyPass /sdoc-server/ http://127.0.0.1:8888/
ProxyPassReverse /sdoc-server/ http://127.0.0.1:8888/

# Optionally for WebSocket support
ProxyPass /socket.io http://127.0.0.1:8888/socket.io
ProxyPassReverse /socket.io http://127.0.0.1:8888/socket.io

</VirtualHost>

Can you please help me to achieve, that when I enter https://mydomain.ddns.net/seafile that seafile will be available at that link? Also when I enter only http that will redirect always to https…

SSL certificate is valid when I enter http://mydomain.ddns.net, it’s redirected to https://mydomain.ddns.net and the simple website is displayed.

Thank you in advance.

Sorry, not an expert either. I suspect that, for what you intend to do, you need to add redirects also for /seafhttp and /media. However I do not know for sure.

You might first try to redirect the root of the domain as suggested by @daniel.pan. Looks easier, and at least you will know whether your setup is ok or not.

Also, you need to figure out what is it that does not work. Try the logs…