Ctrl K
ComunidadGuías…

apps/seafile/troubleshooting.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
### The first start fails with "is not a valid ip or domain"

The setup script validates `SEAFILE_SERVER_HOSTNAME` and rejects `localhost` and
anything without a dot. Set a real host name — the public domain, or a name your
LAN DNS resolves — then remove the half-initialised volume and start again:

```bash
docker compose down --timeout 120
docker volume rm seafile-data seafile-database
docker compose up -d --wait --wait-timeout 900
```

Only do this while the installation is empty; on a working instance the same
command destroys every library.

### The container stays unhealthy for several minutes

The first start creates three databases, generates the configuration into the
data volume, and then starts Seahub, which is why the health check allows a five
minute start period. Watch the progress instead of restarting:

```bash
docker compose logs --follow seafile
docker compose ps
docker inspect --format '{{json .State.Health}}' "$(docker compose ps -q seafile)"
```

`502` from the published port during that window is normal: nginx is up before
Seahub is.

### Seahub cannot reach the database or the cache

```bash
docker compose logs --tail=200 db cache
docker compose exec db mariadb --user=root --password="$SEAFILE_DB_ROOT_PASSWORD" -e "SHOW DATABASES;"
```

The credentials are written into `conf/seafile.conf` and `conf/seahub_settings.py`
inside the data volume during setup. Changing `SEAFILE_DB_PASSWORD` or
`SEAFILE_CACHE_PASSWORD` in `.env` afterwards does not rewrite those files, so
either restore the old value or edit the generated configuration to match.

### Links, e-mail, or clients point at the wrong address

`SEAFILE_SERVER_HOSTNAME` and `SEAFILE_SERVER_PROTOCOL` are baked into the
generated configuration at first start. To move to another domain, edit
`conf/ccnet.conf` (`SERVICE_URL`), `conf/seahub_settings.py`
(`FILE_SERVER_ROOT`, `SERVICE_URL`), and `conf/seafile.conf` inside the volume,
then restart:

```bash
docker compose exec seafile grep -R "example.com" /shared/seafile/conf
docker compose restart seafile
```

### Uploads fail at a certain size or time out

The proxy is the usual cause: the samples set `client_max_body_size 0`, disable
request buffering, and raise the read and send timeouts because file blocks pass
through the same origin. A `413` comes from the proxy, a `500` after several
minutes usually means the timeout fired mid-transfer.

### Downloads or uploads return 400 from /seafhttp/

That path is the Go file server behind the same nginx, and it answers only with
a valid token, so a bare request returning `400` is expected. A real failure
shows in the logs:

```bash
docker compose exec seafile tail -n 100 /shared/logs/seafile/seafile.log
docker compose exec seafile tail -n 100 /shared/logs/seahub/seahub.log
```

### An encrypted library cannot be opened

Client-side encrypted libraries are decrypted with a password the server never
stores. There is no administrative recovery: a lost library password means the
data stays encrypted, even though the blocks are present in the backup.

### The reverse proxy returns 502

On the host, run `curl -I http://127.0.0.1:8000/accounts/login/`. If that
answers, the proxy is looking at the wrong upstream: inside a proxy container
`127.0.0.1` is the proxy itself, so use a host gateway address or a shared
Docker network. If it does not answer, start from the health-check section above.