Docker
The published image is multi-architecture — linux/amd64 and linux/arm64 —
so it runs on an ARM box as happily as on an ordinary server.
florianstrasser/lokaltransfer:latest
Tags follow each release: 0.1.5, 0.1, 0 and latest.
The database inside the image
The container carries its own MySQL 8 and starts it only when no external
database is configured. Set NUXT_MYSQL_HOST and the built-in server never
starts at all — no wasted memory, no second copy of your data.
That makes the first run a single command with nothing to set up first, while a real deployment can point at a managed database without carrying a database it does not use.
Volumes
docker run -d \
--name lokaltransfer \
-p 3000:3000 \
-v lokaltransfer-storage:/app/storage \
-v lokaltransfer-db:/var/lib/mysql \
-e NUXT_APP_URL=https://transfer.example.com \
florianstrasser/lokaltransfer:latest
Both are required for anything you intend to keep:
/app/storage— the uploaded files./var/lib/mysql— the built-in database. Omit it when using an external one.
Without them, both live in the container's writable layer and vanish the first time you recreate the container. That is the mistake worth avoiding before it costs you real transfers.
With an external database
docker run -d \
--name lokaltransfer \
-p 3000:3000 \
-v lokaltransfer-storage:/app/storage \
-e NUXT_APP_URL=https://transfer.example.com \
-e NUXT_MYSQL_HOST=db.example.com \
-e NUXT_MYSQL_DATABASE=lokaltransfer \
-e NUXT_MYSQL_USER=lokaltransfer \
-e NUXT_MYSQL_PASSWORD=secret \
-e NUXT_MYSQL_SSL=true \
florianstrasser/lokaltransfer:latest
If your host offers an internal and an external address for the database, use whichever one the container can actually resolve. They are frequently different, and the internal one often does not resolve from outside the provider's network.
docker compose
services:
lokaltransfer:
image: florianstrasser/lokaltransfer:latest
restart: unless-stopped
ports:
- "3000:3000"
environment:
NUXT_APP_URL: https://transfer.example.com
NUXT_ADMIN_EMAIL: you@example.com
NUXT_ADMIN_PASSWORD: a-long-password
NUXT_EMAIL_HOST: mail.example.com
NUXT_EMAIL_USER: noreply@example.com
NUXT_EMAIL_PASS: secret
volumes:
- storage:/app/storage
- db:/var/lib/mysql
volumes:
storage:
db:
Configuration from a file
The entrypoint loads /app/.env if you mount one, so a host panel that only
offers a file can still configure the instance. Real environment variables
always win over the file, so --env-file and compose environment: keep
working as expected.
Health
The image declares a HEALTHCHECK against /api/health, which also verifies
the database connection. An instance that cannot reach its database reports
unhealthy rather than sitting in a load balancer's rotation serving errors.