From d0f637b15465620bbff946a41749bbab1e1b1961 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Mon, 16 Jun 2025 11:07:30 +0530 Subject: [PATCH 01/20] [server][script] enhance reading choice and refactor choice --- server/quickstart.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/quickstart.sh b/server/quickstart.sh index 6fa881188e..4c2a58f871 100755 --- a/server/quickstart.sh +++ b/server/quickstart.sh @@ -193,10 +193,10 @@ EOF printf " \033[1;32mT\033[0m Created \033[1mmuseum.yaml\033[0m\n" sleep 1 -printf " \033[1;32mE\033[0m Do you want to start Ente? (y/n): " -read choice +printf " \033[1;32mE\033[0m Do you want to start Ente? (y/n) [n]: " +read -r choice -if [[ "$choice" == "y" || "$choice" == "Y" ]]; then +if [[ "$choice" =~ ^[Yy]$ ]]; then printf "\nStarting docker compose\n" printf "\nAfter the cluster has started, open web app at \033[1mhttp://localhost:3000\033[0m\n" printf "(Verification code will be in the logs here)\n\n" From cbfcbe8da29660945e1d1b6ad215103775b4c404 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Mon, 16 Jun 2025 11:51:38 +0530 Subject: [PATCH 02/20] [docs] reduce verbose description in quickstart --- server/docs/quickstart.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/docs/quickstart.md b/server/docs/quickstart.md index 3f29357711..6ff3646273 100644 --- a/server/docs/quickstart.md +++ b/server/docs/quickstart.md @@ -24,8 +24,8 @@ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/q > ./quickstart.sh -If prompted to start the cluster, enter `y` if you wish to start the Docker compose cluster. -After the Docker compose cluster starts, you can open the Ente web app at +Which will prompt to start the Docker compose cluster. +After the Docker compose cluster starts, you can open Ente web app at http://localhost:3000. > [!TIP] From 4d078c094c28e53d12c87c5b59fdf0ad88c6a05e Mon Sep 17 00:00:00 2001 From: Keerthana Date: Fri, 11 Jul 2025 09:27:49 +0530 Subject: [PATCH 03/20] [docs] restructure self-hosting navigation --- docs/docs/.vitepress/sidebar.ts | 67 +++++++++++++----- docs/docs/index.md | 2 +- docs/docs/self-hosting/index.md | 44 +----------- .../custom-server/custom-server.png | Bin .../custom-server/index.md | 0 .../web-custom-endpoint-indicator.png | Bin .../custom-server/web-dev-settings.png | Bin .../{faq => install}/environment.md | 0 .../docs/self-hosting/install/post-install.md | 0 docs/docs/self-hosting/install/quickstart.md | 0 .../docs/self-hosting/install/requirements.md | 24 +++++++ docs/docs/self-hosting/quickstart.md | 46 ++++++++++++ .../mail-templates/family_nudge_paid_sub.html | 0 server/quickstart.sh | 6 ++ 14 files changed, 127 insertions(+), 62 deletions(-) rename docs/docs/self-hosting/{guides => install}/custom-server/custom-server.png (100%) rename docs/docs/self-hosting/{guides => install}/custom-server/index.md (100%) rename docs/docs/self-hosting/{guides => install}/custom-server/web-custom-endpoint-indicator.png (100%) rename docs/docs/self-hosting/{guides => install}/custom-server/web-dev-settings.png (100%) rename docs/docs/self-hosting/{faq => install}/environment.md (100%) create mode 100644 docs/docs/self-hosting/install/post-install.md create mode 100644 docs/docs/self-hosting/install/quickstart.md create mode 100644 docs/docs/self-hosting/install/requirements.md create mode 100644 docs/docs/self-hosting/quickstart.md create mode 100644 server/mail-templates/family_nudge_paid_sub.html diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index a90caad19b..6715ef1303 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -242,26 +242,61 @@ export const sidebar = [ text: "Self hosting", collapsed: true, items: [ - { text: "Getting started", link: "/self-hosting/" }, { - text: "Connecting to custom server", - link: "/self-hosting/guides/custom-server/", + text: "Introduction", + link: "/self-hosting/", }, { - text: "Creating accounts", - link: "/self-hosting/creating-accounts", + text: "Quickstart", + link: "/self-hosting/quickstart", }, { - text: "Configuring your server", - link: "/self-hosting/museum", + text: "Install", + collapsed: true, + items: [ + { + text: "Requirements", + link: "/self-hosting/install/requirements", + }, + { + text: "Quickstart Script (recommended)", + link: "/self-hosting/install/quickstart", + }, + { + text: "Environment variables", + link: "/self-hosting/install/environment", + }, + { + text: "Post-installation Steps", + link: "/self-hosting/install/post-install", + }, + { + text: "Connecting to Custom Server", + link: "/self-hosting/install/custom-server/" + } + ], }, { - text: "Configuring S3", - link: "/self-hosting/guides/configuring-s3", - }, - { - text: "Reverse proxy", - link: "/self-hosting/reverse-proxy", + text: "Administration", + collapsed: true, + items: [ + { + text: "Creating accounts", + link: "/self-hosting/creating-accounts", + }, + { + text: "Configuring your server", + link: "/self-hosting/museum", + }, + { + text: "Configuring S3", + link: "/self-hosting/guides/configuring-s3", + }, + { + text: "Reverse proxy", + link: "/self-hosting/reverse-proxy", + }, + ], }, { text: "Guides", @@ -342,11 +377,7 @@ export const sidebar = [ { text: "Backups", link: "/self-hosting/faq/backup", - }, - { - text: "Environment variables", - link: "/self-hosting/faq/environment", - }, + } ], }, ], diff --git a/docs/docs/index.md b/docs/docs/index.md index 6bf6d18275..04685abcae 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -6,7 +6,7 @@ description: > # Welcome! -![Ducky: Ente's Mascot](/public/ducky.png){width=50% style="margin: 0 auto"} +![Ducky: Ente's Mascot](/ducky.png){width=50% style="margin: 0 auto"} ## Introduction diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md index f371747114..7b10688264 100644 --- a/docs/docs/self-hosting/index.md +++ b/docs/docs/self-hosting/index.md @@ -1,6 +1,6 @@ --- title: Self Hosting -description: Getting started self hosting Ente Photos and/or Ente Auth +description: Overview of self-hosting Ente --- # Self Hosting @@ -9,48 +9,6 @@ The entire source code for Ente is open source, [including the servers](https://ente.io/blog/open-sourcing-our-server/). This is the same code we use for our own cloud service. -## Requirements - -### Hardware - -The server is capable of running on minimal resource requirements as a -lightweight Go binary, since most of the intensive computational tasks are done -on the client. It performs well on small cloud instances, old laptops, and even -[low-end embedded devices](https://github.com/ente-io/ente/discussions/594). - -### Software - -#### Operating System - -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 - -Run this command on your terminal to setup Ente. - -```sh -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. - -![quickstart](/quickstart.png) - -![self-hosted-ente](/web-app.webp) - -> [!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) -> -> - ## Queries? If you need support, please ask on our community diff --git a/docs/docs/self-hosting/guides/custom-server/custom-server.png b/docs/docs/self-hosting/install/custom-server/custom-server.png similarity index 100% rename from docs/docs/self-hosting/guides/custom-server/custom-server.png rename to docs/docs/self-hosting/install/custom-server/custom-server.png diff --git a/docs/docs/self-hosting/guides/custom-server/index.md b/docs/docs/self-hosting/install/custom-server/index.md similarity index 100% rename from docs/docs/self-hosting/guides/custom-server/index.md rename to docs/docs/self-hosting/install/custom-server/index.md diff --git a/docs/docs/self-hosting/guides/custom-server/web-custom-endpoint-indicator.png b/docs/docs/self-hosting/install/custom-server/web-custom-endpoint-indicator.png similarity index 100% rename from docs/docs/self-hosting/guides/custom-server/web-custom-endpoint-indicator.png rename to docs/docs/self-hosting/install/custom-server/web-custom-endpoint-indicator.png diff --git a/docs/docs/self-hosting/guides/custom-server/web-dev-settings.png b/docs/docs/self-hosting/install/custom-server/web-dev-settings.png similarity index 100% rename from docs/docs/self-hosting/guides/custom-server/web-dev-settings.png rename to docs/docs/self-hosting/install/custom-server/web-dev-settings.png diff --git a/docs/docs/self-hosting/faq/environment.md b/docs/docs/self-hosting/install/environment.md similarity index 100% rename from docs/docs/self-hosting/faq/environment.md rename to docs/docs/self-hosting/install/environment.md diff --git a/docs/docs/self-hosting/install/post-install.md b/docs/docs/self-hosting/install/post-install.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/docs/self-hosting/install/quickstart.md b/docs/docs/self-hosting/install/quickstart.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/docs/self-hosting/install/requirements.md b/docs/docs/self-hosting/install/requirements.md new file mode 100644 index 0000000000..37ac281eae --- /dev/null +++ b/docs/docs/self-hosting/install/requirements.md @@ -0,0 +1,24 @@ +--- +title: Requirements +description: Requirements for self-hosting Ente +--- + +# Requirements + +The server is capable of running on minimal resource requirements as a +lightweight Go binary, since most of the intensive computational tasks are done +on the client. It performs well on small cloud instances, old laptops, and even +[low-end embedded devices](https://github.com/ente-io/ente/discussions/594). + +## Software + +### Operating System + +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) diff --git a/docs/docs/self-hosting/quickstart.md b/docs/docs/self-hosting/quickstart.md new file mode 100644 index 0000000000..7267990bf5 --- /dev/null +++ b/docs/docs/self-hosting/quickstart.md @@ -0,0 +1,46 @@ +--- +title: Quickstart +description: Getting started with self-hosting Ente +--- + +# Quickstart + +For a quick preview of running Ente on your server, make sure you have the following installed on your system and meets the requirements mentioned below: + +## Requirements + +The server is capable of running on minimal resource requirements as a +lightweight Go binary, since most of the intensive computational tasks are done +on the client. It performs well on small cloud instances, old laptops, and even +[low-end embedded devices](https://github.com/ente-io/ente/discussions/594). + +### Software + +#### Operating System + +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 + +Run this command on your terminal to setup Ente. + +```sh +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. + +![quickstart](/quickstart.png) + +![self-hosted-ente](/web-app.webp) + +> [!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). diff --git a/server/mail-templates/family_nudge_paid_sub.html b/server/mail-templates/family_nudge_paid_sub.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/server/quickstart.sh b/server/quickstart.sh index 4c2a58f871..74535d437e 100755 --- a/server/quickstart.sh +++ b/server/quickstart.sh @@ -79,6 +79,12 @@ services: volumes: - ./museum.yaml:/museum.yaml:ro - ./data:/data:ro + healthcheck: + test: ["CMD", "curl", "--fail", "http://localhost:8080/ping"] + interval: 60s + timeout: 5s + retries: 3 + start_period: 5s # Resolve "localhost:3200" in the museum container to the minio container. socat: From 2d90c14890c00eaa9792483b7d5405cf6200c75c Mon Sep 17 00:00:00 2001 From: Keerthana Date: Sat, 12 Jul 2025 10:06:10 +0530 Subject: [PATCH 04/20] [docs] restructure installation and guides section --- docs/docs/.vitepress/sidebar.ts | 30 ++++++------ docs/docs/index.md | 2 +- docs/docs/self-hosting/get-started.md | 42 +++++++++++++++++ .../guides/system-requirements.md | 14 ------ docs/docs/self-hosting/index.md | 16 ------- docs/docs/self-hosting/install/defaults.md | 22 +++++++++ docs/docs/self-hosting/install/environment.md | 22 ++++----- .../{guides => install}/from-source.md | 0 docs/docs/self-hosting/install/quickstart.md | 27 +++++++++++ .../{guides => install}/standalone-ente.md | 0 docs/docs/self-hosting/quickstart.md | 46 ------------------- 11 files changed, 115 insertions(+), 106 deletions(-) create mode 100644 docs/docs/self-hosting/get-started.md delete mode 100644 docs/docs/self-hosting/guides/system-requirements.md delete mode 100644 docs/docs/self-hosting/index.md create mode 100644 docs/docs/self-hosting/install/defaults.md rename docs/docs/self-hosting/{guides => install}/from-source.md (100%) rename docs/docs/self-hosting/{guides => install}/standalone-ente.md (100%) delete mode 100644 docs/docs/self-hosting/quickstart.md diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index 6715ef1303..1eee23a223 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -243,12 +243,8 @@ export const sidebar = [ collapsed: true, items: [ { - text: "Introduction", - link: "/self-hosting/", - }, - { - text: "Quickstart", - link: "/self-hosting/quickstart", + text: "Get Started", + link: "/self-hosting/get-started", }, { text: "Install", @@ -262,10 +258,22 @@ export const sidebar = [ text: "Quickstart Script (recommended)", link: "/self-hosting/install/quickstart", }, + { + text: "Running Ente from source", + link: "/self-hosting/install/from-source", + }, + { + text: "Running Ente without Docker", + link: "/self-hosting/install/standalone-ente", + }, { text: "Environment variables", link: "/self-hosting/install/environment", }, + { + text: "Default Configuration", + link: "/self-hosting/install/defaults", + }, { text: "Post-installation Steps", link: "/self-hosting/install/post-install", @@ -310,15 +318,7 @@ export const sidebar = [ { text: "Configuring CLI for your instance", link: "/self-hosting/guides/selfhost-cli", - }, - { - text: "Running Ente from source", - link: "/self-hosting/guides/from-source", - }, - { - text: "Running Ente without Docker", - link: "/self-hosting/guides/standalone-ente", - }, + } ], }, { diff --git a/docs/docs/index.md b/docs/docs/index.md index 04685abcae..fc320f86b4 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -19,7 +19,7 @@ have been developed and made available for mobile, web and desktop, namely: ## History -Ente was the founded by Vishnu Mohandas (he's also Ente's CEO) in response to +Ente was the founded by Vishnu Mohandas (Ente's CEO) in response to privacy concerns with major tech companies. The underlying motivation was the understanding that big tech had no incentive to fix their act, but with end-to-end encrypted cross platform apps, there was a way for people to take diff --git a/docs/docs/self-hosting/get-started.md b/docs/docs/self-hosting/get-started.md new file mode 100644 index 0000000000..71b78b274f --- /dev/null +++ b/docs/docs/self-hosting/get-started.md @@ -0,0 +1,42 @@ +--- +title: Get Started - Self-hosting +description: Getting started with self-hosting Ente +--- + +# Get Started + +The entire source code for Ente is open source, +[including the servers](https://ente.io/blog/open-sourcing-our-server/). + +This is the same code we use for our own cloud service. + +For a quick preview of running Ente on your server, make sure you have the following installed on your system and meets the requirements mentioned below: + +## Requirements + +- A system with at least 2 GB of RAM and 1 CPU core +- [Docker Compose v2](https://docs.docker.com/compose/) + +> For more details, check out [requirements page](/self-hosting/install/requirements) + +## Set up the server + +Run this command on your terminal to setup Ente. + +```sh +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. + +![quickstart](/quickstart.png) + +![self-hosted-ente](/web-app.webp) + + +## Queries? + +If you need support, please ask on our community +[Discord](https://ente.io/discord) or start a discussion on +[GitHub](https://github.com/ente-io/ente/discussions/). diff --git a/docs/docs/self-hosting/guides/system-requirements.md b/docs/docs/self-hosting/guides/system-requirements.md deleted file mode 100644 index 55eb9e9e3a..0000000000 --- a/docs/docs/self-hosting/guides/system-requirements.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: System requirements -description: System requirements for running Ente's server ---- - -# System requirements - -There aren't any "minimum" system requirements as such, the server process is -very light weight - it's just a single go binary, and it doesn't do any server -side ML, so I feel it should be able to run on anything reasonable. - -We've used the server quite easily on small cloud instances, old laptops etc. A -community member also reported being able to run the server on -[very low-end embedded devices](https://github.com/ente-io/ente/discussions/594). diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md deleted file mode 100644 index 7b10688264..0000000000 --- a/docs/docs/self-hosting/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Self Hosting -description: Overview of self-hosting Ente ---- - -# Self Hosting - -The entire source code for Ente is open source, -[including the servers](https://ente.io/blog/open-sourcing-our-server/). This is -the same code we use for our own cloud service. - -## Queries? - -If you need support, please ask on our community -[Discord](https://ente.io/discord) or start a discussion on -[GitHub](https://github.com/ente-io/ente/discussions/). diff --git a/docs/docs/self-hosting/install/defaults.md b/docs/docs/self-hosting/install/defaults.md new file mode 100644 index 0000000000..e36f9df7a2 --- /dev/null +++ b/docs/docs/self-hosting/install/defaults.md @@ -0,0 +1,22 @@ +--- +title: "Default Configuration" +description: + "Detailed description of default configuration - ports, bucket, database, + etc." +--- + +# Default Configuration + +## Ports + +The below format is according to how ports are mapped in Docker. +Typically,`:` + +| Service | Type | Host Port | Container Port | +| ---------------------------------- | ------ | --------- | -------------- | +| Museum | Server | 8080 | 8080 | +| Ente Photos | Web | 3000 | 3000 | +| Ente Accounts | Web | 3001 | 3001 | +| Ente Albums | Web | 3002 | 3002 | +| [Ente Auth](https://ente.io/auth/) | Web | 3003 | 3003 | +| [Ente Cast](http://ente.io/cast) | Web | 3004 | 3004 | diff --git a/docs/docs/self-hosting/install/environment.md b/docs/docs/self-hosting/install/environment.md index a8dcf18d06..c1e5dd6910 100644 --- a/docs/docs/self-hosting/install/environment.md +++ b/docs/docs/self-hosting/install/environment.md @@ -1,16 +1,21 @@ --- -title: "Environment Variables and Ports" +title: "Environment Variables" description: "Information about all the Environment Variables needed to run Ente" --- -# Environment variables and ports +# Environment Variables A self-hosted Ente instance requires specific endpoints in both Museum (the server) and web apps. This document outlines the essential environment variables and port mappings of the web apps. -Here's the list of important variables that a self hoster should know about: +Here's the list of environment variables that need to be configured: + +| Service | Environment Variable | Description | Default Value | +| ------- | -------------------- | ------------------------------------ | --------------------- | +| Web | ENTE_API_ORIGIN | API Endpoint for Ente's API (Museum) | http://localhost:8080 | +| Web | ENTE_ALBUMS_ORIGIN | Base URL for album | http://localhost:3002 | ### Museum @@ -39,14 +44,3 @@ information about and connects to other web apps like albums, cast, etc. This environment variable is used to configure and declare the endpoint for the Albums web app. - -## Ports - -The below format is according to how ports are mapped in Docker. -Typically,`:` - -1. `8080:8080`: Museum (Ente's server) -2. `3000:3000`: Ente Photos web app -3. `3001:3001`: Ente Accounts web app -4. `3003:3003`: [Ente Auth web app](https://ente.io/auth/) -5. `3004:3004`: [Ente Cast web app](http://ente.io/cast) diff --git a/docs/docs/self-hosting/guides/from-source.md b/docs/docs/self-hosting/install/from-source.md similarity index 100% rename from docs/docs/self-hosting/guides/from-source.md rename to docs/docs/self-hosting/install/from-source.md diff --git a/docs/docs/self-hosting/install/quickstart.md b/docs/docs/self-hosting/install/quickstart.md index e69de29bb2..0ae37572ca 100644 --- a/docs/docs/self-hosting/install/quickstart.md +++ b/docs/docs/self-hosting/install/quickstart.md @@ -0,0 +1,27 @@ +--- +title: Quickstart Script +description: Self-hosting Ente with quickstart script +--- + +# Quickstart + +We provide a quickstart script which can be used for self-hosting Ente on your machine. + +## Requirements + +Check out the [requirements](/self-hosting/install/requirements) page to get started. + +## Getting started + +Run this command on your terminal to setup Ente. + +```sh +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. + +![quickstart](/quickstart.png) + +![self-hosted-ente](/web-app.webp) diff --git a/docs/docs/self-hosting/guides/standalone-ente.md b/docs/docs/self-hosting/install/standalone-ente.md similarity index 100% rename from docs/docs/self-hosting/guides/standalone-ente.md rename to docs/docs/self-hosting/install/standalone-ente.md diff --git a/docs/docs/self-hosting/quickstart.md b/docs/docs/self-hosting/quickstart.md deleted file mode 100644 index 7267990bf5..0000000000 --- a/docs/docs/self-hosting/quickstart.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Quickstart -description: Getting started with self-hosting Ente ---- - -# Quickstart - -For a quick preview of running Ente on your server, make sure you have the following installed on your system and meets the requirements mentioned below: - -## Requirements - -The server is capable of running on minimal resource requirements as a -lightweight Go binary, since most of the intensive computational tasks are done -on the client. It performs well on small cloud instances, old laptops, and even -[low-end embedded devices](https://github.com/ente-io/ente/discussions/594). - -### Software - -#### Operating System - -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 - -Run this command on your terminal to setup Ente. - -```sh -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. - -![quickstart](/quickstart.png) - -![self-hosted-ente](/web-app.webp) - -> [!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). From caf664f11d4e82e54c621f8b26f2749b40df3523 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Sat, 12 Jul 2025 11:08:03 +0530 Subject: [PATCH 05/20] [docs] restructure administration section --- docs/docs/.vitepress/sidebar.ts | 18 +++----- .../{ => administration}/creating-accounts.md | 2 +- .../{ => administration}/museum.md | 0 .../{ => administration}/reverse-proxy.md | 0 docs/docs/self-hosting/install/config.md | 43 +++++++++++++++++ docs/docs/self-hosting/install/defaults.md | 22 --------- docs/docs/self-hosting/install/environment.md | 46 ------------------- docs/docs/self-hosting/install/quickstart.md | 2 +- .../self-hosting/install/standalone-ente.md | 6 +-- 9 files changed, 55 insertions(+), 84 deletions(-) rename docs/docs/self-hosting/{ => administration}/creating-accounts.md (94%) rename docs/docs/self-hosting/{ => administration}/museum.md (100%) rename docs/docs/self-hosting/{ => administration}/reverse-proxy.md (100%) create mode 100644 docs/docs/self-hosting/install/config.md delete mode 100644 docs/docs/self-hosting/install/defaults.md delete mode 100644 docs/docs/self-hosting/install/environment.md diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index 1eee23a223..fe2f5c7405 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -259,20 +259,16 @@ export const sidebar = [ link: "/self-hosting/install/quickstart", }, { - text: "Running Ente from source", + text: "Docker Compose", link: "/self-hosting/install/from-source", }, { - text: "Running Ente without Docker", + text: "Without Docker", link: "/self-hosting/install/standalone-ente", }, { - text: "Environment variables", - link: "/self-hosting/install/environment", - }, - { - text: "Default Configuration", - link: "/self-hosting/install/defaults", + text: "Configuration", + link: "/self-hosting/install/config", }, { text: "Post-installation Steps", @@ -290,11 +286,11 @@ export const sidebar = [ items: [ { text: "Creating accounts", - link: "/self-hosting/creating-accounts", + link: "/self-hosting/administration/creating-accounts", }, { text: "Configuring your server", - link: "/self-hosting/museum", + link: "/self-hosting/administration/museum", }, { text: "Configuring S3", @@ -302,7 +298,7 @@ export const sidebar = [ }, { text: "Reverse proxy", - link: "/self-hosting/reverse-proxy", + link: "/self-hosting/administration/reverse-proxy", }, ], }, diff --git a/docs/docs/self-hosting/creating-accounts.md b/docs/docs/self-hosting/administration/creating-accounts.md similarity index 94% rename from docs/docs/self-hosting/creating-accounts.md rename to docs/docs/self-hosting/administration/creating-accounts.md index 550409106e..2cdfd7e8ba 100644 --- a/docs/docs/self-hosting/creating-accounts.md +++ b/docs/docs/self-hosting/administration/creating-accounts.md @@ -1,5 +1,5 @@ --- -title: Creating accounts +title: Creating Accounts - Self-hosting description: Creating accounts on your deployment --- diff --git a/docs/docs/self-hosting/museum.md b/docs/docs/self-hosting/administration/museum.md similarity index 100% rename from docs/docs/self-hosting/museum.md rename to docs/docs/self-hosting/administration/museum.md diff --git a/docs/docs/self-hosting/reverse-proxy.md b/docs/docs/self-hosting/administration/reverse-proxy.md similarity index 100% rename from docs/docs/self-hosting/reverse-proxy.md rename to docs/docs/self-hosting/administration/reverse-proxy.md diff --git a/docs/docs/self-hosting/install/config.md b/docs/docs/self-hosting/install/config.md new file mode 100644 index 0000000000..0fd4f8e468 --- /dev/null +++ b/docs/docs/self-hosting/install/config.md @@ -0,0 +1,43 @@ +--- +title: "Configuration - Self-hosting" +description: + "Information about all the configuration variables needed to run Ente along + with description on default configuration" +--- + +# Configuration + +The environment variables needed for running Ente, configuration variables +present in Museum's configuration file and the default configuration are +documented below: + +## Environment Variables + +A self-hosted Ente instance requires specific endpoints in both Museum (the +server) and web apps. This document outlines the essential environment variables +and port mappings of the web apps. + +Here's the list of environment variables that need to be configured: + +| Service | Environment Variable | Description | Default Value | +| ------- | -------------------- | ------------------------------------------------ | --------------------- | +| Web | `ENTE_API_ORIGIN` | API Endpoint for Ente's API (Museum) | http://localhost:8080 | +| Web | `ENTE_ALBUMS_ORIGIN` | Base URL for Ente Album, used for public sharing | http://localhost:3002 | + +## Config File + +## Default Configuration + +### Ports + +The below format is according to how ports are mapped in Docker when using quickstart script. +The mapping is of the format `- :` in `ports`. + +| Service | Type | Host Port | Container Port | +| ---------------------------------- | ------ | --------- | -------------- | +| Museum | Server | 8080 | 8080 | +| Ente Photos | Web | 3000 | 3000 | +| Ente Accounts | Web | 3001 | 3001 | +| Ente Albums | Web | 3002 | 3002 | +| [Ente Auth](https://ente.io/auth/) | Web | 3003 | 3003 | +| [Ente Cast](http://ente.io/cast) | Web | 3004 | 3004 | diff --git a/docs/docs/self-hosting/install/defaults.md b/docs/docs/self-hosting/install/defaults.md deleted file mode 100644 index e36f9df7a2..0000000000 --- a/docs/docs/self-hosting/install/defaults.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Default Configuration" -description: - "Detailed description of default configuration - ports, bucket, database, - etc." ---- - -# Default Configuration - -## Ports - -The below format is according to how ports are mapped in Docker. -Typically,`:` - -| Service | Type | Host Port | Container Port | -| ---------------------------------- | ------ | --------- | -------------- | -| Museum | Server | 8080 | 8080 | -| Ente Photos | Web | 3000 | 3000 | -| Ente Accounts | Web | 3001 | 3001 | -| Ente Albums | Web | 3002 | 3002 | -| [Ente Auth](https://ente.io/auth/) | Web | 3003 | 3003 | -| [Ente Cast](http://ente.io/cast) | Web | 3004 | 3004 | diff --git a/docs/docs/self-hosting/install/environment.md b/docs/docs/self-hosting/install/environment.md deleted file mode 100644 index c1e5dd6910..0000000000 --- a/docs/docs/self-hosting/install/environment.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "Environment Variables" -description: - "Information about all the Environment Variables needed to run Ente" ---- - -# Environment Variables - -A self-hosted Ente instance requires specific endpoints in both Museum (the -server) and web apps. This document outlines the essential environment variables -and port mappings of the web apps. - -Here's the list of environment variables that need to be configured: - -| Service | Environment Variable | Description | Default Value | -| ------- | -------------------- | ------------------------------------ | --------------------- | -| Web | ENTE_API_ORIGIN | API Endpoint for Ente's API (Museum) | http://localhost:8080 | -| Web | ENTE_ALBUMS_ORIGIN | Base URL for album | http://localhost:3002 | - -### Museum - -1. `NEXT_PUBLIC_ENTE_ENDPOINT` - -The above environment variable is used to configure Museums endpoint. Where -Museum is running and which port it is listening on. This endpoint should be -configured for all the apps to connect to your self hosted endpoint. - -All the apps (regardless of platform) by default connect to api.ente.io - which -is our production instance of Museum. - -### Web Apps - -> [!IMPORTANT] Web apps don't need to be configured with the below endpoints. -> Web app environment variables are being documented here just so that the users -> know everything in detail. Checkout -> [Configuring your Server](/self-hosting/museum) to configure endpoints for -> particular app. - -In Ente, all the web apps are separate NextJS applications. Therefore, they are -all configured via environment variables. The photos app (Ente Photos) has -information about and connects to other web apps like albums, cast, etc. - -1. `NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT` - -This environment variable is used to configure and declare the endpoint for the -Albums web app. diff --git a/docs/docs/self-hosting/install/quickstart.md b/docs/docs/self-hosting/install/quickstart.md index 0ae37572ca..00d3de1373 100644 --- a/docs/docs/self-hosting/install/quickstart.md +++ b/docs/docs/self-hosting/install/quickstart.md @@ -1,5 +1,5 @@ --- -title: Quickstart Script +title: Quickstart Script (Recommended) - Self-hosting description: Self-hosting Ente with quickstart script --- diff --git a/docs/docs/self-hosting/install/standalone-ente.md b/docs/docs/self-hosting/install/standalone-ente.md index af1b3172e9..96db394cd5 100644 --- a/docs/docs/self-hosting/install/standalone-ente.md +++ b/docs/docs/self-hosting/install/standalone-ente.md @@ -1,9 +1,9 @@ --- -title: Installing Ente Standalone (without Docker) -description: Installing and setting up Ente standalone without docker. +title: Running Ente Without Docker - Self-hosting +description: Installing and setting up Ente without Docker --- -# Installing and Deploying Ente Standalone (without Docker) +# Running Ente without Docker ## Running Museum (Ente's server) without Docker From b580d6ce35140e92643cfec0a7c1de4fcf6c80d5 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Sat, 12 Jul 2025 12:38:20 +0530 Subject: [PATCH 06/20] [docs] refactor get started --- docs/docs/.vitepress/sidebar.ts | 6 +-- docs/docs/public/onboarding.png | Bin 0 -> 80801 bytes docs/docs/public/sign-up.png | Bin 0 -> 96148 bytes .../self-hosting/{get-started.md => index.md} | 29 +++++++++--- docs/docs/self-hosting/install/from-source.md | 42 +----------------- .../docs/self-hosting/install/requirements.md | 9 +++- 6 files changed, 36 insertions(+), 50 deletions(-) create mode 100644 docs/docs/public/onboarding.png create mode 100644 docs/docs/public/sign-up.png rename docs/docs/self-hosting/{get-started.md => index.md} (54%) diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index fe2f5c7405..e0ebb61296 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -244,7 +244,7 @@ export const sidebar = [ items: [ { text: "Get Started", - link: "/self-hosting/get-started", + link: "/self-hosting/", }, { text: "Install", @@ -255,7 +255,7 @@ export const sidebar = [ link: "/self-hosting/install/requirements", }, { - text: "Quickstart Script (recommended)", + text: "Quickstart Script (Recommended)", link: "/self-hosting/install/quickstart", }, { @@ -271,7 +271,7 @@ export const sidebar = [ link: "/self-hosting/install/config", }, { - text: "Post-installation Steps", + text: "Post Installation", link: "/self-hosting/install/post-install", }, { diff --git a/docs/docs/public/onboarding.png b/docs/docs/public/onboarding.png new file mode 100644 index 0000000000000000000000000000000000000000..32b18f73f263780ad50c3bd212e88cb4ffaf4b56 GIT binary patch literal 80801 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 z'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�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 ix5CnY?owD4h^@!ynEb|!f3s`(SzNa:3000` (or `http://localhost:3000` if using on same local machine) and select **Don't have an account?** to create a new user. + +![Onboarding Screen](/onboarding.png) + +Follow the prompts to sign up. + +![Sign Up Page](/sign-up.png) + +You will be prompted to enter verification code. Check the cluster logs using `sudo docker compose logs` and enter the same. + +![Verification Code](/otp.png) + +## Try the mobile app + + + +## What next? ## Queries? diff --git a/docs/docs/self-hosting/install/from-source.md b/docs/docs/self-hosting/install/from-source.md index 9d010190dc..3fe2ba712f 100644 --- a/docs/docs/self-hosting/install/from-source.md +++ b/docs/docs/self-hosting/install/from-source.md @@ -5,7 +5,8 @@ description: Getting started self hosting Ente Photos and/or Ente Auth # Ente from Source -> [!WARNING] NOTE The below documentation will cover instructions about +> [!WARNING] NOTE +> The below documentation will cover instructions about > self-hosting the web app manually. If you want to deploy Ente hassle free, use > the [one line](https://ente.io/blog/self-hosting-quickstart/) command to setup > Ente. This guide might be deprecated in the near future. @@ -188,42 +189,3 @@ to configure the endpoints. Make sure to setup up your DNS Records accordingly to the similar URL's you set up in `museum.yaml`. Next part is to configure the web server. - -# Web server configuration - -The last step ahead is configuring reverse_proxy for the ports on which the apps -are being served (you will have to make changes, if you have cusotmized the -ports). The web server of choice in this guide is -[Caddy](https://caddyserver.com) because with caddy you don't have to manually -configure/setup SSL ceritifcates as caddy will take care of that. - -```groovy -photos.yourdomain.com { - reverse_proxy http://localhost:3001 - # for logging - log { - level error - } -} - -auth.yourdomain.com { - reverse_proxy http://localhost:3002 -} -# and so on ... -``` - -Next, start the caddy server :). - -```sh -# If caddy service is not enabled -sudo systemctl enable caddy - -sudo systemctl daemon-reload - -sudo systemctl start caddy -``` - -## Contributing - -Please start a discussion on the Github Repo if you have any suggestions for the -Dockerfile, You can also share your setups on Github Discussions. diff --git a/docs/docs/self-hosting/install/requirements.md b/docs/docs/self-hosting/install/requirements.md index 37ac281eae..07d237751d 100644 --- a/docs/docs/self-hosting/install/requirements.md +++ b/docs/docs/self-hosting/install/requirements.md @@ -5,6 +5,8 @@ description: Requirements for self-hosting Ente # Requirements +## Hardware + The server is capable of running on minimal resource requirements as a lightweight Go binary, since most of the intensive computational tasks are done on the client. It performs well on small cloud instances, old laptops, and even @@ -21,4 +23,9 @@ 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) +(database and object storage). Ente also requires **Docker Compose plugin** to be installed. + +> [!NOTE] +> Ente requires **Docker Compose version 2.25 or higher**. +> +> Furthermore, Ente uses the command `docker compose`, `docker-compose` is no longer supported. \ No newline at end of file From f06403adc70aac3ba16ca2f973c2fdf0d0ce8bc7 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Sat, 12 Jul 2025 12:56:45 +0530 Subject: [PATCH 07/20] [docs] refactor standalone and from source docs --- docs/docs/self-hosting/install/config.md | 25 ++++--- docs/docs/self-hosting/install/from-source.md | 11 +-- .../self-hosting/install/standalone-ente.md | 68 ++++++++++--------- 3 files changed, 52 insertions(+), 52 deletions(-) diff --git a/docs/docs/self-hosting/install/config.md b/docs/docs/self-hosting/install/config.md index 0fd4f8e468..99a20525ea 100644 --- a/docs/docs/self-hosting/install/config.md +++ b/docs/docs/self-hosting/install/config.md @@ -26,18 +26,23 @@ Here's the list of environment variables that need to be configured: ## Config File +Ente's server, Museum, uses a configuration file + ## Default Configuration ### Ports -The below format is according to how ports are mapped in Docker when using quickstart script. -The mapping is of the format `- :` in `ports`. +The below format is according to how ports are mapped in Docker when using +quickstart script. The mapping is of the format `- :` +in `ports`. -| Service | Type | Host Port | Container Port | -| ---------------------------------- | ------ | --------- | -------------- | -| Museum | Server | 8080 | 8080 | -| Ente Photos | Web | 3000 | 3000 | -| Ente Accounts | Web | 3001 | 3001 | -| Ente Albums | Web | 3002 | 3002 | -| [Ente Auth](https://ente.io/auth/) | Web | 3003 | 3003 | -| [Ente Cast](http://ente.io/cast) | Web | 3004 | 3004 | +| Service | Type | Host Port | Container Port | +| ---------------------------------- | -------- | --------- | -------------- | +| Museum | Server | 8080 | 8080 | +| Ente Photos | Web | 3000 | 3000 | +| Ente Accounts | Web | 3001 | 3001 | +| Ente Albums | Web | 3002 | 3002 | +| [Ente Auth](https://ente.io/auth/) | Web | 3003 | 3003 | +| [Ente Cast](http://ente.io/cast) | Web | 3004 | 3004 | +| MinIO | S3 | 3200 | 3200 | +| PostgreSQL | Database | | 5432 | diff --git a/docs/docs/self-hosting/install/from-source.md b/docs/docs/self-hosting/install/from-source.md index 3fe2ba712f..6b2c168ab2 100644 --- a/docs/docs/self-hosting/install/from-source.md +++ b/docs/docs/self-hosting/install/from-source.md @@ -5,16 +5,9 @@ description: Getting started self hosting Ente Photos and/or Ente Auth # Ente from Source -> [!WARNING] NOTE -> The below documentation will cover instructions about -> self-hosting the web app manually. If you want to deploy Ente hassle free, use -> the [one line](https://ente.io/blog/self-hosting-quickstart/) command to setup -> Ente. This guide might be deprecated in the near future. - ## Installing Docker -Refer to -[How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) +Refer to [How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) for detailed instructions. ## Start the server @@ -187,5 +180,3 @@ Albums Family and Cast in your `museum.yaml` configuration file. Checkout [`local.yaml`](https://github.com/ente-io/ente/blob/543411254b2bb55bd00a0e515dcafa12d12d3b35/server/configurations/local.yaml#L76-L89) to configure the endpoints. Make sure to setup up your DNS Records accordingly to the similar URL's you set up in `museum.yaml`. - -Next part is to configure the web server. diff --git a/docs/docs/self-hosting/install/standalone-ente.md b/docs/docs/self-hosting/install/standalone-ente.md index 96db394cd5..56c4f180d6 100644 --- a/docs/docs/self-hosting/install/standalone-ente.md +++ b/docs/docs/self-hosting/install/standalone-ente.md @@ -10,56 +10,60 @@ description: Installing and setting up Ente without Docker First, start by installing all the dependencies to get your machine ready for development. -```sh -# For MacOS -brew tap homebrew/core -brew update -brew install go - -# For Ubuntu based distros -sudo apt update && sudo apt upgrade -sudo apt install golang-go -``` +- For macOS + ```sh + brew tap homebrew/core + brew update + brew install go + ``` +- For Debian/Ubuntu-based distros + ``` sh + sudo apt update && sudo apt upgrade + sudo apt install golang-go + ``` Alternatively, you can also download the latest binaries from ['All Release'](https://go.dev/dl/) page from the official website. -```sh -brew install postgres@15 -# Link the postgres keg -brew link postgresql@15 - -brew install libsodium - -# For Ubuntu based distros -sudo apt install postgresql -sudo apt install libsodium23 libsodium-dev -``` +- For macOS + ```sh + brew install postgres@15 + # Link the postgres keg + brew link postgresql@15 + brew install libsodium + ``` +- For Debian/Ubuntu-based distros + ``` sh + sudo apt install postgresql + sudo apt install libsodium23 libsodium-dev + ``` The package `libsodium23` might be installed already in some cases. -Installing pkg-config +Install `pkg-config` -```sh -brew install pkg-config - -# For Ubuntu based distros -sudo apt install pkg-config -``` +- For macOS + ```sh + brew install pkg-config + ``` +- For Debian/Ubuntu-based distros + ``` sh + sudo apt install pkg-config + ``` ## Starting Postgres -### With pg_ctl +### With `pg_ctl` ```sh pg_ctl -D /usr/local/var/postgres -l logfile start ``` -Dependeing on the Operating System type the path for postgres binary or +Depending on the operating system type, the path for postgres binary or configuration file might be different, please check if the command keeps failing for you. -Ideally, if you are on a Linux system with systemd as the init. You can also +Ideally, if you are on a Linux system with `systemd` as the initialization ("init") system. You can also start postgres as a systemd service. After Installation execute the following commands: @@ -71,7 +75,7 @@ sudo systemctl daemon-reload && sudo systemctl start postgresql ### Create user ```sh -createuser -s postgres +sudo useradd postgres ``` ## Start Museum From 034eb69473a6d85ed5736e37159818cbcc7cd0d6 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Mon, 14 Jul 2025 09:52:05 +0530 Subject: [PATCH 08/20] [docs] simplify S3 configuration --- .../self-hosting/guides/configuring-s3.md | 56 +------------------ docs/docs/self-hosting/index.md | 2 +- 2 files changed, 3 insertions(+), 55 deletions(-) diff --git a/docs/docs/self-hosting/guides/configuring-s3.md b/docs/docs/self-hosting/guides/configuring-s3.md index 55f2f3b356..c82de3fe25 100644 --- a/docs/docs/self-hosting/guides/configuring-s3.md +++ b/docs/docs/self-hosting/guides/configuring-s3.md @@ -5,68 +5,16 @@ description: from outside localhost --- -# Architecture - -![Client, Museum, S3](/client-museum-s3.png) - -There are three components involved in uploading a file: - -1. The client (e.g. the web app or the mobile app) -2. Ente's server (museum) -3. The S3-compatible object storage (e.g. MinIO in the default starter) - -For the uploads to work, all three of them need to be able to reach each other. -This is because the client uploads directly to the object storage. - -A file upload flows as follows: - -1. Client that wants to upload a file asks museum where it should upload the - file to -2. museum creates pre-signed URLs for the S3 bucket that was configured -3. Client directly uploads to the S3 buckets these URLs -4. Client finally informs museum that a file has been uploaded to this URL - -The upshot of this is that _both_ the client and museum should be able to reach -your S3 bucket. - -## Configuring S3 - -The URL for the S3 bucket is configured in -[scripts/compose/credentials.yaml](https://github.com/ente-io/ente/blob/main/server/scripts/compose/credentials.yaml#L10). - -You can edit this file directly while testing, though it is more robust to -create a `museum.yaml` (in the same folder as the Docker compose file) and to -setup your custom configuration there. - -> [!TIP] For more details about these configuration objects, see the -> documentation for the `s3` object in -> [configurations/local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml). - -By default, you only need to configure the endpoint for the first bucket. - -The Docker compose file is shipped with MinIO as the self hosted S3 compatible -storage. By default, MinIO server is served on `localhost:3200` and the MinIO UI -on `localhost:3201`. - -For example, in a localhost network situation, the way this connection works is, -museum (`1`) and MinIO (`2`) run on the same Docker network and the web app -(`3`) will also be hosted on your localhost. This enables all the three -components of the setup to communicate with each other seamlessly. - -The same principle applies if you're deploying to your custom domain. +# Configuring S3 ## Replication -![Replication](/replication.png) - -

