chtom Posted June 4, 2024 #1 Posted June 4, 2024 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. Quote
nicoueron Posted June 4, 2024 #2 Posted June 4, 2024 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) : 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 Quote
chtom Posted June 4, 2024 Author #3 Posted June 4, 2024 (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 : Edited June 4, 2024 by chtom Quote
nicoueron Posted June 4, 2024 #4 Posted June 4, 2024 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 Quote
chtom Posted June 4, 2024 Author #5 Posted June 4, 2024 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 ? Quote
nicoueron Posted June 4, 2024 #6 Posted June 4, 2024 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 Quote
nicoueron Posted June 4, 2024 #7 Posted June 4, 2024 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. Quote
chtom Posted June 4, 2024 Author #8 Posted June 4, 2024 (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 June 4, 2024 by chtom Quote
nicoueron Posted June 4, 2024 #9 Posted June 4, 2024 à 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 Quote
chtom Posted June 4, 2024 Author #10 Posted June 4, 2024 (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 June 4, 2024 by chtom Quote
nicoueron Posted June 4, 2024 #11 Posted June 4, 2024 oui, mais de toute façon - je me répète - je t'ai aiguillé sur une mauvaise piste, dsl mais nginx-manager ne répondra pas du moins facilement à ton besoin. Quote
renegadeBE Posted June 4, 2024 #12 Posted June 4, 2024 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 ? Quote
chtom Posted June 4, 2024 Author #13 Posted June 4, 2024 (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 June 4, 2024 by chtom Quote
renegadeBE Posted June 5, 2024 #14 Posted June 5, 2024 (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 June 5, 2024 by renegadeBE Quote
nicoueron Posted June 6, 2024 #15 Posted June 6, 2024 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. Quote
chtom Posted June 6, 2024 Author #16 Posted June 6, 2024 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. Quote
nicoueron Posted June 6, 2024 #17 Posted June 6, 2024 Je pense qu'il faut jouer avec les réécriture d'url via Apache HTTP server, mais c'est pas simple! demande à ChatGPT la configuration correspondante Quote
renegadeBE Posted June 10, 2024 #18 Posted June 10, 2024 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 😇. 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.