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é.

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 <<EOF
tunnel: ${TUNNEL_UUID}
credentials-file: ${TUNNEL_JSON}
ingress:
- hostname: ${DOMAIN}
service: https://localhost:443
originRequest:
noTLSVerify: true
- hostname: "*.${DOMAIN}"
service: https://localhost:443
originRequest:
noTLSVerify: true
- service: http_status:404
EOF
echo "== Validation de la configuration =="
cloudflared tunnel ingress validate
echo "== Création de la route DNS pour le domaine principal =="
if cloudflared tunnel route dns "${TUNNEL_NAME}" "${DOMAIN}"; then
echo "Route DNS créée pour ${DOMAIN}"
else
echo "La route DNS principale existe peut-être déjà. Vérifiez dans Cloudflare DNS."
fi
echo "== Installation et démarrage du service =="
sudo cloudflared service install || true
sudo systemctl enable cloudflared
sudo systemctl restart cloudflared
echo
echo "=== TERMINE ==="
echo "Tunnel UUID : ${TUNNEL_UUID}"
echo "Config : ${CONFIG_FILE}"
echo
echo "Tests utiles :"
echo " sudo systemctl status cloudflared"
echo " https://${DOMAIN}"
echo " https://${DOMAIN}/yunohost/admin"
echo
echo "Pour un nouveau sous-domaine d'application :"
echo " sudo yunohost domain add monapp.${DOMAIN}"
echo " cloudflared tunnel route dns ${TUNNEL_NAME} monapp.${DOMAIN}"
echo " sudo yunohost app install NOM_DE_L_APP -d monapp.${DOMAIN}"