Community contributed diagram of Ente's replication process

- > [!IMPORTANT] > > As of now, replication works only if all the 3 storage type needs are > fulfilled (1 hot, 1 cold and 1 glacier storage). > -> [Reference](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970) +> For more information, check this [discussion](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970). If you're wondering why there are 3 buckets on the MinIO UI - that's because our production instance uses these to perform diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md index ed17a17a54..d5c76eaa72 100644 --- a/docs/docs/self-hosting/index.md +++ b/docs/docs/self-hosting/index.md @@ -12,7 +12,7 @@ For a quick preview of running Ente on your server, make sure you have the follo ## Requirements -- A system with at least 2 GB of RAM and 1 CPU core +- A system with at least 1 GB of RAM and 1 CPU core - [Docker Compose v2](https://docs.docker.com/compose/) > For more details, check out [requirements page](/self-hosting/install/requirements) From b260648192fd0dac6595568ff8bf6c54d983c5c1 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Mon, 14 Jul 2025 15:04:18 +0530 Subject: [PATCH 09/20] [docs] linting and complete get started --- docs/docs/.vitepress/sidebar.ts | 8 +-- docs/docs/index.md | 4 +- .../public/developer-settings-endpoint.png | Bin 0 -> 125335 bytes docs/docs/public/developer-settings.png | Bin 0 -> 157285 bytes .../self-hosting/guides/configuring-s3.md | 3 +- docs/docs/self-hosting/index.md | 53 ++++++++++++++++-- docs/docs/self-hosting/install/from-source.md | 3 +- docs/docs/self-hosting/install/quickstart.md | 9 ++- .../docs/self-hosting/install/requirements.md | 11 ++-- .../self-hosting/install/standalone-ente.md | 12 ++-- .../self-hosting/troubleshooting/docker.md | 19 +++++-- 11 files changed, 88 insertions(+), 34 deletions(-) create mode 100644 docs/docs/public/developer-settings-endpoint.png create mode 100644 docs/docs/public/developer-settings.png diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index e0ebb61296..7ca16798cf 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -276,8 +276,8 @@ export const sidebar = [ }, { text: "Connecting to Custom Server", - link: "/self-hosting/install/custom-server/" - } + link: "/self-hosting/install/custom-server/", + }, ], }, { @@ -314,7 +314,7 @@ export const sidebar = [ { text: "Configuring CLI for your instance", link: "/self-hosting/guides/selfhost-cli", - } + }, ], }, { @@ -373,7 +373,7 @@ export const sidebar = [ { text: "Backups", link: "/self-hosting/faq/backup", - } + }, ], }, ], diff --git a/docs/docs/index.md b/docs/docs/index.md index fc320f86b4..fa15f6be8b 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -19,8 +19,8 @@ have been developed and made available for mobile, web and desktop, namely: ## History -Ente was the founded by Vishnu Mohandas (Ente's CEO) in response to -privacy concerns with major tech companies. The underlying motivation was the +Ente was the founded by Vishnu Mohandas (Ente's CEO) in response to privacy +concerns with major tech companies. The underlying motivation was the understanding that big tech had no incentive to fix their act, but with end-to-end encrypted cross platform apps, there was a way for people to take back control over their own data without sacrificing on features. diff --git a/docs/docs/public/developer-settings-endpoint.png b/docs/docs/public/developer-settings-endpoint.png new file mode 100644 index 0000000000000000000000000000000000000000..11ab74d61e159fb035a2ba3bc3fa4a769d20cb1e GIT binary patch literal 125335 zcmeFZX*ibc`!#&ktr;$(uJ6 zNhFFZB+|}1lw0wWeg`TKe2O$smo&U}i^PhrDM=JtNTh%8)fVCxw`}>JuXo-dk-SVu z6vWT*PiV`*|MzQri;t}_3?$+unegv+0A2;3iQoM9L+{=_{VP0|x!4VOxwzOb8Qj%l zzpH1+#eVq`&t>j=_joQFUgE?{{C~YM@fv9|RDbYki?yPJC@Hm$b`;UHIy*Uq zx2f?w`(&KKo1PCcwTjk~-Mrt

UH@U8hm|ylvaz4hp^!;i09_>F!YLeO|TPKj&xL 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

