Cozy

来自 ArchWiki

Cozy 是一个免费且可自托管的个人云平台,使用 Go 语言编写(之前的 v2 版本使用 Node.js 编写)。

该平台旨在简化个人云的使用,并让用户重新掌握自己的隐私。其基本应用程序的功能包括托管、共享和同步文件及图片,以及从多个提供商处收集您的数据。路线图上还有其他应用程序,例如联系人管理器和日历。

第三方应用程序也可以通过应用商店获取。

安装

此条目或章节需要扩充。

原因: 提及 cozy-desktop。(在 Talk:Cozy 中讨论)

安装 cozy-stack 软件包。它提供了核心组件以及相关的配置文件,以及最低限度的必要依赖项。

您可能还需要安装 nsjail 以在隔离环境中运行 Konnector,以及 SMTP 服务器,以便 Cozy 向您的用户发送电子邮件。

配置

几乎所有配置都在 /etc/cozy/cozy.yml 中进行。一些默认值已经设置,而一些占位符将在配置期间被替换。您还可以在 /usr/share/cozy/cozy.example.yaml 找到示例文件。

配置 CouchDB

Cozy 将所有内容(除了实际文件)存储在 CouchDB 数据库中,并且需要 CouchDB 管理员来管理此数据库。必须在 /etc/cozy/cozy.yml 中的 couchdb url 设置中指定此管理员的凭据,以便 Cozy 可以使用它们。以下内容假设您已经有一个正在运行的 CouchDB 实例,如果没有,您可以按照相应的 wiki 页面设置一个单节点实例。

例如,您可以使用 pwgen 生成凭据。获得凭据(couch_usercouch_password)后,按如下方式编辑您的配置

/etc/cozy/cozy.yml
couchdb:
  url: http://<couch_user>:<couch_password>@localhost:5984/

并将它们注册到 CouchDB(将 <couchdb_admin><couchdb_password> 替换为您的 CouchDB 管理员凭据)

$ curl -X PUT http://<couchdb_admin>:<couchdb_password>@127.0.0.1:5984/_node/<node_name>/_config/admins/<couch_user> -d "\"<couch_password>\""

您可以使用以下命令检索正确的节点名称

$ curl -X GET http://<couchdb_admin>:<couchdb_password>@127.0.0.1:5984/_membership

配置 Cozy 管理员密码

Cozy 本身需要一个管理员密码,用于堆栈级别的所有操作。以 cozy 用户身份创建它

[cozy]$ cozy-stack -c /dev/null config passwd /etc/cozy/cozy-admin-passphrase

系统将提示您输入密码。

创建 vault 密钥

Cozy 使用 vault 来存储一些用户密码。要创建具有正确所有权和权限的 vault 密钥,只需以 cozy 用户身份进行操作

[cozy]$ cozy-stack -c /dev/null config gen-keys /etc/cozy/vault

启动堆栈

此时,您应该启动/启用 cozy-stack.service 守护进程。

您可以通过运行以下命令检查一切是否正常

$ curl https://127.0.0.1:8080/version

创建实例

要添加实例(系统将提示您输入 Cozy 管理员密码,您也可以使用 COZY_ADMIN_PASSWORD 环境变量传递密码)

$ cozy-stack instances add <instance>.example.tld --apps home,settings,store

这将输出一个注册令牌。您还可以使用 --email <address> 指定一个电子邮件地址,注册令牌将发送到该地址(这需要已在 /etc/cozy/cozy.yml 中设置 smtp 服务器)。

然后您需要访问 https://<instance>.example.tld/?registerToken=<token>,这要求您已设置反向代理(见下文)。

反向代理

作为一项安全措施,Cozy 需要通过 HTTPS 提供服务,这意味着它需要在前面设置一个反向代理。这可以通过 HAproxy 等代理软件或 Apache HTTP Server、nginx 或 Caddy 等 Web 服务器来管理。

Cozy 需要实例的完整域名(例如 <instance>.example.tld),并为每个应用程序使用一个域名,格式为 <app>.<instance>.example.tld

因此,您必须使用类似这样的方式设置您的域名区域

   <instance> 1h IN A x.x.x.x
   *.<instance> 1h IN CNAME <instance>

您还需要 SSL 证书,可以是涵盖 *.<instance>.example.tld<instance>.example.tld 的通配符证书,或者是以应用程序域名作为 SAN 添加到 <instance>.example.tld 的证书。目前,应用程序列表包括:home、banks、contacts、drive、notes、passwords、photos、settings、store 和 mespapiers。但是,此列表可能会随着时间推移而增长,因此您可能需要扩展您的证书。因此,建议使用通配符证书。

以下是 nginx 的示例配置文件。

nginx

/etc/nginx/sites-available/instance.conf
# Always redirect http:// to https://
server {
    listen 80;
    server_name .instance.example.tld instance.example.tld;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name .instance.example.tld instance.example.tld; 

    ssl_certificate /etc/cozy/instance.crt;
    ssl_certificate_key /etc/cozy/instance.key;

    # Limit max upload size
    client_max_body_size 1g;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_redirect http:// https://;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}