Swag multi site

stf4

Apprenti
14 Novembre 2022
33
3
8
STRASBOURG
Professionnel
Non
Bonjour,

J'utilise actuellement un container swag avec un nom de domaine (domain.fr), et j'arrive sans trop de difficulté a rediger mes sous domaine (xxx.domaine.fr) vers les ports de mes containers .

Ma question est comment fait on pour rediriger un ou plusieurs sous domain (xxx.domain.fr) vers un site herbergé dans un dossier de la machine (php et hml) ?

Pour compliquer la chose , le dossier www est occupé a renvoyer un message en cas d'une adresse invalide et ne peux être utilisé.

Merci pour vos sugestions pour me permettre de résoudre cette problématique.

Bonne soirée
 
Bonsoir,

Je ne suis pas sur d'avoir bien compris ta question ?

Si j'ai bien suivi, tu as un site web auto hébergé installé hors docker via une installation traditionnelle (apache + php + bd éventuelle) et tu voudrais utiliser swag pour y accéder de l'extérieur ?

Je n'ai jamais essayer ce fonctionnement; mais c'est peut-être possible en créant ton propre fichier de configuration proxy (nginx/proxy-confs) qui fera une redirection en dur sur l'IP locale et le port de ton serveur apache ??

Sinon tu peux installer un containeur (apache+php avec l'image 'php:apache') pour héberger ton site (en recopiant tout simplement les fichiers du site dans le /var/www/html du containeur).

A partir de là tu pourra configurer Swag pour faire la redirection vers le port interne de ton containeur apache/php.
 
  • J'aime
Réactions: Poluxor
Salut merci de d'avoir pris du temps pour me répondre.

Oui j'ai des sites web auto hébergé installé hors docker via une installation traditionnelle (apache + php + bd éventuelle) et je voudrais utiliser swag pour y accéder de l'extérieur

La solution du fichier de configuration proxy (nginx/proxy-confs) dans swag me conviendrait , mais je ne sais pas comment le parametrer pour plusieur site (1 par dossier) avec un sous domaine associé.

Pour la solution du containeur (apache+php avec l'image 'php:apache') ce serait une solution que je n'ai pas encore essayé mais j'ai peur que
la redirection des ports entre swag et le contenaire port 80/443 pose probleme dans ce cas.

Le plus simple a mon sens serait que swag gere un dossier en dur et affiche son contenu.

J'espere avoir été plus clair sur mes besoins.
 
J'ai deux sites web (php+apache) + un wordpress en docker, mais je n'y accède qu'en local (Ce sont des copies locales de ce que j'ai chez un hébergeur).
Il faut partir du fichier "_template.subdomain.conf.sample" et l'adapter à ton besoin.
Je vais faire un test rapide avec Swag en créant deux fichiers de conf pour mes deux sites web et je reviens vers toi.
 
Je prends l'exemple d'un domaine en 'domain.tld'

Tu dois créer autant de fichiers de configuration pour Swag (dans le répertoire 'nginx/proxy-confs') qu'il y a de containeurs apache (un pour chaque site) :

Les fichiers doivent se nommer : 'monsite1.subdomain.conf'


1) Fichier conf proxy 'monsite1' :

Tu remplace 'monsite1' par le nom de ton containeur apache :

Code:
## Version 2022/09/08

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name monsite1.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 128M;

    # enable for ldap auth (requires ldap-location.conf in the location block)
    #include /config/nginx/ldap-server.conf;

    # enable for Authelia (requires authelia-location.conf in the location block)
    #include /config/nginx/authelia-server.conf;

    location / {
        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # enable for ldap auth (requires ldap-server.conf in the server block)
        #include /config/nginx/ldap-location.conf;

        # enable for Authelia (requires authelia-server.conf in the server block)
        #include /config/nginx/authelia-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app monsite1;
        set $upstream_port 80;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }
}

Puis pour y accéder ' '


2) Pile 'monsite1' :

Tu remplace : 'ton_ip_local' par celui de ton NAS et 'port_local_exterieur' par le port externe du containeur pour y acceder localement sans passer par Swag (facultatif).
Tu remplace 'monsite1' par le nom de ton site (le nom du containeur doit être le même que celui qui apparait dans le fichier de configuration du proxy)

