Guide · SaaS & dev
Next.js et PostgreSQL sur Railway
Guide Next.js plus Postgres de Railway, relu le 2026-10-18 : standalone, domaine, référence DATABASE_URL, pre-deploy. Non rejoué, sans montant.
La page Deploy a Next.js App with Postgres, relue le 2026-10-18, suit cinq blocs : modèle, GitHub, CLI, Dockerfile, puis Postgres. Le titre promet Postgres. La base n’arrive qu’après le déploiement de l’app. Les commandes n’ont pas été rejouées. Pas de capture, pas de chaîne de connexion.
Ce n’est pas un hébergement Vercel, ni un VPS. Déployer Next.js sur un VPS couvre l’autre chemin. Héberger n8n sur un VPS non plus : autre outil, autre machine.
Créer l’app, si elle n’existe pas
La page dit de sauter cette étape si l’app est déjà en local ou sur GitHub. Sinon, Node installé, puis :
npx create-next-app@latest helloworld
Elle dit que les réponses par défaut conviennent à la plupart des projets. Elle ne liste pas les questions. Ne les inventez pas. Lisez l’invite le jour où vous la lancez.
Puis :
cd helloworld
npm run dev
Navigateur : http://localhost:3000.
Résultat attendu, d’après la page : l’app de création. Non ouvert ici.
Sortie standalone, avant la CLI et avant GitHub
Dans la section CLI, étape 3, la page dit qu’un déploiement auto-hébergé a besoin d’une sortie standalone. Elle ajoute output: "standalone" dans next.config.ts ou next.config.js, et remplace le script start par node .next/standalone/server.js. Les scripts dev, build et lint restent ceux de l’exemple.
La section GitHub renvoie à cette même étape 3. Le Dockerfile aussi : la note dit que l’image exige output: "standalone".
Railway, via Railpack ou Nixpacks, prend le script start de package.json s’il n’y a pas de Dockerfile. C’est la note de la page, pas un test local.
Déployer l’app, dans l’ordre écrit
Modèle
Bouton sur la page, puis éjection conseillée pour copier le dépôt sur GitHub. Modèles communautaires en plus. Le bouton n’est pas repris ici. Nous n’avons pas cliqué.
CLI
- Installer et authentifier la CLI, ancres citées par la page.
railway initdans le dossier de l’app, nommer le projet.- Configurer standalone, comme ci-dessus.
railway up. Logs en direct dans le terminal, puis View logs.- Settings, Networking, Generate Domain.
GitHub
- Nouveau projet sur railway.com/new.
- La config standalone de l’étape CLI.
- Deploy from GitHub repo. Lien de compte si besoin.
- Deploy. La page dit qu’un service est créé, et qu’il n’est pas public par défaut.
- View logs.
- Generate Domain, même endroit.
Dockerfile
La page donne un Dockerfile en plusieurs étapes : dépendances avec npm ci, build, image de prod. Elle crée un utilisateur nextjs, copie public, .next/standalone et .next/static, passe à cet utilisateur, expose 3000, fixe PORT=3000 et HOSTNAME=0.0.0.0, et lance node server.js.
Ne recopiez pas ce fichier depuis un article. Ouvrez la page : le détail des COPY compte, et il peut bouger.
Tension avec Deploy a Vibe-Coded App, relue le même jour. Cette page dit que Railway injecte PORT, et qu’une app doit lire cette variable et écouter 0.0.0.0, pas localhost. Le Dockerfile Next.js de l’autre guide fixe PORT=3000. Nous n’avons pas déployé, donc nous ne disons pas laquelle l’emporte. Si le healthcheck échoue, la page vibe-coding liste trois contrôles : bind sur 0.0.0.0 et PORT, réponse dans le délai de healthcheck, erreurs dans les logs de déploiement.
Railway détecte le Dockerfile et build avec. Une image de registre est un autre chemin, cité en note.
Ajouter Postgres, après l’app
La page Next.js et la page PostgreSQL décrivent le même geste, avec une petite différence de menu.
Sur le guide Next.js :
- Ouvrir le projet.
- + New, Database, PostgreSQL.
- Le service base expose
DATABASE_URL,PGHOST,PGPORT,PGUSER,PGPASSWORD,PGDATABASE.
La page PostgreSQL ajoute le menu ctrl / cmd + k, et un modèle marketplace. L’image déployée est le modèle SSL de Railway, basé sur l’image Postgres officielle. Nous n’avons pas relevé le tag d’image.
Relier le service Next.js
- Service Next.js, onglet Variables.
- Add Reference Variable,
DATABASE_URLdu service Postgres. - Redéployer. La page dit que la variable ne prend effet qu’au redeploy.
La référence reste alignée si les identifiants de la base changent. C’est la phrase de la page. L’app lit process.env.DATABASE_URL. La page dit que Prisma, Drizzle et Knex prennent souvent cette variable seuls. Elle ne montre pas le code de connexion. Ne l’inventez pas.
La base est privée par défaut. La page PostgreSQL dit qu’un accès public se crée dans Settings, Networking, Public Access, via un proxy TCP, et remplit DATABASE_PUBLIC_URL. Elle prévient que cet egress est facturé. Le tarif est sur Pricing Plans. Pas de montant ici. Pour une app dans le même projet, la référence interne suffit. N’ouvrez pas la base sur Internet pour que Next.js la voie.
Migrations avant le trafic
Si un ORM exige des migrations, la page met une pre-deploy command : Settings, Deploy, Pre-deploy Command.
- Prisma :
npx prisma migrate deploy - Drizzle :
npx drizzle-kit migrate
Railway lance ça dans un conteneur séparé, avec les variables du service, dont DATABASE_URL. Le conteneur pre-deploy n’a pas les volumes. Si la migration a besoin de fichiers hors de l’image de build, la page dit de les traiter au build, pas en pre-deploy.
Nous n’avons pas de schéma à migrer. Le guide Authentification Supabase est un autre fournisseur et un autre dossier de fichiers. Ne mélangez pas DATABASE_URL Railway et les variables Supabase.
Essai, plan Free, sans recopier les tarifs
Même lecture que pour Flask : Free Trial et Pricing Plans, le 2026-10-18. Essai complet ou limité selon la vérification GitHub. Réseau sortant restreint sur l’essai limité. Retour au plan Free quand l’essai se termine ou que le crédit est épuisé. Hobby n’est pas gratuit, la page le dit, le prix reste sur la page.
Une base Postgres est un service de plus, avec un volume. La page essai dit que les volumes d’un compte Trial sont supprimés 30 jours après l’expiration des crédits si vous ne changez pas de plan. Ce n’est pas une sauvegarde. La page PostgreSQL renvoie vers les backups de volumes pour la prod. Nous ne les avons pas configurés.
Le guide Flask, Déployer Flask sur Railway, détaille le même tarif sans montant. Inutile de le réécrire ici.
Sources
- Deploy a Next.js App with Postgres : ordre, standalone, référence, pre-deploy.
- PostgreSQL : service privé, proxy public, variables.
- Deploy a Vibe-Coded App on Railway :
PORTet0.0.0.0, en tension avecENV PORT=3000du Dockerfile Next.js. - Free Trial et Pricing Plans : essai et plans. Montants non recopiés.
Sources recontrôlées le 2026-10-19. create-next-app, railway up et le provisionnement Postgres n’ont pas été lancés.