Jump to content
XPEnology Community

Recommended Posts

Posted

Bonjour,

 

N'arrivant pas à faire ce que je souhaite, j'ai téléchargé l'image jc21/NginxProxyManager  afin de créer mon serveur web.

 

Le contexte est le suivant :

J'ai 2 sites web perso en PHP que je souhaite héberger sur https://toto.mondomaine.fr et https://titi.mondomaine.fr

Les sites sont stockés sur /home/toto/www et /home/titi/www

J'ai les certificats correspondants installés dans Sécurité > Certificats.

 

L'idée est de mettre en place dans le reverse proxy de DSM mes deux sites web.

Je débute avec les conteneurs. j'ai tenté de démarrer le serveur en créant un conteneur basé sur l'image jc21/NginxProxyManager.

Niveau paramètres, j'ai tout laissé tel que, j'ai juste mappé un dossier /dockers/ngnix vers /data avant de démarrer.

Niveau port j'ai mis 8080 => 80 / 8443 => 443 / 8081 => 81

J'ai tenté bridge et host en réseau mais même résultat, le serveur ne démarre pas.

 

Merci.

Posted

OK on est d'accord que tu ne veux pas faire www.mondomaine.fr/toto et www.mondomaine.fr/titi ?

 

Ici nginx-manager joue le role de reverse-proxy, donc c'est lui qui doit intercepter les requêtes de l'extérieur pour les rediriger vers le serveur web. Cad qu'il te faut un serveur web en plus de ce reverse-proxy, ici reste sur WebStation!

 

Ce qui donne

INTERNET 80--> :8080 reverse-proxy (ici nginx-manager) :80 --> serveur web (ici WebStation) :80

 

Note : Le port 81, c'est l'interface d'administration de nginx-manager, lui ne doit être accessible que depuis ton réseau local. C'est là que tu configureras tes hotes virtuels.

 

Il va falloir bien t'accrocher car ce n'est pas simple... Bref, c'est donc ton reverse-proxy qui doit recevoir la requête sur le port 80 de ta box. Donc déjà si pour la configuration de ton conteneur tu as mis 8080=>80, ça veut dire que ton conteneur écoute sur le port 8080 du point de vue de DSM (ie. du NAS). Cela voudra dire qu'en terme de NAT au niveau de ta box, il faut que tu mettes ceci :

  • Port entrant : 80 --> redirige la requête vers l'IP du NAS et le port de destination 8080 (qui lui même redirigera vers le port 80 interne de Docker) ; ça c'est pour l'http
  • Port entrant : 443--> redirige la requête vers l'IP du NAS et le port de destination 8443 (qui lui même redirigera vers le port 443 interne de Docker) ; ça c'est pour l'https

 

Ensuite depuis le réseau local, tu te connectes à l'url : https://[IP_NAS]:81/, tu te connectes avec les identifiants par défaut :
 

Email:    admin@example.com
Password: changeme

 

là tu crées 2 proxy host, un pour toto.mondomaine.fr et un second pour titi.mondomaine.fr

(je pars du principe que WebStation tourne déjà et est opérationnel pour ces 2 sites)

Ensuite pour chacun des proxyhosts, tu renseignes les infos suivantes (à adapter selon ta config évidemment) :

image.png.b97d5d6f87f2a03e7965fde144635174.pngimage.png.696a4ee75aa2796c525cca882be6d754.png

 

tu peux renseigner l'onglet SSL si tu veux protéger le tout par un beau certificat Let's Encrypt, cela nécessite d'avoir aussi configurer le port 443 sur ta box vers le nginx-manager

 

Posted (edited)

Le reverse proxy est déjà en place : j'utilise déjà https://dsm.mondomaine.com pour accéder à DSM depuis l'extérieur.

Je bloque déjà au démarrage du conteneur. (donc je vois pas les écrans de config pour tester par moi même des choses)

 

Le journal donne :

