App Submission: Ente Photos
App Submission
Ente Photos
This PR is for #1064
Gallery images
https://community.ente.io/press/
I have tested my app on:
- [ ] umbrelOS on a Raspberry Pi
- [ ] umbrelOS on an Umbrel Home
- [x] umbrelOS on Linux VM
❌
ente-photos/docker-compose.ymlInvalid image name "ghcr.io/ente-io/server:b0674cd5f37cebda0f446db7ce1e87a3e6d8b9fc@sha256:d44049492bb62a3c0c64126ade1b2c0294683422e5a1b7d656d128186919b5e9": Error: HTTP 404 for ghcr.io/ente-io/server:b0674cd5f37cebda0f446db7ce1e87a3e6d8b9fc@sha256:d44049492bb62a3c0c64126ade1b2c0294683422e5a1b7d656d128186919b5e9
@nmfretz Any idea why it is failing here? 🤔 It is working on my local 🙌:
❯ docker pull ghcr.io/ente-io/server:b0674cd5f37cebda0f446db7ce1e87a3e6d8b9fc@sha256:d44049492bb62a3c0c64126ade1b2c0294683422e5a1b7d656d128186919b5e9
ghcr.io/ente-io/server@sha256:d44049492bb62a3c0c64126ade1b2c0294683422e5a1b7d656d128186919b5e9: Pulling from ente-io/server
fbcfea79c1c4: Pull complete
afc93d2e9caa: Pull complete
e8890acc3be8: Pull complete
f25c5556d6f8: Pull complete
b4eac98756c6: Pull complete
a256b0cf1f98: Pull complete
Digest: sha256:d44049492bb62a3c0c64126ade1b2c0294683422e5a1b7d656d128186919b5e9
Status: Downloaded newer image for ghcr.io/ente-io/server@sha256:d44049492bb62a3c0c64126ade1b2c0294683422e5a1b7d656d128186919b5e9
ghcr.io/ente-io/server:b0674cd5f37cebda0f446db7ce1e87a3e6d8b9fc@sha256:d44049492bb62a3c0c64126ade1b2c0294683422e5a1b7d656d128186919b5e9
@starfreck thank you for your huge app submission. I have been playing around the last couple of days with your submission. It is clear to me, that ente does not intend to make it easy for users, to self-host the app.
It took me ages until I found their docs site https://help.ente.io/self-hosting/ (Scoll to bottom -> Help -> Self-hosting). Also having to tap the main screen of the app 7 times just to set the host seems not at all user friendly to me. When setting up the app, you even get the selection, which storage-plan you want to use, although you are self-hosting it.
But enough rant from my side, this is of course nothing we can change.
A couple of notes from my side, while installing this:
- I really like the defaults for the
exports.shfile. For me they worked without changing anything. - Maybe you can extend the Readme with a section, that when asked for the verification code for the email, that this can be found by right-clicking the app icon -> troubleshoot:
ente-photos_museum_1 | INFO[0518]email.go:124 sendViaTransmail Skipping sending email to [email protected]: Verification code: 830783
Unfortunately I failed to proceed in step 3. After entering my email, I got this error:
2025/01/09 21:53:20 Get "http://umbrel.local:8080/users/srp/attributes?email=frank.josua%40gmail.com": dial tcp: lookup umbrel.local: no such host
doing a ping umbrel.local in the terminal work fine, but the docker container can't resolve the host umbrel.local.
More general notes here: This is very hard to set up for any non-technical user. These are the steps:
- Visiting a
/pingwebsite (manual URL modification) - Download app on phone (easy)
- Double tap 7 times (need to know)
- Enter the URL
- Go back into umbrelOS into the logs to fish out the OTP code (took me ages until I found it)
- Finish app setup
- Go back to umbrelOS and open the terminal
- Execute a very specific command (
sudo docker exec -it ente-photos_cli_1 ./ente-cli account add) and enter exactly predefined inputs - Execute another specific command (
sudo docker exec -it ente-photos_cli_1 ./ente-cli account list) - Edit the
exports.shfile (user need to know how to use vim / nano) - Restart ente from umbrelOS (easy)
- Execute yet another specific command in the terminal (
sudo docker exec -it ente-photos_cli_1 ./ente-cli admin update-subscription -a [email protected] -u [email protected] --no-limit true)
This is some hard stuff. I am thinking, maybe it is easier, if somebody made an all-in-one container (similar to Vaultwarden for Bitwarden).
@nmfretz What is your opiniton on this submission? Do you have any thoughts?
Thanks for submitting Ente @starfreck! This looks like a massive effort you've made.
@nmfretz What is your opiniton on this submission? Do you have any thoughts?
@sharknoon I agree that in Ente's current state it would be very hard (likely impossible) for non-technical users to set up. It also looks like quite a nightmare to maintain and update. Another limitation here is that manual changes to files like exports.sh won't persist across app updates, so when a user updates the app, any changes they have made to exports/scripts/compose files would be clobbered and Ente would be broken for them until they set it up again.
My gut here is that we should wait for Ente to mature a bit. Ideally the user should be able to fully set up Ente through the app's UI without having to exec into containers and parse logs. But I fear that Ente may never prioritize that since their main business model is on selling storage plans for non-selfhosters.
What do you think @starfreck having used Ente?
Thanks, @sharknoon and @nmfretz, for appreciating the effort.
I agree that in Ente's current state it would be very hard (likely impossible) for non-technical users to set up. It also looks like quite a nightmare to maintain and update.
At the moment, that's true! Honestly, their monorepo is a mess, and they do not have proper release tags for their server releases.
My gut here is that we should wait for Ente to mature a bit. Ideally the user should be able to fully set up Ente through the app's UI without having to exec into containers and parse logs.
Yes, we can wait, or if I find the time, I might create an all-in-one container as @sharknoon suggested (Currently, I am thinking about adding their Web UI too). Regarding self-hosting, I think they might improve the experience (saying this based on their CEO's talks on YouTube), but I do not think this will be their main priority. I might create an issue and see if they are willing to improve the setup process or If we can get any timelines.
What do you think, @starfreck, having used Ente?
At the moment, I am using Immich on my umbrel device, but I have an account with Ente, and I think it is a very good alternative given that the photos and videos will be end-to-end encrypted, which Immich doesn't support when I checked last. In the future, I am considering switching to Ente because of their on-device AI features and privacy. This is why I submitted the app in the first place.
Apologies for the delayed response. I've been quite busy with job hunting in this market. Also, Thank you so much, @sharknoon, for the detailed feedback. I think all the points you made are excellent, and I will keep them in mind as I work to improve this PR as soon as I have some free time.
UPDATE: Ente has introduced a new and much simpler self-hosting method using just a single script. I'll update this PR shortly to reflect the changes.
https://ente.io/blog/self-hosting-quickstart/
⚠️ Linting finished with 1 warning ⚠️
Thank you for your submission! This is an automated linter that checks for common issues in pull requests to the Umbrel App Store.
Please review the linting results below and make any necessary changes to your submission.
Linting Results
| Severity | File | Description |
|---|---|---|
| ℹ️ | ente-photos/docker-compose.yml |
Mounted file/directory "/ente-photos/data/custom-logs" doesn't exist: The volume "${APP_DATA_DIR}/data/custom-logs:/var/logs" tries to mount the file/directory "/ente-photos/data/custom-logs", but it is not present. This can lead to permission errors! |
| ℹ️ | ente-photos/docker-compose.yml |
Mounted file/directory "/ente-photos/museum.yaml" doesn't exist: The volume "${APP_DATA_DIR}/museum.yaml:/museum.yaml:ro" tries to mount the file/directory "/ente-photos/museum.yaml", but it is not present. This can lead to permission errors! |
| ℹ️ | ente-photos/docker-compose.yml |
Mounted file/directory "/ente-photos/data/cli-data" doesn't exist: The volume "${APP_DATA_DIR}/data/cli-data:/cli-data" tries to mount the file/directory "/ente-photos/data/cli-data", but it is not present. This can lead to permission errors! |
| ℹ️ | ente-photos/docker-compose.yml |
Mounted file/directory "/ente-photos/data/postgres-data" doesn't exist: The volume "${APP_DATA_DIR}/data/postgres-data:/var/lib/postgresql/data" tries to mount the file/directory "/ente-photos/data/postgres-data", but it is not present. This can lead to permission errors! |
| ℹ️ | ente-photos/docker-compose.yml |
Mounted file/directory "/ente-photos/data/minio-data" doesn't exist: The volume "${APP_DATA_DIR}/data/minio-data:/data" tries to mount the file/directory "/ente-photos/data/minio-data", but it is not present. This can lead to permission errors! |
| ℹ️ | ente-photos/docker-compose.yml |
Mounted file/directory "/ente-photos/data/minio-data" doesn't exist: The volume "${APP_DATA_DIR}/data/minio-data:/data" tries to mount the file/directory "/ente-photos/data/minio-data", but it is not present. This can lead to permission errors! |
| ℹ️ | ente-photos/docker-compose.yml |
External port mapping "${DB_PORT}:${DB_PORT}": Port mappings may be unnecessary for the app to function correctly. Docker's internal DNS resolves container names to IP addresses within the same network. External access to the web interface is handled by the app_proxy container. Port mappings are only needed if external access is required to a port not proxied by the app_proxy, or if an app needs to expose multiple ports for its functionality (e.g., DHCP, DNS, P2P, etc.). |
| ℹ️ | ente-photos/docker-compose.yml |
External port mapping "${MINIO_API_PORT}:${MINIO_API_PORT}": Port mappings may be unnecessary for the app to function correctly. Docker's internal DNS resolves container names to IP addresses within the same network. External access to the web interface is handled by the app_proxy container. Port mappings are only needed if external access is required to a port not proxied by the app_proxy, or if an app needs to expose multiple ports for its functionality (e.g., DHCP, DNS, P2P, etc.). |
| ℹ️ | ente-photos/docker-compose.yml |
External port mapping "${MINIO_CONSOLE_PORT}:${MINIO_CONSOLE_PORT}": Port mappings may be unnecessary for the app to function correctly. Docker's internal DNS resolves container names to IP addresses within the same network. External access to the web interface is handled by the app_proxy container. Port mappings are only needed if external access is required to a port not proxied by the app_proxy, or if an app needs to expose multiple ports for its functionality (e.g., DHCP, DNS, P2P, etc.). |
| ℹ️ | ente-photos/docker-compose.yml |
Potentially using unsafe user in service "museum": The default container user "root" can lead to security vulnerabilities. If you are using the root user, please try to specify a different user (e.g. "1000:1000") in the compose file or try to set the UID/PUID and GID/PGID environment variables to 1000. |
| ℹ️ | ente-photos/docker-compose.yml |
Potentially using unsafe user in service "cli": The default container user "root" can lead to security vulnerabilities. If you are using the root user, please try to specify a different user (e.g. "1000:1000") in the compose file or try to set the UID/PUID and GID/PGID environment variables to 1000. |
| ℹ️ | ente-photos/docker-compose.yml |
Potentially using unsafe user in service "socat": The default container user "root" can lead to security vulnerabilities. If you are using the root user, please try to specify a different user (e.g. "1000:1000") in the compose file or try to set the UID/PUID and GID/PGID environment variables to 1000. |
| ℹ️ | ente-photos/docker-compose.yml |
Potentially using unsafe user in service "postgres": The default container user "root" can lead to security vulnerabilities. If you are using the root user, please try to specify a different user (e.g. "1000:1000") in the compose file or try to set the UID/PUID and GID/PGID environment variables to 1000. |
| ℹ️ | ente-photos/docker-compose.yml |
Potentially using unsafe user in service "minio": The default container user "root" can lead to security vulnerabilities. If you are using the root user, please try to specify a different user (e.g. "1000:1000") in the compose file or try to set the UID/PUID and GID/PGID environment variables to 1000. |
| ℹ️ | ente-photos/docker-compose.yml |
Potentially using unsafe user in service "minio-provision": The default container user "root" can lead to security vulnerabilities. If you are using the root user, please try to specify a different user (e.g. "1000:1000") in the compose file or try to set the UID/PUID and GID/PGID environment variables to 1000. |
| ⚠️ | ente-photos/umbrel-app.yml |
"icon" and "gallery" needs to be empty for new app submissions: The "icon" and "gallery" fields must be empty for new app submissions as it is being created by the Umbrel team. |
Legend
| Symbol | Description |
|---|---|
| ❌ | Error: This must be resolved before this PR can be merged. |
| ⚠️ | Warning: This is highly encouraged to be resolved, but is not strictly mandatory. |
| ℹ️ | Info: This is just for your information. |
I have created a new PR (#2482) for this.