Install

ThirtyFile runs in Docker. Pick one of the two ways below; both take about a minute.

On this page
  1. Before you start
  2. Option 1: docker run
  3. Option 2: Docker Compose
  4. Sign in
  5. Stop and start

Before you start

Install Docker on the computer or server that will hold the files. Nothing else is needed.

Option 1: docker run

docker run -d --name thirtyfile --restart unless-stopped \
  -p 8080:8080 \
  -v /srv/thirtyfile/data:/data \
  -v /srv/thirtyfile/storage:/storage \
  -e THIRTYFILE_ADMIN_PASSWORD='choose-a-password' \
  ghcr.io/thirtyfile/thirtyfile:latest

Images from v0.6.0 onward are also available on Docker Hub. Use thirtyfile/thirtyfile:0.6 in the command above to stay on that release line. With Compose, replace ghcr.io/thirtyfile/thirtyfile with thirtyfile/thirtyfile on the image: line, keeping a tag that exists on Docker Hub and your existing volumes. Earlier releases remain available on GHCR.

PartWhat it does
-p 8080:8080The port the site is reached on. For port 80, write -p 80:8080
-v /srv/thirtyfile/data:/dataWhere accounts and settings are kept, so they survive updates
-v /srv/thirtyfile/storage:/storageWhere your files are kept. Can be another disk or a NAS mount
THIRTYFILE_ADMIN_PASSWORDThe password of the first account. Replace choose-a-password with your own: that example is ignored like a missing one. Optional: without it, a random one is written to the log

Option 2: Docker Compose

Download the ready-made compose.yaml into an empty folder and start it from there:

curl -fLO https://github.com/ThirtyFile/ThirtyFile/releases/latest/download/compose.yaml
docker compose up -d

Accounts and settings are kept in the data folder and your files in the storage folder, both next to compose.yaml. The files there are ordinary files in ordinary folders, one for each space (Where the files are). To keep your files on another disk or a NAS, change ./storage in compose.yaml to that path.

ThirtyFile takes over the folders it is given. On start, it gives data and storage to the user it runs as (id 1000, THIRTYFILE_RUN_AS) when the folder belongs to someone else, including everything inside. When you point storage at an existing folder that other programs or people use, their files change owner too. Use an empty folder, or set THIRTYFILE_RUN_AS to the owner the folder already has. To reach a NAS share through a group instead, add the group with --group-add 2001 (group_add: in compose.yaml): ThirtyFile keeps it after switching user.

The ready-made compose.yaml runs the container with a read-only root filesystem, every Linux capability dropped except the four needed to hand over the folders and switch user, and no-new-privileges. On Kubernetes, or anywhere the container can't start as root, run it as the user directly (--user 1000:1000, or runAsUser: 1000 and runAsGroup: 1000) and make sure the volumes belong to that user; ThirtyFile then skips the handover.

To choose the admin password yourself, put it in a file named .env in the same folder before the first start:

THIRTYFILE_ADMIN_PASSWORD=choose-a-password

Sign in

  1. Open http://localhost:8080. From another computer, use the server's address instead of localhost.
  2. Click anywhere on the lock screen, then sign in as admin with the password you chose.
  3. Open the account menu at the bottom left and choose Change password.
No password set? A random one is created and written to the log. Read it with docker logs thirtyfile 2>&1 | grep password.

Stop and start

docker stop thirtyfile
docker start thirtyfile

With Docker Compose, use docker compose stop and docker compose start in the folder of compose.yaml.