> For the complete documentation index, see [llms.txt](https://docs.ipcheck.ing/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ipcheck.ing/developer/fr/getting-started/deploy-with-nodejs.md).

# Déployer avec Node.js

L’exécution depuis les sources est le bon choix lorsque vous souhaitez personnaliser la compilation — modifier l’image de marque, ajouter un outil ou définir n’importe quelle `VITE_*` variable, ce que l’image préconstruite de Docker ne peut pas faire.

## Prérequis

| Exigence       | Remarques                                                                                                                          |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **Node.js 24** | L’image Docker officielle est construite à partir de `node:24-alpine`. Les versions majeures plus anciennes n’ont pas été testées. |
| **pnpm**       | Le dépôt fige sa version de pnpm dans `package.json` (`packageManager`). Utilisez Corepack pour obtenir exactement cette version.  |
| **git**        | Pour cloner et récupérer les mises à jour.                                                                                         |

{% tabs %}
{% tab title="Corepack (recommandé)" %}
Corepack est fourni avec Node.js et installe automatiquement la version de pnpm figée :

```bash
corepack enable
```

Pas d’installation globale, pas de dérive de version.
{% endtab %}

{% tab title="npm" %}

```bash
npm install -g pnpm
```

Fonctionne partout, mais vous êtes responsable de maintenir pnpm proche de la version figée.
{% endtab %}
{% endtabs %}

## Installer et compiler

{% stepper %}
{% step %}

#### Cloner

```bash
git clone https://github.com/jason5ng32/MyIP.git
cd MyIP
```

{% endstep %}

{% step %}

#### Configurer l’environnement

```bash
cp .env.example .env
```

Ouvrez `.env` et renseignez au minimum les identifiants MaxMind :

{% code title=".env" %}

```bash
BACKEND_PORT="11966"
FRONTEND_PORT="18966"
MAXMIND_ACCOUNT_ID="your-account-id"
MAXMIND_LICENSE_KEY="your-license-key"
MAXMIND_AUTO_UPDATE="true"
ALLOWED_DOMAINS="myip.example.com"
```

{% endcode %}

Chaque autre variable est facultative — voir [Variables d'environnement](/developer/fr/reference/environment-variables.md).

{% hint style="warning" %}
Définissez vos `VITE_*` variables **avant** vous compilez. Vite les lit au moment de la compilation et les intègre au bundle ; les modifier ensuite nécessite un autre `pnpm run build`.
{% endhint %}
{% endstep %}

{% step %}

#### Installer les dépendances

```bash
pnpm install
```

{% endstep %}

{% step %}

#### Compiler le frontend

```bash
pnpm run build
```

Cela produit `dist/`, le bundle statique que le serveur frontend distribue.
{% endstep %}

{% step %}

#### Démarrer

```bash
pnpm start
```

Ouvrez <http://localhost:18966>.
{% endstep %}
{% endstepper %}

## Les deux processus

`pnpm start` exécute les deux moitiés de l’application dans un seul terminal (via `concurrently`):

| Processus | Script               | Port par défaut           | Rôle                                                                                                                  |
| --------- | -------------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| Frontend  | `frontend-server.js` | `18966` (`FRONTEND_PORT`) | Sert `dist/` avec des en-têtes de cache optimisés, gère le repli de l’historique SPA et relaie `/api` vers le backend |
| Backend   | `backend-server.js`  | `11966` (`BACKEND_PORT`)  | L’API Express, ainsi que les mises à jour des jeux de données MaxMind et CAIDA                                        |

Les utilisateurs n’accèdent qu’au port frontend. Le backend n’a pas besoin d’être accessible depuis l’extérieur de l’hôte — le frontend relaie `/api` vers `http://localhost:<BACKEND_PORT>` pour eux.

Vous pouvez aussi les exécuter séparément :

```bash
pnpm run start-frontend
pnpm run start-backend
```

{% hint style="info" %}
`start-backend` lance Node avec `--import ./sentry-instrument.js`. Cet indicateur doit précéder le chargement d’Express pour que l’instrumentation ESM de Sentry s’attache. Sans `SENTRY_DSN_BACKEND` il est sans effet, donc vous pouvez le conserver dans chaque déploiement en toute sécurité.
{% endhint %}

## Exécution sous pm2

`pnpm start` se termine avec votre shell. Pour un vrai déploiement, utilisez la configuration pm2 fournie avec le dépôt — elle contient déjà les bons indicateurs Node.

{% stepper %}
{% step %}

#### Installer pm2

```bash
npm install -g pm2
```

{% endstep %}

{% step %}

#### Démarrer les deux applications

```bash
pm2 start ecosystem.config.cjs
```

Cela enregistre deux processus : `myip-backend` et `myip-frontend`.
{% endstep %}

{% step %}

#### Survivre aux redémarrages

```bash
pm2 save
pm2 startup
```

Puis exécutez la commande affichée par pm2.
{% endstep %}
{% endstepper %}

Commandes utiles :

```bash
pm2 status
pm2 logs myip-backend
pm2 restart ecosystem.config.cjs
pm2 stop myip-frontend
```

{% hint style="info" %}
Le programme de mise à jour MaxMind prend un verrou de fichier avant de télécharger, donc exécuter le backend sous plusieurs instances pm2 ne produira pas deux téléchargements simultanés ni une base de données partiellement écrite.
{% endhint %}

## Mise à jour

```bash
git pull
pnpm install
pnpm run build
pm2 restart ecosystem.config.cjs
```

Ne sautez pas `pnpm run build` — l’application en cours d’exécution sert tout ce qui se trouve dans `dist/`, pas votre source mise à jour.

## Où se trouvent les données

Les jeux de données sont téléchargés dans l’arborescence de travail et sont exclus de git :

* `common/maxmind-db/` — `GeoLite2-City.mmdb`, `GeoLite2-ASN.mmdb`, ainsi que l’état du programme de mise à jour et les fichiers de verrouillage
* `common/as-org-db/`, `common/as-rel-db/` — les jeux de données CAIDA utilisés pour les noms d’organisation ASN et le graphe de connectivité ASN

Ils survivent à `git pull`, donc les mises à niveau ne retéléchargent rien.

## Étapes suivantes

* [Configuration de MaxMind](/developer/fr/getting-started/maxmind-setup.md) — y compris l’option manuelle `.mmdb` option, qui ne fonctionne que sur ce chemin de déploiement
* [Proxy inverse et domaines](/developer/fr/getting-started/reverse-proxy-and-domains.md) — TLS et `ALLOWED_DOMAINS`
* [Environnement de développement](/developer/fr/development/dev-environment.md) — `pnpm dev` avec rechargement à chaud, si vous prévoyez de modifier le code
* [Variables d'environnement](/developer/fr/reference/environment-variables.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.ipcheck.ing/developer/fr/getting-started/deploy-with-nodejs.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
