ente, an e2ee photo storage service

a look into deploying and using ente. ente homepage. currently this document is a working draft. not a guide, but reference.

we've wanted an end to end encrypted (e2ee) photo service with good integration applications on ios and android smartphones.

like many of these highly integrated self-hosted foss projects, it's developed by a company which provides hosting, and produce phone apps which are better integrated with their own service.

trialing deployment... performed on 2026-01-03.

docker compose deployment

from the official docs, they want you to curl down a script and execute it in the shell (which i would recommend against, in general!):

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/quickstart.sh)"

instead, download and read the script, before executing it:

$ wget https://raw.githubusercontent.com/ente-io/ente/main/server/quickstart.sh
$ chmod u+x ./quickstart.sh

mind the script i used today may not be the script that's there tomorrow...

$ sha256sum quickstart.sh
e9cb1b323e51974297e668ee10d4b1cb47e8d1a960f5def920f708f613af5845  quickstart.sh

you may want to make changes to the deployment. in my case i want to use subdirectories alongside the compose.yaml file, instead of docker volumes:

$ diff quickstart.sh.orig quickstart.sh
124c124
<       - postgres-data:/var/lib/postgresql/data
---
>       - ./postgres-data:/var/lib/postgresql/data
137c137
<       - minio-data:/data
---
>       - ./minio-data:/data
155,158d154
<
< volumes:
<   postgres-data:
<   minio-data:

execute quickstart script, answering Yes to run it. once up, shutdown with ctrl-c after this initial launch:

$ ./quickstart.sh

this filetree was created:

$ tree -L 2
.
├── my-ente
│   ├── compose.yaml
│   ├── data
│   ├── minio-data
│   ├── museum.yaml
│   └── postgres-data
└── quickstart.sh

from the my-ente directory you can manage the service through docker compose:

$ cd ./my-ente
$ docker compose pull
$ docker compose up -d
$ docker compose down

you have to change the origin variables to another hostname if you're trying to create an account from any machine that isn't the server hosting ente, as it uses localhost by default. assuming you're connecting over a local network to an address such as 10.0.0.5, edit the compose.yaml like:

$ diff compose.yaml.orig compose.yaml
39,41c39,41
<       ENTE_API_ORIGIN: http://localhost:8080
<       ENTE_ALBUMS_ORIGIN: https://localhost:3002
<       ENTE_PHOTOS_ORIGIN: http://localhost:3000
---
>       ENTE_API_ORIGIN: http://10.0.0.5:8080
>       ENTE_ALBUMS_ORIGIN: https://10.0.0.5:3002
>       ENTE_PHOTOS_ORIGIN: http://10.0.0.5:3000

non-quickstart based docker compose?

they have a specific installation guide for docker compose. but i found the documentation for deploying it somewhat lacking when compared to reading through the quickstart.sh script.

if you were to configure it manually, here's where you would start:

$ git clone https://github.com/ente-io/ente
$ cd ente/server/config
$ ls
compose.yaml  example.env  example.yaml

configure your first account

TODO

connecting from ios/android

there's no obvious way to connect to a custom server from the ente app. you tap 7 times on the lock icon on the login screen to get a prompt to enable developer mode, which allows you to specify your server address.