---
title: "Migrer depuis un VPS ou serveur dédié"
description: "Faire passer une application installée sur un serveur vers Kontainers : conteneuriser, externaliser l'état, planifier la bascule DNS avec retour arrière."
source_url:
  html: https://docs.blackswift.cloud/migrer/depuis-un-vps/
  md: https://docs.blackswift.cloud/migrer/depuis-un-vps.md
---

# Migrer depuis un VPS ou serveur dédié

> Faire passer une application installée sur un serveur vers Kontainers : conteneuriser, externaliser l'état, planifier la bascule DNS avec retour arrière.

Votre application tourne sur un VPS ou un serveur dédié — installée à la main,
gérée en SSH. La migrer vers Kontainers se fait en quatre temps : inventorier,
conteneuriser, externaliser l'état, basculer.

:::tip[Vous utilisez déjà docker-compose sur votre serveur ?]
Passez directement par
[Migrer depuis un docker-compose](https://docs.blackswift.cloud/migrer/depuis-un-docker-compose.md) — la moitié
du travail est déjà faite.
:::

## 1. Inventorier ce qui tourne

Avant de toucher à quoi que ce soit, listez sur votre serveur :

| À inventorier | Comment | Devient sur Kontainers |
| --- | --- | --- |
| Les processus / services systemd | `systemctl list-units --type=service --state=running` | Un Deployment par service |
| Les ports écoutés | `ss -tlnp` | Services + [Ingress](https://docs.blackswift.cloud/deployer/exposer-en-https.md) |
| Les tâches cron | `crontab -l` (tous les utilisateurs) | CronJobs |
| Les fichiers écrits par l'app | uploads, caches, données… | [PVC](https://docs.blackswift.cloud/deployer/stockage-persistant.md) — ou stockage objet externe |
| La base de données | dump + taille | Conteneur + PVC, ou PostgreSQL managé |
| La configuration | `/etc/`, variables, fichiers `.env` | [ConfigMaps et Secrets](https://docs.blackswift.cloud/deployer/configmaps-et-secrets.md) |
| Les certificats TLS | souvent certbot | Rien à migrer : [émis automatiquement](https://docs.blackswift.cloud/deployer/exposer-en-https.md) |

## 2. Conteneuriser l'application

Si votre application n'a pas encore d'image Docker, un `Dockerfile` minimal
suffit souvent :

```dockerfile
FROM node:22-slim            # ou python, php, golang… selon votre stack
WORKDIR /app
COPY . .
RUN npm ci --omit=dev
ENV NODE_ENV=production
EXPOSE 8080
CMD ["node", "server.js"]
```

Deux règles d'or pour un conteneur qui se comporte bien sur Kubernetes :

1. **Ne stockez rien dans le conteneur** : tout ce qui doit survivre va dans un
   volume ou la base de données ;
2. **Loggez sur la sortie standard** (pas dans des fichiers) : vos logs seront
   accessibles via `kubectl logs` et la console Rancher.

Construisez et poussez l'image vers un registre, puis
[déployez-la](https://docs.blackswift.cloud/deployer/deployer-un-conteneur.md).

## 3. Externaliser l'état

- **Base de données** : dump sur le serveur (`pg_dump`, `mysqldump`), déploiement
  de la base sur Kontainers ([exemple MySQL](https://docs.blackswift.cloud/deployer/stockage-persistant.md#monter-le-volume-dans-un-pod)),
  puis restauration du dump via `kubectl exec` ou un Job ;
- **Fichiers** (uploads, médias…) : copie vers un
  [PVC](https://docs.blackswift.cloud/deployer/stockage-persistant.md) — montez le volume dans un pod temporaire
  et transférez avec `kubectl cp` ou `rsync` via `kubectl exec` ;
- **Configuration** : recréez-la en
  [ConfigMaps et Secrets](https://docs.blackswift.cloud/deployer/configmaps-et-secrets.md) — c'est le moment de
  sortir les mots de passe des fichiers de conf.

## 4. Basculer le DNS (avec retour arrière)

1. **La veille** : abaissez le TTL de vos enregistrements DNS à 300 s ;
2. Déployez et testez la version Kontainers — accessible immédiatement via
   `kubectl port-forward`, puis via votre Ingress avec un sous-domaine de test
   (`beta.example.com`) ;
3. **Gel des écritures** sur le serveur, dernière synchronisation des données ;
4. Basculez le DNS vers la plateforme
   ([Configurer votre DNS](https://docs.blackswift.cloud/deployer/configurer-votre-dns.md)) — le certificat
   s'émet automatiquement dans les minutes qui suivent ;
5. **Gardez le serveur allumé quelques jours** : le retour arrière est un simple
   changement DNS inverse.

## Ce qui change au quotidien

| Avant (serveur) | Après (Kontainers) |
| --- | --- |
| `ssh serveur` | `kubectl exec -it deploy/mon-app -- sh` |
| `tail -f /var/log/app.log` | `kubectl logs -f deploy/mon-app` |
| `systemctl restart mon-app` | `kubectl rollout restart deploy/mon-app` |
| certbot + renouvellements | [Automatique](https://docs.blackswift.cloud/deployer/exposer-en-https.md) |
| Sauvegardes à configurer | [Quotidiennes, incluses](https://docs.blackswift.cloud/operer/sauvegardes-et-restauration.md) |
| Surveillance à installer | [Grafana inclus](https://docs.blackswift.cloud/operer/acceder-au-monitoring.md) |
| Mises à jour de l'OS | Plus votre problème |