Code:
version: "3"
services:
  apache:
    image: php:apache
    container_name: monsite1
    restart: unless-stopped
    ports:   # facultatif, si tu veux y accéder par le LAN
      - ton_ip_local:port_local_exterieur:80
    cap_drop: # facultatif
      - ALL
    cap_add:  # facultatif
      - SETGID
      - SETUID
    environment:
      - PUID=1003 # facultatif : id de ton utilisateur
      - PGID=100  # facultatif
      - TZ=Europe/Paris
    networks:
      - swag_default   # le nom de ton réseau 'swag'
    volumes:
      - /chemin_docker_config/apache_monitor:/var/www/html:rw
networks:
    swag_default:
      external: true

Tu relance le containeur 'swag' pour qu'il prenne en compte les fichiers de conf proxy créer.
 
Dernière édition:
Merci pour la solution que tu me proposes .Mais la création d'un nouveau contenaire php:apache , hebergeant un site peut fonctionner en l'état pour un site
mais lancer autant de:
"services:
apache:
image: php:apache
container_name: monsite1"
"services:
apache:
image: php:apache
container_name: monsite2"

que j'ai de site (une demi douzaine) ne sera pas forcement la meilleur solution a mon sens.Il doit exister une autre solution plus propre ...

Merci quand même pour la suggestion .
 
Cela dépend de l'architecture de tes sites : si tu a un répertoire racine et dedans 'n sites' dans des répertoires distincts avec ou sans alias ou si chacun à son répertoire racine avec un port différent pour y accéder.

A défaut de faire 'n' containeurs, tu devrais pouvoir faire 'n' fichiers de config proxy qui pointe en dur (IP: port ou IP/alias/) sur tes sites sans passer par des containeurs.
 
Actuellement les sites se trouvent dans des dossiers individuels sans lien entre eux et sans alias.
en local avec un serveur HTTP on y accède via 192.168.X.X/site1 ou 192.168.X.X/site12
j'avais imaginer que swag me permettrait de faire un lien via le fichier (nginx/proxy-confs) vers le dossier /site1
plutot que via un port .

A priori ce n'est pas le cas ....
 
Avec un seul fichier de config proxy, cela ne pourra pas fonctionner; essaye déjà avec un pour voir si cela fonctionne :

Code:
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name site1.*;
    include /config/nginx/ssl.conf;
    client_max_body_size 128M;
    location / {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        proxy_pass http://192.168.X.X:80/site1/;
    }

Et si cela fonctionne, répète l'opération en changeant juste 'server_name' et 'proxy_pass'

Tu accédera au sites via les adresses https://site1.domain.tld... https://site12.domain.tld
 
Merci , je viens de tester mais ca ne fonctionne pas , peut être manque t'il la localisation initiale du dossier parent.
J'ai placé le dossier contenant les fichiers HTML dans /home/xxxx/dockerxxx/swap/config/www/site1/
mais le https://site1.domain.tld (que j'ai personnalisé) n'ouvre pas la page index.htm , il semble ne pas la trouver.
ne manque t'il pas quelque chose ?.
 
Salut,
Je trouve l'idée de @Bambusa29 bonne et c'est se que j'aurai fait je pense, cela permet d'avoir plus de controle sur les différents site, et de les gérer indépendamment. ( Certains sites peuvent avoir des besoins de dépendances que d'autre site n'ont pas besoin, apache au lieu de nginx dans SWAG, PHP8.1 au lieu de PHP8.0 ...... )

Malgré tout, tu peu tout faire dans SWAG :

Exemple ton site1 est dans le dossier /config/www/test1 de SWAG, dans ce cas la configuration du fichier monsite1.subdomain.conf dans proy-confs ce fera comme ceci :
NGINX:
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name site1.*;
    root /config/www/site1;
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.html /index.php$is_args$args =404;
    }

    location ~ ^(.+\.php)(.*)$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include /etc/nginx/fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Reboot SWAG, entre le continu de ton dossier site1 dans www sera accessible via le sous domaine site1
 
  • J'aime