2024/06/04 16:44:10	stdout	/run/s6/basedir/scripts/rc.init: warning: s6-rc failed to properly bring all the services up! Check your logs (in /run/uncaught-logs/current if you have in-container logging) for more information.
2024/06/04 16:44:10	stdout	s6-rc: warning: unable to start service prepare: command exited 1
2024/06/04 16:44:10	stdout	[1;31m--------------------------------------[0m
2024/06/04 16:44:10	stdout	[1;31mERROR: /etc/letsencrypt is not mounted! Check your docker configuration.[0m
2024/06/04 16:44:10	stdout	[1;31m--------------------------------------[0m
2024/06/04 16:44:10	stdout	[1;34m❯ [1;36mChecking paths ...[0m
2024/06/04 16:44:09	stdout	[1;34m❯ [1;36mConfiguring npm group ...[0m
2024/06/04 16:44:09	stdout	useradd warning: npm's uid 0 outside of the UID_MIN 1000 and UID_MAX 60000 range.
2024/06/04 16:44:09	stdout	[1;34m❯ [1;36mConfiguring npm user ...[0m 

 

Le problème semble être /etc/letsencrypt mais où le monter dans l'image dans les paramètres j'ai pas accès à /etc :

image.thumb.png.a28ba6b7a7838ab4519088a40b1829b8.png

 

Edited by chtom
Posted

Il faut aussi que tu mappes le répertoire ./letsencrypt:/etc/letsencrypt de ton conteneur pourqu'il puisse te sauvegarder les clé privées et certificats Let's Encrypt qu'il te génèrera.

 

Mais quoi qu'il en soit excuse moi je pense que ça ne marchera pas avec nginx-manager 😕 je viens de tester et le path (/toto ou /titi) est dans l'autre sens. Je veux dire que ça permet de rediriger vers un autre hote si dans l'url tu mets /titi ou /toto. Donc oublie mon idée.

 

Je laisse ma place à d'autres personnes plus compétentes en terme de serveur HTTP

 

Posted
il y a 3 minutes, nicoueron a dit :

Il faut aussi que tu mappes le répertoire ./letsencrypt:/etc/letsencrypt de ton conteneur pourqu'il puisse te sauvegarder les clé privées et certificats Let's Encrypt qu'il te génèrera.

 

Mais quoi qu'il en soit excuse moi je pense que ça ne marchera pas avec nginx-manager 😕 je viens de tester et le path (/toto ou /titi) est dans l'autre sens. Je veux dire que ça permet de rediriger vers un autre hote si dans l'url tu mets /titi ou /toto. Donc oublie mon idée.

 

Je laisse ma place à d'autres personnes plus compétentes en terme de serveur HTTP

 

Le site finale sera titi.mondomaine.com pas mondomaine.com/titi donc ca va aller.

Comment paramétrer ca : ./letsencrypt:/etc/letsencrypt  ?

Posted

tu vas dans les paramètres du conteneur, là où tu as déjà mappé /dockers/ngnix vers /data, ben tu fais pareil en mettant par exemple /docker/letsencrypt vers /etc/letsencrypt

 

[EDIT] C'est un dossier et non un fichier, tu peux le créer préalablement dans /docker/letsencrypt

Posted
il y a 24 minutes, chtom a dit :

Le site finale sera titi.mondomaine.com pas mondomaine.com/titi donc ca va aller.

Ben justement, c'est le contraire que propose nginx-manager : si tu tapes titi.mondomaine.com ça va te rediriger vers mondomaine.com/~titi ! L'inverse je ne sais pas le faire.

Posted (edited)

Il faudra donc que je copie mes certificats générés automatiquement tous les 2 mois dans /docker/serveurweb/letsencrypt ?

Je ne peux le faire en SSH ça (ou alors tu as mis un lien symbolique ?)

Edited by chtom
Posted
à l’instant, chtom a dit :

Il faudra donc que je copie mes certificats généré automatiquement tous les 2 mois dans /docker/serveurweb/letsencrypt ?

Je ne peux le faire en SSH ça (ou alors tu as mis un lien symbolique ?)

dans le principe nginx-manager renouvelle tout seul les certificats, nul besoin de t'en occuper

Posted (edited)

Mais le dossier /docker/serveurweb/letsencrypt est vide actuellement.

Les certificats que j'ai généré sont stocké ailleurs sur mon NAS.

 

Edit : Faut il comprendre qu'il faudra redemander des nouveaux certificats dans ce nouvel environnement (plus depuis Certificats  de DSM mais depuis nginx-manager

Edited by chtom
Posted

Salut les gars,

 

Et pourquoi ne pas simplement utiliser la fonction virtual Host de DSM ? En hostname tu précises pour ton premier site toto.nomdedomaine.fr, tu le fais pointer vers le dossier correspondant en précisant les infos de configurations (serveur web, ports, version PHP, etc.). Idem pour le second (titi.nomdedomaine.fr que tu fais pointer vers l'autre dossier en configurant bien entendu les paramètres ci-avant cités). DSM devrait te proposer d'apporter les modifications de droits d'accès nécessaires automatiquement (ajout de l'utilisateur http en lecture).

 

Niveau nom de domaine, tu ajoutes des entrées CNAME et il me semble que le tour est joué ? Non ?

 

Plus complexe ?

Posted (edited)

Oui j'avais pensé à faire ça mais soucis de droits. Voici ma question initiale ou j'expose les deux solutions auxquelles j'ai pensé (sur un topic non approprié): 

 

 

[quote]

Bonjour,

 

Je me suis mis à webstation et j'aurais quelques questions. (Je ne sais pas trop si je suis vraiment au bon endroit).

Si je coche "Activer un site web personnel" dans "Service Web", ça crée automatiquement un dossier www dans la homedir de mes utilisateurs.

Le site web de chacun des utilisateurs est donc

www.mondomaine.com/~toto pour l'utilisateur toto

www.mondomaine.com/~titi pour l'utilisateur titi

J'ai créé les certificats pour toto.mondomaine.com et titi.mondomaine.com

 

 

 

Je cherche à ce que https://toto.mondomaine.com affiche finalement www.mondomaine.com/~toto.

Dans service web, le site web déclaré "toto", je ne peux pas mettre /homes/toto/www en racine du document.

 

 

 

L'autre solution serait de ne pas cocher "Activer un site web personnel" dans "Service Web".

et de mettre les dossiers web toto et titi dans /web/

Là, les sites web https://toto.mondomaine.com et https://titi.mondomaine.com sont possibles.

Le problème, c'est la gestion des droits d'écriture au dossier /web/toto et /web/titi à mettre pour mes utilisateurs : gérer l'accès personnel et exclusif en SMB aux dossiers /web/xxxx.

 

Une idée ?

 

Merci.

[/quote]

Edited by chtom
Posted (edited)

Salut,


@chtom

 

Tu vas devoir un peu m'éclairer :-) : tu expliques qu'en activant le service web pour les utilisateurs tu peux y accéder en tondomaine.fr/toto et tondomaine.fr/titi. Chacun des site correspondant à l'utilisateur (parfait donc pour les droits). En l'état, le certificat créé pour ce domaine est fonctionnel pour ces "alias" (tondomaine.fr)

 

TOUTEFOIS, tu expliques ensuite que tu as créé des certificats correspondant à d'autres hostnames : toto.tondomaine.fr et titi.tondomaine.fr.

 

Mais au final, tu veux quand même y accéder en tondomaine.fr/toto ou titi, moralité, l’activation du service web personnel répond à tes exigences.

 

Quel est le problème ? Que désires-tu ? J'avoue ne pas vraiment te suivre.

Edited by renegadeBE
Posted
Il y a 10 heures, renegadeBE a dit :

Quel est le problème ? Que désires-tu ? J'avoue ne pas vraiment te suivre.

Ben justement, il veut accéder à mondomaine.fr/~titi via le sous domaine titi.mondomaine.fr. C'est juste une histoire de redirection.

Posted

Le but :

Avoir un site web perso pour 2 des utilisateurs de mon NAS avec un accès au site internet https://toto.mondomaine.com et https://titi.mondomaine.com

 

Deux solutions qui ne me conviennent pas à 100 % :

 

Solution 1 :

==> Cocher "Activer un site web personnel" dans "Service Web" de webstation.

Les droits sont bien gérés, chaque utilisateur a son site web dans leur homedir.

Le problème, c'est que les sites web en question sont accessibles uniquement avec https://mondomaine.com/~toto et https://mondomaine.com/~titi

Or j'aurais aimé que ces sites s'affichent en utilisant l'url https://toto.mondomaine.com et https://titi.mondomaine.com

 

Solution 2 :

==> Ne pas cocher "Activer un site web personnel" dans "Service Web" de webstation et mettre les 2 sites web dans /web/toto et /web/titi.

Avec le reverse proxy, j'arrive bien à avoir les urls https://toto.mondomaine.com et https://titi.mondomaine.com  qui affichent bien les pages stockées dans /web/toto et /web/titi.

Mais cette solution est problématique, car les droits SMB ne sont pas gérés et les utilisateurs toto et titi n'ont pas accès au dossier /web de mon NAS.

Si j'ajoute les droits (ou si je les mets dans le groupe propriétaire de /web), les deux utilisateurs auront accès aux dossiers /web/toto et /web/titi.

Cette solution n'est pas non plus satisfaisante.

 

Solution alternative proposée par @nicoueron dans un autre topic, c'est de laisser tomber webstation et installer NginxProxyManager en conteneur. Mais cette solution ne semble pas non plus résoudre ma problématique.

 

As-tu une autre idée ou une résolution à proposer aux problèmes des solutions 1 et/ou 2 ?

 

Merci.

Posted

Salut les gars,

 

@chtom 

 

Après quelques recherches (j'y ai passé le début de soirée 😅), j'ai trouvé une personne dans un cas similaire.

 

Il utilise au final le dossier général créé par webstation. Il applique ensuite des droits en écritures pour permettre aux utilisateurs de modifier leur site perso par l'intermédiaire d'un groupe utilisateur qu'il crée. Ensuite, il ne te reste qu'à déployer le virtual Host.

 

Il est certain que ça ne répond pas à ton besoin de ne pas devoir gérer cette aspect (gestion des droits d'accès), toutefois, après avoir gratté le web, cette solution me semble bonne. J'ai trouvé dans ce déambule des essais ratés de liens symboliques vers les dossiers webs personnels des utilisateurs et autres.

 

 Je te transmets le lien ci-aprèsb(en anglais, Google trad fait des merveilles) :

 

https://community.synology.com/enu/forum/1/post/142532

 

La solution mentionnée par @nicoueron semble mérité investigations, mais, ne sera probablement pas plus facile à mon sens.

 

Bonne continuation, si tu trouves une solution, nous serions curieux d'avoir un retour 😇.

  • Like 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...