Construire un Système de Publication Automatisé et Sécurisé avec Firebase App Hosting et Cloud Scheduler
Salut !
Automatiser la publication des articles de manière sécurisée nécessite une architecture solide qui minimise les coûts et dont l’implémentation est aisée.
Dans cet article, vous allez découvrir comment nous avons automatisé la publication d’articles et l’envoi de newsletter sur The Day Info en utilisant une architecture serveless sécurisée sur Google Cloud Platform.
Notre système fonctionne tout seul avec l’infrastructure Firebase App hosting (Next.js) et ne nécessite pas de serveur dédié qui tourne 24h/24.
L'Architecture Secure Cron Job
Le système permet la programmation d'articles à l'avance et, au moment précis de leur publication, envoyer automatiquement une newsletter à tous nos abonnés via Resend.
Voici comment nous avons conçu l'architecture Secure Cron Job en utilisant la puissance de Google Cloud Platform(GCP).
Notre solution repose sur quatre piliers principaux :
Le Déclencheur : Google Cloud Scheduler
Le Coffre-fort : Google Secret Manager
L'Exécution : Firebase App Hosting (Cloud Run)
La Logique : Next.js API Routes + Firestore

Implémentation de l’architecture
La première étape consiste à sécuriser les clés API c’est-à-dire ne pas les coder en dur.
Étape 1 : Sécuriser les Clés
Au lieu de laisser traîner des clés API dans le code, nous utilisons la CLI Firebase pour stocker nos secrets dans Google Secret Manager.
Veuillez créer un compte sur Resend et générer une clé API.
# Création du secret pour l'API Resend
firebase apphosting:secrets:set RESEND_API_KEY
# Création d'un token secret pour sécuriser notre Cron
firebase apphosting:secrets:set CRON_SECRET_TOKEN
Ensuite, il faudra lier ces secrets via le fichier apphosting.yaml à la racine du projet :
# apphosting.yaml
env:
- variable: RESEND_API_KEY
secret: RESEND_API_KEY
- variable: CRON_SECRET_TOKEN
secret: CRON_SECRET_TOKEN
Étape 2 : Créer la Route API (Next.js)
Il faudra ensuite créer l’ API Route (chemin-d’accès/route.ts) qui servira de point d'entrée. Sa première mission est de vérifier l'identité de l'appelant.
export async function POST(request: NextRequest) {
// 1. Vérification de sécurité "Zero Trust"
const cronSecret = request.headers.get('x-cron-secret');
const expectedSecret = process.env.CRON_SECRET_TOKEN;
if (cronSecret !== expectedSecret) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
}
// 2. Logique métier : récupérer et publier les articles
// ...
}
Étape 3 : Configurer le Scheduler
Dans la console Google Cloud, nous créons un job Cloud Scheduler :
Fréquence : */5 * * * * (Toutes les 5 minutes)
Cible : HTTP
URL : https://mon-site.com/api/cron/publish-articles
Méthode : POST
En-tête (Header) : Nous ajoutons manuellement x-cron-secret avec la valeur définie à l'étape 1.
Automatisation "Tout-en-un"
Une fois la sécurité passée, le script exécute un pipeline précis :
Requête Firestore : Il cherche tous les articles dont le statut est programme et dont la date programmePour est passée.
Publication Transactionnelle : Il passe le statut à publie et met à jour la date de publication.
Notification : C'est ici que la magie opère. Dès qu'un article est confirmé "publié", le script récupère la liste des abonnés actifs et déclenche l'envoi de la newsletter via Resend.
Les avantages de cette architecture
Coût : C'est du "Serverless". Si aucun article n'est programmé, le script s'exécute en 10ms et ne coûte quasiment rien.
Sécurité : Les clés API (Resend, Cron Secret) ne sont jamais exposées dans le dépôt Git.
Scalabilité : Que nous ayons 10 ou 10 000 abonnés, Cloud Run peut absorber la charge de traitement.
Voilà pour aujourd’hui, j’espère que cet article vous a plu et que vous y avez trouvé de l'information utile là-dedans.
Je vous souhaite une excellente semaine et sur ce, je vous remercie.
Trop long ? Obtenez un résumé rapide de cet article généré par l'IA.
📧 Restez informé
Recevez une notification par email à chaque nouvel article ou modification
Commentaires (1)
nn
Laisser un commentaire
Vous commentez en tant que :