@.Shad. Merci beaucoup pour ton tuto
Je suis actuellement à la mise en place du docker SWAG et je n'ai pas les résultats espérés.
Voici mes deux fichiers .sh
maclvan_net.sh
docker network create -d macvlan \
--subnet=192.168.50.0/24 \
--ip-range=192.168.50.210/29 \
--gateway=192.168.50.1 \
-o parent=eth0 \
macvlan_net
mac0.sh :
#!/bin/sh
# Script permettant la communication entre
# un conteneur appartenant a un reseau macvlan et son hote
# A lancer au demarrage de l'hote
# Temporisation
#sleep 60
# Creation de l interface macvlan sur l hote
ip link add mac0 link eth0 type macvlan mode bridge
# Configuration de l interface avec l adresse reservee
ip addr add 192.168.50.200/32 dev mac0
ip link set dev mac0 address AA:BB:CC:DD:11:45
ip link set mac0 up
# On fait une route entre les IPv4 du reseau mac0 et l'interface
ip route add 192.168.50.208/29 dev mac0
Concernant l'ip "192.168.50.208/29" est la première IP de ma plage /29.
Jusqu'à là, tous les scripts s'exécutent correctement.
J'ai ensuite lancé mon docker swag :
version: "2.1"
services:
swag:
image: linuxserver/swag
container_name: swag
networks:
macvlan_net:
ipv4_address: 192.168.50.211
cap_add:
- NET_ADMIN
dns:
- 8.8.8.8
- 8.8.4.4
environment:
- PUID=1026
- PGID=100
- TZ=Europe/Paris
- URL=xxxxxxxx.com
- SUBDOMAINS=wildcard
- VALIDATION=dns
- DNSPLUGIN=ovh
- DHLEVEL=2048
- EMAIL=xxxxxx@gmail.com
- ONLY_SUBDOMAINS=false
- STAGING=false
volumes:
- /volume1/docker/swag/config:/config:rw
restart: unless-stopped
networks:
macvlan_net:
external: true
J'ai dû ajouter des DNS sans quoi swag n'arrivait pas à récupérer de la donnée de OVH.
Au premier démarrage du docker ou à chaque fois que je modifie une variable d'environnement, j'ai l'erreur :
Cela semble être dû à un problème de MAJ de dépendance. Pour m'en sortir, je rentre dans l'instance swag et j'exécute la commande proposé dans ce commentaire : https://github.com/linuxserver/docker-swag/issues/422#issuecomment-1778615155 puis je redémarre.
J'ai fait une redirection de port 80 et 443 vers mon IP virtuelle de mon instance SWAG
J'ai ensuite modifié mon fichier "portainer.subdomain.conf.sample" :
## Version 2023/05/31
# make sure that your portainer container is named portainer
# make sure that your dns has a cname set for portainer
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name portainer.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
# 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;
# enable for Authentik (requires authentik-location.conf in the location block)
#include /config/nginx/authentik-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;
# enable for Authentik (requires authentik-server.conf in the server block)
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app 192.168.50.200;
set $upstream_port 9000;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_hide_header X-Frame-Options; # Possibly not needed after Portainer 1.20.0
}
location ~ (/portainer)?/api {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app 192.168.50.200;
set $upstream_port 9000;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_hide_header X-Frame-Options; # Possibly not needed after Portainer 1.20.0
}
}
J'ai redémarré mon docker swag et voici les logs :
───────────────────────────────────────
██╗ ███████╗██╗ ██████╗
██║ ██╔════╝██║██╔═══██╗
██║ ███████╗██║██║ ██║
██║ ╚════██║██║██║ ██║
███████╗███████║██║╚██████╔╝
╚══════╝╚══════╝╚═╝ ╚═════╝
Brought to you by linuxserver.io
───────────────────────────────────────
To support the app dev(s) visit:
Certbot: https://supporters.eff.org/donate/support-work-on-certbot
To support LSIO projects visit:
https://www.linuxserver.io/donate/
───────────────────────────────────────
GID/UID
───────────────────────────────────────
User UID: 1026
User GID: 100
───────────────────────────────────────
generating self-signed keys in /config/keys, you can replace these with your own keys if required
..+.......+..+.+...+..+..........+++++++++++++++++++++++++++++++++++++++*.....+......+.........+.+...+..+......+.......+...+..+.+.........+.....+......+.........+.+............+..+.......+.....+.+..+......+......+......+...+....+...+...+.....+......+...+...+...............+...+.+......+..+.+.....+......+++++++++++++++++++++++++++++++++++++++*..........+.............+.....+....+...+..+.........+....+......+..+...++++++
...+..+......+.......+...+...+..+...+.........+.+......+...+...........+.+...........+....+......+...+.....+.+.....+...+++++++++++++++++++++++++++++++++++++++*.+.........+....+++++++++++++++++++++++++++++++++++++++*..+.....+.+..+...+..........+............+...............+......+..+.......+...+............+...+..+...............+.+......+.....+.+..+......+......+.+...............+..+...............+.+..+...+..........+...........+................+..+.......+...+..+...+..........+...+...+.....+..........+..+.........+...+.......+...+.................+...+.+......+.....+.+...+......+...........+...+.+.....+.+...+..+...+....+...+....................+...+.+....................+.+...+.....+.+......+...+..........................+......+.........+...+.....................+....+.....+............+...+.......+.....+.+.........+...+...+..+...+...+.+...........+...+.......+.....+............+.............+...+.....+.........+............+....+..+....+...+............+.........+..+..........+............+..+...+......+.......+..+......+....+...+..............+....+.....+.........+................+............+..+.......+........+.......+...+......+..+..............................+...+......+...+......+....+......+...............+.........+......+.................++++++
-----
chown: cannot dereference '/config/keys/letsencrypt': No such file or directory
**** Permissions could not be set. This is probably because your volume mounts are remote or read-only. ****
**** The app may not work properly and we will not provide support for it. ****
Variables set:
6
PGID=100
TZ=Europe/Paris
URL="xxxxxxx.com"
SUBDOMAINS=wildcard
EXTRA_DOMAINS=
ONLY_SUBDOMAINS=false
VALIDATION=dns
CERTPROVIDER=
DNSPLUGIN=ovh
EMAIL=xxxxxxxx@gmail.com
STAGING=false
Using Let's Encrypt as the cert provider
SUBDOMAINS entered, processing
Wildcard cert for xxxxxxx.com will be requested
E-mail address entered: xxxxxxxx@gmail.com
dns validation via ovh plugin is selected
Generating new certificate
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for xxxxxxxx.com and *.xxxxxxx.com
Unexpected response from OVH APIs for POST /domain/zone/xxxxx.com/refresh (response dumped as plain text):
Unexpected response from OVH APIs for POST /domain/zone/xxxxxx.com/refresh (response dumped as plain text):
Waiting 120 seconds for DNS changes to propagate
Unexpected response from OVH APIs for POST /domain/zone/xxxxxx.com/refresh (response dumped as plain text):
Unexpected response from OVH APIs for POST /domain/zone/xxxxxx.com/refresh (response dumped as plain text):
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/xxxxxx.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/xxxxx.com/privkey.pem
This certificate expires on 2024-01-26.
These files will be updated when the certificate renews.
NEXT STEPS:
- The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
New certificate generated; starting nginx
The cert does not expire within the next day. Letting the cron script handle the renewal attempts overnight (2:08am).
[custom-init] No custom files found, skipping...
[ls.io-init] done.
Server ready
Pour information j'utilisais jusqu'à présent ACME pour gérer tous mes sous-domaines automatiquement. J'ai temporairement désactivé le docker acme. L'idée est que je garde sur DSM uniquement mon ndd principal et les sous domaines soient gérés via swag.
J'ai également essayé de modifier les variables d'environnements dans le docker compose pour isoler mon test mais sans succès :
- SUBDOMAINS=portainer,
- ONLY_SUBDOMAINS=true
Je remarque cependant le message d'erreur ci-dessous qui me laisse fortement présager qu'il y a un problème au niveau de mes permissions. Effectivement le contenu de mon dossier keys est vide. Je n'ai cependant pas réussi à résoudre ce message. Mon PUID et PGID sont pourtant corrects et j'ai ajouté "rw" à la fin de mon volume dans mon docker compose. As-tu une idée pour résoudre ce problème ? J'ai regardé les issues du repo swag mais sans succès :
et dans mon dossier letsencrypt le contenu ci-dessous. On dirait un certificat .pem consolidé. De ce fait, a chaque redémarrage de mon docker swag, il essaye de chercher les certificats "/etc/letsencrypt/live/xxxx.com/fullchain.pem" et "/etc/letsencrypt/live/xxxx.com/privkey.pem" mais il ne les trouve pas donc il considère qu'il y à peut-être un problème de permission ! Là je pige plus du tout sachant que dans les logs de mon docker swag j'ai le message ci-dessous. C'est sûrement dû à un lien symbolique ? :
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/xxxx.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/xxxxx.com/privkey.pem
This certificate expires on 2024-01-26.
Encore plus étrange, lorsque je liste les fichiers contenu dans "letsencrypt/live/xxxx.com j'ai bien les certificats visibles mais pas côté DSM. :
EDIT : pour le message avec le problème de permission, il intervient uniquement au premier démarrage ou lorsque je modifie une variable d'environnement. En gros je pense qu'il s'affiche automatiquement lorsque le contenu du dossier letsencrypt est vide. Je suppose donc que c'est un faux problème mais je préfère le laisser ici, si d'autres personnes se pose la question. et voici le résultat lorsque je redémarre swag après que celui ci est indiqué avoir généré les certificats :
───────────────────────────────────────
██╗ ███████╗██╗ ██████╗
██║ ██╔════╝██║██╔═══██╗
██║ ███████╗██║██║ ██║
██║ ╚════██║██║██║ ██║
███████╗███████║██║╚██████╔╝
╚══════╝╚══════╝╚═╝ ╚═════╝
Brought to you by linuxserver.io
───────────────────────────────────────
To support the app dev(s) visit:
Certbot: https://supporters.eff.org/donate/support-work-on-certbot
To support LSIO projects visit:
https://www.linuxserver.io/donate/
───────────────────────────────────────
GID/UID
───────────────────────────────────────
User UID: 1026
User GID: 100
───────────────────────────────────────
using keys found in /config/keys
Variables set:
�
6
PGID=100
TZ=Europe/Paris
URL=xxxxxxxx.com
SUBDOMAINS=wildcard
EXTRA_DOMAINS=
ONLY_SUBDOMAINS=true
VALIDATION=dns
CERTPROVIDER=
DNSPLUGIN=ovh
EMAIL=xxxxxxx@gmail.com
STAGING=false
Using Let's Encrypt as the cert provider
SUBDOMAINS entered, processing
Wildcard cert for xxxxxxx.com will be requested
E-mail address entered: xxxxxxxxxx@gmail.com
dns validation via ovh plugin is selected
Certificate exists; parameters unchanged; starting nginx
The cert does not expire within the next day. Letting the cron script handle the renewal attempts overnight (2:08am).
[custom-init] No custom files found, skipping...
[ls.io-init] done.
�
Server ready
Le résultat des courses est que si j'accède à http://192.168.50.200:9000 je suis correctement redirigé vers mon instance portainer. Cependant, lorsque je tape https://portainer.xxxxx.com alors j'ai mon écran webstation de DSM qui s'affiche :
Ne faudrait-il pas que je supprime mon certificat généré par acme dans DSM ?
Est ce que je dois supprimer mon ouverture de port 80/443 vers l'IP de mon NAS ? Je me dis qu'il ne peut y avoir qu'une redirection possible côté routeur ?
Avec SWAG, est-ce que tous mes sous domaines sont actifs directement sans paramétrage au préalable ? Je m'explique : Si par exemple j'utilise homepage et que dans son fichier homepage.subdomain.conf.sample les entrées pour "set $upstream_app" et "set $upstream_port" sont corrects, alors je pourrais directement y accéder en tapant homepage.xxxxx.com ? Si oui, est il possible de désactiver l'activation automatique sans rentrer dans les fichiers de configuration ?
Côté Swag Dashboard, portainer est bien disponible (pour info j'avais oublié de supprimer le .sample à la fin du fichier...) mais il n'est pas accessible :
Merci beaucoup pour ton aide !