跳转至内容

Ente 服务器

来自 ArchWiki

Ente 服务器是存储和提供加密数据块给 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 存储桶(用于存储加密对象数据)。此外,建议使用 Nginx 等 HTTPS 代理来访问 **Ente** 服务器。最后,可以使用 *ente-cli* 工具轻松升级 ente-server 账户大小限制和账户过期时间。

这些必需的组件被列为可选依赖项,并且最好作为依赖项安装:Pacman#Installation reason

配置

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#Configure PostgreSQL to be accessible exclusively through UNIX Sockets

/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 地址(默认情况下,该服务仅允许从本地主机访问或访问本地主机)

[Service]
IPAddressAllow=IP_address_of_your_public_domain.tld

启用/启动 `ente-server.service`。

配置 Nginx 代理

将示例的 MinIO 和 **Ente** 服务器 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* 替换为您实际的公共域名

如果尚未完成,请申请 Let's Encrypt 证书(或来自其他提供商的 TLS 证书)

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

Nginx `http` 配置中添加一个 `include` 语句来包含 *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-git**AUR 包的桌面应用时,请确保在构建之前导出 `NEXT_PUBLIC_ENTE_ENDPOINT` 环境变量。

遵循照片移动端、桌面端或 Web 端应用(*https://: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 配置文件

为希望限制 **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 等主机防火墙,请确保允许以下流量

  • 本地主机的流量
  • 您的 **Ente** (移动端) 客户端到 TCP 端口 **443** 的流量,通过 Nginx 访问 **Ente** 服务器
  • 您的 **Ente** (移动端) 客户端到 TCP 端口 **3200** 的流量,通过 Nginx 访问 MinIO 服务器

文件

ente-server-gitAUR 包包含 ente-server(1) man page,其中列出了并解释了该包安装的所有文件。

参见