??{ftU5qnlQLJhKw5cMB?_}P-cnQTY|}m$ znb)8+gKP9Nk}oB0cXtnjL_J*!3K~%ZM3Yd$t!krv3(FNu?W%jf282IRwT^Ys5ze?a z&?#21@V74lF8x6vJ(mZh6%Z($R%D(CM+G^17M!kiJrs=*doYC(%^dphAVwo-ukN&2 zn9K2Gx6KjnGI^WpS&!ia6I`+i6LJ0f3=CuFPBRjHzyQX0L)yI1y+iCgE>QOpBx_^X zz;eWz6ij&NesrAoa*|G3#w}4F-l=$AfhKPYaUL0fHNEH8@$juz>$R*oL)YEM*vA_~ zZl(#%u-Gblqs9-Eg7!T#gu=VLT)=f4#)@rz6t1XDy+O9IwsNn?_?t{%uUvnx^N5J5 zSWtx#07YlIl8j|HHGzQI`#}l{saEcl0vYRo^#dugbF0iCQCSg*tlB4&`21wPj3i<* z5t9xpQ&PvwgWJyIv*H51FHbvNSJhXQ1%X~c%vG|=ez975TMb`^5I5V6hP$cbqKNroJu>!zvlbYa8ujNAMEfSf{j$|rhKE;@CbC^Kr(3v*m;jW=-Ru0~ZYvu6HKHFICuoBUMz zwnXjSe`7da>4K-gzm{tooI>z06&snZUxfx(j(`Yb1}5O)Ofy>4zw8CgyZ@=mJq?pw zI%@H-SnuEWbh0B|I3sRFgpzjeVrx?GH%k>yIA9iNT}7K+03tq)OGNR(AQCshN)k$7 zKk#Jq9Z{eBiIxIgw`PBqf4fq`{>f;K z0*$dfEO+dbxJK}Fdpac_NFD>x!UX;l zYwXI(%J(8rn8*{oKky?~J88qa@J(!!7{Pm-k6!a?24<9^?Orp|5AGTdeaW{69_O!sY+~ literal 0 HcmV?d00001 diff --git a/docs/docs/public/developer-settings.png b/docs/docs/public/developer-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..6774f855984fb57eb73b6078de28cc693bee33e7 GIT binary patch literal 157285 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/docs/self-hosting/guides/configuring-s3.md b/docs/docs/self-hosting/guides/configuring-s3.md index c82de3fe25..744760ed7e 100644 --- a/docs/docs/self-hosting/guides/configuring-s3.md +++ b/docs/docs/self-hosting/guides/configuring-s3.md @@ -14,7 +14,8 @@ description: > As of now, replication works only if all the 3 storage type needs are > fulfilled (1 hot, 1 cold and 1 glacier storage). > -> For more information, check this [discussion](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970). +> For more information, check this +> [discussion](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970). If you're wondering why there are 3 buckets on the MinIO UI - that's because our production instance uses these to perform diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md index d5c76eaa72..13fadbaa6c 100644 --- a/docs/docs/self-hosting/index.md +++ b/docs/docs/self-hosting/index.md @@ -6,16 +6,20 @@ description: Getting started with self-hosting Ente # Get Started The entire source code for Ente is open source, -[including the servers](https://ente.io/blog/open-sourcing-our-server/). This is the same code we use for our own cloud service. +[including the server](https://ente.io/blog/open-sourcing-our-server/). This is +the same code we use for our own cloud service. -For a quick preview of running Ente on your server, make sure you have the following installed on your system and meets the requirements mentioned below: +For a quick preview of Ente on your server, make sure your system meets the +requirements mentioned below. After trying the preview, you can explore other +ways of self-hosting Ente on your server as described in the documentation. ## Requirements - A system with at least 1 GB of RAM and 1 CPU core - [Docker Compose v2](https://docs.docker.com/compose/) -> For more details, check out [requirements page](/self-hosting/install/requirements) +> For more details, check out the +> [requirements page](/self-hosting/install/requirements). ## Set up the server @@ -25,7 +29,9 @@ 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 command creates a directory `my-ente` in the current working directory, prompts to start the cluster after pulling the images and starts all the containers required to run Ente. +The above command 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. ![quickstart](/quickstart.png) @@ -33,7 +39,9 @@ The above command creates a directory `my-ente` in the current working directory The first user to be registered will be treated as the admin user. -Open the web app at `http://:3000` (or `http://localhost:3000` if using on same local machine) and select **Don't have an account?** to create a new user. +Open Ente Photos web app at `http://:3000` (or `http://localhost:3000` if +using on same local machine) and select **Don't have an account?** to create a +new user. ![Onboarding Screen](/onboarding.png) @@ -41,16 +49,49 @@ Follow the prompts to sign up. ![Sign Up Page](/sign-up.png) -You will be prompted to enter verification code. Check the cluster logs using `sudo docker compose logs` and enter the same. +You will be prompted to enter verification code. Check the cluster logs using +`sudo docker compose logs` and enter the same. ![Verification Code](/otp.png) +Upload a picture via the web user interface. + +Alternatively, if using Ente Auth, get started by adding an account (assuming you are running Ente Auth at `http://:3002` or `http://localhost:3002`). + ## Try the mobile app +### Install the Mobile App +You can install Ente Photos by following the [installation section](/photos/faq/installing). + +Alternatively, you can install Ente Auth (if you are planning to use Auth) by following the [installation section](/auth/faq/installing). + +### Login to the Mobile App + +Tap the onboarding screen 7 times to modify developer settings. + +

+Developer Settings +
+ +
+Enter your Ente server's endpoint. +
+ +
+Developer Settings - Server Endpoint +
+ +You should be able to access the uploaded picture from the web user interface. ## What next? +Now that you have spinned up a cluster in quick manner, you may wish to install using a different way for your needs. Check the "Install" section for information regarding that. + +You can import your pictures from Google Takeout or from other services to Ente Photos. For more information, check out our [migration guide](/photos/migration/). + +You can import your codes from other authenticator providers to Ente Auth. Check out the [migration guide](/auth/migration/) for more information. + ## Queries? diff --git a/docs/docs/self-hosting/install/from-source.md b/docs/docs/self-hosting/install/from-source.md index 6b2c168ab2..b3f1ebc5d2 100644 --- a/docs/docs/self-hosting/install/from-source.md +++ b/docs/docs/self-hosting/install/from-source.md @@ -7,7 +7,8 @@ description: Getting started self hosting Ente Photos and/or Ente Auth ## Installing Docker -Refer to [How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) +Refer to +[How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) for detailed instructions. ## Start the server diff --git a/docs/docs/self-hosting/install/quickstart.md b/docs/docs/self-hosting/install/quickstart.md index 00d3de1373..e7311f5cc7 100644 --- a/docs/docs/self-hosting/install/quickstart.md +++ b/docs/docs/self-hosting/install/quickstart.md @@ -5,11 +5,13 @@ description: Self-hosting Ente with quickstart script # Quickstart -We provide a quickstart script which can be used for self-hosting Ente on your machine. +We provide a quickstart script which can be used for self-hosting Ente on your +machine. ## Requirements -Check out the [requirements](/self-hosting/install/requirements) page to get started. +Check out the [requirements](/self-hosting/install/requirements) page to get +started. ## Getting started @@ -20,7 +22,8 @@ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/q ``` 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. +in the current working directory, prompts to start the cluster and starts all +the containers required to run Ente. ![quickstart](/quickstart.png) diff --git a/docs/docs/self-hosting/install/requirements.md b/docs/docs/self-hosting/install/requirements.md index 07d237751d..95b4699e8f 100644 --- a/docs/docs/self-hosting/install/requirements.md +++ b/docs/docs/self-hosting/install/requirements.md @@ -23,9 +23,10 @@ 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). Ente also requires **Docker Compose plugin** to be installed. +(database and object storage). Ente also requires **Docker Compose plugin** to +be installed. -> [!NOTE] -> Ente requires **Docker Compose version 2.25 or higher**. -> -> Furthermore, Ente uses the command `docker compose`, `docker-compose` is no longer supported. \ No newline at end of file +> [!NOTE] Ente requires **Docker Compose version 2.25 or higher**. +> +> Furthermore, Ente uses the command `docker compose`, `docker-compose` is no +> longer supported. diff --git a/docs/docs/self-hosting/install/standalone-ente.md b/docs/docs/self-hosting/install/standalone-ente.md index 56c4f180d6..adaf444594 100644 --- a/docs/docs/self-hosting/install/standalone-ente.md +++ b/docs/docs/self-hosting/install/standalone-ente.md @@ -17,7 +17,7 @@ development. brew install go ``` - For Debian/Ubuntu-based distros - ``` sh + ```sh sudo apt update && sudo apt upgrade sudo apt install golang-go ``` @@ -33,7 +33,7 @@ Alternatively, you can also download the latest binaries from brew install libsodium ``` - For Debian/Ubuntu-based distros - ``` sh + ```sh sudo apt install postgresql sudo apt install libsodium23 libsodium-dev ``` @@ -47,7 +47,7 @@ Install `pkg-config` brew install pkg-config ``` - For Debian/Ubuntu-based distros - ``` sh + ```sh sudo apt install pkg-config ``` @@ -63,9 +63,9 @@ Depending on the operating system type, the path for postgres binary or configuration file might be different, please check if the command keeps failing for you. -Ideally, if you are on a Linux system with `systemd` as the initialization ("init") system. You can also -start postgres as a systemd service. After Installation execute the following -commands: +Ideally, if you are on a Linux system with `systemd` as the initialization +("init") system. You can also start postgres as a systemd service. After +Installation execute the following commands: ```sh sudo systemctl enable postgresql diff --git a/docs/docs/self-hosting/troubleshooting/docker.md b/docs/docs/self-hosting/troubleshooting/docker.md index 158b8a63fc..840504ca65 100644 --- a/docs/docs/self-hosting/troubleshooting/docker.md +++ b/docs/docs/self-hosting/troubleshooting/docker.md @@ -138,7 +138,10 @@ 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. +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: @@ -148,14 +151,18 @@ 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. +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 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` Thus the updated `post_start` will look as follows for `minio` service: -``` yaml - minio: +```yaml + minio: ... post_start: - command: | @@ -174,4 +181,4 @@ Thus the updated `post_start` will look as follows for `minio` service: mc mb -p wasabi-eu-central-2-v3 mc mb -p scw-eu-fr-v3 ' -``` \ No newline at end of file +``` From 76e30fe9594d180d7b655203277f2dc7a564df7e Mon Sep 17 00:00:00 2001 From: Keerthana Date: Tue, 15 Jul 2025 12:22:49 +0530 Subject: [PATCH 10/20] [docs] refine requirements --- docs/docs/.vitepress/config.ts | 4 ++++ docs/docs/self-hosting/index.md | 2 +- .../docs/self-hosting/install/requirements.md | 24 +++++++++---------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/docs/docs/.vitepress/config.ts b/docs/docs/.vitepress/config.ts index 4914ab6251..a1196f4c9e 100644 --- a/docs/docs/.vitepress/config.ts +++ b/docs/docs/.vitepress/config.ts @@ -1,6 +1,7 @@ import { defineConfig } from "vitepress"; import { sidebar } from "./sidebar"; + // https://vitepress.dev/reference/site-config export default defineConfig({ title: "Ente Help", @@ -26,6 +27,9 @@ export default defineConfig({ }, }, sidebar: sidebar, + outline: { + level: [2, 3] + }, socialLinks: [ { icon: "github", link: "https://github.com/ente-io/ente/" }, { icon: "twitter", link: "https://twitter.com/enteio" }, diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md index 13fadbaa6c..4ea0156d60 100644 --- a/docs/docs/self-hosting/index.md +++ b/docs/docs/self-hosting/index.md @@ -16,7 +16,7 @@ ways of self-hosting Ente on your server as described in the documentation. ## Requirements - A system with at least 1 GB of RAM and 1 CPU core -- [Docker Compose v2](https://docs.docker.com/compose/) +- [Docker Compose](https://docs.docker.com/compose/) > For more details, check out the > [requirements page](/self-hosting/install/requirements). diff --git a/docs/docs/self-hosting/install/requirements.md b/docs/docs/self-hosting/install/requirements.md index 95b4699e8f..d0ac50b18b 100644 --- a/docs/docs/self-hosting/install/requirements.md +++ b/docs/docs/self-hosting/install/requirements.md @@ -8,25 +8,23 @@ description: Requirements for self-hosting Ente ## Hardware The server is capable of running on minimal resource requirements as a -lightweight Go binary, since most of the intensive computational tasks are done -on the client. It performs well on small cloud instances, old laptops, and even +lightweight Go binary, since most of the intensive computational tasks are done on the client. It performs well on small cloud instances, old laptops, and even [low-end embedded devices](https://github.com/ente-io/ente/discussions/594). +- **Storage:** An Unix-compatible filesystem such as ZFS, EXT4, BTRFS, etc. if using PostgreSQL container as it requires a filesystem that supports user/group permissions. +- **RAM:** A minimum of 1 GB of RAM is required for running the cluster (if using quickstart script). +- **CPU:** A minimum of 1 CPU core is required. + ## Software -### Operating System +- **Operating System:** 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. -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). Ente also requires **Docker Compose plugin** to be installed. -### Docker - -Required for running Ente's server, web application and dependent services -(database and object storage). Ente also requires **Docker Compose plugin** to -be installed. - -> [!NOTE] Ente requires **Docker Compose version 2.25 or higher**. +> [!NOTE] +> +> Ente requires **Docker Compose version 2.25 or higher**. > > Furthermore, Ente uses the command `docker compose`, `docker-compose` is no > longer supported. From 637f11ac23c0c0e8cdbbfda1e50512a0d5bb2172 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Thu, 24 Jul 2025 16:21:13 +0530 Subject: [PATCH 11/20] [docs] complete installation procedures --- docs/docs/.vitepress/sidebar.ts | 67 ++--- .../{faq => administration}/backup.md | 0 .../configuring-s3.md | 30 +- .../administration/creating-accounts.md | 27 -- .../selfhost-cli.md | 0 .../{guides => developer}/mobile-build.md | 0 docs/docs/self-hosting/faq/otp.md | 45 --- docs/docs/self-hosting/faq/sharing.md | 104 ------- docs/docs/self-hosting/guides/db-migration.md | 158 ----------- docs/docs/self-hosting/guides/external-s3.md | 261 ------------------ docs/docs/self-hosting/index.md | 15 +- docs/docs/self-hosting/install/compose.md | 46 +++ docs/docs/self-hosting/install/config-file.md | 14 + .../{config.md => configuration-variables.md} | 28 +- .../install/{post-install.md => defaults.md} | 0 docs/docs/self-hosting/install/from-source.md | 183 ------------ .../custom-server.png | Bin .../{custom-server => post-install}/index.md | 89 +++--- .../web-custom-endpoint-indicator.png | Bin .../web-dev-settings.png | Bin docs/docs/self-hosting/install/quickstart.md | 12 +- .../self-hosting/install/standalone-ente.md | 120 -------- .../self-hosting/install/without-docker.md | 82 ++++++ server/.gitignore | 2 + server/config/compose.yaml | 79 ++++++ server/config/example.env | 29 ++ server/config/example.yaml | 30 ++ 27 files changed, 369 insertions(+), 1052 deletions(-) rename docs/docs/self-hosting/{faq => administration}/backup.md (100%) rename docs/docs/self-hosting/{guides => administration}/configuring-s3.md (63%) delete mode 100644 docs/docs/self-hosting/administration/creating-accounts.md rename docs/docs/self-hosting/{guides => administration}/selfhost-cli.md (100%) rename docs/docs/self-hosting/{guides => developer}/mobile-build.md (100%) delete mode 100644 docs/docs/self-hosting/faq/otp.md delete mode 100644 docs/docs/self-hosting/faq/sharing.md delete mode 100644 docs/docs/self-hosting/guides/db-migration.md delete mode 100644 docs/docs/self-hosting/guides/external-s3.md create mode 100644 docs/docs/self-hosting/install/compose.md create mode 100644 docs/docs/self-hosting/install/config-file.md rename docs/docs/self-hosting/install/{config.md => configuration-variables.md} (51%) rename docs/docs/self-hosting/install/{post-install.md => defaults.md} (100%) delete mode 100644 docs/docs/self-hosting/install/from-source.md rename docs/docs/self-hosting/install/{custom-server => post-install}/custom-server.png (100%) rename docs/docs/self-hosting/install/{custom-server => post-install}/index.md (54%) rename docs/docs/self-hosting/install/{custom-server => post-install}/web-custom-endpoint-indicator.png (100%) rename docs/docs/self-hosting/install/{custom-server => post-install}/web-dev-settings.png (100%) delete mode 100644 docs/docs/self-hosting/install/standalone-ente.md create mode 100644 docs/docs/self-hosting/install/without-docker.md create mode 100644 server/config/compose.yaml create mode 100644 server/config/example.env create mode 100644 server/config/example.yaml diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index 7ca16798cf..d1b8c37e3f 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -260,63 +260,55 @@ export const sidebar = [ }, { text: "Docker Compose", - link: "/self-hosting/install/from-source", + link: "/self-hosting/install/compose", }, { text: "Without Docker", - link: "/self-hosting/install/standalone-ente", + link: "/self-hosting/install/without-docker", }, { - text: "Configuration", - link: "/self-hosting/install/config", + text: "Configuration Variables", + link: "/self-hosting/install/configuration-variables", }, { text: "Post Installation", - link: "/self-hosting/install/post-install", - }, - { - text: "Connecting to Custom Server", - link: "/self-hosting/install/custom-server/", - }, + link: "/self-hosting/install/post-install/", + } ], }, { text: "Administration", collapsed: true, items: [ - { - text: "Creating accounts", - link: "/self-hosting/administration/creating-accounts", - }, { text: "Configuring your server", link: "/self-hosting/administration/museum", }, { text: "Configuring S3", - link: "/self-hosting/guides/configuring-s3", + link: "/self-hosting/administration/configuring-s3", }, { text: "Reverse proxy", link: "/self-hosting/administration/reverse-proxy", }, - ], - }, - { - text: "Guides", - collapsed: true, - items: [ - { text: "Introduction", link: "/self-hosting/guides/" }, - { - text: "Administering your server", - link: "/self-hosting/guides/admin", - }, { text: "Configuring CLI for your instance", link: "/self-hosting/guides/selfhost-cli", }, + ], }, + { + text: "Developer", + collapsed: true, + items: [ + { + text: "Building mobile apps", + link: "/self-hosting/developer/mobile-build" + } + ] + }, { text: "Troubleshooting", collapsed: true, @@ -337,10 +329,6 @@ export const sidebar = [ text: "Docker / quickstart", link: "/self-hosting/troubleshooting/docker", }, - { - text: "Ente CLI secrets", - link: "/self-hosting/troubleshooting/keyring", - }, ], }, { @@ -359,23 +347,8 @@ export const sidebar = [ }, { text: "FAQ", - collapsed: true, - items: [ - { text: "General", link: "/self-hosting/faq/" }, - { - text: "Verification code", - link: "/self-hosting/faq/otp", - }, - { - text: "Shared albums", - link: "/self-hosting/faq/sharing", - }, - { - text: "Backups", - link: "/self-hosting/faq/backup", - }, - ], - }, + link: "/self-hosting/faq/", + } ], }, ]; diff --git a/docs/docs/self-hosting/faq/backup.md b/docs/docs/self-hosting/administration/backup.md similarity index 100% rename from docs/docs/self-hosting/faq/backup.md rename to docs/docs/self-hosting/administration/backup.md diff --git a/docs/docs/self-hosting/guides/configuring-s3.md b/docs/docs/self-hosting/administration/configuring-s3.md similarity index 63% rename from docs/docs/self-hosting/guides/configuring-s3.md rename to docs/docs/self-hosting/administration/configuring-s3.md index 744760ed7e..0ac0657228 100644 --- a/docs/docs/self-hosting/guides/configuring-s3.md +++ b/docs/docs/self-hosting/administration/configuring-s3.md @@ -17,21 +17,13 @@ description: > For more information, check this > [discussion](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970). -If you're wondering why there are 3 buckets on the MinIO UI - that's because our -production instance uses these to perform +If you're wondering why there are 3 buckets on the MinIO UI - that's because our production instance uses these to perform [replication](https://ente.io/reliability/). -If you're also wondering about why the bucket names are specifically what they -are, it's because that is exactly what we are using on our production instance. -We use `b2-eu-cen` as hot, `wasabi-eu-central-2-v3` as cold (also the secondary -hot) and `scw-eu-fr-v3` as glacier storage. As of now, all of this is hardcoded. -Hence, the same hardcoded configuration is applied when you self host Ente. - In a self hosted Ente instance replication is turned off by default. When replication is turned off, only the first bucket (`b2-eu-cen`) is used, and the other two are ignored. Only the names here are specifically fixed, but in the -configuration body you can put any other keys. It does not have any relation -with `b2`, `wasabi` or even `scaleway`. +configuration body you can put any other keys. Use the `s3.hot_storage.primary` option if you'd like to set one of the other predefined buckets as the primary bucket. @@ -53,20 +45,4 @@ need to enable `s3.use_path_style_urls`. Set the S3 bucket `endpoint` in `credentials.yaml` to a `yourserverip:3200` or some such IP / hostname that is accessible from both where you are running the Ente clients (e.g. the mobile app) and also from within the Docker compose -cluster. - -### Example - -An example `museum.yaml` when you're trying to connect to museum running on your -computer from your phone on the same WiFi network: - -```yaml -s3: - are_local_buckets: true - b2-eu-cen: - key: test - secret: testtest - endpoint: http://:3200 - region: eu-central-2 - bucket: b2-eu-cen -``` +cluster. \ No newline at end of file diff --git a/docs/docs/self-hosting/administration/creating-accounts.md b/docs/docs/self-hosting/administration/creating-accounts.md deleted file mode 100644 index 2cdfd7e8ba..0000000000 --- a/docs/docs/self-hosting/administration/creating-accounts.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Creating Accounts - Self-hosting -description: Creating accounts on your deployment ---- - -# Creating accounts - -Once Ente is up and running, the Ente Photos web app will be accessible on -`http://localhost:3000`. Open this URL in your browser and proceed with creating -an account. - -The default API endpoint for museum will be `localhost:8080`. - -![endpoint](/endpoint.png) - -To complete your account registration you will need to enter a 6-digit -verification code. - -This code can be found in the server logs, which should already be shown in your -quickstart terminal. Alternatively, you can open the server logs with the -following command from inside the `my-ente` folder: - -```sh -sudo docker compose logs -``` - -![otp](/otp.png) diff --git a/docs/docs/self-hosting/guides/selfhost-cli.md b/docs/docs/self-hosting/administration/selfhost-cli.md similarity index 100% rename from docs/docs/self-hosting/guides/selfhost-cli.md rename to docs/docs/self-hosting/administration/selfhost-cli.md diff --git a/docs/docs/self-hosting/guides/mobile-build.md b/docs/docs/self-hosting/developer/mobile-build.md similarity index 100% rename from docs/docs/self-hosting/guides/mobile-build.md rename to docs/docs/self-hosting/developer/mobile-build.md diff --git a/docs/docs/self-hosting/faq/otp.md b/docs/docs/self-hosting/faq/otp.md deleted file mode 100644 index 0a85b60717..0000000000 --- a/docs/docs/self-hosting/faq/otp.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Verification code -description: Getting the OTP for a self hosted Ente ---- - -# Verification code - -The self-hosted Ente by default does not send out emails, so you can pick the -verification code by: - -- Getting it from the server logs, or - -- Reading it from the DB (otts table) - -The easiest option when getting started is to look for it in the server (museum) -logs. If you're already running the docker compose cluster using the quickstart -script, you should be already seeing the logs in your terminal. Otherwise you -can go to the folder (e.g. `my-ente`) where your `compose.yaml` is, then run -`docker compose logs museum --follow`. Once you can see the logs, look for a -line like: - -``` -... Skipping sending email to email@example.com: *Verification code: 112089* -``` - -That is the verification code. - -> [!TIP] -> -> You can also configure your instance to send out emails so that you can get -> your verification code via emails by using the `smtp` section in the config. - -You can also set pre-defined hardcoded OTTs for certain users when running -locally by creating a `museum.yaml` and adding the `internal.hardcoded-ott` -configuration setting to it. See -[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml) -in the server source code for details about how to define this. - -> [!NOTE] -> -> If you're not able to get the OTP with the above methods, make sure that you -> are actually connecting to your self hosted instance and not to Ente's -> production servers. e.g. you can use the network requests tab in the browser -> console to verify that the API requests are going to your server instead of -> `api.ente.io`. diff --git a/docs/docs/self-hosting/faq/sharing.md b/docs/docs/self-hosting/faq/sharing.md deleted file mode 100644 index 2eb5578448..0000000000 --- a/docs/docs/self-hosting/faq/sharing.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Album sharing -description: Getting album sharing to work using an self-hosted Ente ---- - -# Is public sharing available for self-hosted instances? - -Yes. - -You'll need to run two instances of the web app, one is regular web app, but -another one is the same code but running on a different origin (i.e. on a -different hostname or different port). - -Then, you need to tell the regular web app to use your second instance to -service public links. You can do this by setting the -`NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT` to point to your second instance when running -or building the regular web app. - -For more details, see -[.env](https://github.com/ente-io/ente/blob/main/web/apps/photos/.env) and -[.env.development](https://github.com/ente-io/ente/blob/main/web/apps/photos/.env.development). - -As a concrete example, assuming we have a Ente server running on -`localhost:8080`, we can start two instances of the web app, passing them -`NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT` that points to the origin -("scheme://host[:port]") of the second "albums" instance. - -The first one, the normal web app - -```sh -NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 \ - NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=http://localhost:3002 \ - yarn dev:photos -``` - -The second one, the same code but acting as the "albums" app (the only -difference is the port it is running on): - -```sh -NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 \ - NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=http://localhost:3002 \ - yarn dev:albums -``` - -If you also want to change the prefix (the origin) in the generated public -links, to use your custom albums endpoint in the generated public link instead -of albums.ente.io, set `apps.public-albums` property in museum's configuration - -For example, when running using the starter docker compose file, you can do this -by creating a `museum.yaml` and defining the following configuration there: - -```yaml -apps: - public-albums: http://localhost:3002 -``` - -(For more details, see -[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml) -in the server's source code). - -## Dockerfile example - -Here is an example of a Dockerfile by @Dylanger on our community Discord. This -runs a standalone self-hosted version of the public albums app in production -mode. - -```Dockerfile -FROM node:20-alpine as builder - -WORKDIR /app -COPY . . - -ARG NEXT_PUBLIC_ENTE_ENDPOINT=https://your.ente.example.org -ARG NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your.albums.example.org - -RUN yarn install && yarn build - -FROM node:20-alpine - -WORKDIR /app -COPY --from=builder /app/apps/photos/out . - -RUN npm install -g serve - -ENV PORT=3000 -EXPOSE ${PORT} - -CMD serve -s . -l tcp://0.0.0.0:${PORT} -``` - -Note that this only runs the public albums app, but the same principle can be -used to run both the normal Ente photos app and the public albums app. There is -a slightly more involved example showing how to do this also provided by in a -community contributed guide about -[configuring external S3](/self-hosting/guides/external-s3). - -You will also want to tell museum about your custom shared albums endpoint so -that it uses that instead of the default URL when creating share links. You can -configure that in museum's `config.yaml`: - -``` -apps: - public-albums: https://your.albums.example.org -``` diff --git a/docs/docs/self-hosting/guides/db-migration.md b/docs/docs/self-hosting/guides/db-migration.md deleted file mode 100644 index 60818caa2d..0000000000 --- a/docs/docs/self-hosting/guides/db-migration.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: DB Migration -description: - Migrating your self hosted Postgres 12 database to newer Postgres versions ---- - -# Migrating Postgres 12 to 15 - -The old sample docker compose file used Postgres 12, which is now nearing end of -life, so we've updated it to Postgres 15. Postgres major versions changes -require a migration step. This document mentions some approaches you can use. - -> [!TIP] -> -> Ente itself does not use any specific Postgres 12 or Postgres 15 features, and -> will talk to either happily. It should also work with newer Postgres versions, -> but let us know if you run into any problems and we'll update this page. - -### Taking a backup - -`docker compose exec` allows us to run a command against a running container. We -can use it to run the `pg_dumpall` command on the postgres container to create a -plaintext backup. - -Assuming your cluster is already running, and you are in the `ente/server` -directory, you can run the following (this command uses the default credentials, -you'll need to change these to match your setup): - -```sh -docker compose exec postgres env PGPASSWORD=pgpass PGUSER=pguser PG_DB=ente_db pg_dumpall >pg12.backup.sql -``` - -This will produce a `pg12.backup.sql` in your current directory. You can open it -in a text editor (it can be huge!) to verify that it looks correct. - -We won't be needing this file, this backup is recommended just in case something -goes amiss with the actual migration. - -> If you need to restore from this plaintext backup, you could subsequently run -> something like: -> -> ```sh -> docker compose up postgres -> cat pg12.backup.sql | docker compose exec -T postgres env PGPASSWORD=pgpass psql -U pguser -d ente_db -> ``` - -## The migration - -At the high level, the steps are - -1. Stop your cluster. - -2. Start just the postgres container after changing the image to - `pgautoupgrade/pgautoupgrade:15-bookworm`. - -3. Once the in-place migration completes, stop the container, and change the - image to `postgres:15`. - -#### 1. Stop the cluster - -Stop your running Ente cluster. - -```sh -docker compose down -``` - -#### 2. Run `pgautoupgrade` - -Modify your `compose.yaml`, changing the image for the "postgres" container from -"postgres:12" to "pgautoupgrade/pgautoupgrade:15-bookworm" - -```diff -diff a/server/compose.yaml b/server/compose.yaml - - postgres: -- image: postgres:12 -+ image: pgautoupgrade/pgautoupgrade:15-bookworm - ports: -``` - -[pgautoupgrade](https://github.com/pgautoupgrade/docker-pgautoupgrade) is a -community docker image that performs an in-place migration. - -After making the change, run only the `postgres` container in the cluster - -```sh -docker compose up postgres -``` - -The container will start and peform an in-place migration. Once it is done, it -will start postgres normally. You should see something like this is the logs - -``` -postgres-1 | Automatic upgrade process finished with no errors reported -... -postgres-1 | ... starting PostgreSQL 15... -``` - -At this point, you can stop the container (`CTRL-C`). - -#### 3. Finish by changing image - -Modify `compose.yaml` again, changing the image to "postgres:15". - -```diff -diff a/server/compose.yaml b/server/compose.yaml - - postgres: -- image: pgautoupgrade/pgautoupgrade:15-bookworm -+ image: postgres:15 - ports: -``` - -And cleanup the temporary containers by - -```sh -docker compose down --remove-orphans -``` - -Migration is now complete. You can start your Ente cluster normally. - -```sh -docker compose up -``` - -## Migration elsewhere - -The above instructions are for Postgres running inside docker, as the sample -docker compose file does. There are myriad other ways to run Postgres, and the -migration sequence then will depend on your exact setup. - -Two common approaches are - -1. Backup and restore, the `pg_dumpall` + `psql` import sequence described in - [Taking a backup](#taking-a-backup) above. - -2. In place migrations using `pg_upgrade`, which is what the - [pgautoupgrade](#the-migration) migration above does under the hood. - -The first method, backup and restore, is low tech and will work similarly in -most setups. The second method is more efficient, but requires a bit more -careful preparation. - -As another example, here is how one can migrate 12 to 15 when running Postgres -on macOS, installed using Homebrew. - -1. Stop your postgres. Make sure there are no more commands shown by - `ps aux | grep '[p]ostgres'`. - -2. Install postgres15. - -3. Migrate data using `pg_upgrade`: - - ```sh - /opt/homebrew/Cellar/postgresql@15/15.8/bin/pg_upgrade -b /opt/homebrew/Cellar/postgresql@12/12.18_1/bin -B /opt/homebrew/Cellar/postgresql@15/15.8/bin/ -d /opt/homebrew/var/postgresql@12 -D /opt/homebrew/var/postgresql@15 - ``` - -4. Start postgres 15 and verify version using `SELECT VERSION()`. diff --git a/docs/docs/self-hosting/guides/external-s3.md b/docs/docs/self-hosting/guides/external-s3.md deleted file mode 100644 index 0a919092c0..0000000000 --- a/docs/docs/self-hosting/guides/external-s3.md +++ /dev/null @@ -1,261 +0,0 @@ ---- -title: External S3 buckets -description: - Self hosting Ente's server and photos web app when using an external S3 - bucket ---- - -# Hosting server and web app using external S3 - -> [!NOTE] -> -> This is a community contributed guide, and some of these steps ~~might be~~ -> ARE out of sync with the upstream changes. This document is retained for -> reference purposes, but if something is not working correctly, please see the -> latest [READMEs](https://github.com/ente-io/ente/blob/main/server/README.md) -> in the repository and/or other guides in [self-hosting](/self-hosting/). - -This guide is for self hosting the server and the web application of Ente Photos -using docker compose and an external S3 bucket. So we assume that you already -have the keys and secrets for the S3 bucket. The plan is as follows: - -1. Create a `compose.yaml` file -2. Set up the `.credentials.env` file -3. Run `docker-compose up` -4. Create an account and increase storage quota -5. Fix potential CORS issue with your bucket - -## 1. Create a `compose.yaml` file - -After cloning the main repository with - -```bash -git clone https://github.com/ente-io/ente.git -# Or git clone git@github.com:ente-io/ente.git -cd ente -``` - -Create a `compose.yaml` file at the root of the project with the following -content (there is nothing to change here): - -```yaml -services: - museum: - build: - context: server - args: - GIT_COMMIT: local - ports: - - 8080:8080 # API - - 2112:2112 # Prometheus metrics - depends_on: - postgres: - condition: service_healthy - - # Wait for museum to ping pong before starting the webapp. - healthcheck: - test: [ - "CMD", - "echo", - "1", # I don't know what to put here - ] - environment: - # no need to touch these - ENTE_DB_HOST: postgres - ENTE_DB_PORT: 5432 - ENTE_DB_NAME: ente_db - ENTE_DB_USER: pguser - ENTE_DB_PASSWORD: pgpass - env_file: - - ./.credentials.env - volumes: - - custom-logs:/var/logs - - museum.yaml:/museum.yaml:ro - networks: - - internal - - web: - build: - context: web - ports: - - 8081:80 - - 8082:80 - depends_on: - museum: - condition: service_healthy - env_file: - - ./.credentials.env - - postgres: - image: postgres:12 - ports: - - 5432:5432 - environment: - POSTGRES_USER: pguser - POSTGRES_PASSWORD: pgpass - POSTGRES_DB: ente_db - # Wait for postgres to be accept connections before starting museum. - healthcheck: - test: ["CMD", "pg_isready", "-q", "-d", "ente_db", "-U", "pguser"] - interval: 1s - timeout: 5s - retries: 20 - volumes: - - postgres-data:/var/lib/postgresql/data - networks: - - internal -volumes: - custom-logs: - postgres-data: -networks: - internal: -``` - -It maybe be added in the future, but if it does not exist, create a `Dockerfile` -in the `web` directory with the following content: - -```Dockerfile -# syntax=docker/dockerfile:1 -FROM node:21-bookworm-slim as ente-builder -WORKDIR /app -RUN apt update && apt install -y ca-certificates && rm -rf /var/lib/apt/lists/* -COPY . . -RUN yarn install -ENV NEXT_PUBLIC_ENTE_ENDPOINT=DOCKER_RUNTIME_REPLACE_ENDPOINT -ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=DOCKER_RUNTIME_REPLACE_ALBUMS_ENDPOINT -RUN yarn build - - -FROM nginx:1.25-alpine-slim -COPY --from=ente-builder /app/apps/photos/out /usr/share/nginx/html -COPY < - -```sh -# run `go run tools/gen-random-keys/main.go` in the server directory to generate the keys -ENTE_KEY_ENCRYPTION= -ENTE_KEY_HASH= -ENTE_JWT_SECRET= - -# if you deploy it on a server under a domain, you need to set the correct value of the following variables -# it can be changed later - -# The backend server URL (Museum) to be used by the webapp -ENDPOINT=http://localhost:8080 -# The URL of the public albums webapp (also need to be updated in museum.yml so the correct links are generated) -ALBUMS_ENDPOINT=http://localhost:8082 -``` - -Create the `museum.yaml` with additional configuration, this will be mounted -(read-only) into the container: - -```yaml -s3: - are_local_buckets: false - # For some self-hosted S3 deployments you (e.g. Minio) you might need to disable bucket subdomains - use_path_style_urls: true - # The key must be named like so - b2-eu-cen: - key: $YOUR_S3_KEY - secret: $YOUR_S3_SECRET - endpoint: $YOUR_S3_ENDPOINT - region: $YOUR_S3_REGION - bucket: $YOUR_S3_BUCKET_NAME -# The same value as the one specified in ALBUMS_ENDPOINT -apps: - public-albums: http://localhost:8082 -``` - -## 3. Run `docker-compose up` - -Run `docker-compose up` at the root of the project (add `-d` to run it in the -background). - -## 4. Create an account and increase storage quota - -Open `http://localhost:8080` or whatever Endpoint you mentioned for the web app -and create an account. If your SMTP related configurations are all set and -right, you will receive an email with your OTT in it. There are two work arounds -to retrieve the OTP, checkout -[this document](https://help.ente.io/self-hosting/faq/otp) for getting your -OTT's.. - -If you successfully log in, select any plan and increase the storage quota with -the following command: - -```bash -docker compose exec -i postgres psql -U pguser -d ente_db -c "INSERT INTO storage_bonus (bonus_id, user_id, storage, type, valid_till) VALUES ('self-hosted-myself', (SELECT user_id FROM users), 1099511627776, 'ADD_ON_SUPPORT', 0)" -``` - -After few reloads, you should see 1 To of quota. - -## Related - -Some other users have also shared their setups. - -- [Using Traefik](https://github.com/ente-io/ente/pull/3663) - -- [Building custom images from source (Linux)](https://github.com/ente-io/ente/discussions/3778) - -- [Troubleshooting Bucket CORS](/self-hosting/troubleshooting/bucket-cors) diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md index 4ea0156d60..4c170fe150 100644 --- a/docs/docs/self-hosting/index.md +++ b/docs/docs/self-hosting/index.md @@ -5,9 +5,11 @@ description: Getting started with self-hosting Ente # Get Started -The entire source code for Ente is open source, -[including the server](https://ente.io/blog/open-sourcing-our-server/). This is -the same code we use for our own cloud service. +If you're looking to spin up Ente on your server for preserving those +sweet memories, you are in the right place! + +Our entire source code ([including the server](https://ente.io/blog/open-sourcing-our-server/)) +is open source. This is the same code we use on production. For a quick preview of Ente on your server, make sure your system meets the requirements mentioned below. After trying the preview, you can explore other @@ -30,11 +32,14 @@ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/q ``` The above command 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. +directory, prompts to start the cluster with needed containers after pulling the images required to run Ente. ![quickstart](/quickstart.png) +> [!NOTE] +> Make sure to modify the default values in `compose.yaml` and `museum.yaml` +> if you wish to change endpoints, bucket configuration or server configuration. + ## Try the web app The first user to be registered will be treated as the admin user. diff --git a/docs/docs/self-hosting/install/compose.md b/docs/docs/self-hosting/install/compose.md new file mode 100644 index 0000000000..4ac1cd724b --- /dev/null +++ b/docs/docs/self-hosting/install/compose.md @@ -0,0 +1,46 @@ +--- +title: Docker Compose +description: Running Ente with Docker Compose from source +--- + +# Docker Compose + +If you wish to run Ente via Docker Compose from source, do the following: + +## Step 1: Clone the repository + +Clone the repository to a prefered directory. Change into the `server/config` directory inside the cloned repository, where the compose file for running the cluster is present. + +Run the following command for the same: + +``` sh +git clone https://github.com/ente-io/ente +cd ente/server/config +``` + +## Step 2: Populate the configuration file and environment variables + +In order to run the cluster, you will have to provide environment variable values. + +Copy the configuration files for modification by the following command inside `server/config` directory of the repository. + +This allows you to modify configuration without having to face hassle while pulling in latest changes. + +``` shell +# Inside the cloned repository's directory (usually `ente`) +cd server/config +cp example.env .env +cp example.yaml museum.yaml +``` + +Change the values present in `.env` file along with `museum.yaml` file accordingly. + +## Step 3: Start the cluster + +Now you can start the cluster by running the following command: + +```sh +docker compose up --build +``` + +This builds Museum and web applications based on the Dockerfile and starts the containers needed for Ente. diff --git a/docs/docs/self-hosting/install/config-file.md b/docs/docs/self-hosting/install/config-file.md new file mode 100644 index 0000000000..975b25772c --- /dev/null +++ b/docs/docs/self-hosting/install/config-file.md @@ -0,0 +1,14 @@ +--- +title: "Configuration File - Self-hosting" +description: + "Information about all the configuration variables needed to run Ente with + museum.yaml" +--- + + +# Configuration File + +Ente's server, Museum, uses YAML-based configuration file that is used for handling database +connectivity, bucket configuration, admin user whitelisting, etc. + +Self-hosted clusters generally use `museum.yaml` file for reading configuration specifications. diff --git a/docs/docs/self-hosting/install/config.md b/docs/docs/self-hosting/install/configuration-variables.md similarity index 51% rename from docs/docs/self-hosting/install/config.md rename to docs/docs/self-hosting/install/configuration-variables.md index 99a20525ea..b79a53f6d7 100644 --- a/docs/docs/self-hosting/install/config.md +++ b/docs/docs/self-hosting/install/configuration-variables.md @@ -1,11 +1,11 @@ --- -title: "Configuration - Self-hosting" +title: "Environment Variables and Defaults - Self-hosting" description: "Information about all the configuration variables needed to run Ente along with description on default configuration" --- -# Configuration +# Environment Variables and Defaults The environment variables needed for running Ente, configuration variables present in Museum's configuration file and the default configuration are @@ -17,24 +17,28 @@ A self-hosted Ente instance requires specific endpoints in both Museum (the server) and web apps. This document outlines the essential environment variables and port mappings of the web apps. -Here's the list of environment variables that need to be configured: +Here's the list of environment variables that is used by the cluster: -| Service | Environment Variable | Description | Default Value | -| ------- | -------------------- | ------------------------------------------------ | --------------------- | -| Web | `ENTE_API_ORIGIN` | API Endpoint for Ente's API (Museum) | http://localhost:8080 | -| Web | `ENTE_ALBUMS_ORIGIN` | Base URL for Ente Album, used for public sharing | http://localhost:3002 | - -## Config File - -Ente's server, Museum, uses a configuration file +| Service | Environment Variable | Description | Default Value | +| ---------- | --------------------- | ------------------------------------------------ | --------------------------------- | +| `web` | `ENTE_API_ORIGIN` | API Endpoint for Ente's API (Museum) | http://localhost:8080 | +| `web` | `ENTE_ALBUMS_ORIGIN` | Base URL for Ente Album, used for public sharing | http://localhost:3002 | +| `postgres` | `POSTGRES_USER` | Username for PostgreSQL database | pguser | +| `postgres` | `POSTGRES_DB` | Name of database for use with Ente | ente_db | +| `postgres` | `POSTGRES_PASSWORD` | Password for PostgreSQL database's user | Randomly generated for quickstart | +| `minio` | `MINIO_ROOT_USER` | Username for MinIO | Randomly generated for quickstart | +| `minio` | `MINIO_ROOT_PASSWORD` | Password for MinIO | Randomly generated for quickstart | ## Default Configuration +Self-hosted Ente clusters have certain default configuration for ease of use, +which is documented below to understand its behavior: + ### Ports The below format is according to how ports are mapped in Docker when using quickstart script. The mapping is of the format `- :` -in `ports`. +in `ports` in compose file. | Service | Type | Host Port | Container Port | | ---------------------------------- | -------- | --------- | -------------- | diff --git a/docs/docs/self-hosting/install/post-install.md b/docs/docs/self-hosting/install/defaults.md similarity index 100% rename from docs/docs/self-hosting/install/post-install.md rename to docs/docs/self-hosting/install/defaults.md diff --git a/docs/docs/self-hosting/install/from-source.md b/docs/docs/self-hosting/install/from-source.md deleted file mode 100644 index b3f1ebc5d2..0000000000 --- a/docs/docs/self-hosting/install/from-source.md +++ /dev/null @@ -1,183 +0,0 @@ ---- -title: Ente from Source -description: Getting started self hosting Ente Photos and/or Ente Auth ---- - -# Ente from Source - -## Installing Docker - -Refer to -[How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) -for detailed instructions. - -## Start the server - -```sh -git clone https://github.com/ente-io/ente -cd ente/server -docker compose up --build -``` - -> [!TIP] -> -> You can also use a pre-built Docker image from `ghcr.io/ente-io/server` -> ([More info](https://github.com/ente-io/ente/blob/main/server/docs/docker.md)) - -Install the necessary dependencies for running the web client - -```sh -# installing npm and yarn - -sudo apt update -sudo apt install nodejs npm -sudo npm install -g yarn // to install yarn globally -``` - -Then in a separate terminal, you can run (e.g) the web client - -```sh -cd ente/web -git submodule update --init --recursive -yarn install -NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev -``` - -That's about it. If you open http://localhost:3000, you will be able to create -an account on a Ente Photos web app running on your machine, and this web app -will be connecting to the server running on your local machine at -`localhost:8080`. - -For the mobile apps, you don't even need to build, and can install normal Ente -apps and configure them to use your -[custom self-hosted server](/self-hosting/guides/custom-server/). - -> If you want to build the mobile apps from source, see the instructions -> [here](/self-hosting/guides/mobile-build). - -## Web app with Docker and Compose - -The instructoins in previous section were just a temporary way to run the web -app locally. To run the web apps as services, the user has to build a docker -image manually. - -> [!IMPORTANT] -> -> Recurring changes might be made by the team or from community if more -> improvements can be made so that we are able to build a full-fledged docker -> image. - -```dockerfile -FROM node:20-bookworm-slim as builder - -WORKDIR ./ente - -COPY . . -COPY apps/ . - -# Will help default to yarn versoin 1.22.22 -RUN corepack enable - -# Endpoint for Ente Server -ENV NEXT_PUBLIC_ENTE_ENDPOINT=https://your-ente-endpoint.com -ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your-albums-endpoint.com - -RUN yarn cache clean -RUN yarn install --network-timeout 1000000000 -RUN yarn build:photos && yarn build:accounts && yarn build:auth && yarn build:cast - -FROM node:20-bookworm-slim - -WORKDIR /app - -COPY --from=builder /ente/apps/photos/out /app/photos -COPY --from=builder /ente/apps/accounts/out /app/accounts -COPY --from=builder /ente/apps/auth/out /app/auth -COPY --from=builder /ente/apps/cast/out /app/cast - -RUN npm install -g serve - -ENV PHOTOS=3000 -EXPOSE ${PHOTOS} - -ENV ACCOUNTS=3001 -EXPOSE ${ACCOUNTS} - -ENV AUTH=3002 -EXPOSE ${AUTH} - -ENV CAST=3003 -EXPOSE ${CAST} - -# The albums app does not have navigable pages on it, but the -# port will be exposed in-order to self up the albums endpoint -# `apps.public-albums` in museum.yaml configuration file. -ENV ALBUMS=3004 -EXPOSE ${ALBUMS} - -CMD ["sh", "-c", "serve /app/photos -l tcp://0.0.0.0:${PHOTOS} & serve /app/accounts -l tcp://0.0.0.0:${ACCOUNTS} & serve /app/auth -l tcp://0.0.0.0:${AUTH} & serve /app/cast -l tcp://0.0.0.0:${CAST}"] -``` - -The above is a multi-stage Dockerfile which creates a production ready static -output of the 4 apps (Photos, Accounts, Auth and Cast) and serves the static -content with Caddy. - -Looking at 2 different node base-images doing different tasks in the same -Dockerfile would not make sense, but the Dockerfile is divided into two just to -improve the build efficiency as building this Dockerfile will arguably take more -time. - -Lets build a Docker image from the above Dockerfile. Copy and paste the above -Dockerfile contents in the root of your web directory which is inside -`ente/web`. Execute the below command to create an image from this Dockerfile. - -```sh -# Build the image -docker build -t : --no-cache --progress plain . -``` - -You can always edit the Dockerfile and remove the steps for apps which you do -not intend to install on your system (like auth or cast) and opt out of those. - -Regarding Albums App, take a note that they are not apps with navigable pages, -if accessed on the web-browser they will simply redirect to ente.web.io. - -## compose.yaml - -Moving ahead, we need to paste the below contents into the compose.yaml inside -`ente/server/compose.yaml` under the services section. - -```yaml -ente-web: - image: # name of the image you used while building - ports: - - 3000:3000 - - 3001:3001 - - 3002:3002 - - 3003:3003 - - 3004:3004 - environment: - - NODE_ENV=development - restart: always -``` - -Now, we're good to go. All we are left to do now is start the containers. - -```sh -docker compose up -d # --build - -# Accessing the logs -docker compose logs -``` - -## Configure App Endpoints - -> [!NOTE] Previously, this was dependent on the env variables -> `NEXT_ENTE_PUBLIC_ACCOUNTS_ENDPOINT` and etc. Please check the below -> documentation to update your setup configurations - -You can configure the web endpoints for the other apps including Accounts, -Albums Family and Cast in your `museum.yaml` configuration file. Checkout -[`local.yaml`](https://github.com/ente-io/ente/blob/543411254b2bb55bd00a0e515dcafa12d12d3b35/server/configurations/local.yaml#L76-L89) -to configure the endpoints. Make sure to setup up your DNS Records accordingly -to the similar URL's you set up in `museum.yaml`. diff --git a/docs/docs/self-hosting/install/custom-server/custom-server.png b/docs/docs/self-hosting/install/post-install/custom-server.png similarity index 100% rename from docs/docs/self-hosting/install/custom-server/custom-server.png rename to docs/docs/self-hosting/install/post-install/custom-server.png diff --git a/docs/docs/self-hosting/install/custom-server/index.md b/docs/docs/self-hosting/install/post-install/index.md similarity index 54% rename from docs/docs/self-hosting/install/custom-server/index.md rename to docs/docs/self-hosting/install/post-install/index.md index 63ba371eb8..a3d1d4f703 100644 --- a/docs/docs/self-hosting/install/custom-server/index.md +++ b/docs/docs/self-hosting/install/post-install/index.md @@ -1,16 +1,39 @@ --- -title: Custom server -description: Using a custom self-hosted server with Ente client apps and CLI +title: Post-installation steps - Self-hosting +description: Steps to be followed post-installation for smooth experience --- -# Connecting to a custom server +# Post-installation Steps + +A list of steps that should be done after installing Ente are described below: + +## Step 1: Creating first user + +The first user to be created will be treated as an admin user. + +Once Ente is up and running, the Ente Photos web app will be accessible on +`http://localhost:3000`. Open this URL in your browser and proceed with creating +an account. + +To complete your account registration you will need to enter a 6-digit +verification code. + +This code can be found in the server logs, which should already be shown in your +quickstart terminal. Alternatively, you can open the server logs with the +following command from inside the `my-ente` folder: + +```sh +sudo docker compose logs +``` + +![otp](/otp.png) + +## Step 2: Configure apps to use your server You can modify various Ente client apps and CLI to connect to a self hosted custom server endpoint. -[[toc]] - -## Mobile +### Mobile The pre-built Ente apps from GitHub / App Store / Play Store / F-Droid can be easily configured to use a custom server. @@ -20,7 +43,7 @@ configure the endpoint the app should be connecting to. ![Setting a custom server on the onboarding screen](custom-server.png) -## Desktop and web +### Desktop and web Same as the mobile app, you can tap 7 times on the onboarding screen to configure the endpoint the app should connect to. @@ -47,21 +70,7 @@ Note that the custom server configured this way is cleared when you reset the state during logout. In particular, the app also does a reset when you press the change email button during the login flow. -### Building from source - -Alternatively (e.g. if you don't wish to configure this setting and just want to -change the endpoint the client connects to by default), you can build the app -from source and use the `NEXT_PUBLIC_ENTE_ENDPOINT` environment variable to tell -it which server to connect to. For example: - -```sh -NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev:photos -``` - -For more details, see -[hosting the web app](https://help.ente.io/self-hosting/guides/web-app). - -## CLI +## Step 3: Configure Ente CLI > [!NOTE] > @@ -78,38 +87,4 @@ endpoint: ``` (Another -[example](https://github.com/ente-io/ente/blob/main/cli/config.yaml.example)) - -## Find the hostname of your server - -If you want to access your museum within your own network, you can use the -`hostname` command to find a addressable local network hostname or IP for your -computer, and then use it by suffixing it with the port number. - -First, run - -```sh -hostname -``` - -The result will look something like this - -```sh -my-computer.local -``` - -You will need to replace the server endpoint with an address that uses your -server's hostname and the port number. Here's an example: - -``` -http://my-computer.local:8080 -``` - -Note that this will only work within your network. To access it from outside the -network, you need to use the public IP or hostname. - -> [!TIP] -> -> If you're having trouble uploading from your mobile app, it is likely that -> museum is not able to connect to your S3 storage. See the -> [Configuring S3](/self-hosting/guides/configuring-s3) guide for more details. +[example](https://github.com/ente-io/ente/blob/main/cli/config.yaml.example)) \ No newline at end of file diff --git a/docs/docs/self-hosting/install/custom-server/web-custom-endpoint-indicator.png b/docs/docs/self-hosting/install/post-install/web-custom-endpoint-indicator.png similarity index 100% rename from docs/docs/self-hosting/install/custom-server/web-custom-endpoint-indicator.png rename to docs/docs/self-hosting/install/post-install/web-custom-endpoint-indicator.png diff --git a/docs/docs/self-hosting/install/custom-server/web-dev-settings.png b/docs/docs/self-hosting/install/post-install/web-dev-settings.png similarity index 100% rename from docs/docs/self-hosting/install/custom-server/web-dev-settings.png rename to docs/docs/self-hosting/install/post-install/web-dev-settings.png diff --git a/docs/docs/self-hosting/install/quickstart.md b/docs/docs/self-hosting/install/quickstart.md index e7311f5cc7..cff6e3c932 100644 --- a/docs/docs/self-hosting/install/quickstart.md +++ b/docs/docs/self-hosting/install/quickstart.md @@ -6,7 +6,7 @@ description: Self-hosting Ente with quickstart script # Quickstart We provide a quickstart script which can be used for self-hosting Ente on your -machine. +machine in less than 5 minutes. ## Requirements @@ -21,10 +21,10 @@ 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. +The above `curl` command does the following: +1. Creates a directory `./my-ente` in working directory. +2. Starts the containers required to run Ente upon prompting. -![quickstart](/quickstart.png) +You should be able to access the web application at [`http://localhost:3000`](http://localhost:3000) or [`http://:3000`](http://:3000) -![self-hosted-ente](/web-app.webp) +The data pertaining to be used by Museum is stored in `./data` folder inside `my-ente` directory, which contains extra configuration files that is to be used (billing configuration, push notification credentials, etc.) \ No newline at end of file diff --git a/docs/docs/self-hosting/install/standalone-ente.md b/docs/docs/self-hosting/install/standalone-ente.md deleted file mode 100644 index adaf444594..0000000000 --- a/docs/docs/self-hosting/install/standalone-ente.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Running Ente Without Docker - Self-hosting -description: Installing and setting up Ente without Docker ---- - -# Running Ente without Docker - -## Running Museum (Ente's server) without Docker - -First, start by installing all the dependencies to get your machine ready for -development. - -- For macOS - ```sh - brew tap homebrew/core - brew update - brew install go - ``` -- For Debian/Ubuntu-based distros - ```sh - sudo apt update && sudo apt upgrade - sudo apt install golang-go - ``` - -Alternatively, you can also download the latest binaries from -['All Release'](https://go.dev/dl/) page from the official website. - -- For macOS - ```sh - brew install postgres@15 - # Link the postgres keg - brew link postgresql@15 - brew install libsodium - ``` -- For Debian/Ubuntu-based distros - ```sh - sudo apt install postgresql - sudo apt install libsodium23 libsodium-dev - ``` - -The package `libsodium23` might be installed already in some cases. - -Install `pkg-config` - -- For macOS - ```sh - brew install pkg-config - ``` -- For Debian/Ubuntu-based distros - ```sh - sudo apt install pkg-config - ``` - -## Starting Postgres - -### With `pg_ctl` - -```sh -pg_ctl -D /usr/local/var/postgres -l logfile start -``` - -Depending on the operating system type, the path for postgres binary or -configuration file might be different, please check if the command keeps failing -for you. - -Ideally, if you are on a Linux system with `systemd` as the initialization -("init") system. You can also start postgres as a systemd service. After -Installation execute the following commands: - -```sh -sudo systemctl enable postgresql -sudo systemctl daemon-reload && sudo systemctl start postgresql -``` - -### Create user - -```sh -sudo useradd postgres -``` - -## Start Museum - -Start by cloning ente to your system. - -```sh -git clone https://github.com/ente-io/ente -``` - -```sh -export ENTE_DB_USER=postgres -cd ente/server -go run cmd/museum/main.go -``` - -You can also add the export line to your shell's RC file, to avoid exporting the -environment variable every time. - -For live reloads, install [air](https://github.com/air-verse/air#installation). -Then you can just call air after declaring the required environment variables. -For example, - -```sh -ENTE_DB_USER=postgres -air -``` - -## Museum as a background service - -Please check the below links if you want to run Museum as a service, both of -them are battle tested. - -1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323) -2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4) - -Once you are done with setting and running Museum, all you are left to do is run -the web app and reverse_proxy it with a webserver. You can check the following -resources for Deploying your web app. - -1. [Hosting the Web App](https://help.ente.io/self-hosting/guides/web-app). -2. [Running Ente Web app as a systemd Service](https://gist.github.com/mngshm/72e32bd483c2129621ed0d74412492fd) diff --git a/docs/docs/self-hosting/install/without-docker.md b/docs/docs/self-hosting/install/without-docker.md new file mode 100644 index 0000000000..826b39bb31 --- /dev/null +++ b/docs/docs/self-hosting/install/without-docker.md @@ -0,0 +1,82 @@ +--- +title: Running Ente Without Docker - Self-hosting +description: Installing and setting up Ente without Docker +--- + +# Running Ente without Docker + +If you wish to run Ente from source without using Docker, follow the steps described below: + +## Pre-requisites + +1. **Go:** Install Go on your system. This is needed for building Museum (Ente's server) + + ``` shell + sudo apt update && sudo apt upgrade + sudo apt install golang-go + ``` + + Alternatively, you can also download the latest binaries + from the [official website](https://go.dev/dl/). + +2. **PostgreSQL and `libsodium`:** Install PostgreSQL (database) and `libsodium` (high level API for encryption) via package manager. + + ``` shell + sudo apt install postgresql + sudo apt install libsodium23 libsodium-dev + ``` + +3. **`pkg-config`:** Install `pkg-config` for dependency handling. + + ``` shell + sudo apt install pkg-config + ``` + +Start the database using `systemd` automatically when the system starts. +``` shell +sudo systemctl enable postgresql +sudo systemctl start postgresql +``` + +Ensure the database is running using + +``` shell +sudo systemctl status postgresql +``` + +### Create user + +```sh +sudo useradd postgres +``` + +## Start Museum + +Start by cloning ente to your system. + +```sh +git clone https://github.com/ente-io/ente +``` + +```sh +export ENTE_DB_USER=postgres +cd ente/server +go run cmd/museum/main.go +``` + +You can also add the export line to your shell's RC file, to avoid exporting the environment variable every time. + +## Museum as a background service + +Please check the below links if you want to run Museum as a service, both of +them are battle tested. + +1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323) +2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4) + +Once you are done with setting and running Museum, all you are left to do is run +the web app and reverse_proxy it with a webserver. You can check the following +resources for Deploying your web app. + +1. [Hosting the Web App](https://help.ente.io/self-hosting/guides/web-app). +2. [Running Ente Web app as a systemd Service](https://gist.github.com/mngshm/72e32bd483c2129621ed0d74412492fd) diff --git a/server/.gitignore b/server/.gitignore index e7f5bda723..0a1c4aa635 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -10,3 +10,5 @@ bin/** data/ my-ente/ __debug_bin* +config/.env +config/museum.yaml \ No newline at end of file diff --git a/server/config/compose.yaml b/server/config/compose.yaml new file mode 100644 index 0000000000..aa2189c545 --- /dev/null +++ b/server/config/compose.yaml @@ -0,0 +1,79 @@ +services: + museum: + build: + context: .. + ports: + - 8080:8080 # Museum/API + depends_on: + postgres: + condition: service_healthy + env_file: + - .env + volumes: + - ./museum.yaml:/museum.yaml:ro + - ./data:/data:ro + + # Resolve "localhost:3200" in the museum container to the minio container. + socat: + image: alpine/socat + network_mode: service:museum + depends_on: [museum] + command: "TCP-LISTEN:3200,fork,reuseaddr TCP:minio:3200" + + postgres: + image: postgres:15 + env_file: + - .env + # Wait for postgres to accept connections before starting museum. + healthcheck: + test: pg_isready -q -d ${POSTGRES_DB} -U ${POSTGRES_USER} + start_period: 30s + start_interval: 1s + volumes: + - postgres-data:/var/lib/postgresql/data + + minio: + image: minio/minio + ports: + - 3200:3200 # MinIO API + # - 3201:3201 # MinIO Console (uncomment to access externally) + env_file: + - .env + command: server /data --address ":3200" --console-address ":3201" + volumes: + - minio-data:/data + post_start: + - command: | + sh -c ' + #!/bin/sh + + while ! mc alias set h0 http://minio:3200 ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD} 2>/dev/null + do + echo "Waiting for minio..." + sleep 0.5 + done + + cd /data + + mc mb -p b2-eu-cen + mc mb -p wasabi-eu-central-2-v3 + mc mb -p scw-eu-fr-v3 + ' + + ente-web: + build: + context: ../../web + ports: + - 3000:3000 + - 3001:3001 + - 3002:3002 + - 3003:3003 + - 3004:3004 + environment: + - NODE_ENV=development + env_file: + - .env + +volumes: + postgres-data: + minio-data: diff --git a/server/config/example.env b/server/config/example.env new file mode 100644 index 0000000000..f67d1fbefd --- /dev/null +++ b/server/config/example.env @@ -0,0 +1,29 @@ +# Copy this file to .env in the same directory in which this file is present +# This file contains the environment variables needed for Ente's cluster to run properly. +# This file is split based on services declared in Docker Compose file +# +# Service: Postgres +# This is used for storing data in database pertaining to collections, files, users, subscriptions, etc. +# These credentials are needed for accessing the database via Museum. +# Please set a strong password for accessing the database. +# Enter these values in museum.yaml file under `db`. +# This need not be defined if using external DB (i. e. no Compose service for PostgreSQL is used) +POSTGRES_USER=pguser +POSTGRES_PASSWORD= +POSTGRES_DB=ente_db + +# Service: MinIO +# This is used for MinIO object storage service that's shipped by default with the compose file +# to reduce need for an external S3-compatible bucket for quick testing. +# It is recommended to use an external bucket for long-term usage. +# The credentials required for accessing the object storage is documented below. +# It is not needed to configure these variables if you are using an external bucket +# Enter the user value into key and password in secret for buckets in museum.yaml under `s3` section. +MINIO_ROOT_USER=- +MINIO_ROOT_PASSWORD= + +# Service: Web +# This is used for configuring public albums, API endpoints, etc. +# Replace the below endpoints to the correct subdomains of your choice. +ENTE_API_ORIGIN=http://localhost:8080 +ENTE_ALBUMS_ORIGIN=https://localhost:3002 diff --git a/server/config/example.yaml b/server/config/example.yaml new file mode 100644 index 0000000000..5e0f94ece1 --- /dev/null +++ b/server/config/example.yaml @@ -0,0 +1,30 @@ +# Copy this file to museum.yaml in the same directory in which this file is present + +db: + host: postgres + port: 5432 + name: ente_db + user: pguser + password: + +s3: + are_local_buckets: true + b2-eu-cen: + key: + secret: + endpoint: localhost:3200 + region: eu-central-2 + bucket: b2-eu-cen + wasabi-eu-central-2-v3: + key: + secret: + endpoint: localhost:3200 + region: eu-central-2 + bucket: wasabi-eu-central-2-v3 + compliance: false + scw-eu-fr-v3: + key: + secret: + endpoint: localhost:3200 + region: eu-central-2 + bucket: scw-eu-fr-v3 \ No newline at end of file From d30fb6fc3cd841b44a20b488e76c82fbf0136ebf Mon Sep 17 00:00:00 2001 From: Keerthana Date: Thu, 24 Jul 2025 16:50:33 +0530 Subject: [PATCH 12/20] [docs] rename migration guides for auth --- docs/docs/.vitepress/sidebar.ts | 20 +++++++++++-------- docs/docs/auth/features/index.md | 2 +- .../authy/index.md | 0 .../{migration-guides => migration}/export.md | 0 .../{migration-guides => migration}/import.md | 0 .../{migration-guides => migration}/index.md | 0 .../steam/index.md | 0 .../administration/configuring-s3.md | 9 +++------ .../self-hosting/administration/museum.md | 10 +++------- docs/docs/self-hosting/guides/admin.md | 2 +- docs/docs/self-hosting/guides/index.md | 6 +++--- ...{configuration-variables.md => env-var.md} | 0 12 files changed, 23 insertions(+), 26 deletions(-) rename docs/docs/auth/{migration-guides => migration}/authy/index.md (100%) rename docs/docs/auth/{migration-guides => migration}/export.md (100%) rename docs/docs/auth/{migration-guides => migration}/import.md (100%) rename docs/docs/auth/{migration-guides => migration}/index.md (100%) rename docs/docs/auth/{migration-guides => migration}/steam/index.md (100%) rename docs/docs/self-hosting/install/{configuration-variables.md => env-var.md} (100%) diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index d1b8c37e3f..5148296f11 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -207,22 +207,22 @@ export const sidebar = [ text: "Migration", collapsed: true, items: [ - { text: "Introduction", link: "/auth/migration-guides/" }, + { text: "Introduction", link: "/auth/migration/" }, { text: "From Authy", - link: "/auth/migration-guides/authy/", + link: "/auth/migration/authy/", }, { text: "From Steam", - link: "/auth/migration-guides/steam/", + link: "/auth/migration/steam/", }, { text: "From others", - link: "/auth/migration-guides/import", + link: "/auth/migration/import", }, { text: "Exporting your data", - link: "/auth/migration-guides/export", + link: "/auth/migration/export", }, ], }, @@ -267,8 +267,12 @@ export const sidebar = [ link: "/self-hosting/install/without-docker", }, { - text: "Configuration Variables", - link: "/self-hosting/install/configuration-variables", + text: "Environment Variable and Defaults", + link: "/self-hosting/install/env-var", + }, + { + text: "Configuration File", + link: "/self-hosting/install/config-file", }, { text: "Post Installation", @@ -294,7 +298,7 @@ export const sidebar = [ }, { text: "Configuring CLI for your instance", - link: "/self-hosting/guides/selfhost-cli", + link: "/self-hosting/administration/selfhost-cli", }, ], diff --git a/docs/docs/auth/features/index.md b/docs/docs/auth/features/index.md index 36d43392fa..6032dc1c26 100644 --- a/docs/docs/auth/features/index.md +++ b/docs/docs/auth/features/index.md @@ -106,7 +106,7 @@ Ente Auth offers various import and export options for your codes. - **Import:** Import codes from various other authentication apps. For detailed instructions, refer to the -[migration guides](../migration-guides/). +[migration guides](../migration/). ### Deduplicate codes diff --git a/docs/docs/auth/migration-guides/authy/index.md b/docs/docs/auth/migration/authy/index.md similarity index 100% rename from docs/docs/auth/migration-guides/authy/index.md rename to docs/docs/auth/migration/authy/index.md diff --git a/docs/docs/auth/migration-guides/export.md b/docs/docs/auth/migration/export.md similarity index 100% rename from docs/docs/auth/migration-guides/export.md rename to docs/docs/auth/migration/export.md diff --git a/docs/docs/auth/migration-guides/import.md b/docs/docs/auth/migration/import.md similarity index 100% rename from docs/docs/auth/migration-guides/import.md rename to docs/docs/auth/migration/import.md diff --git a/docs/docs/auth/migration-guides/index.md b/docs/docs/auth/migration/index.md similarity index 100% rename from docs/docs/auth/migration-guides/index.md rename to docs/docs/auth/migration/index.md diff --git a/docs/docs/auth/migration-guides/steam/index.md b/docs/docs/auth/migration/steam/index.md similarity index 100% rename from docs/docs/auth/migration-guides/steam/index.md rename to docs/docs/auth/migration/steam/index.md diff --git a/docs/docs/self-hosting/administration/configuring-s3.md b/docs/docs/self-hosting/administration/configuring-s3.md index 0ac0657228..e9cb3ebb26 100644 --- a/docs/docs/self-hosting/administration/configuring-s3.md +++ b/docs/docs/self-hosting/administration/configuring-s3.md @@ -11,14 +11,11 @@ description: > [!IMPORTANT] > -> As of now, replication works only if all the 3 storage type needs are -> fulfilled (1 hot, 1 cold and 1 glacier storage). +> As of now, replication works only if all the 3 storage buckets are configured (2 hot and 1 cold storage). > > For more information, check this -> [discussion](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970). - -If you're wondering why there are 3 buckets on the MinIO UI - that's because our production instance uses these to perform -[replication](https://ente.io/reliability/). +> [discussion](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970) +> and our article on ensuring [reliability](https://ente.io/reliability/). In a self hosted Ente instance replication is turned off by default. When replication is turned off, only the first bucket (`b2-eu-cen`) is used, and the diff --git a/docs/docs/self-hosting/administration/museum.md b/docs/docs/self-hosting/administration/museum.md index cb5263104f..998e7ad4b6 100644 --- a/docs/docs/self-hosting/administration/museum.md +++ b/docs/docs/self-hosting/administration/museum.md @@ -29,7 +29,7 @@ MinIO buckets. If you wish to use an external S3 provider, you can edit the configuration with your provider's credentials, and set `are_local_buckets` to `false`. -Check out [Configuring S3](/self-hosting/guides/configuring-s3.md) to understand +Check out [Configuring S3] to understand more about configuring S3 buckets. MinIO uses the port `3200` for API Endpoints and their web app runs over @@ -38,7 +38,7 @@ browser. If you face any issues related to uploads then checkout [Troubleshooting bucket CORS](/self-hosting/troubleshooting/bucket-cors) and -[Frequently encountered S3 errors](/self-hosting/guides/configuring-s3#frequently-encountered-errors). +[Frequently encountered S3 errors]. ## Web apps @@ -70,8 +70,4 @@ stop all the Docker containers with `docker compose down` and restart them with Similarly, you can use the default [`local.yaml`](https://github.com/ente-io/ente/tree/main/server/configurations/local.yaml) as a reference for building a functioning `museum.yaml` for many other -functionalities like SMTP, Discord notifications, Hardcoded-OTTs, etc. - -## References - -- [Environment variables and ports](/self-hosting/faq/environment) +functionalities like SMTP, Discord notifications, Hardcoded-OTTs, etc. \ No newline at end of file diff --git a/docs/docs/self-hosting/guides/admin.md b/docs/docs/self-hosting/guides/admin.md index 10d05fb4d0..41732e22f5 100644 --- a/docs/docs/self-hosting/guides/admin.md +++ b/docs/docs/self-hosting/guides/admin.md @@ -85,4 +85,4 @@ using the CLI. ## Backups -See this [FAQ](/self-hosting/faq/backup). +See this [document](/self-hosting/administration/backup). diff --git a/docs/docs/self-hosting/guides/index.md b/docs/docs/self-hosting/guides/index.md index 22b28107d4..3925b7e185 100644 --- a/docs/docs/self-hosting/guides/index.md +++ b/docs/docs/self-hosting/guides/index.md @@ -11,13 +11,13 @@ walkthroughs, tutorials and other FAQ pages in this directory. See the sidebar for existing guides. In particular: - If you're just looking to get started, see - [configure custom server](custom-server/). + [configure custom server]. - For various admin related tasks, e.g. increasing the storage quota on your self hosted instance, see [administering your custom server](admin). - For configuring your S3 buckets to get the object storage to work from your mobile device or for fixing an upload errors, see - [configuring S3](configuring-s3). There is also a longer - [community contributed guide](external-s3) for a more self hosted setup of + configuring S3. There is also a longer + community contributed guide for a more self hosted setup of both the server and web app using external S3 buckets for object storage. diff --git a/docs/docs/self-hosting/install/configuration-variables.md b/docs/docs/self-hosting/install/env-var.md similarity index 100% rename from docs/docs/self-hosting/install/configuration-variables.md rename to docs/docs/self-hosting/install/env-var.md From 75d919e81524fd9f48e143867db8fbed17a5fd27 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Fri, 25 Jul 2025 10:46:21 +0530 Subject: [PATCH 13/20] [docs] refactor FAQ and installation section --- docs/docs/.vitepress/sidebar.ts | 40 ++-- .../accounts.md} | 0 .../administration/configuring-s3.md | 45 ----- .../self-hosting/administration/museum.md | 3 +- .../administration/object-storage.md | 85 ++++++++ .../administration/reverse-proxy.md | 105 +++++++--- .../self-hosting/administration/security.md | 0 .../administration/selfhost-cli.md | 4 +- docs/docs/self-hosting/faq/index.md | 47 ----- docs/docs/self-hosting/guides/systemd.md | 28 +++ docs/docs/self-hosting/index.md | 3 +- docs/docs/self-hosting/install/compose.md | 13 +- docs/docs/self-hosting/install/config-file.md | 130 +++++++++++- docs/docs/self-hosting/install/env-var.md | 43 ++-- .../install/post-install/index.md | 24 +-- docs/docs/self-hosting/install/quickstart.md | 13 +- .../docs/self-hosting/install/requirements.md | 2 +- .../self-hosting/install/without-docker.md | 187 ++++++++++++++---- .../troubleshooting/bucket-cors.md | 70 ------- .../self-hosting/troubleshooting/keyring.md | 5 +- .../self-hosting/troubleshooting/uploads.md | 10 - server/.gitignore | 3 +- server/config/example.yaml | 48 ++++- server/quickstart.sh | 24 ++- 24 files changed, 599 insertions(+), 333 deletions(-) rename docs/docs/self-hosting/{install/defaults.md => administration/accounts.md} (100%) delete mode 100644 docs/docs/self-hosting/administration/configuring-s3.md create mode 100644 docs/docs/self-hosting/administration/object-storage.md create mode 100644 docs/docs/self-hosting/administration/security.md delete mode 100644 docs/docs/self-hosting/faq/index.md create mode 100644 docs/docs/self-hosting/guides/systemd.md delete mode 100644 docs/docs/self-hosting/troubleshooting/bucket-cors.md diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index 5148296f11..06f64d790b 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -267,7 +267,7 @@ export const sidebar = [ link: "/self-hosting/install/without-docker", }, { - text: "Environment Variable and Defaults", + text: "Environment Variables and Defaults", link: "/self-hosting/install/env-var", }, { @@ -275,7 +275,7 @@ export const sidebar = [ link: "/self-hosting/install/config-file", }, { - text: "Post Installation", + text: "Post-installation Steps", link: "/self-hosting/install/post-install/", } ], @@ -289,8 +289,8 @@ export const sidebar = [ link: "/self-hosting/administration/museum", }, { - text: "Configuring S3", - link: "/self-hosting/administration/configuring-s3", + text: "Configuring Object Storage", + link: "/self-hosting/administration/object-storage", }, { text: "Reverse proxy", @@ -313,6 +313,16 @@ export const sidebar = [ } ] }, + { + text: "Community Guides", + collapsed: true, + items: [ + { + text: "Ente via Tailscale", + link: "/self-hosting/guides/tailscale", + }, + ], + }, { text: "Troubleshooting", collapsed: true, @@ -321,10 +331,6 @@ export const sidebar = [ text: "General", link: "/self-hosting/troubleshooting/misc", }, - { - text: "Bucket CORS", - link: "/self-hosting/troubleshooting/bucket-cors", - }, { text: "Uploads", link: "/self-hosting/troubleshooting/uploads", @@ -335,24 +341,6 @@ export const sidebar = [ }, ], }, - { - text: "Community Guides", - collapsed: true, - items: [ - { - text: "Ente via Tailscale", - link: "/self-hosting/guides/tailscale", - }, - { - text: "Ente with External S3", - link: "/self-hosting/guides/external-s3", - }, - ], - }, - { - text: "FAQ", - link: "/self-hosting/faq/", - } ], }, ]; diff --git a/docs/docs/self-hosting/install/defaults.md b/docs/docs/self-hosting/administration/accounts.md similarity index 100% rename from docs/docs/self-hosting/install/defaults.md rename to docs/docs/self-hosting/administration/accounts.md diff --git a/docs/docs/self-hosting/administration/configuring-s3.md b/docs/docs/self-hosting/administration/configuring-s3.md deleted file mode 100644 index e9cb3ebb26..0000000000 --- a/docs/docs/self-hosting/administration/configuring-s3.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Configuring S3 buckets -description: - Configure S3 endpoints to fix upload errors or use your self hosted ente - from outside localhost ---- - -# Configuring S3 - -## Replication - -> [!IMPORTANT] -> -> As of now, replication works only if all the 3 storage buckets are configured (2 hot and 1 cold storage). -> -> For more information, check this -> [discussion](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970) -> and our article on ensuring [reliability](https://ente.io/reliability/). - -In a self hosted Ente instance replication is turned off by default. When -replication is turned off, only the first bucket (`b2-eu-cen`) is used, and the -other two are ignored. Only the names here are specifically fixed, but in the -configuration body you can put any other keys. - -Use the `s3.hot_storage.primary` option if you'd like to set one of the other -predefined buckets as the primary bucket. - -## SSL Configuration - -> [!NOTE] -> -> If you need to configure SSL, you'll need to turn off `s3.are_local_buckets` -> (which disables SSL in the default starter compose template). - -Disabling `s3.are_local_buckets` also switches to the subdomain style URLs for -the buckets. However, not all S3 providers support these. In particular, MinIO -does not work with these in default configuration. So in such cases you'll also -need to enable `s3.use_path_style_urls`. - -## Summary - -Set the S3 bucket `endpoint` in `credentials.yaml` to a `yourserverip:3200` or -some such IP / hostname that is accessible from both where you are running the -Ente clients (e.g. the mobile app) and also from within the Docker compose -cluster. \ No newline at end of file diff --git a/docs/docs/self-hosting/administration/museum.md b/docs/docs/self-hosting/administration/museum.md index 998e7ad4b6..3837bbad1b 100644 --- a/docs/docs/self-hosting/administration/museum.md +++ b/docs/docs/self-hosting/administration/museum.md @@ -53,7 +53,6 @@ apps: public-albums: https://albums.myente.xyz cast: https://cast.myente.xyz accounts: https://accounts.myente.xyz - family: https://family.myente.xyz ``` > [!IMPORTANT] By default, all the values redirect to our publicly hosted @@ -70,4 +69,4 @@ stop all the Docker containers with `docker compose down` and restart them with Similarly, you can use the default [`local.yaml`](https://github.com/ente-io/ente/tree/main/server/configurations/local.yaml) as a reference for building a functioning `museum.yaml` for many other -functionalities like SMTP, Discord notifications, Hardcoded-OTTs, etc. \ No newline at end of file +functionalities like SMTP, Hardcoded-OTTs, etc. \ No newline at end of file diff --git a/docs/docs/self-hosting/administration/object-storage.md b/docs/docs/self-hosting/administration/object-storage.md new file mode 100644 index 0000000000..ffb7d6bc0a --- /dev/null +++ b/docs/docs/self-hosting/administration/object-storage.md @@ -0,0 +1,85 @@ +--- +title: Configuring Object Storage +description: + Configure Object Storage for storing files along with some troubleshooting tips +--- + +# Configuring Object Storage + +## Replication + +> [!IMPORTANT] +> +> As of now, replication works only if all the 3 storage buckets are configured (2 hot and 1 cold storage). +> +> For more information, check this +> [discussion](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970) +> and our article on ensuring [reliability](https://ente.io/reliability/). + +In a self hosted Ente instance replication is turned off by default. When +replication is turned off, only the first bucket (`b2-eu-cen`) is used, and the +other two are ignored. Only the names here are specifically fixed, but in the +configuration body you can put any other keys. + +Use the `s3.hot_storage.primary` option if you'd like to set one of the other +predefined buckets as the primary bucket. + +## SSL Configuration + +> [!NOTE] +> +> If you need to configure SSL, you'll need to turn off `s3.are_local_buckets` +> (which disables SSL in the default starter compose template). + +Disabling `s3.are_local_buckets` also switches to the subdomain style URLs for +the buckets. However, not all S3 providers support these. In particular, MinIO +does not work with these in default configuration. So in such cases you'll also +need to enable `s3.use_path_style_urls`. + +# Fix potential CORS issues with your Buckets + +## For AWS S3 + +If you cannot upload a photo due to a CORS issue, you need to fix the CORS +configuration of your bucket. + +Create a `cors.json` file with the following content: + +```json +{ + "CORSRules": [ + { + "AllowedOrigins": ["*"], + "AllowedHeaders": ["*"], + "AllowedMethods": ["GET", "HEAD", "POST", "PUT", "DELETE"], + "MaxAgeSeconds": 3000, + "ExposeHeaders": ["Etag"] + } + ] +} +``` + +You may want to change the `AllowedOrigins` to a more restrictive value. + +If you are using AWS for S3, you can execute the below command to get rid of +CORS. Make sure to enter the right path for the `cors.json` file. + +```bash +aws s3api put-bucket-cors --bucket YOUR_S3_BUCKET --cors-configuration /path/to/cors.json +``` + +## For MinIO + +Checkout the `mc set alias` document to configure alias for your +instance and bucket. After this you will be prompted for your AccessKey and +Secret, which is your username and password. + +To set the `AllowedOrigins` Header, you can use the +following command to do so. + +```sh +mc admin config set / api cors_allow_origin="*" +``` + +You can create also `.csv` file and dump the list of origins you would like to +allow and replace the `*` with `path` to the CSV file. diff --git a/docs/docs/self-hosting/administration/reverse-proxy.md b/docs/docs/self-hosting/administration/reverse-proxy.md index 97ef7da570..5c931d7cbb 100644 --- a/docs/docs/self-hosting/administration/reverse-proxy.md +++ b/docs/docs/self-hosting/administration/reverse-proxy.md @@ -1,53 +1,102 @@ --- Title: Configuring Reverse Proxy -Description: configuring reverse proxy for Museum and other endpoints +Description: Configuring reverse proxy for Museum and other services --- # Reverse proxy -Ente's server (museum) runs on port `:8080`, web app on `:3000` and the other -apps from ports `3001-3004`. - -We highly recommend using HTTPS for Museum (`8080`). For security reasons museum +We highly recommend using HTTPS for Museum (`8080`). For security reasons, Museum will not accept incoming HTTP traffic. -Head over to your DNS management dashboard and setup the appropriate records for -the endpoints. Mostly, `A` or `AAAA` records targeting towards your server's IP -address should be sufficient. The rest of the work will be done by the web -server on your machine. + +## Pre-requisites + +1. **Reverse Proxy:** We recommend using Caddy for simplicity of +configuration and automatic certificate generation and management, +although you can use other alternatives such as NGINX, Traefik, etc. + + Install Caddy using the following command on Debian/Ubuntu-based systems: + ``` shell + sudo apt install caddy + ``` + + Start the service, enable it to start upon system boot and reload when configuration + has changed. + + ``` shell + sudo systemctl start caddy + + sudo systemctl enable caddy + + sudo systemctl reload caddy + ``` + +## Step 1: Configure A or AAAA records + +Set up the appropriate records for the endpoints in your DNS +management dashboard (usually associated with your domain registrar). + +`A` or `AAAA` records targeting towards your server's IP address should +be sufficient. ![cloudflare](/cloudflare.png) -### Caddy +## Step 2: Configure reverse proxy -Setting up a reverse proxy with Caddy is easy and straightforward. +Once Caddy is installed on system, a `Caddyfile` is created on the path +`/etc/caddy/`. Edit `/etc/caddy/Caddyfile` to configure reverse proxies. -Firstly, install Caddy on your server. - -```sh -sudo apt install caddy -``` - -After the installation is complete, a `Caddyfile` is created on the path -`/etc/caddy/`. This file is used to configure reverse proxies among other -things. +Here is a ready-to-use configuration that can be used with your own domain. ```groovy -# Caddyfile - myente.xyz is just an example. +# yourdomain.tld is an example. Replace it with your own domain -api.myente.xyz { +# For Museum +api.ente.yourdomain.tld { reverse_proxy http://localhost:8080 } -ente.myente.xyz { +# For Ente Photos web app +web.ente.yourdomain.tld { reverse_proxy http://localhost:3000 } -#...and so on for other endpoints +# For Ente Accounts web app +accounts.ente.yourdomain.tld { + reverse_proxy http://localhost:3001 +} + +# For Ente Albums web app +albums.ente.yourdomain.tld { + reverse_proxy http://localhost:3002 +} + +# For Ente Auth web app +auth.ente.yourdomain.tld { + reverse_proxy http://localhost:3003 +} + +# For Ente Cast web app +cast.ente.yourdomain.tld { + reverse_proxy http://localhost:3004 +} + +# For Museum +api.ente.yourdomain.tld { + reverse_proxy http://localhost:8080 +} ``` -After a hard-reload, the Ente Photos web app should be up on -https://ente.myente.xyz. +## Step 3: Start reverse proxy -If you are using a different tool for reverse proxy (like nginx), please check -out their documentation. +Reload Caddy for changes to take effect + +``` shell +sudo systemctl caddy reload +``` + +Ente Photos web app should be up on https://web.ente.yourdomain.tld. + +> [!TIP] +> If you are using other reverse proxy servers such as NGINX, +> Traefik, etc., please check out their documentation. diff --git a/docs/docs/self-hosting/administration/security.md b/docs/docs/self-hosting/administration/security.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/docs/self-hosting/administration/selfhost-cli.md b/docs/docs/self-hosting/administration/selfhost-cli.md index 9e5d312290..f5ff00bee6 100644 --- a/docs/docs/self-hosting/administration/selfhost-cli.md +++ b/docs/docs/self-hosting/administration/selfhost-cli.md @@ -23,8 +23,8 @@ and subsequently increase the [storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md) using the CLI. -For the admin actions, you first need to whitelist admin users. You can create -`server/museum.yaml`, and whitelist add the admin userID `internal.admins`. See +For administrative actions, you first need to whitelist admin users. +You can create `server/museum.yaml`, and whitelist add the admin userID `internal.admins`. See [local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml#L211C1-L232C1) in the server source code for details about how to define this. diff --git a/docs/docs/self-hosting/faq/index.md b/docs/docs/self-hosting/faq/index.md deleted file mode 100644 index eedd1fbd86..0000000000 --- a/docs/docs/self-hosting/faq/index.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: FAQ - Self hosting -description: Frequently asked questions about self hosting Ente ---- - -# Frequently Asked Questions - -### Do Ente Photos and Ente Auth share the same backend? - -Yes. The apps share the same backend, the same database and the same object -storage namespace. The same user account works for both of them. - -### Can I just self host Ente Auth? - -Yes, if you wish, you can self-host the server and use it only for the 2FA auth -app. The starter Docker compose will work fine for either Photos or Auth (or -both!). - -> You currently don't need to configure the S3 object storage (e.g. minio -> containers) if you're only using your self hosted Ente instance for auth. - -### Can I use the server with _X_ as the object storage? - -Yes. As long as whatever X you're using provides an S3 compatible API, you can -use it as the underlying object storage. For example, the starter self-hosting -Docker compose file we offer uses MinIO, and on our production deployments we -use Backblaze/Wasabi/Scaleway. But that's not the full list - as long as the -service you intend to use has a S3 compatible API, it can be used. - -### How do I increase storage space for users on my self hosted instance? - -See the [guide for administering your server](/self-hosting/guides/admin). In -particular, you can use the `ente admin update-subscription` CLI command to -increase the -[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md) -of accounts on your instance. - -### How can I become an admin on my self hosted instance? - -The first user you create on your instance is treated as an admin. - -If you want, you can modify this behaviour by providing an explicit list of -admins in the [configuration](/self-hosting/guides/admin#becoming-an-admin). - -### Can I disable registration of new accounts on my self hosted instance? - -Yes. See `internal.disable-registration` in local.yaml. diff --git a/docs/docs/self-hosting/guides/systemd.md b/docs/docs/self-hosting/guides/systemd.md new file mode 100644 index 0000000000..ac6e0e4296 --- /dev/null +++ b/docs/docs/self-hosting/guides/systemd.md @@ -0,0 +1,28 @@ +--- +title: Running Ente using systemd - Self-hosting +description: Running Ente services (Museum and web application) via systemd +--- + +# Running Ente using `systemd` + +On Linux distributions using `systemd` as initialization system, Ente can be configured to run as a background service, upon system startup by using service files. + +## Museum as a background service + +Please check the below links if you want to run Museum as a service, both of +them are battle tested. + +1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323) +2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4) + +Once you are done with setting and running Museum, all you are left to do is run +the web app and reverse_proxy it with a webserver. You can check the following + resources for Deploying your web app. + +1. [Running Ente Web app as a systemd Service](https://gist.github.com/mngshm/72e32bd483c2129621ed0d74412492fd) + +## References + +1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323) +2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4) +3. [Running Ente Web app as a systemd Service](https://gist.github.com/mngshm/72e32bd483c2129621ed0d74412492fd) diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md index 4c170fe150..e8ff85a6a1 100644 --- a/docs/docs/self-hosting/index.md +++ b/docs/docs/self-hosting/index.md @@ -6,7 +6,7 @@ description: Getting started with self-hosting Ente # Get Started If you're looking to spin up Ente on your server for preserving those -sweet memories, you are in the right place! +sweet memories or using Auth for 2FA codes, you are in the right place! Our entire source code ([including the server](https://ente.io/blog/open-sourcing-our-server/)) is open source. This is the same code we use on production. @@ -97,7 +97,6 @@ You can import your pictures from Google Takeout or from other services to Ente You can import your codes from other authenticator providers to Ente Auth. Check out the [migration guide](/auth/migration/) for more information. - ## Queries? If you need support, please ask on our community diff --git a/docs/docs/self-hosting/install/compose.md b/docs/docs/self-hosting/install/compose.md index 4ac1cd724b..19e96875f6 100644 --- a/docs/docs/self-hosting/install/compose.md +++ b/docs/docs/self-hosting/install/compose.md @@ -7,9 +7,14 @@ description: Running Ente with Docker Compose from source If you wish to run Ente via Docker Compose from source, do the following: +## Requirements + +Check out the [requirements](/self-hosting/install/requirements) page to get +started. + ## Step 1: Clone the repository -Clone the repository to a prefered directory. Change into the `server/config` directory inside the cloned repository, where the compose file for running the cluster is present. +Clone the repository. Change into the `server/config` directory of the repository, where the Compose file for running the cluster is present. Run the following command for the same: @@ -37,10 +42,14 @@ Change the values present in `.env` file along with `museum.yaml` file according ## Step 3: Start the cluster -Now you can start the cluster by running the following command: +Start the cluster by running the following command: ```sh docker compose up --build ``` This builds Museum and web applications based on the Dockerfile and starts the containers needed for Ente. + +::: tip +Check out [post-installation steps](/self-hosting/install/post-install) for further usage. +::: \ No newline at end of file diff --git a/docs/docs/self-hosting/install/config-file.md b/docs/docs/self-hosting/install/config-file.md index 975b25772c..5b48c93a31 100644 --- a/docs/docs/self-hosting/install/config-file.md +++ b/docs/docs/self-hosting/install/config-file.md @@ -5,10 +5,132 @@ description: museum.yaml" --- - # Configuration File -Ente's server, Museum, uses YAML-based configuration file that is used for handling database -connectivity, bucket configuration, admin user whitelisting, etc. +Museum uses YAML-based configuration file that is used for handling database +connectivity, bucket configuration, internal configuration, etc. -Self-hosted clusters generally use `museum.yaml` file for reading configuration specifications. +If the `ENVIRONMENT` environment variable is set, a corresponding file from +`configurations/` is loaded, by default, `local.yaml` configuration is loaded. + +If `credentials-file` is defined and found, it overrides the defaults. + +Self-hosted clusters generally use `museum.yaml` file for reading configuration +specifications. + +All configuration values can be overridden via environment variables using the +`ENTE_` prefix and replacing dots (`.`) or hyphens (`-`) with underscores (`_`). + +The configuration variables declared in `museum.yaml` are read by Museum. +Additionally, environment variables prefixed by `ENTE_` are read by Museum and +used internally in same manner as configuration variables. + +For example, `s3.b2-eu-cen` in `museum.yaml` and `ENTE_S3_B2_EU_CEN` declared as +environment variable are the same and `ENTE_S3_B2_EU_CEN` overrides +`s3.b2-eu-cen`. + +## General Settings + +| Variable | Description | Default | +| ------------------ | --------------------------------------------------------- | ------------------ | +| `credentials-file` | Path to optional credentials override file | `credentials.yaml` | +| `credentials-dir` | Directory to look for credentials (TLS, service accounts) | `credentials/` | +| `log-file` | Log output path. Required in production. | `""` | + +## HTTP + +| Variable | Description | Default | +| -------------- | --------------------------------- | ------- | +| `http.use-tls` | Enables TLS and binds to port 443 | `false` | + +## App Endpoints + +| Variable | Description | Default | +| -------------------- | ------------------------------------------------------- | -------------------------- | +| `apps.public-albums` | Albums app base endpoint for public sharing | `https://albums.ente.io` | +| `apps.cast` | Cast app base endpoint | `https://cast.ente.io` | +| `apps.accounts` | Accounts app base endpoint (used for passkey-based 2FA) | `https://accounts.ente.io` | + +## Database + +| Variable | Description | Default | +| ------------- | -------------------------- | ----------- | +| `db.host` | DB hostname | `localhost` | +| `db.port` | DB port | `5432` | +| `db.name` | Database name | `ente_db` | +| `db.sslmode` | SSL mode for DB connection | `disable` | +| `db.user` | Database username | | +| `db.password` | Database password | | +| `db.extra` | Additional DSN parameters | | + +## Object Storage + +| Variable | Description | Default | +| -------------------------------------- | -------------------------------------------- | ------- | +| `s3.b2-eu-cen` | Primary hot storage S3 config | | +| `s3.wasabi-eu-central-2-v3.compliance` | Whether to disable compliance lock on delete | `true` | +| `s3.scw-eu-fr-v3` | Optional secondary S3 config | | +| `s3.wasabi-eu-central-2-derived` | Derived data storage | | +| `s3.are_local_buckets` | Use local MinIO-compatible storage | `false` | +| `s3.use_path_style_urls` | Enable path-style URLs for MinIO | `false` | + +## Encryption Keys + +| Variable | Description | Default | +| ---------------- | -------------------------------------- | ----------- | +| `key.encryption` | Key for encrypting user emails | Pre-defined | +| `key.hash` | Hash key for verifying email integrity | Pre-defined | + +## JWT + +| Variable | Description | Default | +| ------------ | ----------------------- | ---------- | +| `jwt.secret` | Secret for signing JWTs | Predefined | + +## Email + +| Variable | Description | Default | +| ------------------ | ---------------------------- | ------- | +| `smtp.host` | SMTP server host | | +| `smtp.port` | SMTP server port | | +| `smtp.username` | SMTP auth username | | +| `smtp.password` | SMTP auth password | | +| `smtp.email` | Sender email address | | +| `smtp.sender-name` | Custom name for email sender | | +| `transmail.key` | Zeptomail API key | | + +## WebAuthn Passkey Support + +| Variable | Description | Default | +| -------------------- | ---------------------------- | --------------------------- | +| `webauthn.rpid` | Relying Party ID | `localhost` | +| `webauthn.rporigins` | Allowed origins for WebAuthn | `["http://localhost:3001"]` | + +## Internal + +| Variable | Description | Default | +| ------------------------------- | --------------------------------------------- | ------- | +| `internal.silent` | Suppress external effects (e.g. email alerts) | `false` | +| `internal.health-check-url` | External healthcheck URL | | +| `internal.hardcoded-ott` | Predefined OTPs for testing | | +| `internal.admins` | List of admin user IDs | `[]` | +| `internal.admin` | Single admin user ID | | +| `internal.disable-registration` | Disable user registration | `false` | + +## Replication + +| Variable | Description | Default | +| -------------------------- | ------------------------------------ | ----------------- | +| `replication.enabled` | Enable cross-datacenter replication | `false` | +| `replication.worker-url` | Cloudflare Worker for replication | | +| `replication.worker-count` | Number of goroutines for replication | `6` | +| `replication.tmp-storage` | Temp directory for replication | `tmp/replication` | + +## Background Jobs + +| Variable | Description | Default | +| --------------------------------------------- | --------------------------------------- | ------- | +| `jobs.cron.skip` | Skip all cron jobs | `false` | +| `jobs.remove-unreported-objects.worker-count` | Workers for removing unreported objects | `1` | +| `jobs.clear-orphan-objects.enabled` | Enable orphan cleanup | `false` | +| `jobs.clear-orphan-objects.prefix` | Prefix filter for orphaned objects | | diff --git a/docs/docs/self-hosting/install/env-var.md b/docs/docs/self-hosting/install/env-var.md index b79a53f6d7..ee60836ab4 100644 --- a/docs/docs/self-hosting/install/env-var.md +++ b/docs/docs/self-hosting/install/env-var.md @@ -7,8 +7,7 @@ description: # Environment Variables and Defaults -The environment variables needed for running Ente, configuration variables -present in Museum's configuration file and the default configuration are +The environment variables needed for running Ente and the default configuration are documented below: ## Environment Variables @@ -19,15 +18,15 @@ and port mappings of the web apps. Here's the list of environment variables that is used by the cluster: -| Service | Environment Variable | Description | Default Value | -| ---------- | --------------------- | ------------------------------------------------ | --------------------------------- | -| `web` | `ENTE_API_ORIGIN` | API Endpoint for Ente's API (Museum) | http://localhost:8080 | -| `web` | `ENTE_ALBUMS_ORIGIN` | Base URL for Ente Album, used for public sharing | http://localhost:3002 | -| `postgres` | `POSTGRES_USER` | Username for PostgreSQL database | pguser | -| `postgres` | `POSTGRES_DB` | Name of database for use with Ente | ente_db | -| `postgres` | `POSTGRES_PASSWORD` | Password for PostgreSQL database's user | Randomly generated for quickstart | -| `minio` | `MINIO_ROOT_USER` | Username for MinIO | Randomly generated for quickstart | -| `minio` | `MINIO_ROOT_PASSWORD` | Password for MinIO | Randomly generated for quickstart | +| Service | Environment Variable | Description | Default Value | +| ---------- | --------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------- | +| `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 | +| `postgres` | `POSTGRES_USER` | Username for PostgreSQL database | pguser | +| `postgres` | `POSTGRES_DB` | Name of database for use with Ente | ente_db | +| `postgres` | `POSTGRES_PASSWORD` | Password for PostgreSQL database's user | Randomly generated (quickstart) | +| `minio` | `MINIO_ROOT_USER` | Username for MinIO | Randomly generated (quickstart) | +| `minio` | `MINIO_ROOT_PASSWORD` | Password for MinIO | Randomly generated (quickstart) | ## Default Configuration @@ -37,16 +36,16 @@ which is documented below to understand its behavior: ### Ports The below format is according to how ports are mapped in Docker when using -quickstart script. The mapping is of the format `- :` +quickstart script. The mapping is of the format `:` in `ports` in compose file. -| Service | Type | Host Port | Container Port | -| ---------------------------------- | -------- | --------- | -------------- | -| Museum | Server | 8080 | 8080 | -| Ente Photos | Web | 3000 | 3000 | -| Ente Accounts | Web | 3001 | 3001 | -| Ente Albums | Web | 3002 | 3002 | -| [Ente Auth](https://ente.io/auth/) | Web | 3003 | 3003 | -| [Ente Cast](http://ente.io/cast) | Web | 3004 | 3004 | -| MinIO | S3 | 3200 | 3200 | -| PostgreSQL | Database | | 5432 | +| Service | Type | Host Port | Container Port | +| ------------------------------------------------------- | -------- | --------- | -------------- | +| Museum | Server | 8080 | 8080 | +| Ente Photos | Web | 3000 | 3000 | +| Ente Accounts | Web | 3001 | 3001 | +| Ente Albums | Web | 3002 | 3002 | +| [Ente Auth](https://ente.io/auth/) | Web | 3003 | 3003 | +| [Ente Cast](https://help.ente.io/photos/features/cast/) | Web | 3004 | 3004 | +| MinIO | S3 | 3200 | 3200 | +| PostgreSQL | Database | | 5432 | diff --git a/docs/docs/self-hosting/install/post-install/index.md b/docs/docs/self-hosting/install/post-install/index.md index a3d1d4f703..32eabd0072 100644 --- a/docs/docs/self-hosting/install/post-install/index.md +++ b/docs/docs/self-hosting/install/post-install/index.md @@ -9,7 +9,7 @@ A list of steps that should be done after installing Ente are described below: ## Step 1: Creating first user -The first user to be created will be treated as an admin user. +The first user (and the only user) to be created will be treated as an admin user by default. Once Ente is up and running, the Ente Photos web app will be accessible on `http://localhost:3000`. Open this URL in your browser and proceed with creating @@ -28,10 +28,11 @@ sudo docker compose logs ![otp](/otp.png) +## Step 2: Download mobile and desktop app + ## Step 2: Configure apps to use your server -You can modify various Ente client apps and CLI to connect to a self hosted -custom server endpoint. +You can modify Ente mobile apps and CLI to connect to your server. ### Mobile @@ -43,7 +44,7 @@ configure the endpoint the app should be connecting to. ![Setting a custom server on the onboarding screen](custom-server.png) -### Desktop and web +### Desktop Same as the mobile app, you can tap 7 times on the onboarding screen to configure the endpoint the app should connect to. @@ -55,21 +56,6 @@ apps](web-dev-settings.png){width=400px} -This works on both the desktop app and web app (if you deploy on your own). - -To make it easier to identify when a custom server is being used, app will -thereafter show the endpoint in use (if not Ente's production server) at the -bottom of the login prompt: - -![Custom server indicator on the onboarding screen](web-custom-endpoint-indicator.png) - -Similarly, it'll be shown at other screens during the login flow. After login, -you can also see it at the bottom of the sidebar. - -Note that the custom server configured this way is cleared when you reset the -state during logout. In particular, the app also does a reset when you press the -change email button during the login flow. - ## Step 3: Configure Ente CLI > [!NOTE] diff --git a/docs/docs/self-hosting/install/quickstart.md b/docs/docs/self-hosting/install/quickstart.md index cff6e3c932..53e62898a6 100644 --- a/docs/docs/self-hosting/install/quickstart.md +++ b/docs/docs/self-hosting/install/quickstart.md @@ -3,10 +3,10 @@ title: Quickstart Script (Recommended) - Self-hosting description: Self-hosting Ente with quickstart script --- -# Quickstart +# Quickstart Script (Recommended) We provide a quickstart script which can be used for self-hosting Ente on your -machine in less than 5 minutes. +machine in less than a minute. ## Requirements @@ -25,6 +25,11 @@ The above `curl` command does the following: 1. Creates a directory `./my-ente` in working directory. 2. Starts the containers required to run Ente upon prompting. -You should be able to access the web application at [`http://localhost:3000`](http://localhost:3000) or [`http://:3000`](http://:3000) +You should be able to access the web application at [http://localhost:3000](http://localhost:3000) or [http://machine-ip:3000](http://:3000) -The data pertaining to be used by Museum is stored in `./data` folder inside `my-ente` directory, which contains extra configuration files that is to be used (billing configuration, push notification credentials, etc.) \ No newline at end of file +The data accessed by Museum is stored in `./data` folder inside `my-ente` directory. +It contains extra configuration files that is to be used (push notification credentials, etc.) + +::: tip +Check out [post-installations steps](/self-hosting/install/post-install) for further usage. +::: \ No newline at end of file diff --git a/docs/docs/self-hosting/install/requirements.md b/docs/docs/self-hosting/install/requirements.md index d0ac50b18b..822d8b1c3e 100644 --- a/docs/docs/self-hosting/install/requirements.md +++ b/docs/docs/self-hosting/install/requirements.md @@ -24,7 +24,7 @@ lightweight Go binary, since most of the intensive computational tasks are done > [!NOTE] > -> Ente requires **Docker Compose version 2.25 or higher**. +> Ente requires **Docker Compose version 2.30 or higher**. > > Furthermore, Ente uses the command `docker compose`, `docker-compose` is no > longer supported. diff --git a/docs/docs/self-hosting/install/without-docker.md b/docs/docs/self-hosting/install/without-docker.md index 826b39bb31..09f8c693fb 100644 --- a/docs/docs/self-hosting/install/without-docker.md +++ b/docs/docs/self-hosting/install/without-docker.md @@ -7,7 +7,7 @@ description: Installing and setting up Ente without Docker If you wish to run Ente from source without using Docker, follow the steps described below: -## Pre-requisites +## Requirements 1. **Go:** Install Go on your system. This is needed for building Museum (Ente's server) @@ -26,57 +26,170 @@ If you wish to run Ente from source without using Docker, follow the steps descr sudo apt install libsodium23 libsodium-dev ``` + Start the database using `systemd` automatically when the system starts. + ``` shell + sudo systemctl enable postgresql + sudo systemctl start postgresql + ``` + + Ensure the database is running using + + ``` shell + sudo systemctl status postgresql + ``` 3. **`pkg-config`:** Install `pkg-config` for dependency handling. ``` shell sudo apt install pkg-config ``` +4. **yarn, npm and Node.js:** Needed for building the web application. -Start the database using `systemd` automatically when the system starts. -``` shell -sudo systemctl enable postgresql -sudo systemctl start postgresql -``` + Install npm and Node using your package manager. -Ensure the database is running using + ``` shell + sudo apt install npm nodejs + ``` + + Install yarn by following the [official documentation](https://yarnpkg.com/getting-started/install) + +5. **Git:** Needed for cloning the repository and pulling in latest changes + +6. **Caddy:** Used for setting reverse proxy and file servers + +7. **Object Storage:** Ensure you have an object storage configured for usage, + needed for storing files. You can choose to run MinIO or Garage locally + without Docker, however, an external bucket will be reliable and suited + for long-term storage. + +## Step 1: Clone the repository + +Start by cloning Ente's repository from GitHub to your local machine. ``` shell -sudo systemctl status postgresql -``` - -### Create user - -```sh -sudo useradd postgres -``` - -## Start Museum - -Start by cloning ente to your system. - -```sh git clone https://github.com/ente-io/ente ``` -```sh -export ENTE_DB_USER=postgres -cd ente/server -go run cmd/museum/main.go -``` +## Step 2: Configure Museum (Ente's server) -You can also add the export line to your shell's RC file, to avoid exporting the environment variable every time. +1. Install all the needed dependencies for the server. + ``` shell + # Change into server directory, where the source code for Museum is + # present inside the repo + cd ente/server -## Museum as a background service + # Install the needed dependencies + go mod tidy + ``` -Please check the below links if you want to run Museum as a service, both of -them are battle tested. +2. Build the server. The server binary should be available as `./main` +relative to `server` directory -1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323) -2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4) + ``` shell + go build cmd/museum/main.go + ``` -Once you are done with setting and running Museum, all you are left to do is run -the web app and reverse_proxy it with a webserver. You can check the following -resources for Deploying your web app. +3. Create `museum.yaml` file inside `server` for configuring the needed variables. + You can copy the templated configuration file for editing with ease. -1. [Hosting the Web App](https://help.ente.io/self-hosting/guides/web-app). -2. [Running Ente Web app as a systemd Service](https://gist.github.com/mngshm/72e32bd483c2129621ed0d74412492fd) + ``` shell + cp config/example.yaml ./museum.yaml + ``` + +4. Run the server + + ``` shell + ./main + ``` + + Museum should be accessible at `http://localhost:8080` + +## Step 3: Configure Web Application + +1. Install the dependencies for web application. Enable corepack if prompted. + + ``` shell + # Change into web directory, this is where all the applications + # will be managed and built + cd web + + # Install dependencies + yarn install + ``` + +2. Configure the environment variables in your corresponding shell's configuration file + (`.bashrc`, `.zshrc`) + ``` shell + # Replace this with actual endpoint for Museum + export NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 + # Replace this with actual endpoint for Albums + export NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=http://localhost:3002 + ``` +3. Build the needed applications (Photos, Accounts, Auth, Cast) as per your needs: + ```shell + # These commands are executed inside web directory + # Build photos. Build output to be served is present at apps/photos/out + yarn build + + # Build accounts. Build output to be served is present at apps/accounts/out + yarn build:accounts + + # Build auth. Build output to be served is present at apps/auth/out + yarn build:auth + + # Build cast. Build output to be served is present at apps/cast/out + yarn build:cast + ``` + +4. Copy the output files to `/var/www/ente/apps` for easier management. + ``` shell + mkdir -p /var/www/ente/apps + + # Photos + sudo cp -r apps/photos/out /var/www/ente/apps/photos + # Accounts + sudo cp -r apps/accounts/out /var/www/ente/apps/accounts + # Auth + sudo cp -r apps/auth/out /var/www/ente/apps/auth + # Cast + sudo cp -r apps/cast/out /var/www/ente/apps/cast + ``` + +4. Set up file server using Caddy by editing `Caddyfile`, present at `/etc/caddy/Caddyfile`. + ``` groovy + # Replace the ports with domain names if you have subdomains configured and need HTTPS + :3000 { + root * /var/www/ente/apps/out/photos + file_server + try_files {path} {path}.html /index.html + } + + :3001 { + root * /var/www/ente/apps/out/accounts + file_server + try_files {path} {path}.html /index.html + } + + :3002 { + root * /var/www/ente/apps/out/photos + file_server + try_files {path} {path}.html /index.html + } + + :3003 { + root * /var/www/ente/apps/out/auth + file_server + try_files {path} {path}.html /index.html + } + + :3004 { + root * /var/www/ente/apps/out/cast + file_server + try_files {path} {path}.html /index.html + } + ``` + + The web application for Ente Photos should be accessible at http://localhost:3000, check out the [default ports](/self-hosting/install/env-var#ports) for more information. + +::: tip +Check out [post-installation steps](/self-hosting/install/post-install) for further usage. +::: \ No newline at end of file diff --git a/docs/docs/self-hosting/troubleshooting/bucket-cors.md b/docs/docs/self-hosting/troubleshooting/bucket-cors.md deleted file mode 100644 index 8bab1f7012..0000000000 --- a/docs/docs/self-hosting/troubleshooting/bucket-cors.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Bucket CORS -description: Troubleshooting CORS issues with S3 Buckets ---- - -# Fix potential CORS issues with your Buckets - -## For AWS S3 - -If you cannot upload a photo due to a CORS issue, you need to fix the CORS -configuration of your bucket. - -Create a `cors.json` file with the following content: - -```json -{ - "CORSRules": [ - { - "AllowedOrigins": ["*"], - "AllowedHeaders": ["*"], - "AllowedMethods": ["GET", "HEAD", "POST", "PUT", "DELETE"], - "MaxAgeSeconds": 3000, - "ExposeHeaders": ["Etag"] - } - ] -} -``` - -You may want to change the `AllowedOrigins` to a more restrictive value. - -If you are using AWS for S3, you can execute the below command to get rid of -CORS. Make sure to enter the right path for the `cors.json` file. - -```bash -aws s3api put-bucket-cors --bucket YOUR_S3_BUCKET --cors-configuration /path/to/cors.json -``` - -## For Self-hosted Minio Instance - -::: warning - -- MinIO does not support bucket CORS in the community edition which is used by - default. For more information, check - [this discussion](https://github.com/minio/minio/discussions/20841). However, - global CORS configuration is possible. -- MinIO does not take JSON CORS file as the input, instead you will have to - build a CORS.xml file or just convert the above `cors.json` to XML. - -::: - -A minor requirement here is the tool `mc` for managing buckets via command line -interface. Checkout the `mc set alias` document to configure alias for your -instance and bucket. After this you will be prompted for your AccessKey and -Secret, which is your username and password. - -```sh -mc cors set // api cors_allow_origin="*" -``` - -You can create also `.csv` file and dump the list of origins you would like to -allow and replace the `*` with `path` to the CSV file. - -Now, uploads should be working fine. diff --git a/docs/docs/self-hosting/troubleshooting/keyring.md b/docs/docs/self-hosting/troubleshooting/keyring.md index 56a5807fa5..a521a13c27 100644 --- a/docs/docs/self-hosting/troubleshooting/keyring.md +++ b/docs/docs/self-hosting/troubleshooting/keyring.md @@ -13,9 +13,8 @@ Follow the below steps to run Ente CLI and also avoid keyrings errors. Run: -```sh +``` shell # export the secrets path - export ENTE_CLI_SECRETS_PATH=./ ./ente-cli @@ -33,7 +32,7 @@ Then one of the following: And you are good to go. -## Ref +## References - [Ente CLI Secrets Path](https://www.reddit.com/r/selfhosted/comments/1gc09il/comment/lu2hox2/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button) - [Keyrings](https://man7.org/linux/man-pages/man7/keyrings.7.html) diff --git a/docs/docs/self-hosting/troubleshooting/uploads.md b/docs/docs/self-hosting/troubleshooting/uploads.md index 6cad97f201..fd22da1271 100644 --- a/docs/docs/self-hosting/troubleshooting/uploads.md +++ b/docs/docs/self-hosting/troubleshooting/uploads.md @@ -17,16 +17,6 @@ It is also suggested that the user setups bucket CORS or global CORS on MinIO or any external S3 service provider they are connecting to. To setup bucket CORS, please [read this](/self-hosting/troubleshooting/bucket-cors). -## What is S3 and how is it incorporated in Ente ? - -S3 is an cloud storage protocol made by Amazon (specifically AWS). S3 is -designed to store files and data as objects inside buckets and it is mostly used -for online backups and storing different types of files. - -Ente's Docker setup is shipped with [MinIO](https://min.io/) as its default S3 -provider. MinIO supports the Amazon S3 protocol and leverages your disk storage -to dump all the uploaded files as encrypted object blobs. - ## 403 Forbidden If museum is able to make a network connection to your S3 bucket but uploads are diff --git a/server/.gitignore b/server/.gitignore index 0a1c4aa635..9a150a8838 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -11,4 +11,5 @@ data/ my-ente/ __debug_bin* config/.env -config/museum.yaml \ No newline at end of file +config/museum.yaml +main \ No newline at end of file diff --git a/server/config/example.yaml b/server/config/example.yaml index 5e0f94ece1..61524df6f5 100644 --- a/server/config/example.yaml +++ b/server/config/example.yaml @@ -1,5 +1,13 @@ # Copy this file to museum.yaml in the same directory in which this file is present +# This section is meant for configuration of database. +# Museum uses these values and credentials for connecting +# to the database. +# Set a strong password and if using PostgreSQL Docker container +# provided in Docker Compose file, ensure db.password is same +# as POSTGRES_PASSWORD +# Similarly ensure db.user and db.name are same as POSTGRES_USER and +# POSTGRES_DB respectively db: host: postgres port: 5432 @@ -7,15 +15,27 @@ db: user: pguser password: +# This section is for configuring storage buckets. Omit this section if +# you only intend to use Ente Auth s3: + # Change this to false if enabling SSL are_local_buckets: true + # Only path-style URL works if disabling are_local_buckets with MinIO + use_path_style_urls: true b2-eu-cen: + # You can uncomment the below 2 lines of configuration to + # configure SSL and URL style per bucket. + # If not configured, top-level configuration is used. + # are_local_buckets: true + # use_path_style_urls: true key: secret: endpoint: localhost:3200 region: eu-central-2 bucket: b2-eu-cen wasabi-eu-central-2-v3: + # are_local_buckets: true + # use_path_style_urls: true key: secret: endpoint: localhost:3200 @@ -23,8 +43,34 @@ s3: bucket: wasabi-eu-central-2-v3 compliance: false scw-eu-fr-v3: + # are_local_buckets: true + # use_path_style_urls: true key: secret: endpoint: localhost:3200 region: eu-central-2 - bucket: scw-eu-fr-v3 \ No newline at end of file + bucket: scw-eu-fr-v3 + +# Key used for encrypting customer emails before storing them in DB +# +# To make it easy to get started, some randomly generated (but fixed) values are +# provided here. But if you're really going to be using museum, please generate +# new keys. You can use `go run tools/gen-random-keys/main.go` for that. +# +# Replace values in key and JWT for security +key: + encryption: yvmG/RnzKrbCb9L3mgsmoxXr9H7i2Z4qlbT0mL3ln4w= + hash: KXYiG07wC7GIgvCSdg+WmyWdXDAn6XKYJtp/wkEU7x573+byBRAYtpTP0wwvi8i/4l37uicX1dVTUzwH3sLZyw== +# JWT secrets +jwt: + secret: i2DecQmfGreG6q1vBj5tCokhlN41gcfS2cjOs9Po-u8= + +# Specify the base endpoints for various web apps +apps: + # If you're running a self hosted instance and wish to serve public links, + # set this to the URL where your albums web app is running. + public-albums: http://localhost:3002 + cast: http://localhost:3004 + # Set this to the URL where your accounts web app is running, primarily used for + # passkey based 2FA. + accounts: http://localhost:3001 diff --git a/server/quickstart.sh b/server/quickstart.sh index 74535d437e..a656437917 100755 --- a/server/quickstart.sh +++ b/server/quickstart.sh @@ -159,13 +159,6 @@ printf " \033[1;32mN\033[0m Created \033[1mcompose.yaml\033[0m\n" sleep 1 cat <museum.yaml -key: - encryption: $museum_key - hash: $museum_hash - -jwt: - secret: $museum_jwt_secret - db: host: postgres port: 5432 @@ -194,6 +187,23 @@ s3: endpoint: localhost:3200 region: eu-central-2 bucket: scw-eu-fr-v3 + +# Specify the base endpoints for various web apps +apps: + # If you're running a self hosted instance and wish to serve public links, + # set this to the URL where your albums web app is running. + public-albums: http://localhost:3002 + cast: http://localhost:3004 + # Set this to the URL where your accounts web app is running, primarily used for + # passkey based 2FA. + accounts: http://localhost:3001 + +key: + encryption: $museum_key + hash: $museum_hash + +jwt: + secret: $museum_jwt_secret EOF printf " \033[1;32mT\033[0m Created \033[1mmuseum.yaml\033[0m\n" From bd58becd38554df433f5c93aeffc3e9c03559426 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Fri, 25 Jul 2025 11:39:12 +0530 Subject: [PATCH 14/20] [docs] omit dead links for bucket CORS --- .../self-hosting/administration/backup.md | 9 +- .../self-hosting/administration/museum.md | 2 +- .../administration/reverse-proxy.md | 30 ++++--- .../administration/selfhost-cli.md | 23 ++--- docs/docs/self-hosting/guides/admin.md | 88 ------------------- docs/docs/self-hosting/guides/index.md | 2 +- docs/docs/self-hosting/install/compose.md | 2 +- docs/docs/self-hosting/install/quickstart.md | 2 +- docs/docs/self-hosting/install/upgrading.md | 10 +++ .../self-hosting/install/without-docker.md | 2 +- .../self-hosting/troubleshooting/uploads.md | 2 +- 11 files changed, 50 insertions(+), 122 deletions(-) delete mode 100644 docs/docs/self-hosting/guides/admin.md create mode 100644 docs/docs/self-hosting/install/upgrading.md diff --git a/docs/docs/self-hosting/administration/backup.md b/docs/docs/self-hosting/administration/backup.md index 455468bbf5..3771985741 100644 --- a/docs/docs/self-hosting/administration/backup.md +++ b/docs/docs/self-hosting/administration/backup.md @@ -22,15 +22,15 @@ At the minimum, a functional Ente backend needs three things: 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 +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. +2. For PostgreSQL, the entire data volume needs to be backed up. -3. For object storage, 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 @@ -56,8 +56,7 @@ 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). +your instance. 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 diff --git a/docs/docs/self-hosting/administration/museum.md b/docs/docs/self-hosting/administration/museum.md index 3837bbad1b..b32728a8c6 100644 --- a/docs/docs/self-hosting/administration/museum.md +++ b/docs/docs/self-hosting/administration/museum.md @@ -37,7 +37,7 @@ MinIO uses the port `3200` for API Endpoints and their web app runs over browser. If you face any issues related to uploads then checkout -[Troubleshooting bucket CORS](/self-hosting/troubleshooting/bucket-cors) and +[Troubleshooting bucket CORS] and [Frequently encountered S3 errors]. ## Web apps diff --git a/docs/docs/self-hosting/administration/reverse-proxy.md b/docs/docs/self-hosting/administration/reverse-proxy.md index 5c931d7cbb..ba1426eec1 100644 --- a/docs/docs/self-hosting/administration/reverse-proxy.md +++ b/docs/docs/self-hosting/administration/reverse-proxy.md @@ -5,9 +5,13 @@ Description: Configuring reverse proxy for Museum and other services # Reverse proxy -We highly recommend using HTTPS for Museum (`8080`). For security reasons, Museum -will not accept incoming HTTP traffic. +Configuring reverse proxy is a way to make the service accessible via the public +Internet without exposing multiple ports for various services. +It also allows configuration of HTTPS through SSL certificate management. + +We highly recommend using HTTPS for Museum (Ente's server). For security reasons, Museum +will not accept incoming HTTP traffic. ## Pre-requisites @@ -36,21 +40,22 @@ although you can use other alternatives such as NGINX, Traefik, etc. Set up the appropriate records for the endpoints in your DNS management dashboard (usually associated with your domain registrar). -`A` or `AAAA` records targeting towards your server's IP address should -be sufficient. +`A` or `AAAA` records pointing to your server's IP address are sufficient. + +DNS propagation can take a few minutes to take effect. ![cloudflare](/cloudflare.png) ## Step 2: Configure reverse proxy -Once Caddy is installed on system, a `Caddyfile` is created on the path +After installing Caddy, a `Caddyfile` is created on the path `/etc/caddy/`. Edit `/etc/caddy/Caddyfile` to configure reverse proxies. Here is a ready-to-use configuration that can be used with your own domain. -```groovy -# yourdomain.tld is an example. Replace it with your own domain +> yourdomain.tld is an example. Replace it with your own domain +```groovy # For Museum api.ente.yourdomain.tld { reverse_proxy http://localhost:8080 @@ -80,14 +85,9 @@ auth.ente.yourdomain.tld { cast.ente.yourdomain.tld { reverse_proxy http://localhost:3004 } - -# For Museum -api.ente.yourdomain.tld { - reverse_proxy http://localhost:8080 -} ``` -## Step 3: Start reverse proxy +## Step 3: Reload reverse proxy Reload Caddy for changes to take effect @@ -95,8 +95,12 @@ Reload Caddy for changes to take effect sudo systemctl caddy reload ``` +## Step 4: Verify the setup + Ente Photos web app should be up on https://web.ente.yourdomain.tld. +Museum should be accessible at https://api.ente.yourdomain.tld. + > [!TIP] > If you are using other reverse proxy servers such as NGINX, > Traefik, etc., please check out their documentation. diff --git a/docs/docs/self-hosting/administration/selfhost-cli.md b/docs/docs/self-hosting/administration/selfhost-cli.md index f5ff00bee6..e8ca8612ff 100644 --- a/docs/docs/self-hosting/administration/selfhost-cli.md +++ b/docs/docs/self-hosting/administration/selfhost-cli.md @@ -3,18 +3,21 @@ title: CLI for Self Hosted Instance description: Guide to configuring Ente CLI for Self Hosted Instance --- -## Self Hosting +# Ente CLI for self-hosted instance -If you are self-hosting the server, you can still configure CLI to export data & -perform basic admin actions. +If you are self-hosting, you can configure CLI to export data & +perform basic administrative actions. -To do this, first configure the CLI to point to your server. Define a -config.yaml and put it either in the same directory as CLI binary or path -defined in env variable `ENTE_CLI_CONFIG_DIR` +## Step 1: Configure endpoint -```yaml +To do this, first configure the CLI to use your server's endpoint. + +Define `config.yaml` and place it in `~/.ente/` directory or directory +specified by `ENTE_CLI_CONFIG_DIR` or CLI's directory. + +``` yaml endpoint: - api: "http://localhost:8080" + api: http://localhost:8080 ``` You should be able to @@ -24,7 +27,7 @@ and subsequently increase the using the CLI. For administrative actions, you first need to whitelist admin users. -You can create `server/museum.yaml`, and whitelist add the admin userID `internal.admins`. See +You can create `server/museum.yaml`, and whitelist add the admin user ID `internal.admins`. See [local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml#L211C1-L232C1) in the server source code for details about how to define this. @@ -35,5 +38,5 @@ command to find the user id of any account. ```yaml internal: admins: - # - 1580559962386440 + - 1580559962386440 ``` diff --git a/docs/docs/self-hosting/guides/admin.md b/docs/docs/self-hosting/guides/admin.md deleted file mode 100644 index 41732e22f5..0000000000 --- a/docs/docs/self-hosting/guides/admin.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Server admin -description: Administering your custom self-hosted Ente instance using the CLI ---- - -## Becoming an admin - -By default, the first user (and only the first user) created on the system is -considered as an admin. - -This facility is provided as a convenience for people who are getting started -with self hosting. For more serious deployments, we recommend creating an -explicit whitelist of admins. - -> [!NOTE] -> -> The first user is only treated as the admin if the list of admins in the -> configuration is empty. -> -> Also, if at some point you delete the first user, then you will need to define -> a whitelist to make some other user as the admin if you wish (since the first -> account has been deleted). - -To whitelist the user IDs that can perform admin actions on the server, use the -following steps: - -- Create a `museum.yaml` in the directory where you're starting museum from. For - example, if you're running using `docker compose up`, then this file should be - in the same directory as `compose.yaml` (generally, `server/museum.yaml`). - - > Docker might've created an empty `museum.yaml` _directory_ on your machine - > previously. If so, delete that empty directory and create a new file named - > `museum.yaml`. - -- In this `museum.yaml` we can add overrides over the default configuration. - -For whitelisting the admin userIDs we need to define an `internal.admins`. See -the "internal" section in -[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml) -in the server source code for details about how to define this. - -Here is an example. Suppose we wanted to whitelist a user with ID -`1580559962386440`, we can create the following `museum.yaml` - -```yaml -internal: - admins: - - 1580559962386440 -``` - -You can use -[account list](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_list.md) -command to find the user id of any account. - -# Administering your custom server - -> [!NOTE] For the first user (admin) to perform administrative actions using the -> CLI, their userID must be whitelisted in the `museum.yaml` configuration file -> under `internal.admins`. While the first user is automatically granted admin -> privileges on the server, this additional step is required for CLI operations. - -You can use -[Ente's CLI](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0) to -administer your self hosted server. - -First we need to get your CLI to connect to your custom server. Define a -config.yaml and put it either in the same directory as CLI or path defined in -env variable `ENTE_CLI_CONFIG_PATH` - -```yaml -endpoint: - api: "http://localhost:8080" -``` - -Now you should be able to -[add an account](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_add.md), -and subsequently increase the -[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md) -using the CLI. - -> [!NOTE] -> -> The CLI command to add an account does not create Ente accounts. It only adds -> existing accounts to the list of (existing) accounts that the CLI can use. - -## Backups - -See this [document](/self-hosting/administration/backup). diff --git a/docs/docs/self-hosting/guides/index.md b/docs/docs/self-hosting/guides/index.md index 3925b7e185..407cbe244f 100644 --- a/docs/docs/self-hosting/guides/index.md +++ b/docs/docs/self-hosting/guides/index.md @@ -14,7 +14,7 @@ See the sidebar for existing guides. In particular: [configure custom server]. - For various admin related tasks, e.g. increasing the storage quota on your - self hosted instance, see [administering your custom server](admin). + self hosted instance, see [administering your custom server]. - For configuring your S3 buckets to get the object storage to work from your mobile device or for fixing an upload errors, see diff --git a/docs/docs/self-hosting/install/compose.md b/docs/docs/self-hosting/install/compose.md index 19e96875f6..3aa60ce9ab 100644 --- a/docs/docs/self-hosting/install/compose.md +++ b/docs/docs/self-hosting/install/compose.md @@ -51,5 +51,5 @@ docker compose up --build This builds Museum and web applications based on the Dockerfile and starts the containers needed for Ente. ::: tip -Check out [post-installation steps](/self-hosting/install/post-install) for further usage. +Check out [post-installation steps](/self-hosting/install/post-install/) for further usage. ::: \ No newline at end of file diff --git a/docs/docs/self-hosting/install/quickstart.md b/docs/docs/self-hosting/install/quickstart.md index 53e62898a6..bcb371e672 100644 --- a/docs/docs/self-hosting/install/quickstart.md +++ b/docs/docs/self-hosting/install/quickstart.md @@ -31,5 +31,5 @@ The data accessed by Museum is stored in `./data` folder inside `my-ente` direct It contains extra configuration files that is to be used (push notification credentials, etc.) ::: tip -Check out [post-installations steps](/self-hosting/install/post-install) for further usage. +Check out [post-installations steps](/self-hosting/install/post-install/) for further usage. ::: \ No newline at end of file diff --git a/docs/docs/self-hosting/install/upgrading.md b/docs/docs/self-hosting/install/upgrading.md new file mode 100644 index 0000000000..adfb6e27d2 --- /dev/null +++ b/docs/docs/self-hosting/install/upgrading.md @@ -0,0 +1,10 @@ +--- +title: Upgrading - Self-hosting +description: Upgradation of self-hosted Ente +--- + +# Upgrading + +A list of steps that should be done after installing Ente are described below: + +## Step 1: diff --git a/docs/docs/self-hosting/install/without-docker.md b/docs/docs/self-hosting/install/without-docker.md index 09f8c693fb..4ece37b52a 100644 --- a/docs/docs/self-hosting/install/without-docker.md +++ b/docs/docs/self-hosting/install/without-docker.md @@ -191,5 +191,5 @@ relative to `server` directory The web application for Ente Photos should be accessible at http://localhost:3000, check out the [default ports](/self-hosting/install/env-var#ports) for more information. ::: tip -Check out [post-installation steps](/self-hosting/install/post-install) for further usage. +Check out [post-installation steps](/self-hosting/install/post-install/) for further usage. ::: \ No newline at end of file diff --git a/docs/docs/self-hosting/troubleshooting/uploads.md b/docs/docs/self-hosting/troubleshooting/uploads.md index fd22da1271..ad1cf2b74d 100644 --- a/docs/docs/self-hosting/troubleshooting/uploads.md +++ b/docs/docs/self-hosting/troubleshooting/uploads.md @@ -15,7 +15,7 @@ for any minor misconfigurations. It is also suggested that the user setups bucket CORS or global CORS on MinIO or any external S3 service provider they are connecting to. To setup bucket CORS, -please [read this](/self-hosting/troubleshooting/bucket-cors). +please [read this]. ## 403 Forbidden From aae1caf37de6b4070e0a784de1a45fd802eb89e5 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Fri, 25 Jul 2025 17:22:52 +0530 Subject: [PATCH 15/20] [docs] revamp administration and document configuration examples --- docs/docs/.vitepress/sidebar.ts | 39 ++-- .../self-hosting/administration/accounts.md | 0 .../self-hosting/administration/backup.md | 42 ++-- docs/docs/self-hosting/administration/cli.md | 68 ++++++ .../self-hosting/administration/museum.md | 72 ------- .../administration/object-storage.md | 120 +++++++---- .../administration/reverse-proxy.md | 14 +- .../administration/selfhost-cli.md | 42 ---- .../docs/self-hosting/administration/users.md | 116 +++++++++++ docs/docs/self-hosting/guides/systemd.md | 17 +- docs/docs/self-hosting/guides/tailscale.md | 2 + docs/docs/self-hosting/guides/web-app.md | 195 ------------------ .../install/{config-file.md => config.md} | 148 +++++++++---- .../install/{without-docker.md => manual.md} | 4 +- .../install/post-install/index.md | 127 +++++++++--- .../docs/self-hosting/install/requirements.md | 12 +- docs/docs/self-hosting/install/upgrade.md | 69 +++++++ docs/docs/self-hosting/install/upgrading.md | 10 - .../self-hosting/troubleshooting/docker.md | 90 ++++---- .../docs/self-hosting/troubleshooting/misc.md | 2 + server/.gitignore | 3 +- server/config/example.yaml | 19 +- 22 files changed, 657 insertions(+), 554 deletions(-) delete mode 100644 docs/docs/self-hosting/administration/accounts.md create mode 100644 docs/docs/self-hosting/administration/cli.md delete mode 100644 docs/docs/self-hosting/administration/museum.md delete mode 100644 docs/docs/self-hosting/administration/selfhost-cli.md create mode 100644 docs/docs/self-hosting/administration/users.md delete mode 100644 docs/docs/self-hosting/guides/web-app.md rename docs/docs/self-hosting/install/{config-file.md => config.md} (51%) rename docs/docs/self-hosting/install/{without-docker.md => manual.md} (98%) create mode 100644 docs/docs/self-hosting/install/upgrade.md delete mode 100644 docs/docs/self-hosting/install/upgrading.md diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index 06f64d790b..6bbb0cc842 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -263,21 +263,26 @@ export const sidebar = [ link: "/self-hosting/install/compose", }, { - text: "Without Docker", - link: "/self-hosting/install/without-docker", + text: "Manual Setup (Without Docker)", + link: "/self-hosting/install/manual", }, { text: "Environment Variables and Defaults", link: "/self-hosting/install/env-var", }, { - text: "Configuration File", - link: "/self-hosting/install/config-file", + text: "Configuration", + link: "/self-hosting/install/config", }, { text: "Post-installation Steps", link: "/self-hosting/install/post-install/", + }, + { + text: "Upgrade", + link: "/self-hosting/install/upgrade/", } + ], }, { @@ -285,20 +290,24 @@ export const sidebar = [ collapsed: true, items: [ { - text: "Configuring your server", - link: "/self-hosting/administration/museum", + text: "User Management", + link: "/self-hosting/administration/users", }, { - text: "Configuring Object Storage", - link: "/self-hosting/administration/object-storage", - }, - { - text: "Reverse proxy", + text: "Reverse Proxy", link: "/self-hosting/administration/reverse-proxy", }, { - text: "Configuring CLI for your instance", - link: "/self-hosting/administration/selfhost-cli", + text: "Object Storage", + link: "/self-hosting/administration/object-storage", + }, + { + text: "Ente CLI", + link: "/self-hosting/administration/cli", + }, + { + text: "Backup and Restore", + link: "/self-hosting/administration/backup", }, ], @@ -321,6 +330,10 @@ export const sidebar = [ text: "Ente via Tailscale", link: "/self-hosting/guides/tailscale", }, + { + text: "Running Ente with systemd", + link: "/self-hosting/guides/systemd", + }, ], }, { diff --git a/docs/docs/self-hosting/administration/accounts.md b/docs/docs/self-hosting/administration/accounts.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/docs/self-hosting/administration/backup.md b/docs/docs/self-hosting/administration/backup.md index 3771985741..d391f49f81 100644 --- a/docs/docs/self-hosting/administration/backup.md +++ b/docs/docs/self-hosting/administration/backup.md @@ -5,32 +5,17 @@ description: General introduction to backing up your self hosted Ente instance # Backing up your Ente instance -> [!WARNING] -> -> This is not meant to be a comprehensive and bullet proof guide. There are many -> moving parts, and small mistakes might make your backups unusable. -> -> Please treat this only as a general introduction. And remember to test your -> restores. - -At the minimum, a functional Ente backend needs three things: +A functional Ente backend needs three things: 1. Museum (the API server) 2. Postgres (the database) 3. Object storage (any S3-compatible object storage) -When thinking about backups, this translates into backing up the relevant state -from each of these: +Thus, when thinking about backups: -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 PostgreSQL, the entire data volume needs to be backed up. - -3. For Object Storage, the entire data volume needs to be backed up. +1. For Museum, you should backup your `museum.yaml`, `credentials.yaml` or + any other custom configuration that you created. +2. The entire data volume needs to be backed up for the database and object storage. 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 @@ -43,22 +28,19 @@ 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). - +2. The encrypted 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, we recommend keeping plaintext backup of your photos. -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. -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 +If you rely on your instance backup, ensure that you do full +restoration to verify that you are able to access your data. + +As the industry saying goes, a backup without a restore is no backup at all. diff --git a/docs/docs/self-hosting/administration/cli.md b/docs/docs/self-hosting/administration/cli.md new file mode 100644 index 0000000000..bdd1743ff2 --- /dev/null +++ b/docs/docs/self-hosting/administration/cli.md @@ -0,0 +1,68 @@ +--- +title: Ente CLI for Self-hosted Instance +description: Guide to configuring Ente CLI for Self Hosted Instance +--- + +# Ente CLI for self-hosted instance + +If you are self-hosting, you can configure Ente CLI to export data & +perform basic administrative actions. + +## Step 1: Configure endpoint + +To do this, first configure the CLI to use your server's endpoint. + +Define `config.yaml` and place it in `~/.ente/` or directory +specified by `ENTE_CLI_CONFIG_DIR` or directory where Ente CLI +is present. + +``` yaml +# Set the API endpoint to your domain where Museum is being served. +endpoint: + api: http://localhost:8080 +``` + +## Step 2: Whitelist admin user + +You can whitelist administrator user by following this +[guide](/self-hosting/administration/users#whitelist-admins) + +## Step 3: Add an account + +::: detail +You can not create new accounts using Ente CLI. You can only log in to your existing accounts. +To create a new account, use Ente Photos (or Ente Auth) web application, desktop or mobile. +::: + +You can add your existing account using Ente CLI. + +``` shell +ente account add +``` + +This should prompt you for authentication details. + +Your account should be added and can be used for exporting data +(for plain-text backup), managing Ente Auth and performing +administrative actions. + +## Step 4: Increase storage and account validity + +You can use `ente admin update-subscription` to increase +storage quota and account validity (duration). + +For infinite storage and validity, use the following command: +``` shell +ente admin update-subscription -a -u --no-limit + +# Set a limit +ente admin update-subscription -a -u --no-limit False +``` + +For more information, check out the documentation for setting +[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md) +using the CLI. + +## References + +1. [Ente CLI Documentation](https://github.com/ente-io/ente/blob/main/cli/docs/generated) \ No newline at end of file diff --git a/docs/docs/self-hosting/administration/museum.md b/docs/docs/self-hosting/administration/museum.md deleted file mode 100644 index b32728a8c6..0000000000 --- a/docs/docs/self-hosting/administration/museum.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Configuring your server -description: Guide to writing a museum.yaml ---- - -# Configuring your server - -Ente's monolithic server is called **museum**. - -`museum.yaml` is a YAML configuration file used to configure museum. By default, -[`local.yaml`](https://github.com/ente-io/ente/tree/main/server/configurations/local.yaml) -is provided, but its settings are overridden with those from `museum.yaml`. - -If you used our quickstart script, your `my-ente` directory will include a -`museum.yaml` file with preset configurations for encryption keys, secrets, -PostgreSQL and MinIO. - -> [!TIP] -> -> Always do `docker compose down` inside your `my-ente` directory. If you've -> made changes to `museum.yaml`, restart the containers with -> `docker compose up -d ` to see your changes in action. - -## S3 buckets - -The `s3` section within `museum.yaml` is by default configured to use local -MinIO buckets. - -If you wish to use an external S3 provider, you can edit the configuration with -your provider's credentials, and set `are_local_buckets` to `false`. - -Check out [Configuring S3] to understand -more about configuring S3 buckets. - -MinIO uses the port `3200` for API Endpoints and their web app runs over -`:3201`. You can login to MinIO Web Console by opening `localhost:3201` in your -browser. - -If you face any issues related to uploads then checkout -[Troubleshooting bucket CORS] and -[Frequently encountered S3 errors]. - -## Web apps - -The web apps for Ente Photos is divided into multiple sub-apps like albums, -cast, auth, etc. These endpoints are configurable in `museum.yaml` under the -`apps.*` section. - -For example, - -```yaml -apps: - public-albums: https://albums.myente.xyz - cast: https://cast.myente.xyz - accounts: https://accounts.myente.xyz -``` - -> [!IMPORTANT] By default, all the values redirect to our publicly hosted -> production services. For example, if `public-albums` is not configured your -> shared album will use the `albums.ente.io` URL. - -After you are done with filling the values, restart museum and the app will -start utilizing those endpoints instead of Ente's production instances. - -Once you have configured all the necessary endpoints, `cd` into `my-ente` and -stop all the Docker containers with `docker compose down` and restart them with -`docker compose up -d`. - -Similarly, you can use the default -[`local.yaml`](https://github.com/ente-io/ente/tree/main/server/configurations/local.yaml) -as a reference for building a functioning `museum.yaml` for many other -functionalities like SMTP, Hardcoded-OTTs, etc. \ No newline at end of file diff --git a/docs/docs/self-hosting/administration/object-storage.md b/docs/docs/self-hosting/administration/object-storage.md index ffb7d6bc0a..0d9852aa20 100644 --- a/docs/docs/self-hosting/administration/object-storage.md +++ b/docs/docs/self-hosting/administration/object-storage.md @@ -6,46 +6,78 @@ description: # Configuring Object Storage -## Replication +Ente relies on [S3-compatible](https://docs.aws.amazon.com/s3/) cloud storage for +storing files (photos, thumbnails and videos) as objects. + +Ente ships MinIO as S3-compatible storage by default in quickstart and Docker Compose for quick testing. + +This document outlines configuration of S3 buckets and enabling replication for further usage. + +## Museum + +The S3-compatible buckets have to be configured in `museum.yaml` file. + +### General Configuration + +Some of the common configuration that can be done at top-level are: + +1. **SSL Configuration:** If you need to configure SSL (i. e., the buckets are accessible via HTTPS), + you'll need to set `s3.are_local_buckets` to `false`. +2. **Path-style URLs:** Disabling `s3.are_local_buckets` also switches to the subdomain-style URLs for + the buckets. However, some S3 providers such as MinIO do not support this. + + Set `s3.use_path_style_urls` to `true` for such cases. + +### Replication > [!IMPORTANT] > -> As of now, replication works only if all the 3 storage buckets are configured (2 hot and 1 cold storage). +> Replication works only if all 3 storage buckets are configured (2 hot and 1 cold storage). > -> For more information, check this -> [discussion](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970) +> For more information, check [this discussion](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970) > and our article on ensuring [reliability](https://ente.io/reliability/). -In a self hosted Ente instance replication is turned off by default. When -replication is turned off, only the first bucket (`b2-eu-cen`) is used, and the -other two are ignored. Only the names here are specifically fixed, but in the -configuration body you can put any other keys. +Replication is disabled by default in self-hosted instance. Only the first bucket (`b2-eu-cen`) is used. -Use the `s3.hot_storage.primary` option if you'd like to set one of the other -predefined buckets as the primary bucket. +Only the names are specifically fixed, you can put any other keys in configuration body. -## SSL Configuration +Use the `s3.hot_storage.primary` option if you'd like to set one of the other pre-defined buckets as the primary bucket. -> [!NOTE] -> -> If you need to configure SSL, you'll need to turn off `s3.are_local_buckets` -> (which disables SSL in the default starter compose template). +### Bucket configuration -Disabling `s3.are_local_buckets` also switches to the subdomain style URLs for -the buckets. However, not all S3 providers support these. In particular, MinIO -does not work with these in default configuration. So in such cases you'll also -need to enable `s3.use_path_style_urls`. +The keys `b2-eu-cen` (primary storage), `wasabi-eu-central-2-v3` (secondary storage) +and `scw-eu-fr-v3` (cold storage) are hardcoded, however, the keys and secret can be anything. -# Fix potential CORS issues with your Buckets +It has no relation to Backblaze, Wasabi or Scaleway. -## For AWS S3 +Each bucket's endpoint, region, key and secret should be configured accordingly +if using an external bucket. -If you cannot upload a photo due to a CORS issue, you need to fix the CORS +Additionally, you can enable SSL and path-style URL for specific buckets, which provides +flexibility for storage. If this is not configured, top level configuration (`s3.are_local_buckets` +and `s3.use_path_style_urls`) is used. + +A sample configuration for `b2-eu-cen` is provided, which can be used for other 2 buckets as well: + +``` yaml + b2-eu-cen: + are_local_buckets: true + use_path_style_urls: true + key: + secret: + endpoint: localhost:3200 + region: eu-central-2 + bucket: b2-eu-cen +``` + +## CORS (Cross-Origin Resource Sharing) + +If you cannot upload a photo due to CORS error, you need to fix the CORS configuration of your bucket. -Create a `cors.json` file with the following content: +Use the content provided below for creating a `cors.json` file: -```json +``` json { "CORSRules": [ { @@ -59,27 +91,37 @@ Create a `cors.json` file with the following content: } ``` -You may want to change the `AllowedOrigins` to a more restrictive value. +You may have to change the `AllowedOrigins` to allow only certain origins +(your Ente web apps and Museum.) for security. -If you are using AWS for S3, you can execute the below command to get rid of -CORS. Make sure to enter the right path for the `cors.json` file. +Assuming you have AWS CLI on your system and that you have configured +it with your access key and secret, you can execute the below command to +set bucket CORS. Make sure to enter the right path for the `cors.json` file. -```bash +``` shell aws s3api put-bucket-cors --bucket YOUR_S3_BUCKET --cors-configuration /path/to/cors.json ``` -## For MinIO +### MinIO -Checkout the `mc set alias` document to configure alias for your -instance and bucket. After this you will be prompted for your AccessKey and -Secret, which is your username and password. +Assuming you have configured an alias for MinIO account using the command: -To set the `AllowedOrigins` Header, you can use the -following command to do so. - -```sh -mc admin config set / api cors_allow_origin="*" +``` shell +mc alias set storage-account-alias minio-endpoint minio-key minio-secret ``` -You can create also `.csv` file and dump the list of origins you would like to -allow and replace the `*` with `path` to the CSV file. +where, + +1. `storage-account-alias` is a valid storage account alias name +2. `minio-endpoint` is the endpoint where MinIO is being served without the protocol (http or https). Example: `localhost:3200` +3. `minio-key` is the MinIO username defined in `MINIO_ROOT_USER` +4. `minio-secret` is the MinIO password defined in `MINIO_PASSWORD` + +To set the `AllowedOrigins` Header, you can use the +following command:. + +``` shell +mc admin config set storage-account-alias api cors_allow_origin="*" +``` + +You can create also `.csv` file and dump the list of origins you would like to allow and replace the `*` with path to the CSV file. diff --git a/docs/docs/self-hosting/administration/reverse-proxy.md b/docs/docs/self-hosting/administration/reverse-proxy.md index ba1426eec1..fb20a25afc 100644 --- a/docs/docs/self-hosting/administration/reverse-proxy.md +++ b/docs/docs/self-hosting/administration/reverse-proxy.md @@ -5,8 +5,9 @@ Description: Configuring reverse proxy for Museum and other services # Reverse proxy -Configuring reverse proxy is a way to make the service accessible via the public -Internet without exposing multiple ports for various services. +Reverse proxy helps in making application services +accessible via the Internet without exposing multiple +ports for various services. It also allows configuration of HTTPS through SSL certificate management. @@ -48,10 +49,10 @@ DNS propagation can take a few minutes to take effect. ## Step 2: Configure reverse proxy -After installing Caddy, a `Caddyfile` is created on the path +After installing Caddy, `Caddyfile` is created at `/etc/caddy/`. Edit `/etc/caddy/Caddyfile` to configure reverse proxies. -Here is a ready-to-use configuration that can be used with your own domain. +You can edit the minimal configuration provided below for your own needs. > yourdomain.tld is an example. Replace it with your own domain @@ -97,9 +98,8 @@ sudo systemctl caddy reload ## Step 4: Verify the setup -Ente Photos web app should be up on https://web.ente.yourdomain.tld. - -Museum should be accessible at https://api.ente.yourdomain.tld. +Ente Photos web app should be up on https://web.ente.yourdomain.tld and +Museum at https://api.ente.yourdomain.tld. > [!TIP] > If you are using other reverse proxy servers such as NGINX, diff --git a/docs/docs/self-hosting/administration/selfhost-cli.md b/docs/docs/self-hosting/administration/selfhost-cli.md deleted file mode 100644 index e8ca8612ff..0000000000 --- a/docs/docs/self-hosting/administration/selfhost-cli.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: CLI for Self Hosted Instance -description: Guide to configuring Ente CLI for Self Hosted Instance ---- - -# Ente CLI for self-hosted instance - -If you are self-hosting, you can configure CLI to export data & -perform basic administrative actions. - -## Step 1: Configure endpoint - -To do this, first configure the CLI to use your server's endpoint. - -Define `config.yaml` and place it in `~/.ente/` directory or directory -specified by `ENTE_CLI_CONFIG_DIR` or CLI's directory. - -``` yaml -endpoint: - api: http://localhost:8080 -``` - -You should be able to -[add an account](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_add.md), -and subsequently increase the -[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md) -using the CLI. - -For administrative actions, you first need to whitelist admin users. -You can create `server/museum.yaml`, and whitelist add the admin user ID `internal.admins`. See -[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml#L211C1-L232C1) -in the server source code for details about how to define this. - -You can use -[account list](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_list.md) -command to find the user id of any account. - -```yaml -internal: - admins: - - 1580559962386440 -``` diff --git a/docs/docs/self-hosting/administration/users.md b/docs/docs/self-hosting/administration/users.md new file mode 100644 index 0000000000..86902cd36c --- /dev/null +++ b/docs/docs/self-hosting/administration/users.md @@ -0,0 +1,116 @@ +--- +title: User Management - Self-hosting +description: Guide to configuring Ente CLI for Self Hosted Instance +--- + +# User Management + +You may wish to self-host Ente for your family or close circle. In such cases, +you may wish to enable administrative access for few users, disable new registrations, +manage one-time tokens (OTTs), etc. + +This document covers the details on how you can administer users on your server. + +## Whitelist admins + +The administrator users have to be explicitly whitelisted in `museum.yaml`. You can achieve this +the following steps: + +1. Connect to `ente_db` (the database used for storing data +related to Ente). + ``` shell + # Change the DB name and DB user name if you use different values. + # If using Docker + docker exec -it psql -U pguser -d ente_db + + # Or when using psql directly + psql -U pguser -d ente_db + ``` + +2. Get the user ID of the first user by running the following PSQL command: + ``` sql + SELECT * from users; + ``` + +3. Edit `internal.admins` or `internal.admin` (if you wish to whitelist only single user) in `museum.yaml` + to add the user ID you wish to whitelist. + + - For multiple admins: + ``` yaml + internal: + admins: + - + ``` + - For single admin: + ``` yaml + internal: + admin: + ``` + +4. Restart Museum by restarting the cluster + +## Increase storage and account validity + +You can use Ente CLI for increasing storage quota and account validity for +users on your instance. Check this guide for more +[information](/self-hosting/administration/cli#step-4-increase-storage-and-account-validity) + +## Handle user verification codes + +Ente currently relies on verification codes for completion of registration. + +These are accessible in server logs. If using Docker Compose, they can be +accessed by running `sudo docker compose logs` in the cluster folder where Compose +file resides. + +However, you may wish to streamline this workflow. You can follow one of the 2 methods +if you wish to have many users in the system. + +### Use hardcoded OTTs + +You can configure to use hardcoded OTTs only for specific emails, or based on suffix. + +A sample configuration for the same is provided below, which is to be used in `museum.yaml`: + +``` yaml +internal: + hardcoded-ott: + emails: + - "example@example.org,123456" + local-domain-suffix: "@example.org" + local-domain-value: 012345 +``` + +This sets OTT to 123456 for the email address example@example.com and 012345 for emails having @example.com as suffix. + +### Send email with verification code + +You can configure SMTP for sending verification code e-mails to users, which +is efficient if you do not know mail addresses of people for who you want to hardcode +OTTs or if you are serving larger audience. + +Set the host and port accordingly with your credentials in `museum.yaml` + +``` yaml +smtp: + host: + port: + # Optional username and password if using local relay server + username: + password: + # Email address used for sending emails (this mail's credentials have to be provided) + email: + # Optional name for sender + sender-name: +``` + +## Disable registrations + +For security purposes, you may choose to disable registrations on your instance. You can disable new +registrations by using the following configuration in `museum.yaml`. + +``` yaml +internal: + disable-registration: true +``` + diff --git a/docs/docs/self-hosting/guides/systemd.md b/docs/docs/self-hosting/guides/systemd.md index ac6e0e4296..2a7bd08d4b 100644 --- a/docs/docs/self-hosting/guides/systemd.md +++ b/docs/docs/self-hosting/guides/systemd.md @@ -5,24 +5,15 @@ description: Running Ente services (Museum and web application) via systemd # Running Ente using `systemd` -On Linux distributions using `systemd` as initialization system, Ente can be configured to run as a background service, upon system startup by using service files. +On Linux distributions using `systemd` as initialization system, Ente can be configured to run as a background service, upon system startup by service files. ## Museum as a background service -Please check the below links if you want to run Museum as a service, both of -them are battle tested. +Please check the below links if you want to run Museum as a service, both of them are battle tested. 1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323) 2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4) -Once you are done with setting and running Museum, all you are left to do is run -the web app and reverse_proxy it with a webserver. You can check the following - resources for Deploying your web app. +Once you are done with setting and running Museum, all you are left to do is run the web app and set up reverse proxy. Check out the documentation for [more information](/self-hosting/install/manual#step-3-configure-web-application). -1. [Running Ente Web app as a systemd Service](https://gist.github.com/mngshm/72e32bd483c2129621ed0d74412492fd) - -## References - -1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323) -2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4) -3. [Running Ente Web app as a systemd Service](https://gist.github.com/mngshm/72e32bd483c2129621ed0d74412492fd) +> **Credits:** [mngshm](https://github.com/mngshm) \ No newline at end of file diff --git a/docs/docs/self-hosting/guides/tailscale.md b/docs/docs/self-hosting/guides/tailscale.md index de3cc6fdf0..43aadca7a2 100644 --- a/docs/docs/self-hosting/guides/tailscale.md +++ b/docs/docs/self-hosting/guides/tailscale.md @@ -347,3 +347,5 @@ This will list all account details. Copy Acount ID. > ente-museum-1 container from linux terminal. Run > `docker restart ente-museum-1`. All well, now you will have 100TB storage. > Repeat if for any other accounts you want to give unlimited storage access. + +> **Credits:** [A4alli](https://github.com/A4alli) \ No newline at end of file diff --git a/docs/docs/self-hosting/guides/web-app.md b/docs/docs/self-hosting/guides/web-app.md deleted file mode 100644 index a3061e3004..0000000000 --- a/docs/docs/self-hosting/guides/web-app.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: Hosting the web apps -description: - Building and hosting Ente's web apps, connecting it to your self-hosted - server ---- - -> [!WARNING] NOTE This page covers documentation around self-hosting the web app -> manually. If you want to deploy Ente hassle free, please use the -> [one line](https://ente.io/blog/self-hosting-quickstart/) command to setup -> Ente. This guide might be deprecated in the near future. - -# Web app - -The getting started instructions mention using `yarn dev` (which is an alias of -`yarn dev:photos`) to serve your web app. - -> [!IMPORTANT] Please note that Ente's Web App supports the Yarn version 1.22.xx -> or 1.22.22 specifically. Make sure to install the right version or modify your -> yarn installation to meet the requirements. The user might end up into unknown -> version and dependency related errors if yarn is on different version. - -```sh -cd ente/web -yarn install -NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev:photos -``` - -This is fine for trying the web app and verifying that your self-hosted server -is working as expected etc. But if you would like to use the web app for a -longer term, then it is recommended to follow the Docker approach. - -## With Docker/Docker Compose (Recommended) - -> [!IMPORTANT] -> -> Recurring changes might be made by the team or from community if more -> improvements can be made so that we are able to build a full-fledged docker -> image. - -```dockerfile -FROM node:20-bookworm-slim as builder - -WORKDIR ./ente - -COPY . . -COPY apps/ . - -# Will help default to yarn versoin 1.22.22 -RUN corepack enable - -# Endpoint for Ente Server -ENV NEXT_PUBLIC_ENTE_ENDPOINT=https://changeme.com -ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://changeme.com - -RUN yarn cache clean -RUN yarn install --network-timeout 1000000000 -RUN yarn build:photos && yarn build:accounts && yarn build:auth && yarn build:cast - -FROM node:20-bookworm-slim - -WORKDIR /app - -COPY --from=builder /ente/apps/photos/out /app/photos -COPY --from=builder /ente/apps/accounts/out /app/accounts -COPY --from=builder /ente/apps/auth/out /app/auth -COPY --from=builder /ente/apps/cast/out /app/cast - -RUN npm install -g serve - -ENV PHOTOS=3000 -EXPOSE ${PHOTOS} - -ENV ACCOUNTS=3001 -EXPOSE ${ACCOUNTS} - -ENV AUTH=3002 -EXPOSE ${AUTH} - -ENV CAST=3003 -EXPOSE ${CAST} - -# The albums app does not have navigable pages on it, but the -# port will be exposed in-order to self up the albums endpoint -# `apps.public-albums` in museum.yaml configuration file. -ENV ALBUMS=3004 -EXPOSE ${ALBUMS} - -CMD ["sh", "-c", "serve /app/photos -l tcp://0.0.0.0:${PHOTOS} & serve /app/accounts -l tcp://0.0.0.0:${ACCOUNTS} & serve /app/auth -l tcp://0.0.0.0:${AUTH} & serve /app/cast -l tcp://0.0.0.0:${CAST}"] -``` - -The above is a multi-stage Dockerfile which creates a production ready static -output of the 4 apps (Photos, Accounts, Auth and Cast) and serves the static -content with Caddy. - -Looking at 2 different node base-images doing different tasks in the same -Dockerfile would not make sense, but the Dockerfile is divided into two just to -improve the build efficiency as building this Dockerfile will arguably take more -time. - -Lets build a Docker image from the above Dockerfile. Copy and paste the above -Dockerfile contents in the root of your web directory which is inside -`ente/web`. Execute the below command to create an image from this Dockerfile. - -```sh -# Build the image -docker build -t : --no-cache --progress plain . -``` - -You can always edit the Dockerfile and remove the steps for apps which you do -not intend to install on your system (like auth or cast) and opt out of those. - -Regarding Albums App, please take a note that they are not web pages with -navigable pages, if accessed on the web-browser they will simply redirect to -ente.web.io. - -## compose.yaml - -Moving ahead, we need to paste the below contents into the compose.yaml inside -`ente/server/compose.yaml` under the services section. - -```yaml -ente-web: - image: # name of the image you used while building - ports: - - 3000:3000 - - 3001:3001 - - 3002:3002 - - 3003:3003 - - 3004:3004 - environment: - - NODE_ENV=development - restart: always -``` - -Now, we're good to go. All we are left to do now is start the containers. - -```sh -docker compose up -d # --build - -# Accessing the logs -docker compose logs -``` - -## Configure App Endpoints - -> [!NOTE] Previously, this was dependent on the env variables -> `NEXT_ENTE_PUBLIC_ACCOUNTS_ENDPOINT` and etc. Please check the below -> documentation to update your setup configurations - -You can configure the web endpoints for the other apps including Accounts, -Albums Family and Cast in your `museum.yaml` configuration file. Checkout -[`local.yaml`](https://github.com/ente-io/ente/blob/543411254b2bb55bd00a0e515dcafa12d12d3b35/server/configurations/local.yaml#L76-L89) -to configure the endpoints. Make sure to setup up your DNS Records accordingly -to the similar URL's you set up in `museum.yaml`. - -Next part is to configure the web server. - -# Web server configuration - -The last step ahead is configuring reverse_proxy for the ports on which the apps -are being served (you will have to make changes, if you have cusotmized the -ports). The web server of choice in this guide is -[Caddy](https://caddyserver.com) because with caddy you don't have to manually -configure/setup SSL ceritifcates as caddy will take care of that. - -```sh -photos.yourdomain.com { - reverse_proxy http://localhost:3001 - # for logging - log { - level error - } -} - -auth.yourdomain.com { - reverse_proxy http://localhost:3002 -} -# and so on ... -``` - -Next, start the caddy server :). - -```sh -# If caddy service is not enabled -sudo systemctl enable caddy - -sudo systemctl daemon-reload -sudo systemctl start caddy -``` - -## Contributing - -Please start a discussion on the Github Repo if you have any suggestions for the -Dockerfile, You can also share your setups on Github Discussions. diff --git a/docs/docs/self-hosting/install/config-file.md b/docs/docs/self-hosting/install/config.md similarity index 51% rename from docs/docs/self-hosting/install/config-file.md rename to docs/docs/self-hosting/install/config.md index 5b48c93a31..794e095cb5 100644 --- a/docs/docs/self-hosting/install/config-file.md +++ b/docs/docs/self-hosting/install/config.md @@ -1,35 +1,53 @@ --- -title: "Configuration File - Self-hosting" +title: "Configuration - Self-hosting" description: "Information about all the configuration variables needed to run Ente with museum.yaml" --- -# Configuration File +# Configuration -Museum uses YAML-based configuration file that is used for handling database -connectivity, bucket configuration, internal configuration, etc. +Museum is designed to be configured either via environment variables or via +YAML. We recommend using YAML for maintaining your configuration as it can be +backed up easily, helping in restoration. -If the `ENVIRONMENT` environment variable is set, a corresponding file from -`configurations/` is loaded, by default, `local.yaml` configuration is loaded. +## Configuration File + +Museum's configuration file (`museum.yaml`) is responsible for making database +configuration, bucket configuration, internal configuration, etc. accessible for +other internal services. + +By default, Museum runs in local environment, thus `local.yaml` configuration is +loaded. + +If `ENVIRONMENT` environment variable is set (say, to `production`), Museum will +attempt to load `configurations/production.yaml`. If `credentials-file` is defined and found, it overrides the defaults. -Self-hosted clusters generally use `museum.yaml` file for reading configuration -specifications. +Self-hosted clusters generally use `museum.yaml` file for declaring +configuration over directly editing `local.yaml`. All configuration values can be overridden via environment variables using the `ENTE_` prefix and replacing dots (`.`) or hyphens (`-`) with underscores (`_`). -The configuration variables declared in `museum.yaml` are read by Museum. -Additionally, environment variables prefixed by `ENTE_` are read by Museum and -used internally in same manner as configuration variables. +Museum reads configuration from `museum.yaml`. Any environment variables +prefixed with `ENTE_` takes precedence. -For example, `s3.b2-eu-cen` in `museum.yaml` and `ENTE_S3_B2_EU_CEN` declared as -environment variable are the same and `ENTE_S3_B2_EU_CEN` overrides -`s3.b2-eu-cen`. +For example, -## General Settings +```yaml +s3: + b2-eu-cen: + endpoint: +``` + +in `museum.yaml` is read as `s3.b2-eu-cen.endpoint` by Museum. + +`ENTE_S3_B2_EU_CEN_ENDPOINT` declared as environment variable is same as the +above and `ENTE_S3_B2_EU_CEN_ENDPOINT` overrides `s3.b2-eu-cen.endpoint`. + +### General Settings | Variable | Description | Default | | ------------------ | --------------------------------------------------------- | ------------------ | @@ -37,13 +55,21 @@ environment variable are the same and `ENTE_S3_B2_EU_CEN` overrides | `credentials-dir` | Directory to look for credentials (TLS, service accounts) | `credentials/` | | `log-file` | Log output path. Required in production. | `""` | -## HTTP +### HTTP | Variable | Description | Default | | -------------- | --------------------------------- | ------- | | `http.use-tls` | Enables TLS and binds to port 443 | `false` | -## App Endpoints +### App Endpoints + +The web apps for Ente (Auth, Cast, Albums) use different endpoints. + +These endpoints are configurable in `museum.yaml` under the apps.\* section. + +Upon configuration, the application will start utilizing the specified endpoints +instead of Ente's production instances or local endpoints (overridden values +used for Compose and quickstart for ease of use.) | Variable | Description | Default | | -------------------- | ------------------------------------------------------- | -------------------------- | @@ -51,7 +77,7 @@ environment variable are the same and `ENTE_S3_B2_EU_CEN` overrides | `apps.cast` | Cast app base endpoint | `https://cast.ente.io` | | `apps.accounts` | Accounts app base endpoint (used for passkey-based 2FA) | `https://accounts.ente.io` | -## Database +### Database | Variable | Description | Default | | ------------- | -------------------------- | ----------- | @@ -63,7 +89,19 @@ environment variable are the same and `ENTE_S3_B2_EU_CEN` overrides | `db.password` | Database password | | | `db.extra` | Additional DSN parameters | | -## Object Storage +### 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, you can edit the configuration with +your provider's credentials, and set `are_local_buckets` to `false`. + +MinIO uses the port `3200` for API Endpoints. Web Console can be accessed at +http://localhost:3201 by enabling port `3201` in the Compose file. + +If you face any issues related to uploads then checkout [Troubleshooting bucket +CORS] and [Frequently encountered S3 errors]. | Variable | Description | Default | | -------------------------------------- | -------------------------------------------- | ------- | @@ -74,20 +112,39 @@ environment variable are the same and `ENTE_S3_B2_EU_CEN` overrides | `s3.are_local_buckets` | Use local MinIO-compatible storage | `false` | | `s3.use_path_style_urls` | Enable path-style URLs for MinIO | `false` | -## Encryption Keys +### Encryption Keys -| Variable | Description | Default | -| ---------------- | -------------------------------------- | ----------- | -| `key.encryption` | Key for encrypting user emails | Pre-defined | -| `key.hash` | Hash key for verifying email integrity | Pre-defined | +These values are used for encryption of user e-mails. Default values are +provided by Museum. -## JWT +They are generated by random in quickstart script, so no intervention is +necessary if using quickstart. + +However, if you are using Ente for long-term needs and you have not installed +Ente via quickstart, consider generating values for these along with [JWT](#jwt) +by following the steps described below: + +```shell +# If you have not cloned already +git clone https://github.com/ente-io/ente + +# Generate the values +cd ente/server +go run tools/gen-random-keys/main.go +``` + +| Variable | Description | Default | +| ---------------- | ------------------------------ | ----------- | +| `key.encryption` | Key for encrypting user emails | Pre-defined | +| `key.hash` | Hash key | Pre-defined | + +### JWT | Variable | Description | Default | | ------------ | ----------------------- | ---------- | | `jwt.secret` | Secret for signing JWTs | Predefined | -## Email +### Email | Variable | Description | Default | | ------------------ | ---------------------------- | ------- | @@ -99,34 +156,47 @@ environment variable are the same and `ENTE_S3_B2_EU_CEN` overrides | `smtp.sender-name` | Custom name for email sender | | | `transmail.key` | Zeptomail API key | | -## WebAuthn Passkey Support +### WebAuthn Passkey Support | Variable | Description | Default | | -------------------- | ---------------------------- | --------------------------- | | `webauthn.rpid` | Relying Party ID | `localhost` | | `webauthn.rporigins` | Allowed origins for WebAuthn | `["http://localhost:3001"]` | -## Internal +### Internal -| Variable | Description | Default | -| ------------------------------- | --------------------------------------------- | ------- | -| `internal.silent` | Suppress external effects (e.g. email alerts) | `false` | -| `internal.health-check-url` | External healthcheck URL | | -| `internal.hardcoded-ott` | Predefined OTPs for testing | | -| `internal.admins` | List of admin user IDs | `[]` | -| `internal.admin` | Single admin user ID | | -| `internal.disable-registration` | Disable user registration | `false` | +| Variable | Description | Default | +| -------------------------------------------- | --------------------------------------------- | ------- | +| `internal.silent` | Suppress external effects (e.g. email alerts) | `false` | +| `internal.health-check-url` | External healthcheck URL | | +| `internal.hardcoded-ott` | Predefined OTPs for testing | | +| `internal.hardcoded-ott.emails` | E-mail addresses with hardcoded OTTs | `[]` | +| `internal.hardcoded-ott.local-domain-suffix` | Suffix for which hardcoded OTT is to be used | | +| `internal.hardcoded-ott.local-domain-value` | Hardcoded OTT value for the above suffix | | +| `internal.admins` | List of admin user IDs | `[]` | +| `internal.admin` | Single admin user ID | | +| `internal.disable-registration` | Disable user registration | `false` | -## Replication +### Replication + +By default, replication of objects (photos, thumbnails, videos) is disabled and +only one bucket is used. + +To enable replication, set `replication.enabled` to `true`. For this to work, 3 +buckets have to be configured in total. | Variable | Description | Default | | -------------------------- | ------------------------------------ | ----------------- | -| `replication.enabled` | Enable cross-datacenter replication | `false` | +| `replication.enabled` | Enable replication across buckets | `false` | | `replication.worker-url` | Cloudflare Worker for replication | | | `replication.worker-count` | Number of goroutines for replication | `6` | | `replication.tmp-storage` | Temp directory for replication | `tmp/replication` | -## Background Jobs +### Background Jobs + +This configuration is for enabling background cron jobs for tasks such as +sending mails, removing unused objects (clean up) and worker configuration for +the same. | Variable | Description | Default | | --------------------------------------------- | --------------------------------------- | ------- | diff --git a/docs/docs/self-hosting/install/without-docker.md b/docs/docs/self-hosting/install/manual.md similarity index 98% rename from docs/docs/self-hosting/install/without-docker.md rename to docs/docs/self-hosting/install/manual.md index 4ece37b52a..1a61a89726 100644 --- a/docs/docs/self-hosting/install/without-docker.md +++ b/docs/docs/self-hosting/install/manual.md @@ -1,9 +1,9 @@ --- -title: Running Ente Without Docker - Self-hosting +title: Manual Setup (Without Docker) - Self-hosting description: Installing and setting up Ente without Docker --- -# Running Ente without Docker +# Manual Setup (Without Docker) If you wish to run Ente from source without using Docker, follow the steps described below: diff --git a/docs/docs/self-hosting/install/post-install/index.md b/docs/docs/self-hosting/install/post-install/index.md index 32eabd0072..83adf66ede 100644 --- a/docs/docs/self-hosting/install/post-install/index.md +++ b/docs/docs/self-hosting/install/post-install/index.md @@ -9,45 +9,119 @@ A list of steps that should be done after installing Ente are described below: ## Step 1: Creating first user -The first user (and the only user) to be created will be treated as an admin user by default. +The first user to be created will be treated as an admin user by default. Once Ente is up and running, the Ente Photos web app will be accessible on `http://localhost:3000`. Open this URL in your browser and proceed with creating an account. -To complete your account registration you will need to enter a 6-digit -verification code. +Select **Don't have an account?** to create a new user. -This code can be found in the server logs, which should already be shown in your -quickstart terminal. Alternatively, you can open the server logs with the -following command from inside the `my-ente` folder: +![Onboarding Screen](/onboarding.png) -```sh +Follow the prompts to sign up. + +![Sign Up Page](/sign-up.png) + +Enter a 6-digit verification code to complete registration. + +This code can be found in the server logs, which should be shown in your terminal where you started the Docker Compose cluster. + +If not, access the server logs inside the folder where Compose file resides. + +``` shell sudo docker compose logs ``` +If running Museum without Docker, the code should be visible in the terminal (stdout). + ![otp](/otp.png) -## Step 2: Download mobile and desktop app +## Step 2: Whitelist admins -## Step 2: Configure apps to use your server +1. Connect to `ente_db` (the database used for storing data +related to Ente). + ``` shell + # Change the DB name and DB user name if you use different values. + # If using Docker + docker exec -it psql -U pguser -d ente_db + + # Or when using psql directly + psql -U pguser -d ente_db + ``` + +2. Get the user ID of the first user by running the following PSQL command: + ``` sql + SELECT * from users; + ``` + +3. Edit `internal.admins` or `internal.admin` (if you wish to whitelist only single user) in `museum.yaml` + to add the user ID you wish to whitelist. + + - For multiple admins: + ``` yaml + internal: + admins: + - + ``` + - For single admin: + ``` yaml + internal: + admin: + ``` + +4. Restart Museum by restarting the cluster + +::: tip +Restart your Compose clusters whenever you make changes to Compose file or edit configuration file. +::: + +## Step 3: Configure application endpoints + +You may wish to access some of the applications such as Auth, Albums, Cast via your instance's endpoints through the application instead of our production instances. + +You can do so by editing the `apps` section in `museum.yaml` to use the base endpoints of the corresponding web applications. + +``` yaml +# Replace yourdomain.tld with actual domain +apps: + public-albums: https://albums.ente.yourdomain.tld + cast: https://cast.ente.yourdomain.tld + auth: https://auth.ente.yourdomain.tld +``` + +## Step 4: Make it publicly accessible + +You may wish to access Ente on public Internet. You can do so by configuring a reverse proxy +with software such as Caddy, NGINX, Traefik. + +Check out our [documentation](/self-hosting/administration/reverse-proxy) for more information. + +If you do not wish to make it accessible via Internet, we recommend you to use +[Tailscale](/self-hosting/guides/tailscale) for convenience. Alternately, you +can use your IP address for accessing the application in your local network, though +this poses challenges with respect to object storage. + +## Step 5: Download mobile and desktop app + +You can install Ente Photos by following the [installation section](/photos/faq/installing). + +You can also install Ente Auth (if you are planning to use Auth) by following the [installation section](/auth/faq/installing). + +## Step 6: Configure apps to use your server You can modify Ente mobile apps and CLI to connect to your server. ### Mobile -The pre-built Ente apps from GitHub / App Store / Play Store / F-Droid can be -easily configured to use a custom server. - -You can tap 7 times on the onboarding screen to bring up a page where you can -configure the endpoint the app should be connecting to. +Tap 7 times on the onboarding screen to configure the +server endpoint to be used. ![Setting a custom server on the onboarding screen](custom-server.png) ### Desktop -Same as the mobile app, you can tap 7 times on the onboarding screen to -configure the endpoint the app should connect to. +Tap 7 times on the onboarding screen to configure the server endpoint to be used.
@@ -56,21 +130,12 @@ apps](web-dev-settings.png){width=400px}
-## Step 3: Configure Ente CLI +## Step 7: Configure Ente CLI -> [!NOTE] -> -> You can download the CLI from -> [here](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0) +You can download Ente CLI from [here](https://github.com/ente-io/ente/releases?q=tag%3Acli) -Define a config.yaml and put it either in the same directory as where you run -the CLI from ("current working directory"), or in the path defined in env -variable `ENTE_CLI_CONFIG_PATH`: +Check our [documentation](/self-hosting/administration/cli) on how to use Ente CLI for managing self-hosted instances. -```yaml -endpoint: - api: "http://localhost:8080" -``` - -(Another -[example](https://github.com/ente-io/ente/blob/main/cli/config.yaml.example)) \ No newline at end of file +::: info For upgradation +Check out our [documentation](/self-hosting/install/upgrade) for various installation methods. +::: \ No newline at end of file diff --git a/docs/docs/self-hosting/install/requirements.md b/docs/docs/self-hosting/install/requirements.md index 822d8b1c3e..7cfb908f08 100644 --- a/docs/docs/self-hosting/install/requirements.md +++ b/docs/docs/self-hosting/install/requirements.md @@ -5,19 +5,25 @@ description: Requirements for self-hosting Ente # Requirements +Ensure your system meets these requirements and has the needed software installed for a smooth experience. + ## Hardware The server is capable of running on minimal resource requirements as a -lightweight Go binary, since most of the intensive computational tasks are done on the client. It performs well on small cloud instances, old laptops, and even +lightweight Go binary, since most of the intensive computational tasks are done on the client. +It performs well on small cloud instances, old laptops, and even [low-end embedded devices](https://github.com/ente-io/ente/discussions/594). -- **Storage:** An Unix-compatible filesystem such as ZFS, EXT4, BTRFS, etc. if using PostgreSQL container as it requires a filesystem that supports user/group permissions. +- **Storage:** An Unix-compatible filesystem such as ZFS, EXT4, BTRFS, etc. if using + PostgreSQL container as it requires a filesystem that supports user/group permissions. - **RAM:** A minimum of 1 GB of RAM is required for running the cluster (if using quickstart script). - **CPU:** A minimum of 1 CPU core is required. ## Software -- **Operating System:** 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. +- **Operating System:** 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). Ente also requires **Docker Compose plugin** to be installed. diff --git a/docs/docs/self-hosting/install/upgrade.md b/docs/docs/self-hosting/install/upgrade.md new file mode 100644 index 0000000000..53c62860a8 --- /dev/null +++ b/docs/docs/self-hosting/install/upgrade.md @@ -0,0 +1,69 @@ +--- +title: Upgrade - Self-hosting +description: Upgradation of self-hosted Ente +--- + +# Upgrade your server + +Upgrading Ente depends on the method of installation you have chosen. + +## Quickstart + +Upgrade and restart Ente by pulling the latest images in the directory where the Compose file resides. + +The directory name is generally `my-ente`. + +Run this command inside `my-ente/` + +``` shell +docker compose pull && docker compose up -d +``` + +## Docker Compose + +You can pull in the latest source code from Git and build a new cluster +based on the updated source code. + +1. Pull the latest changes from `main`. + + ``` shell + # Assuming you have cloned repository to ente + cd ente + # Pull changes + git pull + ``` + +2. Recreate the cluster. + ``` shell + cd server/config + # Stop and remove containers if they are running + docker compose down + # Build with latest code + docker compose up --build + ``` + +## Manual Setup + +You can pull in the latest source code from Git and build a new cluster +based on the updated source code. + +1. Pull the latest changes from `main`. + + ``` shell + # Assuming you have cloned repository to ente + cd ente + # Pull changes + git pull + ``` + +2. Follow the steps described in [manual setup](/self-hosting/install/manual) for Museum and web applications. + +::: tip + +If using Docker, you can free up some disk space by deleting older images +that were used by obsolette containers + +``` shell +docker image prune +``` +::: \ No newline at end of file diff --git a/docs/docs/self-hosting/install/upgrading.md b/docs/docs/self-hosting/install/upgrading.md deleted file mode 100644 index adfb6e27d2..0000000000 --- a/docs/docs/self-hosting/install/upgrading.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Upgrading - Self-hosting -description: Upgradation of self-hosted Ente ---- - -# Upgrading - -A list of steps that should be done after installing Ente are described below: - -## Step 1: diff --git a/docs/docs/self-hosting/troubleshooting/docker.md b/docs/docs/self-hosting/troubleshooting/docker.md index 840504ca65..8a7c1462e7 100644 --- a/docs/docs/self-hosting/troubleshooting/docker.md +++ b/docs/docs/self-hosting/troubleshooting/docker.md @@ -1,19 +1,19 @@ --- -title: Docker Errors -description: Fixing docker related errors when trying to self host Ente +title: Troubleshooting Docker-related errors - Self-hosting +description: Fixing Docker-related errors when trying to self-host Ente --- -# Docker +# Troubleshooting Docker-related errors -## configs - -Remember to restart your cluster to ensure changes that you make in the -`configs` section in `compose.yaml` get picked up. - -```sh -docker compose down -docker compose up -``` +> [!TIP] Restart after changes +> +> Remember to restart your cluster to ensure changes that you make in the +> `compose.yaml` and `museum.yaml` get picked up. +> +> ``` shell +> docker compose down +> docker compose up +> ``` ## post_start @@ -90,51 +90,45 @@ museum-1 | /etc/ente/cmd/museum/main.go:124 +0x44c museum-1 exited with code 2 ``` -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. 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. + + However, by deleting the directory, the Docker volumes are not deleted. -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. + Thus the older volumes with previous cluster's credentials are used + for new cluster and the error arises. -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. + 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. -If you're sure of what you're doing, the volumes can be deleted by + ```sh + docker volume ls + ``` -```sh -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 diff --git a/docs/docs/self-hosting/troubleshooting/misc.md b/docs/docs/self-hosting/troubleshooting/misc.md index ff6ceda762..8da0e8d141 100644 --- a/docs/docs/self-hosting/troubleshooting/misc.md +++ b/docs/docs/self-hosting/troubleshooting/misc.md @@ -3,6 +3,8 @@ title: General troubleshooting cases description: Fixing various errors when trying to self host Ente --- +# Troubleshooting + ## Functionality not working on self hosted instance If some specific functionality (e.g. album listing, video playback) does not diff --git a/server/.gitignore b/server/.gitignore index 9a150a8838..bbf74052f4 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -12,4 +12,5 @@ my-ente/ __debug_bin* config/.env config/museum.yaml -main \ No newline at end of file +main +credentials \ No newline at end of file diff --git a/server/config/example.yaml b/server/config/example.yaml index 61524df6f5..81d8d796f3 100644 --- a/server/config/example.yaml +++ b/server/config/example.yaml @@ -51,6 +51,16 @@ s3: region: eu-central-2 bucket: scw-eu-fr-v3 +# Specify the base endpoints for various web apps +apps: + # If you're running a self hosted instance and wish to serve public links, + # set this to the URL where your albums web app is running. + public-albums: http://localhost:3002 + cast: http://localhost:3004 + # Set this to the URL where your accounts web app is running, primarily used for + # passkey based 2FA. + accounts: http://localhost:3001 + # Key used for encrypting customer emails before storing them in DB # # To make it easy to get started, some randomly generated (but fixed) values are @@ -65,12 +75,3 @@ key: jwt: secret: i2DecQmfGreG6q1vBj5tCokhlN41gcfS2cjOs9Po-u8= -# Specify the base endpoints for various web apps -apps: - # If you're running a self hosted instance and wish to serve public links, - # set this to the URL where your albums web app is running. - public-albums: http://localhost:3002 - cast: http://localhost:3004 - # Set this to the URL where your accounts web app is running, primarily used for - # passkey based 2FA. - accounts: http://localhost:3001 From 7c87f2753904bd479ca4f05c3c37565b4e8b3b6f Mon Sep 17 00:00:00 2001 From: Keerthana Date: Fri, 25 Jul 2025 18:54:27 +0530 Subject: [PATCH 16/20] [docs] rename topics for self-hosting --- docs/docs/.vitepress/sidebar.ts | 44 +++++++++--------- .../self-hosting/administration/backup.md | 2 +- docs/docs/self-hosting/administration/cli.md | 2 +- .../administration/object-storage.md | 2 +- .../administration/reverse-proxy.md | 2 +- .../mobile-build.md | 0 docs/docs/self-hosting/guides/index.md | 14 ++---- docs/docs/self-hosting/guides/systemd.md | 2 +- docs/docs/self-hosting/guides/tailscale.md | 2 +- docs/docs/self-hosting/index.md | 37 +++------------ .../{install => installation}/compose.md | 7 ++- .../{install => installation}/config.md | 2 +- .../docs/self-hosting/installation/connect.md | 0 .../{install => installation}/env-var.md | 4 +- .../{install => installation}/manual.md | 8 ++-- .../post-install/custom-server.png | Bin .../post-install/index.md | 19 ++++++-- .../web-custom-endpoint-indicator.png | Bin .../post-install/web-dev-settings.png | Bin .../{install => installation}/quickstart.md | 8 ++-- .../{install => installation}/requirements.md | 2 +- .../upgradation.md} | 2 +- .../self-hosting/troubleshooting/keyring.md | 15 ++---- .../docs/self-hosting/troubleshooting/misc.md | 2 +- .../self-hosting/troubleshooting/uploads.md | 23 +++------ .../docs/self-hosting/troubleshooting/yarn.md | 14 ------ 26 files changed, 82 insertions(+), 131 deletions(-) rename docs/docs/self-hosting/{developer => development}/mobile-build.md (100%) rename docs/docs/self-hosting/{install => installation}/compose.md (85%) rename docs/docs/self-hosting/{install => installation}/config.md (99%) create mode 100644 docs/docs/self-hosting/installation/connect.md rename docs/docs/self-hosting/{install => installation}/env-var.md (97%) rename docs/docs/self-hosting/{install => installation}/manual.md (95%) rename docs/docs/self-hosting/{install => installation}/post-install/custom-server.png (100%) rename docs/docs/self-hosting/{install => installation}/post-install/index.md (89%) rename docs/docs/self-hosting/{install => installation}/post-install/web-custom-endpoint-indicator.png (100%) rename docs/docs/self-hosting/{install => installation}/post-install/web-dev-settings.png (100%) rename docs/docs/self-hosting/{install => installation}/quickstart.md (76%) rename docs/docs/self-hosting/{install => installation}/requirements.md (97%) rename docs/docs/self-hosting/{install/upgrade.md => installation/upgradation.md} (96%) delete mode 100644 docs/docs/self-hosting/troubleshooting/yarn.md diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index 6bbb0cc842..4f66c9f0d7 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -239,48 +239,48 @@ export const sidebar = [ ], }, { - text: "Self hosting", + text: "Self-hosting", collapsed: true, items: [ { - text: "Get Started", + text: "Quickstart", link: "/self-hosting/", }, { - text: "Install", + text: "Installation", collapsed: true, items: [ { text: "Requirements", - link: "/self-hosting/install/requirements", + link: "/self-hosting/installation/requirements", }, { - text: "Quickstart Script (Recommended)", - link: "/self-hosting/install/quickstart", + text: "Quickstart script (Recommended)", + link: "/self-hosting/installation/quickstart", }, { text: "Docker Compose", - link: "/self-hosting/install/compose", + link: "/self-hosting/installation/compose", }, { - text: "Manual Setup (Without Docker)", - link: "/self-hosting/install/manual", + text: "Manual setup (without Docker)", + link: "/self-hosting/installation/manual", }, { - text: "Environment Variables and Defaults", - link: "/self-hosting/install/env-var", + text: "Environment variables and defaults", + link: "/self-hosting/installation/env-var", }, { text: "Configuration", - link: "/self-hosting/install/config", + link: "/self-hosting/installation/config", }, { - text: "Post-installation Steps", - link: "/self-hosting/install/post-install/", + text: "Post-installation steps", + link: "/self-hosting/installation/post-install/", }, { - text: "Upgrade", - link: "/self-hosting/install/upgrade/", + text: "Upgradation", + link: "/self-hosting/installation/upgradation", } ], @@ -290,15 +290,15 @@ export const sidebar = [ collapsed: true, items: [ { - text: "User Management", + text: "User management", link: "/self-hosting/administration/users", }, { - text: "Reverse Proxy", + text: "Reverse proxy", link: "/self-hosting/administration/reverse-proxy", }, { - text: "Object Storage", + text: "Object storage", link: "/self-hosting/administration/object-storage", }, { @@ -306,19 +306,19 @@ export const sidebar = [ link: "/self-hosting/administration/cli", }, { - text: "Backup and Restore", + text: "Backup", link: "/self-hosting/administration/backup", }, ], }, { - text: "Developer", + text: "Development", collapsed: true, items: [ { text: "Building mobile apps", - link: "/self-hosting/developer/mobile-build" + link: "/self-hosting/development/mobile-build" } ] }, diff --git a/docs/docs/self-hosting/administration/backup.md b/docs/docs/self-hosting/administration/backup.md index d391f49f81..b62aaf6e8f 100644 --- a/docs/docs/self-hosting/administration/backup.md +++ b/docs/docs/self-hosting/administration/backup.md @@ -1,5 +1,5 @@ --- -title: Backups +title: Backups - Self-hosting description: General introduction to backing up your self hosted Ente instance --- diff --git a/docs/docs/self-hosting/administration/cli.md b/docs/docs/self-hosting/administration/cli.md index bdd1743ff2..07240623c3 100644 --- a/docs/docs/self-hosting/administration/cli.md +++ b/docs/docs/self-hosting/administration/cli.md @@ -1,5 +1,5 @@ --- -title: Ente CLI for Self-hosted Instance +title: Ente CLI for Self-hosted Instance - Self-hosting description: Guide to configuring Ente CLI for Self Hosted Instance --- diff --git a/docs/docs/self-hosting/administration/object-storage.md b/docs/docs/self-hosting/administration/object-storage.md index 0d9852aa20..91a86c4698 100644 --- a/docs/docs/self-hosting/administration/object-storage.md +++ b/docs/docs/self-hosting/administration/object-storage.md @@ -1,5 +1,5 @@ --- -title: Configuring Object Storage +title: Configuring Object Storage - Self-hosting description: Configure Object Storage for storing files along with some troubleshooting tips --- diff --git a/docs/docs/self-hosting/administration/reverse-proxy.md b/docs/docs/self-hosting/administration/reverse-proxy.md index fb20a25afc..52867d814f 100644 --- a/docs/docs/self-hosting/administration/reverse-proxy.md +++ b/docs/docs/self-hosting/administration/reverse-proxy.md @@ -1,5 +1,5 @@ --- -Title: Configuring Reverse Proxy +Title: Configuring Reverse Proxy - Self-hosting Description: Configuring reverse proxy for Museum and other services --- diff --git a/docs/docs/self-hosting/developer/mobile-build.md b/docs/docs/self-hosting/development/mobile-build.md similarity index 100% rename from docs/docs/self-hosting/developer/mobile-build.md rename to docs/docs/self-hosting/development/mobile-build.md diff --git a/docs/docs/self-hosting/guides/index.md b/docs/docs/self-hosting/guides/index.md index 407cbe244f..e70dd690a1 100644 --- a/docs/docs/self-hosting/guides/index.md +++ b/docs/docs/self-hosting/guides/index.md @@ -1,5 +1,5 @@ --- -title: Self Hosting +title: Guides - Self-hosting description: Guides for self hosting Ente Photos and/or Ente Auth --- @@ -10,14 +10,8 @@ walkthroughs, tutorials and other FAQ pages in this directory. See the sidebar for existing guides. In particular: -- If you're just looking to get started, see - [configure custom server]. +- If you're just looking to get started, see installation. -- For various admin related tasks, e.g. increasing the storage quota on your - self hosted instance, see [administering your custom server]. +- For various administrative tasks, e.g. increasing the storage quota for user on your self-hosted instance, see [user management](/self-hosting/administration/users). -- For configuring your S3 buckets to get the object storage to work from your - mobile device or for fixing an upload errors, see - configuring S3. There is also a longer - community contributed guide for a more self hosted setup of - both the server and web app using external S3 buckets for object storage. +- For configuring your S3 buckets to get the object storage to work from your mobile device or for fixing an upload errors, see [object storage](/self-hosting/administration/object-storage). diff --git a/docs/docs/self-hosting/guides/systemd.md b/docs/docs/self-hosting/guides/systemd.md index 2a7bd08d4b..47fbe5ce0e 100644 --- a/docs/docs/self-hosting/guides/systemd.md +++ b/docs/docs/self-hosting/guides/systemd.md @@ -14,6 +14,6 @@ Please check the below links if you want to run Museum as a service, both of the 1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323) 2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4) -Once you are done with setting and running Museum, all you are left to do is run the web app and set up reverse proxy. Check out the documentation for [more information](/self-hosting/install/manual#step-3-configure-web-application). +Once you are done with setting and running Museum, all you are left to do is run the web app and set up reverse proxy. Check out the documentation for [more information](/self-hosting/installation/manual#step-3-configure-web-application). > **Credits:** [mngshm](https://github.com/mngshm) \ No newline at end of file diff --git a/docs/docs/self-hosting/guides/tailscale.md b/docs/docs/self-hosting/guides/tailscale.md index 43aadca7a2..e7f5975f8a 100644 --- a/docs/docs/self-hosting/guides/tailscale.md +++ b/docs/docs/self-hosting/guides/tailscale.md @@ -1,5 +1,5 @@ --- -title: Self Hosting with Tailscale (Community) +title: Self-hosting with Tailscale - Self-hosting description: Guides for self-hosting Ente Photos and/or Ente Auth with Tailscale --- diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md index e8ff85a6a1..31532b8557 100644 --- a/docs/docs/self-hosting/index.md +++ b/docs/docs/self-hosting/index.md @@ -1,9 +1,9 @@ --- -title: Get Started - Self-hosting +title: Quickstart - Self-hosting description: Getting started with self-hosting Ente --- -# Get Started +# Quickstart If you're looking to spin up Ente on your server for preserving those sweet memories or using Auth for 2FA codes, you are in the right place! @@ -21,7 +21,7 @@ ways of self-hosting Ente on your server as described in the documentation. - [Docker Compose](https://docs.docker.com/compose/) > For more details, check out the -> [requirements page](/self-hosting/install/requirements). +> [requirements page](/self-hosting/installation/requirements). ## Set up the server @@ -42,8 +42,6 @@ directory, prompts to start the cluster with needed containers after pulling the ## Try the web app -The first user to be registered will be treated as the admin user. - Open Ente Photos web app at `http://:3000` (or `http://localhost:3000` if using on same local machine) and select **Don't have an account?** to create a new user. @@ -54,8 +52,7 @@ Follow the prompts to sign up. ![Sign Up Page](/sign-up.png) -You will be prompted to enter verification code. Check the cluster logs using -`sudo docker compose logs` and enter the same. +You will be prompted to enter verification code. Check the cluster logs using `sudo docker compose logs` and enter the same. ![Verification Code](/otp.png) @@ -65,33 +62,13 @@ Alternatively, if using Ente Auth, get started by adding an account (assuming yo ## Try the mobile app -### Install the Mobile App +You can install Ente Photos from [here](/photos/faq/installing) and Ente Auth from [here](/auth/faq/installing). -You can install Ente Photos by following the [installation section](/photos/faq/installing). - -Alternatively, you can install Ente Auth (if you are planning to use Auth) by following the [installation section](/auth/faq/installing). - -### Login to the Mobile App - -Tap the onboarding screen 7 times to modify developer settings. - -
-Developer Settings -
- -
-Enter your Ente server's endpoint. -
- -
-Developer Settings - Server Endpoint -
- -You should be able to access the uploaded picture from the web user interface. +Connect to your server from [mobile apps](/self-hosting/installation/post-install/#step-6-configure-apps-to-use-your-server). ## What next? -Now that you have spinned up a cluster in quick manner, you may wish to install using a different way for your needs. Check the "Install" section for information regarding that. +Now that you have spinned up a cluster in quick manner, you may wish to install using a different way for your needs. Check the "Installation" section for information regarding that. You can import your pictures from Google Takeout or from other services to Ente Photos. For more information, check out our [migration guide](/photos/migration/). diff --git a/docs/docs/self-hosting/install/compose.md b/docs/docs/self-hosting/installation/compose.md similarity index 85% rename from docs/docs/self-hosting/install/compose.md rename to docs/docs/self-hosting/installation/compose.md index 3aa60ce9ab..b6515aadf0 100644 --- a/docs/docs/self-hosting/install/compose.md +++ b/docs/docs/self-hosting/installation/compose.md @@ -1,5 +1,5 @@ --- -title: Docker Compose +title: Docker Compose - Self-hosting description: Running Ente with Docker Compose from source --- @@ -9,8 +9,7 @@ If you wish to run Ente via Docker Compose from source, do the following: ## Requirements -Check out the [requirements](/self-hosting/install/requirements) page to get -started. +Check out the [requirements](/self-hosting/installation/requirements) page to get started. ## Step 1: Clone the repository @@ -51,5 +50,5 @@ docker compose up --build This builds Museum and web applications based on the Dockerfile and starts the containers needed for Ente. ::: tip -Check out [post-installation steps](/self-hosting/install/post-install/) for further usage. +Check out [post-installation steps](/self-hosting/installation/post-install/) for further usage. ::: \ No newline at end of file diff --git a/docs/docs/self-hosting/install/config.md b/docs/docs/self-hosting/installation/config.md similarity index 99% rename from docs/docs/self-hosting/install/config.md rename to docs/docs/self-hosting/installation/config.md index 794e095cb5..bdddbde65a 100644 --- a/docs/docs/self-hosting/install/config.md +++ b/docs/docs/self-hosting/installation/config.md @@ -1,5 +1,5 @@ --- -title: "Configuration - Self-hosting" +title: Configuration - Self-hosting description: "Information about all the configuration variables needed to run Ente with museum.yaml" diff --git a/docs/docs/self-hosting/installation/connect.md b/docs/docs/self-hosting/installation/connect.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/docs/self-hosting/install/env-var.md b/docs/docs/self-hosting/installation/env-var.md similarity index 97% rename from docs/docs/self-hosting/install/env-var.md rename to docs/docs/self-hosting/installation/env-var.md index ee60836ab4..4589ef806a 100644 --- a/docs/docs/self-hosting/install/env-var.md +++ b/docs/docs/self-hosting/installation/env-var.md @@ -1,11 +1,11 @@ --- -title: "Environment Variables and Defaults - Self-hosting" +title: Environment variables and defaults - Self-hosting description: "Information about all the configuration variables needed to run Ente along with description on default configuration" --- -# Environment Variables and Defaults +# Environment variables and defaults The environment variables needed for running Ente and the default configuration are documented below: diff --git a/docs/docs/self-hosting/install/manual.md b/docs/docs/self-hosting/installation/manual.md similarity index 95% rename from docs/docs/self-hosting/install/manual.md rename to docs/docs/self-hosting/installation/manual.md index 1a61a89726..9e62485be3 100644 --- a/docs/docs/self-hosting/install/manual.md +++ b/docs/docs/self-hosting/installation/manual.md @@ -1,9 +1,9 @@ --- -title: Manual Setup (Without Docker) - Self-hosting +title: Manual setup (without Docker) - Self-hosting description: Installing and setting up Ente without Docker --- -# Manual Setup (Without Docker) +# Manual setup (without Docker) If you wish to run Ente from source without using Docker, follow the steps described below: @@ -188,8 +188,8 @@ relative to `server` directory } ``` - The web application for Ente Photos should be accessible at http://localhost:3000, check out the [default ports](/self-hosting/install/env-var#ports) for more information. + The web application for Ente Photos should be accessible at http://localhost:3000, check out the [default ports](/self-hosting/installation/env-var#ports) for more information. ::: tip -Check out [post-installation steps](/self-hosting/install/post-install/) for further usage. +Check out [post-installation steps](/self-hosting/installation/post-install/) for further usage. ::: \ No newline at end of file diff --git a/docs/docs/self-hosting/install/post-install/custom-server.png b/docs/docs/self-hosting/installation/post-install/custom-server.png similarity index 100% rename from docs/docs/self-hosting/install/post-install/custom-server.png rename to docs/docs/self-hosting/installation/post-install/custom-server.png diff --git a/docs/docs/self-hosting/install/post-install/index.md b/docs/docs/self-hosting/installation/post-install/index.md similarity index 89% rename from docs/docs/self-hosting/install/post-install/index.md rename to docs/docs/self-hosting/installation/post-install/index.md index 83adf66ede..4290beb355 100644 --- a/docs/docs/self-hosting/install/post-install/index.md +++ b/docs/docs/self-hosting/installation/post-install/index.md @@ -3,7 +3,7 @@ title: Post-installation steps - Self-hosting description: Steps to be followed post-installation for smooth experience --- -# Post-installation Steps +# Post-installation steps A list of steps that should be done after installing Ente are described below: @@ -114,10 +114,19 @@ You can modify Ente mobile apps and CLI to connect to your server. ### Mobile -Tap 7 times on the onboarding screen to configure the -server endpoint to be used. +Tap the onboarding screen 7 times to modify developer settings. -![Setting a custom server on the onboarding screen](custom-server.png) +
+Developer Settings +
+ +
+Enter your Ente server's endpoint. +
+ +
+Developer Settings - Server Endpoint +
### Desktop @@ -137,5 +146,5 @@ You can download Ente CLI from [here](https://github.com/ente-io/ente/releases?q Check our [documentation](/self-hosting/administration/cli) on how to use Ente CLI for managing self-hosted instances. ::: info For upgradation -Check out our [documentation](/self-hosting/install/upgrade) for various installation methods. +Check out our [upgradation documentation](/self-hosting/installation/upgradation) for various installation methods. ::: \ No newline at end of file diff --git a/docs/docs/self-hosting/install/post-install/web-custom-endpoint-indicator.png b/docs/docs/self-hosting/installation/post-install/web-custom-endpoint-indicator.png similarity index 100% rename from docs/docs/self-hosting/install/post-install/web-custom-endpoint-indicator.png rename to docs/docs/self-hosting/installation/post-install/web-custom-endpoint-indicator.png diff --git a/docs/docs/self-hosting/install/post-install/web-dev-settings.png b/docs/docs/self-hosting/installation/post-install/web-dev-settings.png similarity index 100% rename from docs/docs/self-hosting/install/post-install/web-dev-settings.png rename to docs/docs/self-hosting/installation/post-install/web-dev-settings.png diff --git a/docs/docs/self-hosting/install/quickstart.md b/docs/docs/self-hosting/installation/quickstart.md similarity index 76% rename from docs/docs/self-hosting/install/quickstart.md rename to docs/docs/self-hosting/installation/quickstart.md index bcb371e672..ca28f20301 100644 --- a/docs/docs/self-hosting/install/quickstart.md +++ b/docs/docs/self-hosting/installation/quickstart.md @@ -1,16 +1,16 @@ --- -title: Quickstart Script (Recommended) - Self-hosting +title: Quickstart script (Recommended) - Self-hosting description: Self-hosting Ente with quickstart script --- -# Quickstart Script (Recommended) +# Quickstart script (Recommended) We provide a quickstart script which can be used for self-hosting Ente on your machine in less than a minute. ## Requirements -Check out the [requirements](/self-hosting/install/requirements) page to get +Check out the [requirements](/self-hosting/installation/requirements) page to get started. ## Getting started @@ -31,5 +31,5 @@ The data accessed by Museum is stored in `./data` folder inside `my-ente` direct It contains extra configuration files that is to be used (push notification credentials, etc.) ::: tip -Check out [post-installations steps](/self-hosting/install/post-install/) for further usage. +Check out [post-installations steps](/self-hosting/installation/post-install/) for further usage. ::: \ No newline at end of file diff --git a/docs/docs/self-hosting/install/requirements.md b/docs/docs/self-hosting/installation/requirements.md similarity index 97% rename from docs/docs/self-hosting/install/requirements.md rename to docs/docs/self-hosting/installation/requirements.md index 7cfb908f08..a2e5f2f933 100644 --- a/docs/docs/self-hosting/install/requirements.md +++ b/docs/docs/self-hosting/installation/requirements.md @@ -1,5 +1,5 @@ --- -title: Requirements +title: Requirements - Self-hosting description: Requirements for self-hosting Ente --- diff --git a/docs/docs/self-hosting/install/upgrade.md b/docs/docs/self-hosting/installation/upgradation.md similarity index 96% rename from docs/docs/self-hosting/install/upgrade.md rename to docs/docs/self-hosting/installation/upgradation.md index 53c62860a8..b4b11a70bc 100644 --- a/docs/docs/self-hosting/install/upgrade.md +++ b/docs/docs/self-hosting/installation/upgradation.md @@ -56,7 +56,7 @@ based on the updated source code. git pull ``` -2. Follow the steps described in [manual setup](/self-hosting/install/manual) for Museum and web applications. +2. Follow the steps described in [manual setup](/self-hosting/installation/manual) for Museum and web applications. ::: tip diff --git a/docs/docs/self-hosting/troubleshooting/keyring.md b/docs/docs/self-hosting/troubleshooting/keyring.md index a521a13c27..8ef322ff7a 100644 --- a/docs/docs/self-hosting/troubleshooting/keyring.md +++ b/docs/docs/self-hosting/troubleshooting/keyring.md @@ -1,13 +1,11 @@ --- -title: Ente CLI Secrets +title: Ente CLI Secrets - Self-hosting description: A quick hotfix for keyring errors while running Ente CLI. --- # Ente CLI Secrets -Ente CLI makes use of system keyring for storing sensitive information like your -passwords. And running the CLI straight out of the box might give you some -errors related to keyrings in some case. +Ente CLI makes use of system keyring for storing sensitive information like your passwords. And running the CLI straight out of the box might give you some errors related to keyrings in some case. Follow the below steps to run Ente CLI and also avoid keyrings errors. @@ -20,15 +18,12 @@ export ENTE_CLI_SECRETS_PATH=./ ./ente-cli ``` -You can also add the above line to your shell's rc file, to prevent the need to -export manually every time. +You can also add the above line to your shell's rc file, to prevent the need to export manually every time. Then one of the following: -1. If the file doesn't exist, Ente CLI will create it and fill it with a random - 32 character encryption key. -2. If you do create the file, please fill it with a cryptographically generated - 32 byte string. +1. If the file doesn't exist, Ente CLI will create it and fill it with a random 32 character encryption key. +2. If you do create the file, please fill it with a cryptographically generated 32 byte string. And you are good to go. diff --git a/docs/docs/self-hosting/troubleshooting/misc.md b/docs/docs/self-hosting/troubleshooting/misc.md index 8da0e8d141..da901c04c8 100644 --- a/docs/docs/self-hosting/troubleshooting/misc.md +++ b/docs/docs/self-hosting/troubleshooting/misc.md @@ -1,5 +1,5 @@ --- -title: General troubleshooting cases +title: General troubleshooting cases - Self-hosting description: Fixing various errors when trying to self host Ente --- diff --git a/docs/docs/self-hosting/troubleshooting/uploads.md b/docs/docs/self-hosting/troubleshooting/uploads.md index ad1cf2b74d..28761da80e 100644 --- a/docs/docs/self-hosting/troubleshooting/uploads.md +++ b/docs/docs/self-hosting/troubleshooting/uploads.md @@ -1,5 +1,5 @@ --- -title: Uploads +title: Uploads - Self-hosting description: Fixing upload errors when trying to self host Ente --- @@ -8,19 +8,14 @@ description: Fixing upload errors when trying to self host Ente Here are some errors our community members frequently encountered with the context and potential fixes. -Fundamentally in most situations, the problem is because of minor mistakes or -misconfiguration. Please make sure to reverse proxy museum and MinIO API -endpoint to a domain and check your S3 credentials and whole configuration file -for any minor misconfigurations. +Fundamentally in most situations, the problem is because of minor mistakes or misconfiguration. Please make sure to reverse proxy Museum and MinIO API +endpoint to a domain and check your S3 credentials and whole configuration file for any minor misconfigurations. -It is also suggested that the user setups bucket CORS or global CORS on MinIO or -any external S3 service provider they are connecting to. To setup bucket CORS, -please [read this]. +It is also suggested that the user setups bucket CORS or global CORS on MinIO or any external S3 service provider they are connecting to. To setup bucket CORS, please [read this](/self-hosting/administration/object-storage#cors-cross-origin-resource-sharing). ## 403 Forbidden -If museum is able to make a network connection to your S3 bucket but uploads are -still failing, it could be a credentials or permissions issue. +If museum is able to make a network connection to your S3 bucket but uploads are still failing, it could be a credentials or permissions issue. A telltale sign of this is that in the museum logs you can see `403 Forbidden` errors about it not able to find the size of a file even though the @@ -34,12 +29,8 @@ This could be because headers configuration too. [Here is an example of a working configuration](https://github.com/ente-io/ente/discussions/1764#discussioncomment-9478204). -2. The credentials are not being picked up (you might be setting the correct - credentials, but not in the place where museum reads them from). +2. The credentials are not being picked up (you might be setting the correct credentials, but not in the place where museum reads them from). ## Mismatch in file size -The "Mismatch in file size" error mostly occurs in a situation where the client -is re-uploading a file which is already in the bucket with a different file -size. The reason for re-upload could be anything including network issue, sudden -killing of app before the upload is complete and etc. +The "Mismatch in file size" error mostly occurs in a situation where the client is re-uploading a file which is already in the bucket with a different file size. The reason for re-upload could be anything including network issue, sudden killing of app before the upload is complete and etc. diff --git a/docs/docs/self-hosting/troubleshooting/yarn.md b/docs/docs/self-hosting/troubleshooting/yarn.md deleted file mode 100644 index 4cc62c405b..0000000000 --- a/docs/docs/self-hosting/troubleshooting/yarn.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Yarn errors -description: Fixing yarn install errors when trying to self host Ente ---- - -# Yarn - -If `yarn install` is failing, make sure you are using Yarn v1 (also known as -"Yarn Classic"): - -- https://classic.yarnpkg.com/lang/en/docs/install - -For more details, see the -[getting started instructions](https://github.com/ente-io/ente/blob/main/web/docs/new.md). From 2b4ed5b43c034942451137ac758e1b657dfd8afc Mon Sep 17 00:00:00 2001 From: Keerthana Date: Fri, 25 Jul 2025 19:22:23 +0530 Subject: [PATCH 17/20] [docs] fix dead links --- docs/docs/.vitepress/sidebar.ts | 2 +- docs/docs/self-hosting/administration/cli.md | 6 +++--- docs/docs/self-hosting/administration/reverse-proxy.md | 9 +++------ docs/docs/self-hosting/index.md | 7 ++----- docs/docs/self-hosting/installation/config.md | 3 +-- docs/docs/self-hosting/troubleshooting/docker.md | 6 ------ 6 files changed, 10 insertions(+), 23 deletions(-) diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index 4f66c9f0d7..37ae55edc1 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -331,7 +331,7 @@ export const sidebar = [ link: "/self-hosting/guides/tailscale", }, { - text: "Running Ente with systemd", + text: "Running Ente using systemd", link: "/self-hosting/guides/systemd", }, ], diff --git a/docs/docs/self-hosting/administration/cli.md b/docs/docs/self-hosting/administration/cli.md index 07240623c3..6b98a91247 100644 --- a/docs/docs/self-hosting/administration/cli.md +++ b/docs/docs/self-hosting/administration/cli.md @@ -22,10 +22,10 @@ endpoint: api: http://localhost:8080 ``` -## Step 2: Whitelist admin user +## Step 2: Whitelist admins -You can whitelist administrator user by following this -[guide](/self-hosting/administration/users#whitelist-admins) +You can whitelist administrator users by following this +[guide](/self-hosting/administration/users#whitelist-admins). ## Step 3: Add an account diff --git a/docs/docs/self-hosting/administration/reverse-proxy.md b/docs/docs/self-hosting/administration/reverse-proxy.md index 52867d814f..1f90bf77de 100644 --- a/docs/docs/self-hosting/administration/reverse-proxy.md +++ b/docs/docs/self-hosting/administration/reverse-proxy.md @@ -25,15 +25,12 @@ although you can use other alternatives such as NGINX, Traefik, etc. sudo apt install caddy ``` - Start the service, enable it to start upon system boot and reload when configuration - has changed. + Start the service and enable it to start upon system boot. ``` shell sudo systemctl start caddy sudo systemctl enable caddy - - sudo systemctl reload caddy ``` ## Step 1: Configure A or AAAA records @@ -54,7 +51,7 @@ After installing Caddy, `Caddyfile` is created at You can edit the minimal configuration provided below for your own needs. -> yourdomain.tld is an example. Replace it with your own domain +> yourdomain.tld is an example. Replace it with your own domain. ```groovy # For Museum @@ -90,7 +87,7 @@ cast.ente.yourdomain.tld { ## Step 3: Reload reverse proxy -Reload Caddy for changes to take effect +Reload Caddy for changes to take effect. ``` shell sudo systemctl caddy reload diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md index 31532b8557..1ba4dd6e10 100644 --- a/docs/docs/self-hosting/index.md +++ b/docs/docs/self-hosting/index.md @@ -5,15 +5,12 @@ description: Getting started with self-hosting Ente # Quickstart -If you're looking to spin up Ente on your server for preserving those -sweet memories or using Auth for 2FA codes, you are in the right place! +If you're looking to spin up Ente on your server , you are in the right place! Our entire source code ([including the server](https://ente.io/blog/open-sourcing-our-server/)) is open source. This is the same code we use on production. -For a quick preview of Ente on your server, make sure your system meets the -requirements mentioned below. After trying the preview, you can explore other -ways of self-hosting Ente on your server as described in the documentation. +For a quick preview, make sure your system meets the requirements mentioned below. After trying the preview, you can explore other ways of self-hosting Ente on your server as described in the documentation. ## Requirements diff --git a/docs/docs/self-hosting/installation/config.md b/docs/docs/self-hosting/installation/config.md index bdddbde65a..e00543ce78 100644 --- a/docs/docs/self-hosting/installation/config.md +++ b/docs/docs/self-hosting/installation/config.md @@ -100,8 +100,7 @@ your provider's credentials, and set `are_local_buckets` to `false`. MinIO uses the port `3200` for API Endpoints. Web Console can be accessed at http://localhost:3201 by enabling port `3201` in the Compose file. -If you face any issues related to uploads then checkout [Troubleshooting bucket -CORS] and [Frequently encountered S3 errors]. +If you face any issues related to uploads then check out [CORS](/self-hosting/administration/object-storage#cors-cross-origin-resource-sharing) and [troubleshooting](/self-hosting/troubleshooting/uploads) sections. | Variable | Description | Default | | -------------------------------------- | -------------------------------------------- | ------- | diff --git a/docs/docs/self-hosting/troubleshooting/docker.md b/docs/docs/self-hosting/troubleshooting/docker.md index 8a7c1462e7..39cce15e18 100644 --- a/docs/docs/self-hosting/troubleshooting/docker.md +++ b/docs/docs/self-hosting/troubleshooting/docker.md @@ -45,15 +45,12 @@ minio-provision: entrypoint: | sh -c ' #!/bin/sh - while ! mc alias set h0 http://minio:3200 your_minio_user your_minio_pass do echo "waiting for minio..." sleep 0.5 done - cd /data - mc mb -p b2-eu-cen mc mb -p wasabi-eu-central-2-v3 mc mb -p scw-eu-fr-v3 @@ -162,15 +159,12 @@ Thus the updated `post_start` will look as follows for `minio` service: - command: | sh -c ' #!/bin/sh - while ! mc alias set h0 http://minio:3200 your_minio_user your_minio_pass 2>/dev/null do echo "Waiting for minio..." sleep 0.5 done - cd /data - mc mb -p b2-eu-cen mc mb -p wasabi-eu-central-2-v3 mc mb -p scw-eu-fr-v3 From 754dd483676687a6ebf3ac33db935bf9be6a2ce0 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Fri, 25 Jul 2025 19:52:26 +0530 Subject: [PATCH 18/20] [docs] update quickstart --- docs/docs/public/onboarding.png | Bin 80801 -> 17124 bytes docs/docs/public/sign-up.png | Bin 96148 -> 30102 bytes docs/docs/self-hosting/index.md | 19 +++++++++---------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/docs/docs/public/onboarding.png b/docs/docs/public/onboarding.png index 32b18f73f263780ad50c3bd212e88cb4ffaf4b56..8e35998d5f0e7b68b0a2ab9e414ab33c694cddf2 100644 GIT binary patch literal 17124 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 literal 80801 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
;Yr`^gGF*{#zSD4*C=l zb>RMZSN`X=XrG#bmxy9N1h5E^Z&=(27q3wdH{h3eEJ1;Tdko*{1Q!mkOxA-E^MkP! z@QeoiD1Jfy*ruonZF66e*s|VicSQjr!%D}K);Vta`@qepMh5#8kH;>SMvKgyU=3(C z*fI~8hw%Xvp&WKz3+mDr*@oYa&>= zJJ%Etcd-oFbEVYyn*;#E((NHILJy)|Llaby9N#p1Z$!mQSpI-BcrkUZ(|t2o=f-d- zM~!e@VEeuXU)?Leba}UCxW0EZX!1LZ zqb*_+F0do3aeg@GSJq@}wu<_40ZnW%r4u{a)Iu0&VIh!eP!hv^I7W&Yr58xF2*1<7 z)Q)xuhUToPz3ndV29`G|a!Q%gGxs#hpzI*|V=_a>W zcSD$_zdarWOtk;THv6&@9|r~6hCJMoAG|n2R#B5DYeHZ8V=p5A@2E;A{QGfShQ~3B|z?PYK7N zI;GtDiqifUzcfc(#dO!O@q+481%-?C>*G0%`Y3ZiwT$*)?^=UetViR67tCVuVLe_x47%1(Nt6Yz2B<1B*T(m?a<+`H9ZRu|d4|uH5 z=L%JdO~47Y@P39#W;?5ag}#5VBtxpAWh+TwXq{`#b$bk z(BVccUrISOGd#QY_PxF?^)aovr89ny;tA&g^1ZY)`?#lo<)8}*f$Rr-6~n`Vx4V=h zJc+w~Pb7W$uSETrsQ8!~fp)3*O`zXZr1YDZR_zFcgj}TR1lWWzc8mRs}5Jntnf@^+6gZPE% ztY|gDAEHnXRiU7!a0D(11h6WUGY)p81=E^G=^CQcUTCK0TP@Pj?U7a^6-hp-#X>sE z@LSmNh=dFwFz>3tL=QX0{2xtJCR%#cw#od3CQJn_7%Oj!S4^(o(h~8Q61Xkn@~*qd ztoiqF9F-$J%Dht5-MpS8>qhO-}xm52y=^g?yv<2qxNYgvOZ>>>AWF!@?MrDd<+4f{|4SJ>s zS?Omnib*%W+I01vZ8fxBPStSND04K!v8>6hTV3A=x3hy4d=oY*ta6P8w*^V-bPYW+ zad73WAa9 zRYg^s8yS@>^Q~9cu&-iFTcdXVa0xW1CY!C!f;x9(~ zESHy}$KhG8i>636bWNJOJ#RHzG-_%mf;wm2ariM2ZG=LqtVfZ`&rIly1G$dU+-+iJ zIF)x3XBAqU-`@Y4PC2{_aLX@#msgwh`gT}sJGRSedRuIvQ`i^(*z6mh1? z=9ptQp$3RrA>n+CNdu|)^2=U3@6{vPfFp06fg>FKE_yPzY^rK7mKNLh*O#PqQXqXK zTt~!Y;o4I(K$*j0?mWkiWr#ttgtiu``Ab4ax&CLFwiS`L4~%u;_talwOpsRnk=o&; z*-1|a-14XPHQME^&Dv*3RH2`tO)o18NAM#BGVilb!LE7Q19o)jH>wGx}z z!_K5A)uB^Tz8jeF{V?MzXS)gOcTaE*Ur6z@D;^q~`VCC7k2fr{q8sSeyKu$*(6f*p zAoF~%GD;eMBe_Ut!2om&3%l%1%r&%G4tG{fSZABc17@48>&e5urm76qT=O-y9t)Zp z@ocAYU~nn>#KM=27PkscsWdM|rBp4-O09nSVUtAMI{fziX@J>1ZP|@-rvdwVhQz^p zNI9eOi`1JWPudPysOo*60YyzaVYQqOA=Qo=m!denS;ke(m4Nx%YWv+5sOnBe_%V#!2g03z3m95_cCc^#^MBpc*<}V@7i#EeB24nc2ztM?jj1y5k)1wTrS~$ zKy`#tf`ov@GO&87*N$)=l7Bb`x4-knFlJ=Hp?=t) z^cFos$C697O%fCm7Z@e|Y@siigAwH%@4H?LI70rugn88yG+2b(Cwcf5{2uPrpAlP8 zaQ%L6lGRV~7BrF{)()(S)5tq-6%kh-_-3)=$3OluvUb z@gwZ``XK>UH=!3uBuTqNNA5#WX1TAH(WJXi>skOMO8sjY&%M}rCsNC?cBy_zi9i}D z&CMtq>6_Dg+>!frN>_e>Zo{xGhFGJlt2;ql?foE}p}<`K?0frbUL}hz6jD(GKzb#n zegqC%gz9b^*W@J-o`$g9k0%4}FFAcRr=E_Td^Yjhb(&97z{Cl+W2lJLf>z3Fp@E|Q z+1)g-jz^*a-JC(VPpTr;&LIA0QHF#=3Ix^#X(&C0cf2kwWrXiw3_kSCRS&*E3Vto& z?S}Cc3*Om*%YD~37yJ$y7|R{*g{hiEC2Eavwx1wzx{G@Ky~M8 z&ghPYo{_fXvf}Mrw3e}nCvo(FYwY^r|DfzW6}30DXQ&x7YVSRQh}a`W>=omm@ALcrKF{;^d7GDa?(4eFIoG+)4KPE! zhi>@IrqPZ}UN&quC?HIP^&0hylTc2j35vY+HZC@sm6E!OfEOi1!TJl05cal|iYVfP zn*pd`9=wl%2RXF@%i{XG)RMS3GxlV~FMJ6f;CV4Jgw7XUJCLEC^IV?yFVR`E$QtA9 z0a|DMve%4SCEunx9rmgp@sH~lm_$5rus(WmDeXY?7{7WQEk#8|XJ<8yN&w-!!DeYC zsF35%pHvlvS=wVLo*dbeX{VA>{Z}ZnK|PlP;TKZxd9pQA8e$loTeV!eWy!j|d2z=H z43M~lbU%Ua`k4YS#bnkah)LpfvWKcAOQFK%>s!q6;%Hi%qWGqlQnQR4sp+fRJ4`i( zJgD;2>#~ek=NQGl9_g0IGhXJ6_u6juv+hAYMpdBr9=+`hMtPDAG*qQEh1htw&`)?}0ED|&PY zUgTBkSl()<|4UuLHzyC40iD|rwB3Jc1T9{%Qp9500tnRK!MD>j@Q_R2{q9ltFb6@zf%c*3Se5V&U;A;20bgWH9UI%^ z2{AO`W+$;(_SBizf2^zeuu`v5II2mA`|st zCPnIJvXYgRZ@BbhS>*Lbvl)H&Ya;!$84%6>pX2QXC8Ddq&sA^>woK6EY*KRo^ORtY zXLK~A4&I6%A5!-vKGUf_H4ZCPb&AFn(etWJuG_Byuj5`agB5ZD`nhQU6e?q-uot#q*?07__<3yZYj2?uRu7&Eux|1;e3c{Z>_>!7Lk@ zMi1s6vGYjsJCj~KIvV|3Xgt>G4ieCGM)wNHqgEU1aFo*b;So;mDc76#_*U(WDAa93F4L)EbK2|cGnfhmc@@)*u;X}pY~ zhS-t(GZRy8YMG0W+3Z_LBer!?<0K5T%6L(g=tkQuwBo>MU6;er;l(od`pE6OstVBY zo*mo>{`b#}{7XrkDW-m40$ElM_)0#?q}{t@*59~a zM+rW}NFyHKY@VE~DCu>wUt_nXKjYg{mc&k`(U+}6u+X<}ESWH&;S_f!xtEGTc zegeCqAm%?FC^W-Y%^H=wJYTaiIB;9bfvun3CT0}O1O7|Tpy9axf6u?~JtaE%{teqW zwHscg`m1S5zd|V^?^?Z$!Jm_d-tES0 zaMF5dbj}=mwQpGJ|LmkzPUY!ORrv zB4|z6Qw+*RLMkV%P{+YRxEeEVocEs$#O4*D+wTX{bJWEliaUY*>eC-9t3o>4%Jp)< z>%V?$t1EruUX?2$G?CG_PiD;$grI$v{K(h*(#Iu^-mqLp<80K(q9X@lC0nsax~s{2 zPz--BDRbkDGQ;!zmD`yfH>R4%ptW|?>-7vhpMFB;S@)ej6Ee%=RiD!tPE#*X*|9$v zIbWM<=Vkl%(x+8pY=?4`lOTa zxzU9bhlc10cB#Op`xd#;`hvg63v3dB`W_ozh$tNot&2VUAFJ;$KM`~IwR~XfAyK2% z6hF9khTXj8(xYDh4|6XH6UQp5+fgUnNjxuZz+@W$R|Hl&zgtStw2WyuENn$Mu>;7)otsFdE}2A@9jJMoi>F_>c&su*>Js1wY05=CwDOD z2A4COyhC07Kc$glv0P01gq8CZ;W%C{Qc}D0avIWfBRLnjM!Ql+j+VQj8jOGsOH|#h z-@Y^}FiF|YA%w6vA1+j^IW_d&F}uEO*BR=IUNhI5Hs2{+r&VW$Z{P@^hWw06i=>bG z9F)x0DYKp{!rEmIH=^p5>h(0s#>sAnR|_WxVOhU<_lt!G5Na%I44|nlOg(llU})y& z@+0;P&3aBUr?HmHxAR%p;+||a{x$oyV~d=hK_3SGlhA~mtRwO(I2oMZSeTqJg@L7h zwB)M~!XiYc`T1T=EV?VOe&31S=KVTW^K%diI`@m$=c1;Y#^KpiiZvhGs?N+vJ?uGt z?^<(bPV$+;25h-On1RRJF3yw}#6jd;1Jb6r6fQ9L8(qDdSg)d`#Xotvp>G>lx5BpP9x|FBlhw3K@uz_ zA}PQ)vz)7!`75t{%i0zqpAokDV>vnF!uX_|dEpU+#c)K##2;+($0)PvzPdHygJZn@ zbA)dTuV6E_9G`G7D5I`YHFJ)k2C#;u!xScw)rJnlIIHz7JGh&&<(K88ZAQUS@F77-z=HT732{J7uB{D{aH7)P3h?J)${7bQ*O@m!0lR73x z)VYpCp6TGoBFK_6B9E?p>md$}Y<*^)bm#H~5Xd!`GI$B(5}APUK$Cu#_Dg<5@dq z!-m;MM}h+&+GoHYKDMXLZ}0gl5y69`%CDvWRV0XMB|GNnRW=fNE*|Y<($AY~4`>Sw zlHg<2v*F2pb0y~C##<$_Z1da3ZY9RWArQlQHN^R-n@u2@Z4V)4S*d~7bpD=ijKeyG9n3{>bIZKy`hX_YPR%q9c6w53n7heiDXF(#1dieV zyj#07`D?Bum5u>BZ^SoRb*i`t-ev?d9#BGQywa6Vf}^q70(eU7{h#{$Z@)h~(byDT zpL^|}Z>+C<5pIf5M27uTeY?8#sP?FA18|S54%yuJjd1Uyvc41oJ-37 zw~nzw+w^ZL_<28B_Gg^fist`mo$eFTp86@kz5{_&d>}0EFE#nuMrx|5fMl zhm3M#z9lwD+BuXDG zYRWdJKwp@SM3vH~ImJ!XW2PjYoC(Bmcv(pREoXB#7HN-aLK_j>h^5yS$&_Bms$5>qp5w2s=evL!TxnhTVc$o-j7%0Z zDsqSH^y=~W4tOH-+%?CKuzSf669iLNsN5az==J0#2TpJrq1)MVCCL9eXa~So;V~g$ zZOT7{y{>J%=+>b>n*{W`UvMnw+YRdA-S2tKJv9q;A7-`#oWUI6by@7z!$N^3Syx(da15M)r z3HM65Cx{FBEgGI}3X5*~ElvnpoZo{>rEk{#_Wtz0UVykEz$kp%$U=zd*D$Wk{RnF} zY*zgBj2FgOTPD>o?;NMa^EuCcF8Mn+u5W-uQg7A-r;bFMet^RbO>MW4DXC}Elq;E% z%!gHHUa+kfKUiubOSF^x)&rHS&s57c>Nl(Tigi|p;)JA~(;4ee(kl!}FLBp|rq|x9 z?9U2KlH(lQe1c1@%SK-~PHLhheU}X}i)z}GIn_8UP*437b~JtmIs;vo0dcT!(S>|#g<~$RO4uaU`HEt zIiEWOnQVW^xRDp`WX`9U_q@RJVOh7OCRdhWujMCU@xdqDXdC>Alp=Y)m%Pj#W6l~N za!|>#CUQG*aJ}gRLA2PXOab`=roeFw`0uim*Sg;S zq&8{HI^*_nRCWFK)NRzjZDyl`Oa z1Z4`xY4G^iXyF|&La+nl@FEAvvt;Dl%y0qq1LI&HlUV(+MtB*^ z>Kl8!xcpGA>aaIj9}B3Jv$~;W46l1CV#3l+G{~_M08{@H_tlyXBVB7u<)mH(c<7)# z8UNr}B+932WN(0KqQaxnn)bJcbdLX)sZ=g;t@TRS%*{iRWJ{X4nAA{Nc#T%sfY^#Z z{g)TFr3&02(mai3ai;x;)7NsTqW*MsSD9q&Al;<54tLeFOUImaZ(PKoi&HGD^kCmrOHwwdR>p6&r^4uZq;7-%q?ag$xJT~ln=gT30Yd;Qf1|y{P2-Pn zt-Kup?22cs;@`;YT?&^?NLkDptu!|cH2GC_)qK(u8U{)5&%CHL7=ykTJX7)HLSFzs zyxsG&PpQ`{qxr*57L0QCl&rk|c2icR`4rETTBqY`==u2w^A z_b0(!5%H3xNTc5B;S@Lpw$?FMss9A9|3Lhtacsps+~)e|n9S-31gXIPX1oo&=b&-vc1Q$sV7~{)bxXu6q-)WXkg~oIqzTX+Mr(o>?ZQm9Cdv zTQQK4-@PorJ>hK8Et9HC)7R6?*OMnj3?O1}zE;h@T}Zr_*QkD$-Hd+mF^4*k82vcV zX5bWA#s2A<30$~Fdvh($kH|R=Q^r_XqAs%qK*x@C3z?+RGJZL4aT41OPx>UnA0gh> zIJ8$Q@WhJt*_fp?9>dwwdrftLxP7yn&E_G4y>z(A_sf;g{FPj#>(Y+#s@mk81&paV zXC)ZF+dGh+2XMV^I_!ZW-Z~Xc9?hmzoMe)9Yq;9H32;C3}kVQmkeq_QH8k zb~$yusFWW?xU3*)4e0}jd7O;d9$B-WrCzn8X|+nSZUFqj?Ci-l+t_M~pGoM!1aZ z{=ULvI^3n6!JTh+en#zXI) zGlmoZ`L5e8SGY9!m&d}#S)dwHqjLowwqXEfs#?1WPNu5>;ivY+PXDzVH~;m?()p26quXP3FGNzZ#k zmFxi2;TKN+3|2rn63S{;^`{$cnv}kURgHR;?;M%w0yzl9A2Yni7xuq9(Rp;4QRXO~ z6gf=_qXv$S=q;Fea?h&>ym9-=uC_hvuV`{)I~w$|*W;5dLBT_3%Su*oefhGYQf&*} zq{$DkT*bi6s&^?*s49IM!Jsl5-()-c)oc#+Sk>zjndNhyvin)3?~OBW&E!Pk7~`DL z)U(_fc$eWTLGMM9LQKK-DxF<9;*n-j##?_|_zV(Qgo5Zow?@}pOPB4+Yu<-vWq2$Y zRdfLxdbSZ5p0Z8g{DcGtY(VmhOx?T?U9VKQBDPfPT;_7u0C;b3bPZkYzj@RW1h9Lv zaCyDeL>8cHos7TyF(^)E_ddooK9xQ6=95ach=>U1{lR`e*vTAz2Z7DQqZ^=54-c1N z0l^?KZjJ{ZNnYC4Q&71LX4V(EHeRoJ4HcFu>ZabzL?iyfaYZz92dOxTBiQxOf&ZNd zdi#Eq>4_`6O(fs&a+0J~FGOUQsUUQ>GuOeYzSWEKPm4=(Ugek&K6A0P~ZZlvn`H zZMwxzh2*sl8leb@4ETnh^Zm~2bFy;)(~HoMetZ7#H41qx{aKKZ`SaBvGtp&hC9^|2 z>94wtcv^bK4XWahcp-9EKzZ-OqQuGHYC}bbyOR)fpd3l7qBDJd5YMWewn3U)oZ-x` z@Ki~rfl;TDEXDBl_L0VL0KCkk{P)JpGu)|}GWkhtJZQkpOg%gg3hV8qSgxM&R`W{$ z&dOXNuF3c>_Nhz0iR_xqj{`xH0^CEqx>dRN#Y6ufFBV|J?w2I8B2t3Jap$9zYvM`o zsuL|ApVEG!i<3yhU0TX`K7!9)*VBnS#~ad`br+B8U7i!1+5iZw+R1_U#Ua)&g3U3T z_930>?OLlKDGOw+A!dj`#n9_^`cw}YjvGjyEzR0;Dg8OGn?G?T^^_)Ipd$!fW=ko= zeZ&ajoj7}*oEw)msF3mdQ|He+ZY3F?l7`GYa3^kR!{kXiOF!ES%~C>prGs z0|>>GuDoUK;~zeBFJz$3^X6@&Q-5%^(|iHF*fSV<_(f8fy(xeLawN??L}IM000DzW ztO?XiLHXAk5UqE@$d}Cz&Wyy>G9X{`vrN%m6sJGycj84U8#PU&=uQA`)E--Nk!cXH zf|nDrX!iET@YOJsrHv#R4hDRAFm%zTSukku+-vyVx6{QjTf^If(yMB|cu}hm4cf$X zY}OsJtvb>bW!g3Geh`p#*DA$6?Jyb2V)}IM*6MB0LSAY8>;Q5m#_eUm) z<^Ir*aW@b~omFB&CAJmNQ<9>lVACU*J)~bHcix6poxS>Cq~2GX{FWLM(Wcz%hd` z$qB}nL6M3v07}i=IR|c7$h1ThjEzQ0B)#);>+>KTSa6dl%U{I2Q!vAIbujr1uV=1n zp7L4acPj~zpReG34;BAijX}~44ApWojYyfg*`_96$HN;*CK>D$Iqq0(l(g~Xsmv+{ zS3Ku#i_=ZpbO1f}2&PCgW*NMkBVah+d^&yO2)i`18lFg9!HBueld#q#f7+CNqf<%h zXLf0TtB}ji`g_iBVzHXK;ki&}@WmT%;c3sv`9RY4NTs9>TJ8CBiBq?^BUCE>vYsaK z1yHs&VbXGY8@@i|`x7@i_re`lQ8nw%<=Ak?QSn0LCyZ~yWqTQ0ng!R?JwhEY*3>?lN~!w7kzR|}&=sH}tf1y(wL~`4 z&kXzfTPb1&e0&_yN@@U>9*J$g-HOioK)$tGb6O>?%rgEQMFn5iK0c$XWqRxKbjKIR z+Suj2nJszzsdZ7D+@jZw*SwfFcZ2?<3{b_MW|G=Y@pW5mgZ5ipxC)d9!DEl*eQOwF zE!Y*&!L+q;c~uOlyflo>`a~ux3|@ctIIYLhTaszS%s_=*BU@h8q)gUQagpGEU}jYr zhuR!+`UCTRsDnxwhMazsI?v`52<<&)Fp+78Trc=d05*tI7G8^#Ku%Hirwr|)|N5@g2B3)>2fV*ormE4okfa-5v^!S9*S@wy{k8tR|M?x0 zXTaT^R^&9i*hlj3_Ire+2oi|?7UO& z-cELe9RI62Y_W^me&$1sk0wLO_)HlfSQuJ>u`l~ zo=uGftx=sSJg3dT`$z2L`=&t3CH!Pdy8W$FJ!~wXL_vGJkom_O_Qs?euYdFWABkw{mfaqj>6x&N8QuPr!hHhO z@aa2(C5<7(XWePG*6pF+ai#5V*u~4ZRR`f@lk`zf%_+MW(FB~G}+&*be zoZ~AF>UM{@_!4hmA*WyTYFf&>Pu+gq_e_p;ebSM1?36l0Hcaj`$kg{yPN-JV{y<-^ z?{anc6R(lZGEZWV|M`5&jX1Pdad*v1rp)&2jlYaa+9N4yu&EDV#H7Oh&?{_I32ydid zy4Uva+m7Uv@FNMAUB8tTU~R`~Q(ZL%10+X>T5{8_lJaAN&@z9T%#nxdGM}H`YzVRe zQ5DVIx6Z(~EOia5`>;?AR6I#0-IwQO0aywOPH}7{`&qTcP?{%&htZb{vTSezUyDF=vE(j1s$pKvB zXBDLzGEFC3Qg7=hEpfi$ocFoIR2i$$zA0{6mCa=}w}dt;3Vp)PQmYtr+Ju`M>Wol5 z+@b}HBOKs^rPYH(MN0_dwVXQdJn%PI1J0{jQ>ODI|dm!MSb{5X*p?5WoNY1{7tc)RirW4 z%)AljJO+MmT87f-Np4X5=UI6(3oAm8Rr4SEL24z))qfIaQvxpxFBFA)V`1I#ZS75-YgeV zU*!YZskka|;X=Hwt5)60-PZxUmLj{neIL!@SLBaYK^09OTb-rMrr0c(?5g5BW?X7; ziyrS!ecXH)ZANl2eUxS+&+_`l*86W1DgzR{H=frBm>h)@%0G>mHtx0-cT2i4N=y6= zJDcX!lnP)dIA{4Yg66;4@h_j4^2$r69gS}?s~_Qz1WL%mUb zqAIy;PpmcT#T&~B?RIuWkSZcxQKAYztC?`@D>3pMhp4L?T)8>FjRYL^1&&+lob52Y zkC6z3#CTj$oW}Eud-n&LJER)jJos7pb+)cq^|HPpD4_QC(#}WICqUG_^_xz_4(cB; zmEG`}Sf;)m??Iv$?27Ya^CqR=z;NGks{x%vNiN2ti-?h)(4}M{^j;U@BrE-j)8#T6 zNJGvzTM;zAcRk^*Hic@W5Ech}9fOzL$i) z#+s#yU-IwWLz@|$?qKjlX!k#8PG=>h6k7(K`8q;rLxVKJtH(9Oe|cTHcJy`kXO>{= z7l!>pAI%)tnW()~yczJj0jlZS&jZpA3`vE)O>#*UY0$&BdM-8Gmf=t`eyiviUg3GR ze2wu#oE+LCYh5=2_?yJ7YbYhK%0e#jF7VHG7s-CdtETEYitT~V>8p7%49u}8k`JWj z3QTm*<6zSXd0CVp2k&F2_|^Fh>$)`U`rZ_-?era6RrG(N{~MkL(23+ZnW6xG3Rh0K zh@G&OskXzn(jwRoeS$#USDQh-6mi$L1ICEchiPC zyqe;jDOf{JY{9j&R<~s1>^Uz@LC7@U9{E74yCmO8EbcA6@!Wc#yG;AHS)5ZMBBK?U zhew3jr>MOPY4tBp$MCU`sU`G@besWx4IXA46CiwCgz58J!}q`LyeojJ{5yJD)s*Np z!kEyv5txjaj!JRCgLYXpK}hh-ncf*2LUKFmznQ_NnZk5P`tbDisS~?Tndhmpe8wpa zaK_pACW4wXvMuY;8^4P$-mT-$lTiD4Kc&w9>VBH4+H}T(QEY@Zs;R>k=_;lC&tgIo z=QZbFuGH@1&f7mNp0>PB0m-R-xE;YPL)Mc?dH23j=RE6&@JOqkX|Lrt&)?FH_o7>8 z?7Wi$I*WWBdrL$mi9gt`?htd2$0`N2jzESVSmnI@gE9F2I=-#?>&wr}|LhotxVz-A zeowp1FNN>NSHIf*uE6=3Tr%sWJjouR|5d!Pmsit03x+X^r?IUO{9uY&dmy*pL1p#s z9VN@%;e`p(!m4@OLKb=^t#)>Y+d4Xu7L2L`?kGpYal@V)1P-v;%j zJvUTE&r#sF$pM^9fJ2C;*=v=waj(zzp?sXzd_k1%PEzmSxueF-zY|H$00V0v>x5Xw zrk++_yRd>O^Bw!`lN+6WvlsULjL&^g!uv0bznd|LW(FGF-cE)=Y?hxmoGsZzH#9S_ z'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 literal 96148 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�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 ix5CnY?owD4h^@!ynEb|!f3s`(SzNa [!NOTE] > Make sure to modify the default values in `compose.yaml` and `museum.yaml` > if you wish to change endpoints, bucket configuration or server configuration. @@ -40,16 +38,17 @@ directory, prompts to start the cluster with needed containers after pulling the ## Try the web app Open Ente Photos web app at `http://:3000` (or `http://localhost:3000` if -using on same local machine) and select **Don't have an account?** to create a +using on same local machine). Select **Don't have an account?** to create a new user. -![Onboarding Screen](/onboarding.png) - Follow the prompts to sign up. -![Sign Up Page](/sign-up.png) +
+ Onboarding screen + Sign up page +
-You will be prompted to enter verification code. Check the cluster logs using `sudo docker compose logs` and enter the same. +Enter verification code by checking the cluster logs using `sudo docker compose logs`. ![Verification Code](/otp.png) @@ -65,11 +64,11 @@ Connect to your server from [mobile apps](/self-hosting/installation/post-instal ## What next? -Now that you have spinned up a cluster in quick manner, you may wish to install using a different way for your needs. Check the "Installation" section for information regarding that. +You may wish to install using a different way for your needs. Check the "Installation" section for information regarding that. -You can import your pictures from Google Takeout or from other services to Ente Photos. For more information, check out our [migration guide](/photos/migration/). +You can import your pictures from Google Takeout or from other services to Ente Photos. For more information, check out our [migration guide](/photos/migration/) for more information. -You can import your codes from other authenticator providers to Ente Auth. Check out the [migration guide](/auth/migration/) for more information. +You can import your codes from other authenticator providers to Ente Auth. Check out our [migration guide](/auth/migration/) for more information. ## Queries? From 95228cc0a612a8b3a5c26ea77f6be3558e521b07 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Fri, 25 Jul 2025 20:09:31 +0530 Subject: [PATCH 19/20] [docs] remove paid sub template --- server/mail-templates/family_nudge_paid_sub.html | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 server/mail-templates/family_nudge_paid_sub.html diff --git a/server/mail-templates/family_nudge_paid_sub.html b/server/mail-templates/family_nudge_paid_sub.html deleted file mode 100644 index e69de29bb2..0000000000 From 2c6f4228d217b2a6963d8846798314aacdce1df7 Mon Sep 17 00:00:00 2001 From: Keerthana Date: Fri, 25 Jul 2025 20:21:22 +0530 Subject: [PATCH 20/20] [docs] remove redundant line for cluster initialization --- server/docs/quickstart.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/server/docs/quickstart.md b/server/docs/quickstart.md index 6ff3646273..c43749b539 100644 --- a/server/docs/quickstart.md +++ b/server/docs/quickstart.md @@ -23,8 +23,6 @@ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/q > chmod +x quickstart.sh > ./quickstart.sh - -Which will prompt to start the Docker compose cluster. After the Docker compose cluster starts, you can open Ente web app at http://localhost:3000.

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