Installer plusieurs app sur le meme domaine

Tout d’abord merci pour ce superbe outil qu’est yunohost et mes félicitations à toutes l’équipe.

Contexte :
yunohost est installé sur une VM sur ma bécane.
Pour bien testé, j’ai utilisé un domaine en ynh.fr
J’ai installé plusieurs app et notamment Gitlab et tout fonctionne nickel.

J’ai malheureusement essayé d’installer Gitlab runner et ca échoue à chaque fois :confused:
Je ne comprends vraiment pas pourquoi ? peut être que le fait que Gitlab soit déjà installé pose problème ?

Bref, j’ai installé un runner directement avec docker sur ma becane et ca marche très bien.
L’accès du runner à gitlab n’a pas réussi en passant par mondomaine.ynh.fr/gitlab mais en spécifiant ip_local_vm/gitlab.

Mon besoin :
installer/deployer des apps/sites sur mon domaine de manière à avoir
mondomaine/app1
- app en nodejs avec base postgress
- accès en ssh directement (pas de sftp)
mondomaine/app2
- app en python avec maria db
- accès en ssh et sftp
mondomaine/app3
- app construite avec CMS et une bd (nosql, etc.)
- accès en sftp
etc.

Ce qui est le cas des app installées par défaut avec yunohost il me semble ?

Je me dis que j’ai 2 solutions et 1 alternative :


1/ Manuellement vu que j’ai accès en ssh avec l’user admin
- déployer mon app dans /var/www/app1
- installer la bd de mon choix
- configurer la bd pour app1 (1 admin et structure)
- configurer dans nginx un vhost

a/ Maintenand si app2 utilise aussi par exemple postgress, cela va t’il poser
problème ? est t’il possible/souhaitable d’installer une 2nd occurrence de la
meme bd ?

b/ Je ne sais pas du tout comment configurer nginx pour que l’intégration soit
correct avec yunohost (sso, sécurité, etc.) et s’il y a des choses particulières
à prendre en compte ?

Ca semble quand meme très chiant à faire à chaque fois…


2/ En installant "Custom webapp"
- installer sur monsousdomaine.ynh.fr/ avec l’url /app1
- déployer mon app dans /var/www/my_webapp/www/fichiers_app1
- modifier la config nginx crée pour désactiver php si pas utilisé

Une fois tout configuré je deploye correctement et mon app est bien visible
à l’url : monsousdomaine.ynh.fr/app1
Une tuile c’est bien ajouté dans l’UI (et sa visibilité configurable)

a/ Je ne comprend pas
- pourquoi l’id de la webapp est “my_webapp” plutot que “app1” ?
- pourquoi le dossier ciblé est /my_webapp/www/fichiers_app plutot que /app1/fichiers ?

b/ Si j’installe une nouvelle webapp sur le meme domaine mais avec l’url /app2 cela échoue, car /app1 est déjà installé ?

plus concrètement dans mon cas, j’ai testé /app1 (qui pourrait etre l’app
en production par exemple) et ensuite, j’ai voulu ajouter /app1.dev

De toute évidence, je m’y prends mal ou quelque chose m’échappe ?


3/ Ajouter des sous domaine
- ajouter un sous sous domaine app1.mondomaine.ynh.fr
- installé les apps avec solution 1 ou 2 (ou une autre alternative ?)

a/ Peut etre que c’est la seule et bonne solution ?

b/ Configuration DNS
- Il y a t’il une configuration particulière dans mon cas ?
- Si j’installai tout cela sur un VPS avec un “vrai” nom de domaine,
j’imagine que dans ce cas il faudrait configurer les DNS (ajout de CNAME) ?
c’est bien ca ?

c/ Redirection
- Faudra t’il configurer nginx pour rediriger
app1.mondomaine.ynh.fr => mondomaine.ynh.fr/app1 ?

d/ Mappage des ports
- chaque app doit elle avoir un port précis /app1:8081 par exemple ?


Désolé pour ce post très long et j’éspère poster sur le bon topic.
Merci d’avance pour les réponses les plus claire et précise possible que vous voudrez bien m’apporter :slight_smile:

Salut !
Bienvenue sur le forum !
ça fait beaucoup de questions d’un coup, et je ne suis pas sûr d’abord toutes les réponses, mais je vais t’apporter quelques infos :slightly_smiling_face:

Pour gitlab runner, aucune idée de pourquoi ça bugue, tu essayais de l’installer comment ? avec le paquet ynh ?
Le problème ne doit pas être lié au fait que tu aies installé gitlab par ailleurs.

tu parles d’une ip_local_vm, où est installé ton ynh ?

Dans les grandes lignes oui, mais l’accès ssh n’est pas possible par défaut sur toutes les applis. my_webapp te permet d’activer le sftp.

