Installer a partir du code source


#1

Bonjour,

Je voudrais installer cozy-stack a partir des sources GitHub, plus précisément à partir du paquet go.
Voilà ce que j’ai fait :

# Récupérer le paquet en "go"
go get -v -u github.com/cozy/cozy-stack

# Installer le paquet sur le système
install -m0755 -o root -g root /go/bin/cozy-stack /usr/bin/cozy-stack

# Ajouter un utilisateur et un groupe
addgroup -g 991 cozy
adduser -h /cozy-datas -G cozy -D -u 991 cozy
chown cozy:cozy /cozy-datas

# Installer le paquet en tant que "cozy"
install -d -o cozy -g cozy /cozy /cozy-datas

# Appliquer les droits sur les dossiers
find /cozy \! -user cozy -exec chown cozy:cozy {} \;
find /cozy-datas \! -user cozy -exec chown cozy:cozy {} \;

Une base de données couchdb est lancée, puis je l’initialise :

curl -X PUT ${COZY_COUCHDB_URL}/{_users,_replicator,_global_changes,secrets,_metadata}

Enfin, je lance le cozy-stack avec des droits restreint (j’utilise s6) :

s6-setuidgid cozy /usr/bin/cozy-stack serve --config /cozy-datas/cozy.yml

Et je créé une instance cozy :

s6-setuidgid cozy /usr/bin/cozy-stack instances add --host 0.0.0.0 --apps drive,onboarding,photos,settings --passphrase MDP cozy.domain.com

Je suis arrivé là, cozy-stack se lance bien et lit correctement le fichier de configuration. Mais je n’ai pas encore trouvé la documentation qui explique comment accéder à son espace cozy.
Quand j’accède à l’url : http://cozy.domain.com, je me connecte avec le mot de passe renseigné à la création de l’instance, puis je suis redirigé vers http://home.cozy.domain.com/. Il a donc fallu dans un premier temps enregistrer ces deux sous domaines dans mon DNS.
Et maintenant j’ai ça :
cozy

logs

Create new instance :
  Name : cozy.domain.com
  Applications : app,drive,store,photos,settings
Instance created with success for domain cozy.domain.com
/!\ Application app has not been installed
time="2019-03-12T09:57:22+01:00" level=info msg="Successful installer process: 1.15.5" domain=cozy.domain.com nspace=apps slug=drive type=install version_start=
time="2019-03-12T09:57:22+01:00" level=info msg=Start domain=cozy.domain.com nspace=apps slug=store type=install version_start=
time="2019-03-12T09:57:23+01:00" level=info msg="Successful installer process: 1.7.1" domain=cozy.domain.com nspace=apps slug=store type=install version_start=
time="2019-03-12T09:57:23+01:00" level=info msg=Start domain=cozy.domain.com nspace=apps slug=photos type=install version_start=
time="2019-03-12T09:57:24+01:00" level=info msg="Successful installer process: 1.15.5" domain=cozy.domain.com nspace=apps slug=photos type=install version_start=
time="2019-03-12T09:57:24+01:00" level=info msg=Start domain=cozy.domain.com nspace=apps slug=settings type=install version_start=
time="2019-03-12T09:57:25+01:00" level=info msg="Successful installer process: 1.5.0" domain=cozy.domain.com nspace=apps slug=settings type=install version_start=
time=2019-03-12T09:57:25+01:00  status=201      method=POST     host=0.0.0.0:6060       uri=/instances?Apps=app%2Cdrive%2Cstore%2Cphotos%2Csettings&ContextName=&DiskQuota=0&Domain=cozy.domain.com&Email=&Locale=&Passphrase=cozy&PublicName=&Settings=&SwiftCluster=0&TOSSigned=&Timezone=&UUID=      bytes_out=545
time=2019-03-12T09:57:25+01:00  status=200      method=POST     host=0.0.0.0:6060       uri=/instances/token?Audience=cli&Domain=cozy.domain.com&Scope=io.cozy.apps&Subject=CLI       bytes_out=246
time=2019-03-12T09:57:25+01:00  status=200      method=GET      host=cozy.domain.com  uri=/apps/      bytes_out=9833
time=2019-03-12T09:57:42+01:00  status=303      method=GET      host=cozy.domain.com  uri=/   bytes_out=0
time=2019-03-12T09:57:42+01:00  status=200      method=GET      host=cozy.domain.com  uri=/auth/login bytes_out=7378
time=2019-03-12T09:57:43+01:00  status=200      method=GET      host=cozy.domain.com  uri=/assets/fonts/Lato-Regular.immutable.woff2  bytes_out=179587
time=2019-03-12T09:57:43+01:00  status=200      method=GET      host=cozy.domain.com  uri=/assets/fonts/Lato-Bold.immutable.woff2     bytes_out=181502
time=2019-03-12T09:57:45+01:00  status=200      method=POST     host=cozy.domain.com  uri=/auth/login bytes_out=45
time="2019-03-12T09:57:45+01:00" level=error msg="GET / Application is not installed" domain=cozy.domain.com nspace=http
time=2019-03-12T09:57:45+01:00  status=404      method=GET      host=home.cozy.domain.com     uri=/   bytes_out=1640
time=2019-03-12T09:57:45+01:00  status=304      method=GET      host=cozy.domain.com  uri=/assets/images/cozy-bubble.svg      bytes_out=0
time=2019-03-12T09:57:45+01:00  status=200      method=GET      host=cozy.domain.com  uri=/assets/fonts/Lato-Regular.immutable.woff2  bytes_out=179587
time=2019-03-12T09:57:45+01:00  status=200      method=GET      host=cozy.domain.com  uri=/assets/fonts/Lato-Bold.immutable.woff2     bytes_out=181502

