====== Installation d'une appli ====== 192.168.1.78 cnest=2204 🚀 🧭 Procédure STANDARD pour ajouter un sous-domaine + app 👉 à faire dans cet ordre 🟢 1. Ajouter le domaine dans YunoHost sudo yunohost domain add monapp.pascot.ca ✔ obligatoire ✔ YunoHost va gérer Nginx / SSL interne / app 🟢 2. Installer l’application dessus 👉 soit via interface web 👉 soit en CLI : sudo yunohost app install NOM_APP -d monapp.pascot.ca ✔ exemple : sudo yunohost app install dokuwiki -d aquarelles.pascot.ca 🟢 3. Ajouter le DNS Cloudflare (le tunnel) cloudflared tunnel route dns yunohost monapp.pascot.ca ✔ ça crée automatiquement : CNAME → cfargotunnel.com 🟢 4. Ajouter dans le tunnel (IMPORTANT 🔴) 👉 éditer : sudo nano /etc/cloudflared/config.yml 👉 ajouter : - hostname: monapp.pascot.ca service: https://localhost:443 originRequest: noTLSVerify: true 🟢 5. Redémarrer le tunnel sudo systemctl restart cloudflared 🧪 6. Tester https://monapp.pascot.ca 🧠 🧩 Schéma mental (ultra important) 👉 pour CHAQUE sous-domaine il faut : YunoHost ✔ DNS ✔ Tunnel ✔ Si un des 3 manque → ça casse ❌ ⚠️ Erreurs classiques (que tu viens d’éviter 👍) ❌ oublier config.yml → site introuvable ❌ conflit de domaine principal → redirections SSO cassées ❌ A record au lieu de tunnel → mauvais routage 💡 Astuce PRO (gain de temps énorme) 👉 tu peux simplifier config.yml avec wildcard : - hostname: "*.pascot.ca" service: https://localhost:443 originRequest: noTLSVerify: true 👉 comme ça : ✔ plus besoin d’ajouter chaque sous-domaine ✔ tout passe automatiquement 🎯 Résumé ultra court 👉 pour chaque nouvelle app : yunohost domain add installer app cloudflared tunnel route dns ajouter dans config.yml restart tunnel ====== Installation du tunnel cloudflare avec Telus ====== 🚀 🧭 INSTALLATION COMPLÈTE (propre dès zéro) 🟢 0. Pré-requis ✔ domaine pascot.ca ajouté dans Cloudflare ✔ DNS Cloudflare actif (nameservers Cloudflare) ✔ Raspberry avec YunoHost fraîchement installé ✔ accès SSH OK 🟢 1. Installation initiale YunoHost 👉 depuis navigateur : http://IP_DU_RASPBERRY 👉 config : Domaine principal : pascot.ca utilisateur admin : au choix 🟢 2. Installer cloudflared sudo apt update sudo apt install cloudflared 🟢 3. Authentification Cloudflare cloudflared tunnel login 👉 dans le navigateur : choisir pascot.ca autoriser 👉 vérifie : ls ~/.cloudflared ✔ doit contenir : cert.pem 🟢 4. Créer le tunnel cloudflared tunnel create yunohost 👉 noter : ID du tunnel (UUID) fichier .json 🟢 5. Configurer le tunnel Créer dossier : sudo mkdir -p /etc/cloudflared Créer config : sudo nano /etc/cloudflared/config.yml 👉 contenu : tunnel: ID_DU_TUNNEL credentials-file: /home/USER/.cloudflared/ID_DU_TUNNEL.json ingress: - hostname: pascot.ca service: https://localhost:443 originRequest: noTLSVerify: true - hostname: "*.pascot.ca" service: https://localhost:443 originRequest: noTLSVerify: true - service: http_status:404 👉 remplace : ID_DU_TUNNEL USER (ex: dpt) 🟢 6. Créer les DNS Domaine principal cloudflared tunnel route dns yunohost pascot.ca Wildcard (option recommandé ⭐) 👉 dans Cloudflare DNS ajouter : Type Name Target CNAME * ID.cfargotunnel.com ✔ Proxy activé ☁️ 🟢 7. Démarrer le tunnel sudo cloudflared service install sudo systemctl enable cloudflared sudo systemctl start cloudflared 🟢 8. Vérifier sudo systemctl status cloudflared ✔ doit être : active (running) 🟢 9. Test 👉 navigateur : https://pascot.ca ✔ portail YunoHost ✔ sécurisé **Attention aux indentations : cat /etc/cloudflared/config.yml** tunnel: 31fda6d8-dd61-4bc9-bcee-2760f1acde1e credentials-file: /home/dpt/.cloudflared/31fda6d8-dd61-4bc9-bcee-2760f1acde1e.json ingress: - hostname: pascot.ca service: https://localhost:443 originRequest: noTLSVerify: true - hostname: aquarelles.pascot.ca service: https://localhost:443 originRequest: noTLSVerify: true - hostname: photos.pascot.ca service: https://localhost:443 originRequest: noTLSVerify: true - hostname: partages.pascot.ca service: https://localhost:443 originRequest: noTLSVerify: true - hostname: journal.pascot.ca service: https://localhost:443 originRequest: noTLSVerify: true - hostname: carnet.pascot.ca service: https://localhost:443 originRequest: noTLSVerify: true - service: http_status:404 ====== document pdf ====== J’ai préparé : le guide PDF : Guide_YunoHost_Cloudflare_Tunnel_pascot_ca.pdf le script modèle : install_tunnel_yunohost_pascot.sh Le guide suit la logique des tunnels Cloudflare gérés localement (cloudflared tunnel login, create, fichier config.yml, routes DNS, service systemd) telle que documentée par Cloudflare, ainsi que les commandes de gestion de domaines YunoHost actuelles. Le script est pensé pour ton cas : YunoHost déjà installé pascot.ca déjà défini comme domaine principal Raspberry en arm64 tunnel yunohost wildcard *.pascot.ca dans config.yml pour simplifier les futurs sous-domaines. Point important : le script s’arrête volontairement si cert.pem n’existe pas encore, afin que tu fasses d’abord l’autorisation navigateur avec cloudflared tunnel login, ce qui correspond au flux normal de Cloudflare pour un tunnel localement géré. {{ :bricoler:prive:guide_yunohost_cloudflare_tunnel_pascot_ca.pdf |}} https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/do-more-with-tunnels/local-management/create-local-tunnel/?utm_source=chatgpt.com ====== script ====== #!/usr/bin/env bash set -euo pipefail # Installation automatique d'un tunnel Cloudflare pour YunoHost # Hypothèses : # - YunoHost est déjà installé # - le domaine principal YunoHost est déjà: pascot.ca # - vous lancez ce script avec l'utilisateur habituel (ex: dpt), pas root # - vous ferez manuellement "cloudflared tunnel login" avant de relancer le script si cert.pem n'existe pas DOMAIN="pascot.ca" TUNNEL_NAME="yunohost" CF_USER_HOME="${HOME}" CF_DIR="${CF_USER_HOME}/.cloudflared" CONFIG_DIR="/etc/cloudflared" CONFIG_FILE="${CONFIG_DIR}/config.yml" need_cmd() { command -v "$1" >/dev/null 2>&1 || { echo "Commande manquante: $1"; exit 1; } } need_cmd sudo need_cmd curl need_cmd awk need_cmd grep need_cmd cloudflared || true echo "== Vérification domaine principal YunoHost ==" if ! sudo yunohost domain list | grep -q "main: ${DOMAIN}"; then echo "ERREUR: le domaine principal YunoHost n'est pas ${DOMAIN}." echo "Corrigez d'abord cela avant de continuer." exit 1 fi echo "== Installation de cloudflared si nécessaire ==" if ! command -v cloudflared >/dev/null 2>&1; then tmpdeb="$(mktemp --suffix=.deb)" curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb -o "${tmpdeb}" sudo dpkg -i "${tmpdeb}" || sudo apt-get -f install -y rm -f "${tmpdeb}" fi echo "== Vérification cert.pem Cloudflare ==" mkdir -p "${CF_DIR}" if [[ ! -f "${CF_DIR}/cert.pem" ]]; then echo "Le fichier ${CF_DIR}/cert.pem est absent." echo "Lancez maintenant la commande suivante, validez dans le navigateur, puis relancez ce script :" echo echo " cloudflared tunnel login" echo exit 0 fi echo "== Création ou récupération du tunnel ==" if cloudflared tunnel list 2>/dev/null | awk '{print $2}' | grep -qx "${TUNNEL_NAME}"; then echo "Tunnel ${TUNNEL_NAME} déjà présent." else cloudflared tunnel create "${TUNNEL_NAME}" fi TUNNEL_JSON="$(find "${CF_DIR}" -maxdepth 1 -type f -name '*.json' | head -n 1 || true)" if [[ -z "${TUNNEL_JSON}" ]]; then echo "Impossible de trouver le fichier JSON du tunnel dans ${CF_DIR}" exit 1 fi TUNNEL_UUID="$(basename "${TUNNEL_JSON}" .json)" echo "== Écriture de la configuration cloudflared ==" sudo mkdir -p "${CONFIG_DIR}" sudo tee "${CONFIG_FILE}" >/dev/null <