Je ne sais pas comment fonctionne postgresql, je n’ai toujours utilisé que mysql. Mais je ne vois pas pourquoi ce serait différent : Tu installes une seule fois postrgresql, et ensuite, tu crées plusieurs bases dedans, pour chacune de tes applis. Lorsque tu installes my_webapp, l’installateur te demande si tu veux une base de données. Tu dis oui, ça va juste ajouter une base, et tu recevras par mail les identifiants correspondants à utiliser dans ton app ensuite.

Je ne comprends pas, tu installes deux apps qui se connectent sur la même base c’est ça ?
Dans ce cas il ne faut pas la réinstaller, mais utiliser une seule et même base…

L’avantage de passer par l’installation de my_webapp est que tu n’as pas besoin de savoir configurer nginx, tout est déjà fait pas cette app :wink:

Pour l’instant, l’ID d’une app que tu installes dans ynh porte le nom de cette app : si tu installes plusieurs fois wordpress par exemple, tu auras

  • ID 1 : wordpress
  • ID 2 : wordpress_2
  • ID 3 : wordpress_3
    et ainsi de suite. Pareil avec les webapp. Il n’est pas possible pour l’instant de personnaliser ces ID, en tout cas pas à ma connaissance, mais peut-être que quelqu’un me contredira. @ljf ?
    C’est donc à toi de te rappeler que dans my_webapp _5, tu as installé telle app… :wink:

Même réponse qu’au-dessus, l’app installée dans ynh est my_webapp, pas ton application. Le dossier est donc my_webapp. Et dedans, tu mets ce que tu veux, mais ynh sera capable de lire que c’est bien une app personnalisée.

Du coup non, comme expliqué au-dessus.

Si tu veux faire deux sites, un en prod l’autre en dev, tu fais deux installations :

  1. my_webapp : ton app en prod qui aura comme url tondomaine.tld/tonapp-prod
  2. my_webapp_2 : ton app en dev qui aura comme url tondomaine.tld/tonapp-dev

ça ne change rien aux redirections internes, tu devras quand même faire deux installs distinctes, ne serait-ce que pour rendre plus clair ton travail. Mais plutôt que d’avoir l’url tondomaine.tld/tonapp-prod, tu pourras la remplacer par tonapp-prod.tondomaine.tld, oui, c’est tout à fait possible, mais ça ne change pas le fonctionnement de l’app ou de ynh.

Si tu ajoutes un sous-domaine, il faudra configurer ta zone dns comme le diagnostique te le demandera, rien de bien sorcier, ni particulier à ton cas.

Pareil, pour te la faire courte, yunohost est un outil conçu pour éviter de se prendre la tête, surtout quand on y connait pas grand chose. Je te conseille dans un premier temps de te laisser guider par ce qui existe avant de vouloir tout personnaliser (ne le prend pas mal hein :wink: ) La config dns est très bien expliquée par le diagnostique, lorsque tu choisiras d’ajouter un domaine depuis ton panneau d’administration. Tu retrouveras tout ça détaillé ici

Nop, tu devras juste aller sur le panneau d’administration, dans application/ puis l’app en question. ensuite, choisir dans le champ “Modifier l’URL d’accès de cette application (domaine et/ou chemin).” le domaine que tu voudras attribuer à cette app, ainsi que le chemin. Si tu attribues un sous-domaine à ton app, tu n’auras probablement pas besoin de mettre quoi que ce soit dans le chemin, et laisser la case vide. Ton site sera donc accessible à l’url tonsous.domaine.tld. Et c’est tout :slight_smile:

Non, il faut que ton domaine principal, celui sur lequel tu as installé ton ynh (par exemple tondomaine.tld ou peut-être serveur.tondomaine.tld) ait bien tous les ports ouverts comme demandé dans le diagnostique. Ensuite, le travail se fait tout seul, tous les sites seront accessibles en 80 ou 443 pour le web. Tu n’as rien à faire de ce côté-là.

J’espère t’avoir éclairé, n’hésite pas à faire des tests, tu pourras facilement désinstaller des apps si finalement tu n’utilises pas tout :wink:

1 Like

Salut merci pour tes réponses :wink: et désolé pour le pavé mais je voulais être sur de faire le tour des solutions que je pouvais mettre en place et qu’éventuellement on me corrige. En fait pour résumer c’est assez simple soit j’installe les apps :

sur le meme domaine "monsousdomaine.ynh.fr"

  • manuellement en utilisant ssh avec l’admin user
  • via “Custom webapp”
    au final chaque app serait accessible via "monsousdomaine.ynh.fr/appX"

sur des sous (sous) domaine pour chaque app : "app1.monsousdomaine.ynh.fr"

  • manuellement en utilisant ssh avec l’admin user
  • via “Custom webapp”
    au final chaque app serait accessible via "appX.monsousdomaine.ynh.fr"
    ou via redirection sur "monsousdomaine.ynh.fr/appX"

Peut etre que mon raisonnement est foireux à la base :slight_smile:

Bon mais raisonnons juste sur le cas ou je veux tout sur le meme domaine et en installant des “Custom webapp”

