====== 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 <