UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

144 lines (92 loc) 6.28 kB
Related articles * [Synchronization and backup programs](/index.php/Synchronization_and_backup_programs "Synchronization and backup programs") [Cozy](https://cozy.io) is a personal cloud platform free, and self-hostable, written in [Go](/index.php/Go "Go") (the former version, v2, was written in [Node.js](/index.php/Node.js "Node.js") instead). The platform aims at simplifying the use of a personal cloud and at allowing the users to take back ownership of their privacy. Its base applications’ features include hosting, sharing and synchronising files & pictures and collecting your data from several providers. Some other apps are on the roadmap, like a contacts manager and a calendar. Third-party apps will also be available through a marketplace soon. ## Contents * [1 Installation](#Installation) * [2 Configuration](#Configuration) * [2.1 Configuring CouchDB](#Configuring_CouchDB) * [2.2 Configuring Cozy admin password](#Configuring_Cozy_admin_password) * [2.3 Starting the stack](#Starting_the_stack) * [3 Creating an instance](#Creating_an_instance) * [3.1 Reverse proxying](#Reverse_proxying) * [3.1.1 nginx](#nginx) ## Installation Install the [cozy-stack](https://www.archlinux.org/packages/?name=cozy-stack) package. It provides the core plus related configuration files, as well as the minimum required dependencies. You might also want to install [nsjail](https://www.archlinux.org/packages/?name=nsjail) to run Konnectors in isolated environments, as well as an SMTP server to let Cozy send emails to your users. ## Configuration Almost everything happens in `/etc/cozy/cozy.yml`. Some defaults are already set, while some placeholders will be replaced during configuration. You can also find an example file at `/usr/share/cozy/cozy.example.yaml`. ### Configuring CouchDB Cozy stores everything (but actual files) in a [CouchDB](/index.php/CouchDB "CouchDB") database, and needs a CouchDB administrator to manage this database. This administrator’s credentials must be specified as part of the `couchdb url` setting in `/etc/cozy/cozy.yml` so that Cozy can use them. The following supposes you have a running [CouchDB](/index.php/CouchDB "CouchDB") instance, if not you can follow the corresponding wiki page to setup one as single node. You can generate the credentials with [pwgen](https://www.archlinux.org/packages/?name=pwgen) for example. Once you have them (`couch_user` and `couch_password`), edit your configuration as follow: `/etc/cozy/cozy.yaml` ``` couchdb: url: http://<couch_user>:<couch_password>@localhost:5984/ ``` And register them to CouchDB (replace `<couchdb_admin>` and `<couchdb_password>` with your CouchDB admin credentials): ``` $ curl -X PUT http://<couchdb_admin>:<couchdb_password>@127.0.0.1:5984/_node/couchdb@localhost/_config/admins/<couch_user> -d "\"<couch_password>\"" ``` ### Configuring Cozy admin password Cozy itself requires an admin password for all operations at the stack level. Create it like this: ``` # cozy-stack config passwd /etc/cozy/cozy-admin-passphrase ``` You will be prompted to enter a passphrase. Then fix the ownership: ``` # chown cozy:cozy /etc/cozy/cozy-admin-passphrase ``` ### Starting the stack At this point, you should [Start/Enable](/index.php/Systemd#Using_units "Systemd") the `cozy-stack.service` daemon. You can check everything is right by running: ``` $ curl [http://localhost:8080/version](http://localhost:8080/version) ``` ## Creating an instance To add an instance (you will be prompted for your Cozy admin password, you might also pass it using COZY_ADMIN_PASSWORD env var): ``` $ cozy-stack instances add <instance>.example.tld --apps onboarding,settings,store ``` This will output you a registration token. You can also specify an email using `--email <address>` at which the registration token will be sent. You will then need to visit `https://<instance>.example.tld/?registerToken=<token>`, which requires you to have setup a reverse proxy (see below). ### Reverse proxying As a security measure, Cozy needs to be served over HTTPS, which means it needs a reverse proxy in front of it. This can managed by either a proxying software like [HAproxy](/index.php/HAproxy "HAproxy") or a webserver such as [Apache](/index.php/Apache "Apache"), [nginx](/index.php/Nginx "Nginx") or [Caddy](https://caddyserver.com/). Cozy needs a full domain name for the instance (something like `<instance>.example.tld`) and use one domain name per application, in the form of `<app>.<instance>.example.tld`. Thus, you have to setup your domain zone with something like this: ``` <instance> 1h IN A x.x.x.x *.<instance> 1h IN CNAME <instance> ``` You will also need SSL certificates, either a wildcard one covering `*.<instance>.example.tld` and `<instance>.example.tld` or a certificate for `<instance>.example.tld` with apps domains added as SAN. Currently, the list of apps is: onboarding,settings,drive,photos,collect. But this will grow over time, so you will have to expand your certificate regularly. Thus, getting a wildcard one is advised. Below is an example configuration file for 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](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; location / { proxy_pass [http://127.0.0.1:8080](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; } access_log /var/log/nginx/<instance>.log; error_log /var/log/nginx/<instance>.error.log; } ``` **Note:** Do not forget to symlink `/etc/nginx/sites-available/<instance>.conf` in `/etc/nginx/sites-enabled`!