Quelqu’un a-t-il eu le problème déjà ? Ou peut-être qu’une documentation existe déjà ?


#2

Bonjour @lmilcent :slight_smile:
Tu n’as pas installé l’application home à la création de l’instance, d’où l’erreur à la fin (et onboarding ne sert plus).


#3

Merci :slight_smile: :clap:

Il y a une liste des applications disponible quelque part ?
J’ai aussi modifié mon fichier hosts sous Windows pour ne pas devoir modifier les nom DNS et attendre la propagation.

Et maintenant j’ai accès à l’interface ! Top ! :smile:

Pour info, j’ai pu créer une image docker basée sur Alpine Linux avec cozy-stack et tout semble fonctionner. Ce n’est donc pas impossible malgré ce que j’ai pu lire dans certaines réponses sur le forum.


#4

Une question à propos de Cozy : pourquoi utiliser des sous-domaines pour les parties de l’application ?
Ce n’est pas pratique du tout quand on auto-héberge, puisqu’il faudra enregistrer chaque sous-domaine dans son DNS publique.

Je trouve que ça a un sens pour les instances cozy par utilisateurs, pourquoi pas. Mais pour les applications ce serait plus logique (pour moi) d’utiliser un user1.cozy.domain.tld/app et user2.cozy.domain.tld/app.


#5

Tout est toujours possible en info :smile:
Le problème est surtout de faire ça correctement, « the docker way » avec chaque composant (couchdb, stack, reverse-proxy…) dans une image docker.
Et il s’avère que dans l’éco-système Cozy, certains morceaux sont problématiques, d’autant plus sous Alpine.


#6

Pour des raisons de sécurité.
Les applications font tourner éventuellement du code tiers, et on se base sur les CSP (et donc les sous-domaines) pour cloisonner les sorties de données possibles. Une application X n’a pas accès par défaut à celles de l’application Y.


#7

Effectivement, c’est ce que j’ai fait, un conteneur couchdb d’une part, le binaire cozy-stack de l’autre et une base de donnée redis dans un dernier conteneur.

En utilisant le binaire en go, qu’est-ce qui sera problématique ? Vous faites appel directement à des commandes systèmes dans certaines parties de l’application ?


#8

Les konnecteurs. Ça repose sur du nodejs et du nsjail actuellement.
Ça doit pouvoir passer sous Alpine, mais pas nativement par rapport à ce qu’on supporte officiellement actuellement.

Et du coup, il doit aussi te manquer des fonctionnalités comme imagemagick nécessaire à drive & photos.


#9

J’ai pu lancer les deux applications drive et photos sans soucis, mais j’ai installé imagemagick comme paquet système !

Il devrait me suffire d’installer nodejs et nsjail en tant que dépendance et ça devrait fonctionner je pense. J’ai vu des Dockerfile avec alpine et nsjail, je vais essayer.
D’ailleurs tout ce qui est proposé sur le store, ce ne sont que des connecteurs à des services tiers, pas réellement des applications pour le moment ?

Si je comprend bien, chaque application embarque tout son code JS et ne peux le charger que depuis son espace propre, soit app.cozy.domain.com ?
Puisque le CSP sert à ça, contrôler la liste des sites autorisés depuis lesquels l’application web peux charger son code JS et faire des requêtes.


#10

Dans le cadre de Docker, il faut justement faire autrement.
nsjail n’a d’intérêt que hors virtualisation, vu que Docker s’occupe déjà de l’isolation dont nsjail avait la charge.
Et ça suppose aussi d’avoir un 2nd conteneur Docker faisant tourner la stack mais uniquement en mode worker, et avec tout plein d’autres petits détails de ce genre qui fait que ça ne va certainement pas tomber en marche tout seul.

En gros rien d’impossible, mais actuellement jamais testé en conditions réelles et non officiellement supporté.


#11

Je comprend tout à fait.

Une idée si c’est prévu sur une road map, de supporter docker et la possibilité de ne pas utiliser nsjail si c’est déjà dans un environnement dockerisé ?


#12

C’est prévu à un moment donné, mais on ne sait pas encore quand exactement.


#13

En espérant que ça viendra relativement vite, car pour du self-hosting c’est presque nécessaire.


#14

Il y a des applications : Drive, Photos, Bank, Contact.
Et à terme, le but est d’enrichir les connecteurs d’une interface pour afficher les données propres. Par exemple, actuellement des connecteurs à des services de musique ou de vidéo en ligne peuvent importer des listes de lecture ou des historiques, mais il n’est pas possible de les afficher. À terme, ces connecteurs proposeront une interface pour consulter ces données.