## Description
- Clear vectorDB index on logout
- Revert to using `view` on index
- Use `.usearch` for index file
- Minor design changes
## Tests
Tested in debug mode on my pixel phone.
## Summary
- Modified `_checkFileForPreviewCreation` method to accept `isManual`
parameter
- Bypass 500MB file size and 60 second duration limits when user
manually triggers video stream processing
- Maintains size/duration restrictions for automatic streaming to
preserve device performance
## Test plan
- [x] Manual Create/Recreate Stream button bypasses 500MB and 60 second
limits
- [x] Automatic streaming still respects size and duration restrictions
- [x] Files larger than 500MB or longer than 60 seconds can be manually
processed
Allow manual stream requests to bypass the 500MB file size and 60-second
duration limits by passing isManual parameter to _checkFileForPreviewCreation.
This ensures users can manually process large files even if they exceed the
automatic streaming limits.
## Summary
- Manual Create/Recreate Stream button presses now bypass user
interaction timer for immediate processing
- Fixed multiple concurrent streaming processes bug in ComputeController
- Fixed video streaming description text display spacing in advanced
settings
- Maintains device health and ML priority checks for all streaming
requests
## Tests
- [x] Manual Create/Recreate Stream button bypasses interaction timer
- [x] Automatic streaming still respects interaction timer
- [x] Only one streaming process allowed at a time
Remove condition allowing additional stream requests when already streaming to ensure only one stream process runs at a time.
Co-authored-by: Claude <noreply@anthropic.com>
## Summary
- Split videoStreamingDescription into separate line1/line2 localization
keys
- Remove TextAlign.justify from enabled state to fix awkward word
spacing
- Standardize text rendering between enabled and disabled states
- Both states now display description consistently without spacing
issues
## Test plan
- [x] Verify enabled state displays as single line without spacing
issues
- [x] Verify disabled state shows proper line breaks in onboarding
- [x] Confirm localization keys generate correctly
- [x] Run dart format and dart analyze (no issues)
Fixes video streaming settings page text display inconsistencies.
- Split videoStreamingDescription into separate line1/line2 localization keys
- Remove TextAlign.justify from enabled state to fix awkward word spacing
- Standardize text rendering between enabled and disabled states
- Both states now display description consistently without spacing issues
Co-authored-by: Claude <noreply@anthropic.com>
## Description
- [x] Fix Spacing in Video streaming settings
- [x] Update copy in Video Streaming settings
- [x] Disable debug notifications for work manager in iOS
## Tests
## Description
When using Auth without backup, it was giving a error `Offline key is
missing`
**Reason**: During the `init` of `BaseConfiguration` if the `tokenKey`
is not set, we clear all the keys in the secure storage, and in this
process the `offlineAuthSecretKey` was also getting cleared
**Fix** Fixed by skipping the deletion of `offlineAuthSecretKey`
## Tests
[Test Video](https://wormhole.app/qz3mol#Dlhr0NRpVQVQsrid2X-quA)
Reverts ente-io/ente#6950
I rushed a bit, sorry. The PR wasn't meant to be merged yet (if ever)
and it won't work right now anyway. It was meant to create conversation
on the topic and then possibly merged and there may be concerns to this
as a company may not want their logo/wordmark altered but I'm not well
versed in this topic (idk maybe I'm overthinking this).
Discussion: #6951
## Description
The current Activision icon is too wide and small to be nicely displayed
in Auth so this PR adds a smaller one, just like the favicon on
Activision's [website](https://activision.com).
I know the Activision icon is pulled from simple-icons and I don't want
to get rid of that, just add an option for a smaller one, but I see that
the smaller Allegro icon is also added but it isn't displayed in the
icon picker and the icon from simple-icons takes precedence so you'd
have to figure this out.
## Tests
I haven't tested this.
## Description
- Small correction on the self-hosted docker exec command.
- Added tip on how to install Ente CLI.
In spirit of starting with a small PR :p
## Description
Parameters were sorted based on name by intl plugin which is a breaking
change.
We now have shifted to named params for translations so position won't
change.
## Tests
## Description
- Put the rust generated bindings in gitignore
- Use `view` instead of `load` on VectorDB index to use less RAM
- Various UI changes
## Tests
Tested in debug mode on my pixel phone.
## Description
We depended on intl_utils but that had problems + it was not
auto-generating things when running `flutter pub get`
Now we are using pure intl implementation of l10n, by which generated
code would be less.
- [x] Removes generated locals
## Tests
## Description
Adds custom SVG icons for "CoinTracing", "VHV Versicherungen (German
Insurance Company)" and "HR Document Box".
SVG sourced from official CoinTracking press assets.
SVG sourced from Wikipedia for VHV Versicherungen.
For HR Document Box was no svg available, so i used a png to svg
converter.
## Tests
## Description
Using `ColorFiltered` with `Blendmode.darken` introduces a performance
[issue](https://github.com/flutter/flutter/issues/174118) with flutter's
new rendering engine Impeller.
The fix uses an alternative method to that maintains the same UI
appearance as before.
This pr implements the feature to add a 2FA account by importing a QR
code image from the device gallery..
Adds a new "Import from gallery" button to the Floating Action Button
menu.
The button's text is localized, and its styling is consistent with the
app's theme.
How to Test:
Open the FAB menu and tap "Import from gallery".
1) Test with a valid 2FA QR code image. Expected: The account gets added
successfully.
2) Test with an image that has no QR code. Expected: A "No QR code
found" toast message appears.
3) Test with a QR code of plain text (like "hello "). Expected: An
"Invalid QR Code" dialog appears.
## Description
Implement TLS/SSL encryption for sending emails via SMTP. When an SMTP
provider explicitly requires TLS/SSL communication the current
implementation runs in a timeout and fails. A new configuration
parameter for smtp was added to enable TLS/SSL communication.
This would solve #5958
## Tests
I built a local docker image of my branch. The email provider I was
using is mailbox.org and using the tls configuration. Registering a new
user then resulted in a sent email containing the verification code.
I did not test a setup without TLS/SSL.
## Description
Widget tap was not opening the specified photo because the app group id
was not setting correctly when the method was being called.
## Tests
## Description
This PR updates documentation for S3 configuration with bucket-level
configuration for URL style and local buckets and updates needed
configuration that will make it intuitive for self-hosters.
## Description]
When switching between tabs on mobile, a white flash appear when
lockscreen is enable.
This PR fixes that by setting the background color to black for both
light and dark theme.
## Description
Few miscellaneous improvements for memories. Taking text embeddings from
assets, and better caching and choosing of which persons to show.
## Tests
Tested in debug mode on my pixel phone.
## Description
Introduces the similar images (debug) screen and similar images
functionality in the app. It doesn't include the final design, this PR
is more to get some things in main, so that the entire team can start
testing it. This PR also finally introduces functional rust code into
the mobile app, as well as a vector DB.
(Note that flutter_rust_bridge, needed for rust integration,
automatically formats certain dart code when generating bindings. So
some file changes in this PR are simply automatic formats and can be
ignored. Similarly, the `rust_builder` directory is mainly generated and
can be ignored.)
## Tests
Tested on my own device in both debug and release mode.
- Added Raider.IO SVG icon.
- Updated custom-icons.json to include the new icon.
Raider.IO is a platform that tracks World of Warcraft players'
performance.
- Added Raider.IO SVG icon.
- Updated custom-icons.json to include the new icon.
Raider.IO is a platform that tracks World of Warcraft players' performance.
## Description
## Tests
- Verified server db migrations is on 103
- Verified that duplicate custom domain results in error
- basic sanity testing for custom domain validation.
## Description
This PR upgrades flutter to stable version i.e. Flutter 3.32.8
- [x] Bump dependencies
- [x] Replace .withOpacity( with .withValues(alpha:
- [x] Fix broken l10n
- [x] Did some lint fixes
- [x] Update deprecated methods and arguments
- [x] Fix flutter_gen not found for Photos app (by removing the
l10n.yaml, fixing delegates, using `intl_utils/Flutter Intl`)
## Tests
- [x] Test app
- [x] Check upgraded deps
- [x] Test Deep links/Passkeys - Android
- [ ] Test Deep links/Passkeys - iOS
## Description
- [x] Create a new service to use for FFmpeg in an isolate'ed
environment
- [x] Apply this service wherever we use FFmpeg Kit
- [x] Make FFMpeg accessible in an isolate (background)
## Tests
- [x] Test FFmpeg intergrations
## Description
- Fix bottom navigation bar color in light theme
- Fix initial color in paint editor
- Tap to reset tune adjustment value (brightness, exposure, etc..) and
add haptics when crossing zero
## Description
On Android 16 with flutter upgrade, we are seeing `Could not decompress
image.` error for heic images taken from Iphone 16.
Instead of showing broken image, rendering the compressed version of the
image on UI.
Also, increased the minWidth/minWidth from default 1920/1080 to 8000/800
Refer:
https://pub.dev/packages/flutter_image_compress#minwidth-and-minheight
> If your image width is smaller than minWidth or height smaller than
minHeight, scale will be 1, that is, the size will not change.
```
E/FlutterJNI( 7914): Failed to decode image
E/FlutterJNI( 7914): java.io.IOException: getPixels failed with error invalid input
E/FlutterJNI( 7914): at android.graphics.ImageDecoder.nDecodeBitmap(Native Method)
E/FlutterJNI( 7914): at android.graphics.ImageDecoder.decodeBitmapInternal(ImageDecoder.java:1676)
E/FlutterJNI( 7914): at android.graphics.ImageDecoder.decodeBitmapImpl(ImageDecoder.java:1865)
E/FlutterJNI( 7914): at android.graphics.ImageDecoder.decodeBitmap(ImageDecoder.java:1850)
E/FlutterJNI( 7914): at io.flutter.embedding.engine.FlutterJNI.decodeImage(FlutterJNI.java:571)
```
## Tests
Tested locally on Simulator with sample image.
## Description
After closing app or hidding the window on macos the dock icon still
appears even when the app is in tray which shouldn't happen this fixes
it
## Description
Fixed the broken link to custom-icons.md in CONTRIBUTING.md.
Also added new icons for Twitter (before rebrand), Animal Crossing, Best
Buy, Chucklefish, Toyhouse, and Art Fight.
I realized right after uploading a Best Buy icon that the Best Buy icon
already exists in the custom icon repositories. It doesn't show up when
I search for it in the Ente app (iOS), though, and I checked and there
are no updates for my app. I guess it wasn't pushed to the mobile app
yet?
My icon is called `best_buy.svg`. The one that was already there is
`bestbuy.svg`. Should I remove mine?
Thanks in advance!
Icons for Twitter (before rebrand), Art Fight, Toyhouse, Animal Crossing, Best Buy, and Chucklefish.
I wasn't able to find an official SVG of Toyhouse's icon or get it through inspect element, but I got it from here: https://logos.fandom.com/wiki/Toyhouse
Animal Crossing Leaf: Nintendo, Public domain, via Wikimedia Commons
Original Twitter logo: Martin Grasser, per source, Apache License 2.0 <http://www.apache.org/licenses/LICENSE-2.0>, via Wikimedia Commons
Best Buy: Best Buy, Public domain, via Wikimedia Commons
Chucklefish: https://en.wikipedia.org/wiki/File:Chucklefish.svg (Warns that this is not a free logo)
## Description
Adds 4 authenticate API for
- Creating link for individual file
- Update Link
- Delete Link
- Fetch all links (based on header, the server will return particular
app's link)
For link preview
- API to get Info (pending discussion)
- API to get file attributes (pending discussion)
- APIs to get thumbnail and file
- API to verify password
Pending
- [x] Clean up on account deletion
- [x] Clean up on file deletion
- [x] Clean up history for disabled links
## Tests
Basic santiy check during client integration
## Description
Update broken links in photos from the `Move auth/ to mobile/apps/auth`
in 99d7685be2
Updated the auth's contributing link to be consistent with the photos
## Tests
🔗
## Description
- This PR adds more logs for smart albums.
- Removes support of favorites and uncategorized for smart albums.
- Don't delete entry for smartConfig if collection is still present.
## Tests
## Description
Smart Album, without anything else.
### Auto-add people
Using this you can add person's automatically to the album you want.
## Tests
- [x] Files that are already hidden are not auto-added to the album
- [ ] Files that belong to some other users are not added to the album.
This will trigger a copy event, where file will be copied to user's
namespace.
## Description
This PR integrates a fully-featured advanced image editor which supports
the following features
- Added image adjustment tools (e.g., brightness, contrast, saturation)
- Enabled text annotations on images
- Added freehand drawing support
- Included sticker placement functionality
Add custom SVG icon for [Tally.so](https://tally.so/help/press-kit) in
accordance with their media kit to enhance branding.
Icon optimized with SVGOMG.
## Description
This PR updates docs for network status reporting in Ente Desktop on
Linux and removes documentation for object storage configuration which
will only be available in latest server image to reduce confusion.
## Description
- Better scrolling performance
- Gallery grouping options (day, week, month & year)
- New scrollbar
- Pinned to top header for each group in gallery.
Add custom SVG icon for [U.S. DHS](https://www.dhs.gov/) to enhance
branding.
Icon optimized with SVGOMG. It is relatively large because it is
elaborate and complex compared to most other icons.
I tried my best to minimize and strip unnecessary metadata and paths.
United States Department of Homeland Security (DHS) also shares the same
icon and branding for `altNames` provided:
- [United States Citizenship and Immigration Services
(USCIS)](https://www.uscis.gov/)
- [United States Immigration and Customs Enforcement
(ICE)](https://www.ice.gov/)
- [United States Customs and Border Protection
(CBP)](https://www.cbp.gov/)
since they are all subsidiaries of the former department.
## Description
This PR updates Ente CLI troubleshooting and email configuration along
with object storage configuration in configuration document.
This provides clarity for users who are facing keyring issues or with
bucket configuration.
## Description
This PR updates upgrading procedure to ensure lack of merge conflicts.
A minor grammar error in home page is fixed along with it.
It also fixes linting issues and minor grammatical errors.
## Description
This PR contains major revision for self-hosting documentation. Some
major changes are:
1. Up-to-date information for various installation methods
2. Documentation for configuration with examples
3. Documentation for administrative activities
4. Refactor community guides and include credits
5. Better UX for configuration by templated configuration
The setup includes Compose file that can be used for building from
source without hassle and
includes templated configuration files for ease-of-usage.
## Tests
- [x] I have tested the Docker Compose setup on my system
- [x] I have tested quickstart on my system
## Description
This PR introduces a comprehensive date parsing service that enables
users to search for photos using natural language date queries and
various date formats.
## Tests
### 🔍 Natural Language Date Parsing
- Relative dates: today, tomorrow, yesterday
- Month names: Full (February), abbreviated (Feb), and partial (Febr)
- Ordinal numbers: 25th, 22nd, 3rd, 1st
- Flexible combinations: 25th Feb, February 2025, 25th of February 2025
### 📅 Structured Date Format Support
- ISO format: 2025-02-25, 2025/02/25
- Standard formats: 02/25/2025, 25/02/2025 (with MM/DD vs DD/MM
detection)
- Dot notation: 25.02.2025, 25.02.25
- Compact format: 20250225
- Short formats: 02/25, 25/02
- Two-digit years: 25/02/25 (with century detection)
### 🎯 Smart Query Types
- Year-only queries: 2025 - find all photos from that year
- Month-year queries: February 2025 - find photos from specific
month/year
- Generic date queries: 25th Feb - find photos from that date across all
years
- Specific date queries: 25/02/2025 - find photos from exact date
## Description
Attempt to increase refresh rate for autovacuum to ensure that the query
planner use the index.
Based on slow query logs, and analyze command, it looks like the index
is not being used because the table stats are out of date. And the
default auto_vacumm only runs after 10% of rows have changed.
## Tests
Tested on local machine.
```
SELECT unnest(reloptions) AS option
FROM pg_class
WHERE relname = 'trash';
```
Once deployed, will monitor slow query logs and CPU usage.
## Description
If others file contains two files with same hash, we are returning same
FileID twice for add or copy operation. This change fixes that
behaviour.
## Tests
Adding Custom Icon for Startmail.com
## Description
Add custom SVG icon for [Startmail](https://www.startmail.com/) to
support branding in UI components.
## Tests
## Description
To avoid duplicate config entry for same album. client is expected to
pass id while creating smart album config in following format
`sa_userid_collection_id`.
Open to changing the name/prefix values for this new entity type.
## Tests
First and foremost, thank you for your interest in contributing to Ente 🙏
There are many ways to contribute, and most of them don't require writing code.
* [Spread the word](#spread-the-word)
* [Engage with the community](#engage-with-the-community)
* [Translate](#translate)
* [Document](#document)
- [Spread the word](#spread-the-word)
- [Engage with the community](#engage-with-the-community)
- [Translate](#translate)
- [Document](#document)
## Spread the word
This is perhaps the most impactful contribution you can make. [Spread the
word](https://help.ente.io/photos/features/referral-program/). Online on your
favorite social media channels. Offline to your friends and family who are
looking for a privacy-friendly alternative to big tech.
**This is the most impactful contribution you can make**.
[Spread the word](https://help.ente.io/photos/features/referral-program/). Online on your favorite social media channels. Offline to your friends and family who are looking for a privacy-friendly alternative to big tech.
## Engage with the community
Just hang around, enjoy the vibe. Answer someone's query on our
[Discord](https://discord.gg/z2YVKkycX3), or pile on in the sporadic #off-topic
rants there. Chuckle (or wince!) at our [Twitter](https://twitter.com/enteio)
or upvote the existing ones that you feel we should focus on first. Provide your
opinion on existing threads.
Just hang around, enjoy the vibe. The Ente community — the people who are building Ente, and the people who are using Ente — hang out at various places depending on their proclivity:
These might seem like small things, but it provides us energy. Knowing that
there is a community of people who care for what we are building.
Just being around might seem a small thing, but it provides us energy. Knowing that there is a community of people who care for what we are building, **who want us to do better**.
## Translate
If you're interested in helping out with translation, please visit our Crowdin
to have it added. It is okay to have partial translations. Once ~90% of the
strings in a language get translated, we will start surfacing it in the apps.
Thank you for your support.
## Document
The help guides and FAQs for users of Ente products are also open source, and
@@ -60,25 +48,9 @@ See [docs/](docs/README.md) for how to edit these documents.
## Code contributions
Code is a small aspect of community, and the ways mentioned above are more
important in helping us. But if you'd _really_ like to contribute code, it is
best to start small. Consider some well-scoped changes, say like adding more
[custom icons to auth](auth/docs/adding-icons.md).
If you'd like to contribute code, it is best to start small. Consider some well-scoped changes, say like adding more [custom icons to auth](mobile/apps/auth/docs/adding-icons.md), or fixing a specific bug.
Each of the individual product/platform specific directories in this repository
have instructions on setting up a dev environment.
For anything beyond trivial bug fixes, please use
[discussions](https://github.com/ente-io/ente/discussions) instead of performing
code changes directly.
> [!TIP]
>
> Please remember that code is a important, but small, part of the overall big
> picture that makes a product a joy to use. Something that's easy in code is
> not necessarily the right choice for the product as a whole. So we'll repeat -
> there are other ways to contribute than code that we'd request you to
> consider.
Code that changes the behaviour of the product might not get merged, at least not initially. The PR can serve as a discussion bed, but you might find it easier to just start a discussion instead, or post your perspective in the (likely) existing thread about the behaviour change or new feature you wish for.
description: Use your own domain when sharing photos and videos stored in Ente Photos
---
# Custom domains
Custom domains allow you to serve your public links with your own personalized domain.
For example, if I have an Ente album and wish to share it with my friends, I can go to the album's sharing settings and create a public link. When I copy this link, it will of the form of
```
https://albums.ente.io/?t=...
```
The custom domains feature allows you to instead create a link that uses your own domain, say
```
https://pics.example.org/?t=...
```
You don't need to run any servers or manage any services, Ente will still host and serve your album for you, the only thing that changes is that you can serve your links using your personalized domain.
## Availability
The custom domains feature requires the ability to publicly share albums which for abuse prevention reasons can only be done by people with an active Ente subscription.
## Setup
The setup involves two steps:
1. Letting Ente know about the domain you wish to use for serving your public links
2. Updating your DNS settings to point your domain (or subdomain) to **my.ente.io**
For people who are comfortable with changing DNS settings on their domain provider, this entire process is very simple will take a minute. For people who are not comfortable with changing DNS, we will provide a more detailed breakdown below.
Let's dive in.
To make the process concrete, let's assume we're trying to use _pics.example.org_ as our custom domain. Note that there is no restriction to use a subdomain, a top level domain can be used as a custom domain too. That is, either of _example.org_ or _subdomain.example.org_ is fine, Ente will work with both.
### Step 1 - Link your domain
The first step is to let Ente know about the domain or subdomain you wish to use by linking it to your account.
> [!WARNING]
>
> Currently (Aug 2025) the ability to link a custom domain is only present in Ente's web app, [web.ente.io](https://web.ente.io). It will come to Ente mobile and desktop when their next versions get released.
Head over to Preferences > Custom domains, in the domain field enter "pics.example.org" (replace with your subdomain) and press "Save". That's it. The linking is done.
### Step 2 - Add DNS entry
The second step is to add a CNAME entry in your DNS provider that forwards requests for pics.example.org (replace with your subdomain) to **my.ente.io**.
Specifically, you need to add a `CNAME record` from the domain (or subdomain) of your choice to `my.ente.io`. You can leave the `TTL` at its default.
| CNAME | Your subdomain, e.g `pics` | `my.ente.io` | Auto (default) |
The exact steps for doing this depend on the DNS provider that you're using.
> Your DNS provider usually is the service from which you bought your domain. The domain name seller will provide some sort of an admin panel where you can configure your DNS settings.
As concrete examples, here is how this step would look for Cloudflare:

Note that orange proxy option is off. And here is how it would look for Namecheap:

> [!NOTE]
>
> The examples are using "pics" as the subdomain, but that's just an example, you can use anything you like (or use "@" if you'd like to use the root domain itself).
The time it takes for DNS records to update is dependent on your DNS provider. Usually the changes should start reflecting within a few minutes, and should almost always reflect within an hour.
Once the DNS changes have been applied, then you can take any public link to your shared albums, replace `albums.ente.io` with your choice (e.g. `pics.example.org`), and the link will still work.
You don't need to do this manually though, the apps will do it for you. More on this in the next section. But first, some troubleshooting tips.
### Troubleshooting
If your domain is not working, go through the following checklist.
- The CNAME should be from your domain to my.ente.io, not the other way around. That is, `pics.example.org => my.ente.io`.
- If you're using Cloudflare DNS, make sure that the "Orange" proxy status toggle is off, and the Proxy status is the "Grey" DNS only.
## Using
Using is trivial. When you go to an album's sharing options and copy the link to it, Ente will automatically copy the link that uses your configured domain.
> [!WARNING]
>
> Currently (Aug 2025) the ability to automatically substitute your custom domain is only present in Ente's web app, [web.ente.io](https://web.ente.io). It will come to Ente mobile and desktop when their next versions get released.
## Unsetting
To stop using your custom domain, we need to undo the two steps we did during setup.
1. Unlink your domain in Ente. This can be done just by going to Preferences > Custom Domains, clearing the value in the "Domain" input and pressing "Update".
2. Remove the CNAME record you added during setup in your DNS provider.
### Application reporting offline despite Internet connectivity
Due to unreliability of usage of `navigator.onLine` in Linux, the app may report that you are offline, even though the internet connection is functional.
You can resolve the issue by adding a dummy network interface using the following command:
```shell
ip link add dummy0 type dummy
ip addr add 10.10.10.1/24 dev dummy0
ip link set dummy0 up
```
Once the interface is up, Ente correctly detects that the system is online.
When thinking about backups, this translates into backing up the relevant state
from each of these:
1. For museum, you'd want to backup your `museum.yaml`, `credentials.yaml` or
any other custom configuration that you created. In particular, you should
backup the
[secrets that are specific to your instance](https://github.com/ente-io/ente/blob/74377a93d8e20e969d9a2531f32f577b5f0ef090/server/configurations/local.yaml#L188)
(`key.encryption`, `key.hash` and `jwt.secret`).
2. For postgres, the entire data volume needs to be backed up.
3. For object storage, the entire data volume needs to be backed up.
A common oversight is taking a lot of care for backing up the object storage,
even going as far as enabling replication and backing up the the multiple object
storage volumes, but not applying the same care to the database backup.
While the actual encrypted photos are indeed stored in the object storage,
**this encrypted data will not be usable without the database** since the
database contains information like a file specific encryption key.
Viewed differently, to decrypt your data you need three pieces of information:
1. The encrypted file data itself (which comes from the object storage backup).
2. The ([encrypted](https://ente.io/architecture/)) file and collection specific
encryption keys (which come from the database backup).
3. The master key (which comes from your password).
---
If you're starting out with self hosting, our recommendation is to start by
keeping a plaintext backup of your photos.
[You can use the CLI or the desktop app to automate this](/photos/faq/export).
Once you get more comfortable with the various parts, you can try backing up
your instance. As a reference,
[this document outlines how Ente itself treats backups](https://ente.io/reliability).
If you stop doing plaintext backups and instead rely on your instance backup,
ensure that you do the full restore process also to verify you can get back your
data. As the industry saying goes, a backup without a restore is no backup at
Any Linux or \*nix operating system, Ubuntu or Debian is recommended to have a
good Docker experience. Non-Linux operating systems tend to provide poor
experience with Docker and difficulty with troubleshooting and assistance.
#### Docker
Required for running Ente's server, web application and dependent services
(database and object storage)
## Getting started
## Set up the server
Run this command on your terminal to setup Ente.
@@ -39,17 +31,60 @@ Run this command on your terminal to setup Ente.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/quickstart.sh)"
```
The above `curl` command pulls the Docker image, creates a directory `my-ente`
in the current working directory, prompts to start the cluster and starts all the containers required to run Ente.
This creates a directory `my-ente` in the current working directory, prompts to
start the cluster with needed containers after pulling the images required to
run Ente.

::: info

Make sure to modify the default values in `compose.yaml` and `museum.yaml` if
you wish to change endpoints, bucket configuration or server configuration.
> [!TIP] Important:
> If you have used quickstart for self-hosting Ente and are facing issues while > trying to run the cluster due to MinIO buckets not being created, please check [troubleshooting MinIO](/self-hosting/troubleshooting/docker#minio-provisioning-error)
>
>
:::
## Try the web app
Open Ente Photos web app at `http://<machine-ip>:3000` (or
`http://localhost:3000` if using on same local machine). Select **Don't have an
| `db.sslmode` | SSL mode for DB connection | `disable` |
| `db.user` | Database username | |
| `db.password` | Database password | |
| `db.extra` | Additional DSN parameters | |
### Object Storage
The `s3` section within `museum.yaml` is by default configured to use local
MinIO buckets when using `quickstart.sh` or Docker Compose.
If you wish to use an external S3 provider with SSL, you can edit the configuration with
your provider's credentials, and set `s3.are_local_buckets` to `false`. Additionally, you can configure this for specific buckets in the corresponding bucket sections in the Compose file.
If you are using default MinIO, it is accessible at port `3200`. Web Console can
be accessed by enabling port `3201` in the Compose file.
For more information on object storage configuration, check our
| `web` | `ENTE_API_ORIGIN` | Alias for `NEXT_PUBLIC_ENTE_ENDPOINT`. API Endpoint for Ente's API (Museum). | http://localhost:8080 |
| `web` | `ENTE_ALBUMS_ORIGIN` | Alias for `NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT`. Base URL for Ente Album, used for public sharing. | http://localhost:3002 |
Then the issue is that the password you're using is not the password postgres is
expecting (duh), and a potential scenario where that can happen is something
like this:
Then the issue is that the password you're using is not the password PostgreSQL
is expecting.
1. On a machine, you create a new cluster with `quickstart.sh`.
There are 2 possibilities:
2.Later you delete that folder, but then create another cluster with
`quickstart.sh`. Each time `quickstart.sh` runs, it creates new credentials,
and then when it tries to spin up the docker compose cluster, use them to
connect to the postgres running within.
1.If you are using Docker Compose for running Ente from source, you might not
have set the same credentials in `.env` and `museum.yaml` inside
`server/config` directory. Edit the values to make sure the correct
credentials are being used.
2. When you have created a cluster in `my-ente` directory on running
`quickstart.sh` and later deleted it, only to create another cluster with
same `my-ente` directory.
3. However, you would already have a docker volume from the first run of
`quickstart.sh`. Since the folder name is the same in both cases `my-ente`,
Docker will reuse the existing volumes (`my-ente_postgres-data`,
`my-ente_minio-data`). So your postgres is running off the old credentials,
and you're trying to connect to it using the new ones, and the error arises.
However, by deleting the directory, the Docker volumes are not deleted.
The solution is to delete the stale docker volume. **Be careful**, this will
delete all data in those volumes (any thing you uploaded etc), so first
understand if this is the exact problem you are facing before deleting those
volumes.
Thus the older volumes with previous cluster's credentials are used for new
cluster and the error arises.
If you're sure of what you're doing, the volumes can be deleted by
Deletion of the stale Docker volume can solve this. **Be careful**, this
will delete all data in those volumes (any thing you uploaded etc). Do this
if you are sure this is the exact problem.
```sh
docker volume ls
```
```shell
docker volume ls
```
to list them, and then delete the ones that begin with `my-ente` using
`docker volume rm`. You can delete all stale volumes by using
`docker system prune` with the `--volumes` flag, but be _really_ careful,
that'll delete all volumes (Ente or otherwise) on your machine that are not
currently in use by a running docker container.
to list them, and then delete the ones that begin with `my-ente` using
`docker volume rm`. You can delete all stale volumes by using
`docker system prune` with the `--volumes` flag, but be _really_ careful,
that'll delete all volumes (Ente or otherwise) on your machine that are not
currently in use by a running Docker container.
An alternative way is to delete the volumes along with removal of cluster's
containers using `docker compose` inside `my-ente` directory.
An alternative way is to delete the volumes along with removal of cluster's
containers using `docker compose` inside `my-ente` directory.
```sh
docker compose down --volumes
```
```sh
docker compose down --volumes
```
If you're unsure about removing volumes, another alternative is to rename your
`my-ente` folder. Docker uses the folder name to determine the volume name
prefix, so giving it a different name will cause Docker to create a volume
afresh for it.
If you're unsure about removing volumes, another alternative is to rename
your `my-ente` folder. Docker uses the folder name to determine the volume
name prefix, so giving it a different name will cause Docker to create a
volume afresh for it.
## MinIO provisioning error
If you have used our quickstart script for self-hosting Ente (new users will be unaffected) and are using the default MinIO container for object storage, you may run into issues while starting the cluster after pulling latest images with provisioning MinIO and creating buckets.
You may encounter similar logs while trying to start the cluster:
If you encounter similar logs while starting your Docker Compose cluster
```
my-ente-minio-1 -> | Waiting for minio...
@@ -148,30 +142,19 @@ my-ente-minio-1 -> | Waiting for minio...
my-ente-minio-1 -> | Waiting for minio...
```
MinIO has deprecated the `mc config` command in favor of `mc alias set` resulting in failure in execution of the command for creating bucket using `post_start` hook.
This can be resolved by changing `mc config host h0 add http://minio:3200 $minio_user $minio_pass` to `mc alias set h0 http://minio:3200 $minio_user $minio_pass`
This could be due to usage of deprecated MinIO `mc config` command. Changing
`mc config host h0 add` to `mc alias set h0` resolves this.
Thus the updated `post_start` will look as follows for `minio` service:
```yaml
minio:
```yaml
minio:
...
post_start:
- command: |
sh -c '
#!/bin/sh
while ! mc alias set h0 http://minio:3200 your_minio_user your_minio_pass 2>/dev/null
Caddy is used to terminate TLS and manage certificates for custom domains.
## Installation
```sh
sudo mkdir -p /root/caddy/conf
sudo mv Caddyfile /root/caddy/conf
sudo chown root:root /root/caddy/conf/Caddyfile
```
Rest of it works like our other systemd services.
If the Caddyfile changes, the running instance can be updated without restarts by using `sudo systemctl reload caddy`.
## Backups
The entire `/root/caddy` directory can be backed up and contains the everything needed to resurrect the same setup.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.