Réactions: Poluxor et Bambusa29
Bonsoir,
De ce que j'ai compris, @stf4 a une instance SWAG qui lui sert de RP, et sur une autre machine il a son serveur web, c'est bien ça @stf4 ?
Ton serveur Web, il est hébergé sur quoi ? un NAS ? N'a-t-il pas moyen de faire des virtual Host ? (via apache)...
Sinon, si tu veux mutualiser les PHP, Apache, etc... tu n'auras d'autres choix que d'avoir un autre SWAG, ou NGINX seul sur ton serveur WEB, et de tout mettre dans le dossier www de ce dernier. il te faudra donc générer un autre fichier proxy-confs dans le nouveau RP sur le serveur WEB).
 
Salut,
Je trouve l'idée de @Bambusa29 bonne et c'est se que j'aurai fait je pense, cela permet d'avoir plus de controle sur les différents site, et de les gérer indépendamment. ( Certains sites peuvent avoir des besoins de dépendances que d'autre site n'ont pas besoin, apache au lieu de nginx dans SWAG, PHP8.1 au lieu de PHP8.0 ...... )

Malgré tout, tu peu tout faire dans SWAG :

Exemple ton site1 est dans le dossier /config/www/test1 de SWAG, dans ce cas la configuration du fichier monsite1.subdomain.conf dans proy-confs ce fera comme ceci :
NGINX:
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name site1.*;
    root /config/www/site1;
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.html /index.php$is_args$args =404;
    }

    location ~ ^(.+\.php)(.*)$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include /etc/nginx/fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Reboot SWAG, entre le continu de ton dossier site1 dans www sera accessible via le sous domaine site1
Bonsoir

Merci également pour ton aide , j'ai pu mettre en place ton bout de code et sa fonctionne 😊Merci !!! , il me reste plus qu'a découvrir comment faire pour ajouter les autres sites sur le meme principe si cela est possible.
 
Bonsoir,
De ce que j'ai compris, @stf4 a une instance SWAG qui lui sert de RP, et sur une autre machine il a son serveur web, c'est bien ça @stf4 ?
Ton serveur Web, il est hébergé sur quoi ? un NAS ? N'a-t-il pas moyen de faire des virtual Host ? (via apache)...
Sinon, si tu veux mutualiser les PHP, Apache, etc... tu n'auras d'autres choix que d'avoir un autre SWAG, ou NGINX seul sur ton serveur WEB, et de tout mettre dans le dossier www de ce dernier. il te faudra donc générer un autre fichier proxy-confs dans le nouveau RP sur le serveur WEB).
Bonsoir , je souhaite déplacer mes sites web de mon syno pour les mettres sur un serveur dédiés piloté par swag aussi bien pour les sites en container que ceux plus traditionnelle qui sont dans des dossiers individuels. il a surement des possibilités pour régler mes problemes, je ne maitrise cependant pas tous les aléas et c'est a ce titre que je m'adresse a la communauté de ce forum. Merci a tous pour votre aide
Message automatiquement fusionné :

Tu refait un fichier de conf/site :)
Pour le momment j'ai modifié le defaut.conf qui se trouve dans nginx/site-conf je ne peux avoir deux fichiers avec le meme nom.
comment faire qu'il soit pris en compte au chargement de swag ?
 
L'exemple de fichier que je tes donné tu na pas besoin de modifier ton fichier defaut,
C'est un fichier a créer dans proxy-confs :

site1.subdomain.conf
site2.subdomain.conf
site3.subdomain.conf
site4.subdomain.conf
....
 
L'exemple de fichier que je tes donné tu na pas besoin de modifier ton fichier defaut,
C'est un fichier a créer dans proxy-confs :

site1.subdomain.conf
site2.subdomain.conf
site3.subdomain.conf
site4.subdomain.conf
....
J'avais vider le fichier defaut.conf et coller ton bout de code et en redemarrant swag cela fonctionne. Cependant la j'ai remis de défaut.conf d'origine et j'ai crée dans le dossier /nginx/proxy-confs un fichier site1.subdomaine.conf et j'y ai collé le bout de code et la cela ne fontionne plus
il doit avoir un conflit avec le fichier de parametrage par défaut ?
 
@stf4 : Tu utilises quelle image pour SWAG ?
Si c'est celle de Linuxserver,
(il s'avère que seul LinuxServer ont fait cette image)
Je te conseillerais d'installer le mod autoreload qui permet de recharger nginx en vérifiant les .conf dès qu'il y a un changement dans les .conf.
C'est bien pratique ^^
 
Dernière édition: