Cozy
関連記事
Cozy は Node.js で書かれた、フリーなセルフホストの個人用クラウドプラットフォームです。
個人的なクラウドの利用を簡単にしてプライバシーをユーザーの手に取り戻すことを標榜しています。アプリケーションの基本機能としてファイルや画像を保存したり、連絡先やカレンダーをメールクライアントと共有・同期できます。
マーケットプレイスからサードパーティ製のアプリを入手することができ Cozy のデフォルト機能を拡張して、タスク管理やブログ運営、銀行口座の管理などをすることも可能です。
目次
インストール
依存パッケージ
Cozy をインストールするにはまず依存パッケージをインストールしてください。疑似パッケージである cozy-depsAUR[リンク切れ: パッケージが存在しません] をインストールすることで必要なパッケージを全てインストールできます。
手動で必要なパッケージを全てインストールすることもできます: ca-certificates, couchdb, bash, curl, git, imagemagick, coffee-script, openssl, libxml2, libxslt, sqlite。
インストール前の設定
Cozy のベースコンポーネントをインストールする必要があります:
# npm install -g cozy-controller # npm install -g cozy-monitor
また、Cozy は3つのユーザーアカウントを必要とします:
# useradd -MU cozy # useradd -MU cozy-data-system # useradd -MU cozy-home
さらに /etc/cozy リポジトリを作成して、所有者を cozy ユーザーにする必要があります。
CouchDB の設定
次にデータベースを設定します。Cozy は全てを CouchDB データベースに保存するため、データベースを管理するための CouchDB の管理者が必要です。管理者の認証情報を /etc/cozy/couchdb.login に配置することで Cozy は管理者アカウントを使用します。
管理者を作成するには、まず (pwgen などを使って) 認証情報を生成して、保存し、CouchDB に送信してください。ファイルには適切な権限を与える必要があります:
# pwgen -1 > /etc/cozy/couchdb.login
# pwgen -1 >> /etc/cozy/couchdb.login
# chown cozy-data-system /etc/cozy/couchdb.login
# chmod 640 /etc/cozy/couchdb.login
# curl 127.0.0.1:5984/_cluster_setup -Hcontent-type:application/json -d "{\"action\":\"enable_cluster\", \"username\":\"$(head -n1 /etc/cozy/couchdb.login)\", \"password\":\"$(tail -n1 /etc/cozy/couchdb.login)\", \"bind_address\":\"0.0.0.0\"}"
# curl $(head -n1 /etc/cozy/couchdb.login):$(tail -n1 /etc/cozy/couchdb.login)@127.0.0.1:5984/_cluster_setup -XPOST -Hcontent-type:application/json -d '{"action":"finish_cluster"}'
コントローラの起動
Cozy を使うにはコントローラ (cozy-controller) を立ち上げる必要があります。バックグラウンドタスクとして実行するものなので、systemd で起動するのが好ましいでしょう。以下の /etc/systemd/system/cozy-controller.service ファイルを作成してください:
/etc/systemd/system/cozy-controller.service
[Unit] Description=Cozy Controller [Service] Environment=NODE_ENV=production Environment=USE_SYSLOG=true Environment=WEBOOB_PYTHON_PATH=/usr/share/cozy-weboob/lib/python2.7/site-packages Environment=WEBOOB_DIR=/usr/share/cozy-weboob/lib/python2.7/site-packages ExecStart=/usr/bin/cozy-controller [Install] WantedBy=multi-user.target
コントローラの設定ファイルを作成
Cozy のコントローラは /etc/cozy/controller.json に置かれた JSON の設定ファイルを使います。ファイルが存在しない場合、コントローラはデフォルト値を使用します。デフォルトの設定では supervisor を使って再起動を行います。systemd を使用してコントローラを起動・停止するために、以下のように JSON ファイルを作成して適切な再起動コマンドを設定する必要があります:
/etc/cozy/controller.json
{
"restart_cmd": "/bin/systemctl restart cozy"
}
以下を実行することでファイルの所有者を cozy にすることができます:
# chown cozy:cozy /etc/cozy/controller.json
Cozy スタックのインストール
Cozy モニターを使用して Cozy のベーススタックの各コンポーネントをインストール・起動することができます:
# cozy-monitor install data-system # cozy-monitor start data-system # cozy-monitor install home # cozy-monitor start home # cozy-monitor install proxy # cozy-monitor start proxy
設定
Cozy にはユーザーがアクセスするドメインの名前やバックグラウンドなどの基本的な設定が必要です。
ドメインの設定
# coffee /usr/local/cozy/apps/home/commands.coffee setdomain <your domain>
バックグラウンドの設定
# curl -X POST http://localhost:9103/api/instance -H "Content-Type: application/json" -d '{"background":"background-07"}'
リバースプロキシ
セキュリティ上、Cozy は HTTPS を使ってアクセスするべきであり、リバースプロキシを必要とします。HAproxy などのプロキシソフトウェアを使用するか Apache, nginx, Caddy などのウェブサーバーを使用してください。
さらに、自己署名証明書か、認証局から入手した SSL 証明書が必要です。
以下は一般的なウェブサーバーでの設定ファイルの例です。
Apache
/etc/httpd/conf/extra/cozy.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName cozy.example.tld
ServerAdmin admin@server
SSLEngine On
SSLCertificateFile /etc/cozy/server.crt
SSLCertificateKeyFile /etc/cozy/server.key
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/.*socket\.io [NC]
RewriteCond %{THE_REQUEST} websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:9104/$1 [P,L]
ProxyPass / http://127.0.0.1:9104/ retry=0 Keepalive=On timeout=1600
ProxyPassReverse / http://127.0.0.1:9104/
setenv proxy-initial-not-pooled 1
CustomLog /var/log/apache2/cozy-access.log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
ErrorLog /var/log/apache2/cozy-error.log
</VirtualHost>
<VirtualHost *:80>
ServerName cozy.example.tld
ServerAdmin admin@server
Redirect permanent / https://cozy.example.tld/
</VirtualHost>
</IfModule>
nginx
/etc/nginx/cozy.conf
server {
listen 443;
server_name cozy.example.tld;
ssl_certificate /etc/cozy/server.crt;
ssl_certificate_key /etc/cozy/server.key;
ssl_dhparam /etc/cozy/dh.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM;
ssl_prefer_server_ciphers on;
ssl on;
gzip_vary on;
client_max_body_size 1024M;
add_header Strict-Transport-Security max-age=2678400;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect http:// https://;
proxy_pass http://127.0.0.1:9104;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
access_log /var/log/nginx/cozy.log;
}
# Always redirect http:// to https://
server {
listen 80;
server_name cozy.example.tld;
return 301 https://$host$request_uri;
}
Caddy
/etc/caddy/Caddyfile
cozy.example.tld {
tls admin@server
proxy / 127.0.0.1:9104 {
transparent
websocket
}
}
トラブルシューティング
CouchDB 2.x
CouchDB 2.0 のアップデートによって問題が発生する場合があります。
古いバージョンからのアップデート
CouchDB をバージョン 1.x から 2.x に更新すると、CouchDB のシャーディングによって Cozy が動作しなくなることがあります (Cozy はシャーディングをまだサポートしていません)。アップデートによってデフォルトのデータベースディレクトリが変わってしまうため、Cozy のデータベースが CouchDB から認識されなくなります。以下は Cozy をまた動作できるようにする手順です:
couchdbサービスを停止してください。/var/lib/couchdb/cozy.couchをどこかにバックアップして/var/lib/couchdb下のファイルを全て削除してください (CouchDB を Cozy 以外のアプリケーションに使っている場合は簡単に削除しないでください。その場合、ディレクトリに含まれているファイルをチェックしてから、全てのデータベースを正しい手順で移行してください)。
/etc/couchdb/local.iniを編集して以下を追加:
/etc/couchdb/local.ini
[cluster] q=1 n=1
couchdbサービスを起動してください。/var/lib/couchdbに再度ファイルが作成されます (例:/var/lib/couchdb/shards/00000000-ffffffff/cozy.<unix time of creation>.couch)。
couchdbサービスを停止して、バックアップしたcozy.couchを/var/lib/couchdb/shards/00000000-ffffffff/cozy.<unix time of creation>.couchにコピーしてください。
couchdbサービスを起動したら全てが問題なく動作するはずです。