Pour l’instant, l’ID d’une app que tu installes dans ynh porte le nom de cette app : si tu installes plusieurs fois wordpress par exemple, tu auras

    ID 1 : wordpress
    ID 2 : wordpress_2
    ID 3 : wordpress_3
    et ainsi de suite. Pareil avec les webapp. Il n’est pas possible pour l’instant de personnaliser ces ID, en tout cas pas à ma connaissance, mais peut-être que quelqu’un me contredira. @ljf ?
    C’est donc à toi de te rappeler que dans my_webapp _5, tu as installé telle app… :wink:

C’est là justement mon problème, moi l’id c’est “my_webapp”

et quand j’essaye de faire une nouvelle install ca foire…

La j’ai installé par exemple mon app avec le chemin /ngflow sur le domaine mondomaine.ynh.fr

ID_APP

et quand je veux installer ngflow-dev par exemple

install

bah ca fait une erreur

Install_error

Essaie avec /dev-ngflow comme chemin, pour voir ?

satanas c’etait juste ca :sweat_smile:, merci ca fonctionne maintenant.

Si j’installe postgresql, comment à l’installation de l’app je peux lui dire d’utiliser cette bd plutot que mysql ?

J’ai testé en sftp et fait des deploiement auto en utilisant lftp tout fonctionne nickel. Par contre ssh et scp ne sont pas permis… logique…

Mon besoin :
installer/deployer des apps/sites sur mon domaine de manière à avoir

mondomaine/app1

  • app en nodejs avec base postgress
  • accès en ssh directement (pas de sftp)

mondomaine/app2

  • app en python avec maria db
  • accès en ssh et sftp

mondomaine/app3

  • app construite avec CMS et une bd (nosql, etc.)
  • accès en sftp

etc.

Donc pour une solution ssh, j’imagine qu’on revient au cas 1 que je décrivais dans mon 1er post ?

Quelqu’un pourrait t’il me décrire au moins les fichiers à modifier dans ce cas ?
Moi pour l’instant je vois bien la conf nginx à ajouter en m’inspirant des webapp, etc. + le include du ssowat

mais après quel autres conf à faire/modifier ?

c’est une bonne occasion d’apprendre :slight_smile:

Après une tonne de lecture et analyse du script d’install de “Custom webapp”, je pense qu’il y a 2 parties à mon problème :sweat_smile:

1/ partie devop

  • créer un user : je compte plutot utiliser l’user admin
  • créer les dossiers app1/www et mettre les bon droits/proprio

sudo mkdir -p /var/www/app1/www
sudo chown admin:www-data /var/www/app1/www
sudo chmod -R u=rwX,g=rX /var/www/app1

Bon rendu là j’ai un doute sur le fait que les futurs fichiers/dossiers copiés dans ce dossier auront les bon droits automatiquement… surement pour ca que dans le script d’install c’est fait via des ACL ?

chown -R $app:www-data "$final_path"
#Home directory of the user needs to be owned by root to allow
#SFTP connections
chown root:root "$final_path"
setfacl -m g:$app:r-x "$final_path"
setfacl -m g:www-data:r-x "$final_path"
chmod o-rwx "$final_path"
  • copier index.html fourni de base par une “Custom webapp” dans app1/www/
  • copier …/mondomaine.d/my_webapp.conf => app1.conf
  • configurer comme suit :
 rewrite ^/app1$ /app1/ permanent;
location /app1/ {

    # Path to source
    alias /var/www/app1/www/;

    # Force usage of https
    if ($scheme = http) {
        rewrite ^ https://$server_name$request_uri? permanent;
     }

    # Default indexes and catch-all
    index index.html;
    try_files $uri $uri/ /app1/index.html;

    # Prevent useless logs
    location = /app1/favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /app1/robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Deny access to hidden files and directories
    location ~ ^/app1/(.+/|)\.(?!well-known\/) {
        deny all;
    }

    # Include SSOWAT user panel.
    include conf.d/yunohost_panel.conf.inc;
}
  • reload de la config nginx

sudo nginx -t
sudo systemctl reload nginx.service

L’url mondomaine/app1 redirige vers le sso, ce qui nous amène à

2/ integration yunohost

Bon là j’ai essayé de faire la correlation entre les commandes du script d’install et les commandes yunohost du système ce qui donne :

sudo yunohost app register-url app1 domaine.ynh.fr /app1
sudo yunohost app setting app1 domain -v domaine.ynh.fr
sudo yunohost app setting app1 path -v /app1
sudo yunohost app setting app1 final_path -v /var/www/app1

sudo yunohost user permission add app1.main visitors

Pour cette dernière commande, si j’ai compris, on doit pouvoir le faire directement dans l’UI en admin.

Bref, j’ai fait la 1er partie, mais avant de faire la 2nd, si qqu’un pouvait me confirmer ou me corriger/conseiller, si je n’oublie rien, si les chemins ou paramétres sont correctes, etc.

Merciiii d’avance :wink: