Ouvrir l'app

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

  1. Crée la base, une seule fois :
    npx wrangler d1 create localtown
  2. Ajoute ce bloc dans wrangler.jsonc avec 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" }
    ]
  3. 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.

  1. Renseigne site/src/config.ts : repo (dépôt GitHub des versions), appUrl (adresse de l'appli web), iosUrl (App Store / TestFlight, facultatif).
  2. npm run site:deploy le publie comme Worker statique localtown-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 :

PourSecrets
Adresse de l'applivariable LOCALTOWN_URL
Mises à jour automatiques du bureauTAURI_SIGNING_PRIVATE_KEY, TAURI_SIGNING_PRIVATE_KEY_PASSWORD, TAURI_UPDATER_PUBKEY
Signature et notarisation macOSAPPLE_CERTIFICATE, APPLE_CERTIFICATE_PASSWORD, APPLE_SIGNING_IDENTITY, APPLE_ID, APPLE_PASSWORD, APPLE_TEAM_ID
Signature AndroidANDROID_KEYSTORE_BASE64, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS, ANDROID_KEY_PASSWORD
iOSIOS_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é.

Proposer une modification de cette page