From 1c3dbfb066743e7d5e9a3ba6bbb5e5653c1d26d5 Mon Sep 17 00:00:00 2001 From: sahil Date: Mon, 1 Sep 2025 14:32:02 +0530 Subject: [PATCH] Feat: ente config --- public/svgs/ente.png | Bin 0 -> 5096 bytes templates/compose/ente.yaml | 205 ++++++++++++++++++++++++++++++++++++ 2 files changed, 205 insertions(+) create mode 100644 public/svgs/ente.png create mode 100644 templates/compose/ente.yaml diff --git a/public/svgs/ente.png b/public/svgs/ente.png new file mode 100644 index 0000000000000000000000000000000000000000..737149125b4e84d6277bb4853494ae3ac4fe17bd GIT binary patch literal 5096 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 literal 0 HcmV?d00001 diff --git a/templates/compose/ente.yaml b/templates/compose/ente.yaml new file mode 100644 index 000000000..f754b7387 --- /dev/null +++ b/templates/compose/ente.yaml @@ -0,0 +1,205 @@ +# documentation: https://help.ente.io/ +# slogan: End-to-end encrypted photo backup and sharing platform +# category: media +# tags: photos, backup, encryption, sharing, privacy, media, storage, encryption, minio, postgresql +# logo: svgs/ente.png +# port: 3000, 3001, 3002, 3003, 3004, 8080, 3200 + +services: + museum: + image: ghcr.io/ente-io/server:latest + environment: + - SERVICE_PASSWORD_POSTGRES= ${SERVICE_PASSWORD_POSTGRES} + - SERVICE_URL_MUSEUM_8080=${SERVICE_URL_MUSEUM_8080} + - KEY_ENCRYPTION=${KEY_ENCRYPTION} + - KEY_HASH=${KEY_HASH} + - KEY_JWT=${KEY_JWT} + - ARE_LOCAL_S3=${ARE_LOCAL_S3} + - USE_PATH_STYLE_URLS_S3=${USE_PATH_STYLE_URLS_S3} + - ARE_LOCAL_B2=${ARE_LOCAL_B2} + - USE_PATH_STYLE_URLS_B2=${USE_PATH_STYLE_URLS_B2} + - KEY_B2=${KEY_B2} + - SECRET_B2=${SECRET_B2} + - REGION_B2=${REGION_B2} + - BUCKET_B2=${BUCKET_B2} + - ${ARE_LOCAL_WASABI} + - USE_PATH_STYLE_URLS_WASABI=${USE_PATH_STYLE_URLS_WASABI} + - KEY_WASABI=${KEY_WASABI} + - SECRET_WASABI=${SECRET_WASABI} + - REGION_WASABI=${REGION_WASABI} + - BUCKET_WASABI=${BUCKET_WASABI} + - COMPLIANCE_WASABI=${COMPLIANCE_WASABI} + - ARE_LOCAL_SCW=${ARE_LOCAL_SCW} + - USE_PATH_STYLE_URLS_SCW=${USE_PATH_STYLE_URLS_SCW} + - KEY_SCW=${KEY_SCW} + - SECRET_SCW=${SECRET_SCW} + - REGION_SCW=${REGION_SCW} + - BUCKET_SCW=${BUCKET_SCW} + depends_on: + postgres: + condition: service_healthy + volumes: + - museum-data:/data:ro + healthcheck: + test: ["CMD", "curl", "--fail", "http://localhost:8080/ping"] + interval: 60s + timeout: 5s + retries: 3 + start_period: 5s + restart: unless-stopped + command: | + sh -c ' + #!/bin/sh + + # Generate the museum.yaml configuration file + cat > /museum.yaml << EOF + db: + host: postgres + port: 5432 + name: ente_db + user: pguser + password: ${SERVICE_PASSWORD_POSTGRES} + + s3: + are_local_buckets: $ARE_LOCAL_S3 + use_path_style_urls: $USE_PATH_STYLE_URLS_S3 + b2-eu-cen: + are_local_buckets: ${ARE_LOCAL_B2:false} + use_path_style_urls: ${USE_PATH_STYLE_URLS_B2:false} + key: ${KEY_B2} + secret: ${SECRET_B2} + endpoint: ${SERVICE_URL_MINIO_3200} + region: ${REGION_B2} + bucket: ${BUCKET_B2} + wasabi-eu-central-2-v3: + are_local_buckets: ${ARE_LOCAL_WASABI:false} + use_path_style_urls: ${USE_PATH_STYLE_URLS_WASABI:false} + key: ${KEY_WASABI} + secret: ${SECRET_WASABI} + endpoint: ${SERVICE_URL_MINIO_3200} + region: ${REGION_WASABI} + bucket: ${BUCKET_WASABI} + compliance: ${COMPLIANCE_WASABI} + scw-eu-fr-v3: + are_local_buckets: ${ARE_LOCAL_SCW:false} + use_path_style_urls: ${USE_PATH_STYLE_URLS_SCW:false} + key: ${KEY_SCW} + secret: ${SECRET_SCW} + endpoint: ${SERVICE_URL_MINIO_3200} + region: ${REGION_SCW} + bucket: ${BUCKET_SCW} + + # Specify the base endpoints for various web apps + apps: + public-albums: ${SERVICE_URL_WEB_3002} + cast: ${SERVICE_URL_WEB_3004} + accounts: ${SERVICE_URL_WEB_3001} + + key: + encryption: ${KEY_ENCRYPTION} + hash: ${KEY_HASH} + + jwt: + secret: ${KEY_JWT} + + EOF + echo "Generated museum.yaml" + exec ./museum + ' + + socat: + image: alpine/socat:latest + network_mode: service:museum + depends_on: [museum] + command: "TCP-LISTEN:3200,fork,reuseaddr TCP:minio:3200" + restart: unless-stopped + healthcheck: + test: ["CMD", "nc", "-z", "localhost", "3200"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 10s + + web: + image: ghcr.io/ente-io/web:latest + ports: + - 3000:3000 + - 3001:3001 + - 3002:3002 + - 3003:3003 + - 3004:3004 + environment: + - SERVICE_URL_WEB_3000 + - SERVICE_URL_WEB_3001 + - SERVICE_URL_WEB_3002 + - SERVICE_URL_WEB_3003 + - SERVICE_URL_WEB_3004 + - ENTE_API_ORIGIN=$SERVICE_URL_MUSEUM_8080 + - ENTE_ALBUMS_ORIGIN=$SERVICE_URL_WEB_3002 + - NODE_ENV=production + - ENTE_ACCOUNTS_ORIGIN=$SERVICE_URL_WEB_3001 + - ENTE_AUTH_ORIGIN=$SERVICE_URL_WEB_3003 + - ENTE_CAST_ORIGIN=$SERVICE_URL_WEB_3004 + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s + + postgres: + image: postgres:15 + environment: + - POSTGRES_USER=pguser + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_DB=ente_db + volumes: + - postgres-data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U pguser -d ente_db"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + restart: unless-stopped + + minio: + image: minio/minio + environment: + - SERVICE_URL_MINIO_3200 + - MINIO_ROOT_USER=$SERVICE_USER_MINIO + - MINIO_ROOT_PASSWORD=$SERVICE_PASSWORD_MINIO + command: server /data --address ":3200" --console-address ":3201" + volumes: + - minio-data:/data + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3200/minio/health/live"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + restart: unless-stopped + post_start: + - command: | + sh -c ' + #!/bin/sh + + while ! mc alias set h0 http://minio:3200 $SERVICE_USER_MINIO $SERVICE_PASSWORD_MINIO 2>/dev/null + do + echo "Waiting for minio..." + sleep 0.5 + done + + mc mb -p b2-eu-cen + mc mb -p wasabi-eu-central-2-v3 + mc mb -p scw-eu-fr-v3 + ' + +volumes: + postgres-data: + minio-data: + museum-data: +networks: + default: + name: ente-network