Favicon of Ente

Ente

Protect your photos with end-to-end encryption. This open-source tool offers cross-platform access, family plans, and AI features without compromising privacy.

Secure your life's moments with a photo storage solution built on privacy. This service provides a safe home for your photos and videos, protected with end-to-end encryption from the moment they leave your device. Unlike mainstream services, your data is never used for ads or training, ensuring your memories remain yours alone. It's a fully open-source and independently audited platform, offering complete transparency and peace of mind.

Access your encrypted library seamlessly across all your devices, including Android, iOS, web, and desktop. The experience is rich with features designed to protect your privacy without sacrificing functionality:

  • Zero-Knowledge AI: Find photos using natural language and group faces with on-device recognition, all processed locally so your data never leaves your device.
  • Flexible Sharing: Collaborate with others in shared albums, create public links for easy viewing, and share your subscription with up to five family members at no extra cost.
  • Complete Control: Easily import your library from other services and export it at any time. For ultimate sovereignty, you can even self-host the entire platform.

Directory Structure

ente
minio-data
museum-data
postgres-data
.env
docker-compose.yml

docker-compose.yml

services:
  museum:
    image: ghcr.io/ente-io/server:latest
    container_name: ente-museum
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      - ENTE_DB_HOST=postgres
      - ENTE_DB_PORT=5432
      - ENTE_DB_USER=${POSTGRES_USER}
      - ENTE_DB_PASSWORD=${POSTGRES_PASSWORD}
      - ENTE_DB_NAME=${POSTGRES_DB}
      - ENTE_S3_ENDPOINT=http://minio:9000
      - ENTE_S3_ACCESSKEY=${MINIO_ROOT_USER}
      - ENTE_S3_SECRETKEY=${MINIO_ROOT_PASSWORD}
      - ENTE_S3_BUCKET=ente
      - ENTE_S3_REGION=us-east-1
      - ENTE_S3_AREVIRTUALHOSTSSUPPORTED=false
      - ENTE_JWT_SECRET=${JWT_SECRET}
    depends_on:
      postgres:
        condition: service_healthy
      minio:
        condition: service_started
    volumes:
      - ./museum-data:/data

  postgres:
    image: postgres:15-alpine
    container_name: ente-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5

  minio:
    image: minio/minio
    container_name: ente-minio
    restart: unless-stopped
    command: server /data --console-address ":9001"
    environment:
      - MINIO_ROOT_USER=${MINIO_ROOT_USER}
      - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
    volumes:
      - ./minio-data:/data
    ports:
      - "9000:9000"
      - "9001:9001"

  minio-setup:
    image: minio/mc
    container_name: ente-minio-setup
    depends_on:
      - minio
    entrypoint: >
      /bin/sh -c "
      sleep 5;
      mc alias set myminio http://minio:9000 ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD};
      mc mb myminio/ente || true;
      mc anonymous set private myminio/ente;
      exit 0;
      "

.env

POSTGRES_USER=ente
POSTGRES_PASSWORD=your_super_secret_postgres_password
POSTGRES_DB=ente_db
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=your_super_secret_minio_password
JWT_SECRET=your_super_secret_jwt_key_here
Categories:

Share:

Ad
Favicon

 

  
 

Similar to Ente

Favicon

 

  
  
Favicon

 

  
  
Favicon