From 7098e93ae89df1ede164ae82f03794a78b45ee05 Mon Sep 17 00:00:00 2001 From: vishnukvmd Date: Sat, 26 Apr 2025 16:44:55 +0530 Subject: [PATCH] [docs] Refactor --- docs/docs/.vitepress/sidebar.ts | 19 +-- docs/docs/public/web-app.webp | Bin 0 -> 77108 bytes docs/docs/self-hosting/creating-accounts.md | 4 +- .../self-hosting/guides/configuring-s3.md | 135 +++++++++--------- docs/docs/self-hosting/index.md | 30 ++-- docs/docs/self-hosting/museum.md | 77 +++++----- docs/docs/self-hosting/reverse-proxy.md | 39 ++--- 7 files changed, 157 insertions(+), 147 deletions(-) create mode 100644 docs/docs/public/web-app.webp diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index 2db6886b52..02b8fdc5e9 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -224,6 +224,7 @@ export const sidebar = [ }, { text: "Troubleshooting", + collapsed: true, items: [ { text: "Windows login", @@ -239,25 +240,25 @@ export const sidebar = [ items: [ { text: "Getting started", link: "/self-hosting/" }, { - text: "Connect to custom server", + text: "Connecting to custom server", link: "/self-hosting/guides/custom-server/", }, { - text: "Creating Accounts", + text: "Creating accounts", link: "/self-hosting/creating-accounts", }, { - text: "Reverse Proxy", - link: "/self-hosting/reverse-proxy", - }, - { - text: "Building your museum.yaml", + 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", collapsed: true, @@ -276,7 +277,7 @@ export const sidebar = [ link: "/self-hosting/guides/admin", }, { - text: "Configure CLI for Self Hosted Instance", + text: "Configure CLI for self hosted instance", link: "/self-hosting/guides/selfhost-cli", }, { @@ -313,7 +314,7 @@ export const sidebar = [ link: "/self-hosting/troubleshooting/yarn", }, { - text: "Ente CLI Secrets", + text: "Ente CLI secrets", link: "/self-hosting/troubleshooting/keyring", }, ], diff --git a/docs/docs/public/web-app.webp b/docs/docs/public/web-app.webp new file mode 100644 index 0000000000000000000000000000000000000000..3db4ccf6831d973ebc151fb3f53a29dfffc480bb GIT binary patch literal 77108 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 [!TIP] > For more details about these configuration objects, see the documentation for @@ -42,29 +45,32 @@ and put your custom configuration there (in your case, you can put an entire 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`) which will also be hosted on the localhost. This enables all the -three components of the setup being able to communicate with each other seamlessly. +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. ## Replication ![Replication](/replication.png) -

Community contributed diagram of Ente's Replication Process

+

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). +> +> 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) -If you're wondering why there are 3 buckets on MinIO UI - that's because our -production instance uses these to perform [replication](https://ente.io/reliability/). +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. @@ -72,10 +78,10 @@ We use `b2-eu-cen` as hot, `wasabi-eu-central-2-v3` as cold (also the secondary 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 +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`. Use the `s3.hot_storage.primary` option if you'd like to set one of the other @@ -85,23 +91,23 @@ predefined buckets as the primary bucket. > [!NOTE] > -> If you need to configure SSL, for example if you're running over the internet, -> you'll need to turn off `s3.are_local_buckets` (which disables SSL in the -> default starter compose template). +> 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 then enable `s3.use_path_style_urls`. +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 accessible from both where you are running the Ente -clients (e.g. the mobile app) and also from within the Docker compose cluster. +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 +### 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: @@ -117,49 +123,44 @@ s3: bucket: b2-eu-cen ``` -## FAE (Frequently Answered Errors) +## Frequently encountered errors -Here are some Frequently Answered Errors from the Community Chat with the reasoning -for a particular error and its potential fix. +Here are some errors our community members frequently encountered with the +context and potential fixes. -In most situations, the problem turns out to be some minute mistakes or misconfigurations -on the users end and that turns out to be the bottleneck of the whole problem. -Please make sure to `reverse_proxy` Museum to a domain as well as check your S3 -Credentials and whole config for any minor mis-configurations. +In most situations, the problem is because of a minor mistakes or +misconfiguration. Please make sure to `reverse_proxy` museum 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 on MinIO or any external -S3 Bucket they are connecting to. To setup Bucket CORS, help yourself by upload -[this](https://help.ente.io/self-hosting/guides/external-s3#_5-fix-potential-cors-issue-with-your-bucket). +It is also suggested that the user setups bucket CORS on MinIO or any external +S3 service provider they are connecting to. To setup bucket CORS, please [read +this](/self-hosting/guides/external-s3#_5-fix-potential-cors-issue-with-your-bucket). ### 403 Forbidden If museum (`2`) is able to make a network connection to your S3 bucket (`3`) 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` +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 corresponding object exists in the S3 bucket. -To fix these, you should ensure the following: +This could be because -1. The bucket CORS rules do not allow museum to access these objects. - - For uploading files from the browser, you will need to currently set - allowedOrigins to "\*", and allow the "X-Auth-Token", "X-Client-Package" - headers configuration too. - [Here is an example of a working configuration](https://github.com/ente-io/ente/discussions/1764#discussioncomment-9478204). +1. The bucket CORS rules do not allow museum to access these objects. For + uploading files from the browser, you will need to set `allowedOrigins` to + `*`, and allow the `X-Auth-Token`, `X-Client-Package` 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 - creds, but not in the place where museum picks them from). + credentials, but not in the place where museum reads them from). -### Mismatch in File Size +### Mismatch in file size -The "Mismatch in File Size" error mostly occurs in a situation where the client (`1`) -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 +(`1`) 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. -This is also one of Museums (`2`) Validation Checks for the size of file being -re-uploaded from the client to the size of the file which is already -uploaded to the S3 Bucket. - -In most case, it is very unlikely that this error could be a cause of some mistake in -the configuration or Browser/Bucket CORS. diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md index 016504cc20..c0eef22f2c 100644 --- a/docs/docs/self-hosting/index.md +++ b/docs/docs/self-hosting/index.md @@ -10,34 +10,32 @@ the same code we use for our own cloud service. > [!TIP] > -> To get some context, you might find our -> [blog post](https://ente.io/blog/open-sourcing-our-server/) announcing the -> open sourcing of our server useful. +> You might find our [blog post](https://ente.io/blog/open-sourcing-our-server/) +> announcing the open sourcing of our server useful. +## System requirements -## System Requirements - -The server has minimal resource requirements, running as a lightweight Go binary -with no server-side ML. It performs well on small cloud instances, old laptops, -and even [low-end embedded devices](https://github.com/ente-io/ente/discussions/594) -reported by community members. Virtually any reasonable hardware should be sufficient. +The server has minimal resource requirements, running as a lightweight Go +binary. It performs well on small cloud instances, old laptops, and even +[low-end embedded devices](https://github.com/ente-io/ente/discussions/594). ## Getting started -Execute the below one-liner command in your terminal to setup Ente on your system. +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 is a simple shell-script, which pulls the docker images, -creates a directory `my-ente` in the current working directory and starts all the -containers required to run Ente on your system. +The above `curl` command pulls the Docker image, creates a directory `my-ente` +in the current working directory and starts all containers required to run Ente. ![quickstart](/quickstart.png) +![self-hosted-ente](/web-app.webp) + ## Queries? -If you need any help or support, do not hesitate to drop your queries on our community -[discord channel](https://discord.gg/z2YVKkycX3) or create a -[Github Discussion](https://github.com/ente-io/ente/discussions) where 100s of self-hosters help each other. \ No newline at end of file +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/museum.md b/docs/docs/self-hosting/museum.md index b55f098a20..2393709e52 100644 --- a/docs/docs/self-hosting/museum.md +++ b/docs/docs/self-hosting/museum.md @@ -1,41 +1,49 @@ --- -title: Building your Museum.yaml +title: Configuring your server description: Guide to writing a museum.yaml --- -## Configuring `museum.yaml` +# Configuring your server -`Museum.yaml` is a YAML configuration file used to configure various things for museum. -By default, [`local.yaml`](https://github.com/ente-io/ente/tree/main/server/configurations/local.yaml) -is also available, but it is overridden if `museum.yaml` file is found. We highly -recommend creating and building your own `museum.yaml` instead of editing `configurations/local.yaml`. -The `my-ente` directory will include a `museum.yaml` file with some configurations around encryption -keys and secrets, postgres DB, and MinIO. +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 `my-ente` directory, if you've made any changes to `museum.yaml` -> and then restart the containers with `docker compose up -d ` to see the changes in action. +> +> 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 +## S3 buckets -By default, the `s3` section is configured to use local minIO buckets and for the same reason -`are_local_buckets` is set to `true`. If you wish to bring any external S3 provider, -you just have to edit the configuration with appropriate credentails and details given by the provider. -And set `are_local_buckets` to false. Check out [Configuring S3](/self-hosting/guides/configuring-s3.md) -to understand more on how to configure S3 buckets and how the communication happens. +The `s3` section within `museum.yaml` is by default configured to use local +MinIO buckets. -MinIO makes use of the port `3200` for API Endpoints and the Client Web App is run over `:3201` -(both on localhost). You can login to MinIO Console Web UI by accessing `localhost:3201` in your web-browser -and setting up all the things related to regions there itself. +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`. -If you face any issues related to uploads then checkout -[Troubleshooting Bucket CORS](/self-hosting/troubleshooting/bucket-cors) and -[Frequently Answered Error related to S3](/self-hosting/guides/configuring-s3#fae-frequently-answered-errors) +Check out [Configuring S3](/self-hosting/guides/configuring-s3.md) to understand +more about configuring S3 buckets. -### App Endpoints +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. -Ente Photos Web app is divided into multiple sub-apps like albums, cast, auth, etc. -These endpoints are configurable in the museum.yaml under the `apps.*` section. +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). + +## App endpoints + +Ente Photos Web app is divided into multiple sub-apps like albums, cast, auth, +etc. These endpoints are configurable in the museum.yaml under the `apps.*` +section. For example, @@ -47,14 +55,15 @@ apps: family: family.myente.xyz ``` -By default, all the values redirect to our publicly hosted production services. -After you are done with filling the values, restart museum and the App will start utilizing -those endpoints for everything instead of the Ente's prod instances. +By default, all the values redirect to our publicly hosted production services. +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 configure all the necessary endpoints, `cd` into `my-ente` and stop all the docker -containers with `docker compose down` to completely stop all the containers and restart them -with `docker compose up -d`. +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 read the default [`local.yaml`](https://github.com/ente-io/ente/tree/main/server/configurations/local.yaml) -and build a functioning `museum.yaml` for many other functionalities like SMTP, Discord -Notifications, Hardcoded-OTT's, etc. \ No newline at end of file +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. diff --git a/docs/docs/self-hosting/reverse-proxy.md b/docs/docs/self-hosting/reverse-proxy.md index c9b8cf28d3..7ef79ac412 100644 --- a/docs/docs/self-hosting/reverse-proxy.md +++ b/docs/docs/self-hosting/reverse-proxy.md @@ -3,35 +3,34 @@ Title: Configuring Reverse Proxy Description: configuring reverse proxy for Museum and other endpoints --- -## Reverse Proxy +# Reverse proxy -This step isn't really the direct next step after creating an account. It is -one of the most essential steps to avoid certain CORS errors and will help you through -the configuration coming ahead. +Ente's server (museum) runs on port `:8080`, web app on `:3000` and the other +apps from ports `3001-3004`. -Museum runs on port `:8080`, Ente Photos web app runs on `:3000` and so on the other apps -are lined up after each other from ports `3001-3004`. +We highly recommend using HTTPS for Museum (`8080`). For security reasons museum +will not accept incoming HTTP traffic. -We highly recommend using HTTPS for Museum (`8080`). Primarily, because for security reasons Museum -won't accept any incoming HTTP traffic. Hence, all the requests will fail. - -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 sitting on your server machine. +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. ![cloudflare](/cloudflare.png) -### With Caddy +### Caddy -Setting up a reverse proxy with Caddy is pretty easy and straightforward. Firstly, install Caddy -on your server machine. +Setting up a reverse proxy with Caddy is easy and straightforward. + +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 and a whole lot of different things. +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. ```yaml # Caddyfile - myente.xyz is just an example. @@ -44,5 +43,7 @@ ente.myente.xyz { #...and so on for other endpoints ``` -After a few hard-reloads, Ente Photos web app should be up on https://ente.myente.xyz. You can check out -the documentation for any other reverse proxy tool (like nginx) you want to use. \ No newline at end of file +After a hard-reload, the Ente Photos web app should be up on https://ente.myente.xyz. + +If you are using a different tool for reverse proxy (like nginx), please check +out their documentation.