Troubleshooting
This page covers the most common issues after deployment: service startup failure, upload/download failure, sharing access problems, WebDAV connection failure, Office / WOPI blank screens, background tasks not running, and post-upgrade issues.
Find the section that matches the symptom you see. You do not need to read the whole page.
If your symptom is outside this page's scope, such as a functional bug or data problem, run aster_drive doctor first, then see Still Not Solved.
Before troubleshooting, do two things:
- Check the responses from
/healthand/health/ready; they can directly tell you whether the DB is unreachable or the storage backend is not ready. - Check recent logs. AsterDrive errors include
error_code; comparing against Error Code Handling is faster than staring at English error text.
Service Does Not Start
Startup Exits Immediately with No Logs
This usually means an error happened during configuration loading, before logging was initialized.
Check in this order:
- Is the current working directory the one you think it is?
data/config.tomlis resolved from the working directory. - Does
data/config.tomlhave write permission? First startup needs to write it. - Are there typoed keys under the
ASTER__environment variable prefix? Misspelled keys are not ignored; they make loading fail. - Can the database URL be parsed? A wrong SQLite path also falls into this category.
/health 200 but /health/ready 503
/health only checks whether the process is alive. /health/ready actually pings the database and default storage policy.
Distinguish by the error_code in the 503 response:
database_error: DB cannot connect. Check connection string, network, username, and password first.- Storage-related error code: default storage policy cannot start. For S3, check endpoint, credentials, and bucket existence. For local storage, check path permissions.
Configuration Changes Do Not Take Effect
There are two classes:
- Changes to
data/config.tomlrequire a process restart. - Most runtime settings under
Admin -> System Settingsdo not require restart. If the page marks an item as "requires restart", restart according to the page hint. - Rate limiting is not in system settings. It is
[rate_limit]inconfig.toml, and changes require restart.
If you changed runtime settings but behavior does not move, first check whether the description for that setting says "takes effect after restart".
Upload Failure
Direct Small-File Upload Fails, but Chunked Large-File Upload Works
Direct upload uses web::Bytes and receives the full body in one shot. Its body limit is affected by both the actix default limit and the reverse proxy.
Check in this order:
- Reverse proxy (
nginx/caddy/traefik)client_max_body_sizeor equivalent configuration. - Whether WAF / CDN blocked it.
- Whether intermediate network devices have their own body limits.
Large files use chunked upload, and each chunk is 5 MiB by default, so chunk body limits are less likely to be hit.
Chunked Upload Gets Stuck Halfway
First identify the stuck stage:
- Stuck on a specific chunk: usually a network interruption. The frontend retries by itself; check that request's status in browser developer tools.
- All chunks uploaded but complete does not return: the server is merging and calculating SHA256. Large files take time. Do not immediately retry complete; it will hit the dedup path but waste another merge attempt.
upload_session_expired
Most resumable upload sessions last 24 hours. Single presigned direct-upload sessions for S3 / follower nodes are usually 1 hour. Use the frontend recovery list or the server-returned expires_at as the source of truth.
If you plan to upload very large files that may cross days, check network speed before starting. Sessions are not automatically renewed after expiration; you must start again.
chunk_upload_failed
The most common cause is a full disk.
Check in this order:
- Available space on the partition containing
data/.uploads. - Whether the user's quota is already exhausted.
- Whether the default policy / user-bound policy group is disabled.
upload_assembling
The backend is merging chunks. This is not an error. Wait a few seconds and retry complete. If it repeats and lasts more than 1 minute, check whether the data/.uploads temporary directory has abnormalities.
Download and Preview
Download Stream Breaks Halfway
Download uses streaming + Range support. If the stream breaks, reconnecting can resume.
If it repeatedly breaks at the same position:
- Check the reverse proxy
proxy_read_timeoutor equivalent configuration. Large downloads need a long read timeout. - Check whether the link between client and service has an idle timeout, such as CDN or Cloudflare Tunnel.
Preview Cannot Open / Office File Cannot Open
Separate by preview type:
- Images / videos / code: browser-native preview. Check the browser console for CSP / MIME errors.
- Office files: depends on the preview method you use.
- If using an external previewer, first check whether binding is correct under
Admin -> System Settings -> Site Configuration -> Preview Applications. - If using WOPI (Collabora / OnlyOffice), confirm the WOPI service can reverse-access AsterDrive's public site origin.
- If using an external previewer, first check whether binding is correct under
- ZIP archives: first check the global switch and user/share-side switches under
Admin -> System Settings -> Storage and Retention -> Archive Preview, then check whetherArchive Preview Generationfailed underAdmin -> Tasks.
WOPI integration details are in File Editing.
Sharing Access
Sharing Link 404
Most likely causes, ordered by probability:
- Token typo or truncation, especially when copied from WeChat / enterprise IM.
- Share expired, beyond
expires_at. - Share deleted.
- Share reached the
max_downloadslimit.
Share Requires Password, but Correct Password Still Fails
First distinguish "not verified yet" from "verification failed":
share_password_required: the current request has no valid share password verification cookie. Usually not verified yet, cookie lost, or verification expired.auth_failed: submitted password is wrong.share_expired/share_not_found: same as the previous section, not a password issue.
The server caches password verification for 1 hour. After changing the password, the other party may still access with the old password within 1 hour. This is intentional behavior, not a bug.
Sharing Page Audio / Video Plays for a While, then 404 or Expires
Sharing page audio and video use short-lived stream playback sessions, valid for 3 hours by default. This is not the expiration time of the sharing link itself.
If playback fails after a user plays music or video for a long time:
- Refreshing the sharing page creates a new playback session.
- Administrators can adjust it under
Admin -> System Settings -> Runtime and Scheduling -> Share Stream Playback Session Lifetime. - Configurable range is
5minutes to24hours.
If it fails immediately after opening, first confirm the sharing link itself has not expired, has not reached the download limit, and the password verification Cookie is still valid.
WebDAV
Client Cannot Connect
Check in this order:
- Whether the global WebDAV switch in system settings is off. If off, it returns 503 directly.
- Whether the reverse proxy allows WebDAV methods (
PROPFIND/MKCOL/MOVE/COPY/LOCK/UNLOCK). Nginx defaults to only allowing GET/POST/HEAD. - Whether the reverse proxy allows headers such as
Depth/Destination/Overwrite/If. - Whether the URL includes the correct
/webdavprefix.
Reverse proxy examples are in Reverse Proxy Deployment.
Can Connect, but All Operations Return 401
WebDAV uses its own account system. It is not the normal login account. Create a dedicated account from the WebDAV page in the personal space sidebar.
Normal login JWT can also use Bearer authentication, but most WebDAV clients do not support custom headers. Dedicated accounts are the easiest path.
Can List Directories, but Writes Fail
Check the error code:
resource_locked: a file or folder is held by a WebDAV LOCK. Usually another client did not release it, or the previous client crashed without UNLOCK. Wait for lock expiration or unlock manually in the admin panel.precondition_failed: the client sentIf-Match/If-None-Match, but the condition was not satisfied. Common when multiple clients edit the same file at once.- Quota-related: user quota is full.
Office / WOPI
Collabora / OnlyOffice Loads a Blank Screen
The most common cause is the WOPI service cannot connect back to AsterDrive.
The WOPI protocol requires the preview service to fetch file content from AsterDrive, so the preview service side must be able to access the configured public site origin. When generating a WOPI URL, AsterDrive first matches the current request Origin (scheme + host[:port]) exactly. If it matches, that origin is used; if not, the first entry is used as fallback. Make sure the final selected origin is reachable by the WOPI service:
- Preview service and AsterDrive both run in Docker: use Docker network, and set the public site origin to a domain the other side can resolve.
- Preview service is on the public internet: public site origin must be publicly reachable HTTPS.
- Preview service is on the intranet: use an intranet domain + intranet certificate for public site origin.
Token Failure / 401
WOPI access_token is short-lived. If the client has been open for a long time before an operation, the token may expire. Refresh the page to request a new one.
If it repeats:
- Check whether the AsterDrive clock is correct. WOPI proof-key validation has a +/-20 minute time window.
- Check the WOPI service's own clock.
Background Tasks
Mail Cannot Be Sent
First go to Admin -> System Settings -> Mail Delivery and send a test email, then inspect server logs for mail outbox / SMTP errors.
Separate by symptom:
- Everything fails: SMTP configuration is wrong. Use "Send Test Email" under
Admin -> System Settings -> Mail Deliveryto verify connectivity first. - Partial failures: recipient addresses may be blocked by the recipient domain. Check specific delivery logs.
- Status appears stuck: first confirm the service process is still running. To check whether system scheduling continues to work, go to
Admin -> Tasksand see whether recent system task records have repeatedMail outbox dispatchfailures.
Thumbnails Never Appear
Thumbnails are generated asynchronously by workers. They usually appear within seconds to tens of seconds after upload.
If they never appear:
- Is the file type supported? Most images are supported; some videos are supported.
- Does the file size exceed the thumbnail generation limit?
- Are there recent repeated thumbnail or system task failures under
Admin -> Tasks?
Trash Items Do Not Clear After Expiration
Cleanup tasks run hourly, not immediately. If the setting is 30 days, an item that just reached 30 days will not vanish instantly.
If it is still there after a day:
- Confirm the trash retention days under
Admin -> System Settings -> Storage and Retentionwere really changed. - Check recent
Trash cleanupsystem task failures underAdmin -> Tasks, or inspect server logs directly.
Post-Upgrade Issues
Upgrade Fails at Startup with Database Errors
This usually means database migration did not finish.
Both binary and Docker image run migrations automatically at startup, but migration fails if the database account lacks DDL permissions.
Check in this order:
- Whether the database account has
CREATE/ALTERpermissions. - The specific error during the migration phase in startup logs.
- If upgrading from a very old version, run
aster_drive database-migrateseparately to see a more detailed error.
Some Features "Disappeared" After Upgrade
They usually did not disappear; their location changed. First read the corresponding version section in the changelog.
If upgrading from an early prerelease build, read the early-build notes in Upgrade and Version Migration first. A full backup is still recommended before upgrade; see Backup and Restore.
Still Not Solved
Submit an issue in this order:
- Run
aster_drive doctoronce and paste the output. - Paste the full JSON from
/health/ready. - Paste logs around the symptom, at least 50 lines before and after.
- Open an issue in GitHub Issues.
Do not delete the error_code field. error_code is the fastest clue for locating the problem.