🚀 Administration : déploiement
LocalTown tourne entièrement sur Cloudflare : un Worker et des Durable Objects (un par espace), plus du WebRTC pair-à-pair entre les navigateurs.
Mettre l'appli en ligne#
Prérequis : Node.js 20 ou plus et un compte Cloudflare.
npm install
npx wrangler login
npx wrangler r2 bucket create localtown-media # une seule fois (messages vocaux, enregistrements)
npm run deploy # build + déploiement du Worker « localtown »
⚠️ Le Worker s'appelle désormais localtown (anciennement father-town) : c'est un nouveau Worker. Les espaces de l'ancien ne sont pas migrés.
Avant de publier, vérifie que tout est vert :
npm run typecheck && npm test && npm run build
Déploiement automatique (GitHub Actions)#
Le workflow .github/workflows/deploy.yml déploie à chaque push. Ajoute dans GitHub (Settings → Secrets and variables → Actions) CLOUDFLARE_API_TOKEN et CLOUDFLARE_ACCOUNT_ID. Sans eux, le workflow déploie sur un compte Cloudflare temporaire.
Comptes (base D1)#
Les comptes (Google, e-mail + mot de passe, membres, invitations) ont besoin d'une base D1 et du secret AUTH_SECRET. Sans eux, l'appli se déploie et marche dans l'ancien mode (sans compte, identité par navigateur) : tu peux activer les comptes plus tard.
- Crée la base, une seule fois :
npx wrangler d1 create localtown - Ajoute ce bloc dans
wrangler.jsoncavec l'identifiant affiché (il n'y est pas par défaut, car un identifiant factice fait échouer le déploiement) :"d1_databases": [ { "binding": "DB", "database_name": "localtown", "database_id": "<id affiché>", "migrations_dir": "migrations" } ] - Crée les tables (à refaire après chaque nouveau fichier dans
migrations/), puis le secret :npx wrangler d1 migrations apply localtown --remote openssl rand -base64 48 | npx wrangler secret put AUTH_SECRET npm run deploy
Envoi des e-mails, Google et règles d'accès : voir Comptes et authentification.
TURN (fortement conseillé)#
Sans TURN, certaines connexions échouent (4G, réseaux d'entreprise stricts). Crée une clé dans le tableau de bord Cloudflare (Realtime → TURN) puis :
npx wrangler secret put TURN_KEY_ID
npx wrangler secret put TURN_KEY_API_TOKEN
Intégrations#
Voir Intégrations pour les secrets (IA via OpenRouter, traduction, connecteurs, PostHog…).
Tester en local#
cp .dev.vars.example .dev.vars # puis remplis les clés utiles
npm run build && npx wrangler dev # http://localhost:8787
# ou, avec rechargement à chaud :
npx wrangler dev # terminal 1
npm run dev # terminal 2
Site de téléchargement#
Le site (site/) présente LocalTown et propose les téléchargements.
- Renseigne
site/src/config.ts:repo(dépôt GitHub des versions),appUrl(adresse de l'appli web),iosUrl(App Store / TestFlight, facultatif). npm run site:deployle publie comme Worker statiquelocaltown-site.
Applis de bureau et mobile#
Pousse un tag de version pour tout construire :
git tag v1.2.0 && git push origin v1.2.0
Le workflow .github/workflows/release.yml construit macOS, Windows, Linux et Android (plus iOS si configuré) et publie une version GitHub avec des noms de fichiers stables (LocalTown_universal.dmg, LocalTown_x64-setup.exe, LocalTown_x64.msi, LocalTown_amd64.AppImage, LocalTown_amd64.deb, LocalTown.apk, LocalTown.ipa).
Secrets GitHub facultatifs :
| Pour | Secrets |
|---|---|
| Adresse de l'appli | variable LOCALTOWN_URL |
| Mises à jour automatiques du bureau | TAURI_SIGNING_PRIVATE_KEY, TAURI_SIGNING_PRIVATE_KEY_PASSWORD, TAURI_UPDATER_PUBKEY |
| Signature et notarisation macOS | APPLE_CERTIFICATE, APPLE_CERTIFICATE_PASSWORD, APPLE_SIGNING_IDENTITY, APPLE_ID, APPLE_PASSWORD, APPLE_TEAM_ID |
| Signature Android | ANDROID_KEYSTORE_BASE64, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS, ANDROID_KEY_PASSWORD |
| iOS | IOS_CERTIFICATE_P12_BASE64, IOS_PROVISIONING_PROFILE_BASE64, IOS_CERTIFICATE_PASSWORD, IOS_TEAM_ID, IOS_EXPORT_METHOD |
Sans ces secrets, les builds marchent quand même : appli macOS non signée (clic droit → Ouvrir), mises à jour automatiques désactivées, APK signé en debug, iOS ignoré. Détails : desktop/README.md et mobile/README.md.
Captures d'écran du guide#
Les captures de docs/guide/img/ sont prévues pour être générées par npm run site:shots.
🚧 Ce script n'existe pas encore dans
package.json. En attendant, les pages du guide portent des emplacements « 📸 Capture à venir ».
Limites connues#
- Le pair-à-pair convient aux petits groupes (≈ 8 à 10 personnes dans une même bulle ou salle).
- Pas de comptes utilisateurs : l'identité est liée au navigateur, les droits admin passent par une clé.