# Déployer Node.js et Next.js

> Une API Node.js ou une application Next.js : le Dockerfile, le port, les variables lues au build, et la base.

Source : https://docs.fransys.cloud/guides/node-nextjs/ Vérifié sur la console le 2026-10-23.

## Le Dockerfile

Fransys déploie une image Docker. Un exemple pour Next.js, avec la sortie `standalone` (`output: 'standalone'` dans `next.config.js`) :

```dockerfile
FROM node:22-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production PORT=3000 HOSTNAME=0.0.0.0
COPY --from=build /app/.next/standalone ./
COPY --from=build /app/.next/static ./.next/static
COPY --from=build /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]
```

Pour une API Node.js, le principe est le même : installer, construire si besoin, puis lancer le serveur. Écoutez sur `0.0.0.0`, pas sur `localhost`.

## Le service

Ajoutez une **Application**, branchez le dépôt et la CI ([Depuis GitHub ou GitLab](https://docs.fransys.cloud/projets/github-gitlab/)), puis réglez le **Port du conteneur** sur `3000` (ou celui de votre `EXPOSE`).

## Les variables lues au build

Next.js inscrit les variables `NEXT_PUBLIC_…` dans le code au moment du build. La CI de Fransys ne transmet pas encore les variables au build : 
- gardez ces valeurs dans votre code ou dans un fichier `.env.production` du dépôt, si elles ne sont pas secrètes ;
- ou lisez-les au démarrage, côté serveur.

Les autres variables (accès à la base, clés d'API) se règlent dans **Variables**, protégées si ce sont des secrets.

## La base de données

Ajoutez une base PostgreSQL reliée à l'application, puis regardez dans **Variables** les noms reçus. Si votre ORM attend une seule URL (`DATABASE_URL` pour Prisma, par exemple), composez-la avec les références :

```txt
DATABASE_URL=postgresql://${USER}:${PASSWORD}@${HOST}:${PORT}/${DATABASE}
```

en remplaçant chaque nom par celui de la variable reçue, et cochez **Autoriser les références**.

## Les migrations

Dans **Commandes de déploiement**, à **Après la première installation** et **Après une mise à jour** : par exemple `npx prisma migrate deploy`.

## Plusieurs processus

Un worker (BullMQ, par exemple) : faites lire un rôle à votre point d'entrée, puis copiez le service avec ce rôle. Voir [Application](https://docs.fransys.cloud/projets/application/#workers-files-dattente-tâches-planifiées).
