Ente 服务器

来自 ArchWiki

Ente 服务器 是服务器端组件,用于存储加密的数据 blob 并将其提供给 ente(移动)客户端。客户端发送/接收加密数据,这些数据随后到达 Ente 服务器,并通过本地 MinIO 对象存储服务进行存储/读取。

例如,当使用 Ente 照片客户端时,客户端会对照片进行加密,然后将其存储在此服务器上。之后,客户端可以查找加密的照片,并在本地解密(端到端加密)。由于只有客户端或客户端与之共享照片的任何人拥有加密密钥,因此只有他们才能解密数据并实际查看照片,服务器永远无法做到这一点,因为它缺少该密钥材料。

安装

ente-server-gitAUR 软件包旨在用于自托管,与默认提供的 Docker 化 Ente 服务器相反。如果需要 Docker 化或托管解决方案,请参阅 ente.io

首先安装 ente-server-gitAUR 软件包。

请注意,由于自托管服务器空间通常数量有限,ente-server-gitAUR 软件包添加了更改清理延迟的功能,该延迟是指在旧的未链接 ente-server MinIO 对象实际被删除之前的清理延迟。这可以通过 internal:delete-object-delay ente-server 配置参数进行配置。默认上游 Ente 服务器默认每 45 天 清理这些对象,但是当不需要复制时,可以将此设置设置为例如每 5 分钟 清理一次。

注意: 此设置Ente 开发人员支持,因为可能存在破坏 ente-server 的风险。完整的警告已在 ente-server 配置文件中描述。

为了使 Ente 服务器运行,需要一个可用的 PostgreSQL 数据库(用于存储 Ente 对象元数据和用户数据)和 MinIO 存储桶(用于存储加密对象数据)。此外,建议使用 HTTPS 代理,如 Nginx 来访问 Ente 服务器。最后,可以使用 ente-cli 工具轻松升级 ente-server 账户大小限制和账户到期时间。

这些必需组件作为可选依赖项列出,最好作为依赖项安装:Pacman#安装原因

配置

MinIO 设置

编辑 配置文件,如下所示

/etc/minio/minio.conf
MINIO_VOLUMES="/srv/minio/data"
MINIO_ROOT_USER=minio
MINIO_ROOT_PASSWORD='YOUR-STRONG-MINIO-ROOT-PASSWORD'
MINIO_OPTS="--address 127.0.0.1:43200 --console-address 127.0.0.1:43201"

启用/启动 minio.service

使用 mcli 命令(以 minio 用户身份)创建 MinIO ente-server 存储桶

# cd /srv/minio/data
[minio]$ mcli mb -p ente-server

PostgreSQL 设置

以 postgres 用户身份初始化数据库

[postgres]$ initdb --locale en_US.UTF-8 -D '/var/lib/postgres/data' --data-checksums --auth=scram-sha-256 --pwprompt -c listen_addresses=''

PostgreSQL#配置 PostgreSQL 仅通过 UNIX 套接字访问,如果存在现有的 PostgreSQL 设置

/var/lib/postgres/data/postgresql.conf
listen_addresses = '' # AF_UNIX Socket only

通过编辑 postgresql.service 来限制套接字对 PostgreSQL 用户或组的访问

[Service]
RuntimeDirectoryMode=750

ente 添加到 postgres 用户组,然后启动/启用postgresql.service

创建 PostgreSQL 数据库用户和一个由此用户拥有的数据库(指定新密码两次,然后指定 postgres 密码以存储新账户)

[postgres]$ createuser -P ente

然后指定 postgres 密码以创建新数据库

[postgres]$ createdb -T template0 -O ente -E unicode ente-server

运行 ente-server

添加 MinIO 存储桶详细信息

/etc/ente-server/local.yaml
b2-eu-cen:
    key: minio
    secret: "YOUR-STRONG-MINIO-ROOT-PASSWORD"
    endpoint: https://your_public_domain.tld:3200
    region: eu-central-2
    bucket: ente-server

添加 PostgreSQL 详细信息

/etc/ente-server/local.yaml
db:
    host: /run/postgresql
    port: 5432
    name: ente-server
    user: ente
    password: "YOUR-STRONG-ENTE-DATABASE-USER-PASSWORD"

使用 ente-server-gen-random-keys 命令生成新的密钥值,并将这些值替换 /etc/ente-server/local.yaml 配置文件中的默认值。

编辑 ente-server.service 以允许其访问 your_public_domain.tld 的 IP 地址(默认情况下,该服务仅允许从 localhost 和到 localhost 的访问)

