Cozy
Cozy 是一个免费且可自托管的个人云平台,使用 Go 语言编写(之前的 v2 版本使用 Node.js 编写)。
该平台旨在简化个人云的使用,并让用户重新掌握自己的隐私。其基本应用程序的功能包括托管、共享和同步文件及图片,以及从多个提供商处收集您的数据。路线图上还有其他应用程序,例如联系人管理器和日历。
第三方应用程序也可以通过应用商店获取。
安装
安装 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_user
和 couch_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; } }