Cozy

提供: ArchWiki
2017年10月7日 (土) 22:43時点におけるKusakata.bot (トーク | 投稿記録)による版 (Pkg/AUR テンプレートの更新)
ナビゲーションに移動 検索に移動

関連記事

CozyNode.js で書かれた、フリーなセルフホストの個人用クラウドプラットフォームです。

個人的なクラウドの利用を簡単にしてプライバシーをユーザーの手に取り戻すことを標榜しています。アプリケーションの基本機能としてファイルや画像を保存したり、連絡先やカレンダーをメールクライアントと共有・同期できます。

マーケットプレイスからサードパーティ製のアプリを入手することができ Cozy のデフォルト機能を拡張して、タスク管理やブログ運営、銀行口座の管理などをすることも可能です。

インストール

依存パッケージ

Cozy をインストールするにはまず依存パッケージをインストールしてください。疑似パッケージである cozy-depsAUR[リンク切れ: パッケージが存在しません] をインストールすることで必要なパッケージを全てインストールできます。

手動で必要なパッケージを全てインストールすることもできます: ca-certificates, couchdb, bash, curl, git, imagemagick, coffee-script[リンク切れ: 置換パッケージ: coffeescript], openssl, libxml2, libxslt, sqlite

ノート: cozy-depsAUR[リンク切れ: パッケージが存在しません] を使うにしろ使わないにしろ Node.js のバージョン 6.x または 7.x がインストールされます。Cozy は公式にはサポートしていないバージョンですが、全く問題なく動作します。Cozy が公式にサポートしているのは Node.js v4.x だけ、nodejs-lts-binAUR[リンク切れ: パッケージが存在しません] パッケージでインストールできます。Arch Linux の公式リポジトリに含まれている最新版の Node.js を使いたい場合、npm が必要です。

インストール前の設定

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 に送信してください。ファイルには適切な権限を与える必要があります:

ノート: 以下の curl コマンドは Arch Linux の公式リポジトリに含まれている CouchDB のバージョン 2.0 以上でのみ機能します。
# 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
ノート: 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>
ノート: Cozy では特定のドメイン (あるいはサブドメイン) を使用することが推奨されています (例: cozy.example.tld)。

バックグラウンドの設定

# curl -X POST http://localhost:9103/api/instance -H "Content-Type: application/json" -d '{"background":"background-07"}'
ノート: Cozy インスタンスの "Settings" ページで設定はいつでも変えられます。

リバースプロキシ

セキュリティ上、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;
}
ノート: /etc/nginx/nginx.conf から /etc/nginx/cozy.conf を include してください。

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 サービスを起動したら全てが問題なく動作するはずです。