[Service]
IPAddressAllow=IP_address_of_your_public_domain.tld

启用/启动 ente-server.service

配置 Nginx 代理

将示例 MinIOEnte 服务器 Nginx 配置以及随附的 HTTP(S) 安全标头配置文件复制到 Nginx 配置目录

# cp -v /usr/lib/ente-server/ente-server-nginx.conf /etc/nginx/
# cp -v /usr/lib/ente-server/http*security_headers.conf /etc/nginx/
# cp -v /usr/lib/ente-server/minio-server-nginx.conf /etc/nginx/

编辑此示例配置,并将 your_public_domain.tld 替换为您的实际公共域名

如果尚未完成,请请求 letsencrypt 证书(或来自其他提供商的 SSL 证书)

# certbot certonly --email your_email --agree-tos --preferred-challenge http --webroot -w /var/lib/letsencrypt -d your_public_domain.tld

include 语句附加到 Nginx http 配置以包含 ente-server 配置

/etc/nginx/nginx.conf
http {
    include /etc/nginx/ente-server-nginx.conf
}

修复权限

# chmod 644 /etc/nginx/ente-server-nginx.conf
# chmod 644 /etc/nginx/http*security_headers.conf

重启 nginx.service 以应用更改。

配置 ente-server 和 ente-cli

使用 ente-cli-binAUR 软件包在客户端上安装 ente-cli


在客户端上添加 ente-cli 配置

$ mkdir -p ~/.ente/export 
~/.ente/config.yaml
endpoint:
  api: "https://your_public_domain.tld" >


在客户端上通过 Ente 照片移动应用、桌面应用或 Web 应用,使用自定义端点添加用户账户。

在照片移动应用中,在主屏幕上点击 7 次以启用开发者模式,然后定义您的自定义 Ente 服务器 API 端点

URL: https://your_public_domain.tld

在客户端上的 Web 应用中

$ git clone https://github.com/ente-io/ente.git
$ cd ente/web
$ git submodule update --init --recursive
$ yarn install
$ NEXT_PUBLIC_ENTE_ENDPOINT=https://your_public_domain.tld yarn dev:photos

当使用 ente-desktop-gitAUR 软件包使用桌面应用时,请确保在构建之前导出 NEXT_PUBLIC_ENTE_ENDPOINT 环境变量。

按照照片移动应用、桌面应用或 Web 应用(https://127.0.0.1:3000)的说明创建新用户。

获取 OTP 验证码

  • 通过电子邮件
    • /etc/ente-server/local.yaml 中配置 smtp 部分
    • 确保配置的 smtp(1) 服务器正在工作
    • 等待邮件到达并复制 OTP 验证码
  • 通过 ente-server 日志
# journalctl -au ente-server | grep SendEmailOTT | tail -n 1

获取新用户的账户 ID

# psql -U ente ente-server -c 'select user_id from users order by user_id desc limit 1;'

将此用户配置为管理员

/etc/ente-server/local.yaml
internal:
     admin: [ADD_USER_ID_HERE]


重启 ente-server.service 以激活新的管理员权限。

在客户端上的 ente-cli 中配置此管理员

$ ente account add
photos
~/.ente/export
email_address_of_admin_account
password_of_admin_account

增加用户存储和账户到期限制

使用 ente-cli 将存储限制增加 100 TB,到期时间增加 100 年

$ ente admin update-subscription -u "user@domain.tld"

(可选)复制并应用 AppArmor 配置文件

已为希望使用 AppArmor 限制 ente-server 二进制文件访问权限的用户提供了 AppArmor 配置文件。 如下复制并应用此配置文件(假设 AppArmor 已经安装并启用)

 # install -Dvm600 -o root -g root /usr/lib/ente-server/usr.bin.ente-server -t /etc/apparmor.d/
 # aa-enforce /usr/bin/ente-server

(可选)配置防火墙

如果主机防火墙(如 iptables 或 nftables)已启用和配置,请确保允许以下内容

  • localhost 上的流量
  • 从您的 Ente(移动)客户端到 TCP 端口 443 的流量,以通过 Nginx 访问 Ente 服务器
  • 从您的 Ente(移动)客户端到 TCP 端口 3200 的流量,以通过 Nginx 访问 MinIO 服务器

文件

ente-server-gitAUR 软件包包含 ente-server(1) 手册页,其中列出并解释了此软件包安装的所有文件。

参见