Hébergement web pas cher en Roumanie : Node.js, Python et isolation par site

Un tour pratique de notre hébergement en Roumanie : un conteneur Podman rootless par site, Apache ou nginx par site, Node.js 22/24 et Python 3.12 dès Standard, DNS Cloudflare automatique et les limites honnêtes à connaître.

Ce que cela résout

Si vous avez déjà cherché un hébergement Node.js pas cher qui ne s'effondre pas dès que vous ajoutez une seconde application, vous connaissez le compromis : un prix bas, mais un seul runtime, une seule version de PHP, un seul serveur web et un seul rayon d'impact partagés. Une mise à jour ratée sur un site entraîne les autres avec elle.

Notre hébergement web est construit dans l'autre sens. Il tourne sur notre propre serveur en Roumanie, pas sur de l'espace revendu. Chaque client dispose d'un compte Linux séparé avec ses propres limites de CPU, de mémoire, de processus et de disque, et chaque site web s'exécute dans ses propres conteneurs Podman rootless, sans accès au réseau local du serveur ni aux comptes des autres clients. Un problème sur un site n'atteint ni vos autres sites ni les autres clients.

Ce tutoriel parcourt la commande, l'ajout d'un site, la connexion d'un domaine, le déploiement d'une application Node.js ou Python, et les limites honnêtes de l'ensemble, pour que vous puissiez décider en toute connaissance de cause.

Prérequis

  • Un domaine que vous contrôlez chez un registrar, si vous voulez votre propre nom sur le site. Sans domaine, chaque site fonctionne sur une adresse de prévisualisation.
  • Le code de votre application, ou l'intention de partir de la page de démarrage.
  • Pour Node.js et Python, il vous faut le plan Standard ou supérieur ; Start ne couvre que PHP et les sites statiques.
  • Une carte pour le paiement Stripe. Les prix sont en EUR, la TVA est calculée au paiement selon votre pays.

Étape 1 : commander un plan

  1. Ouvrez la page d'hébergement et choisissez un plan et une période de facturation (mensuelle ou annuelle). La facturation annuelle coûte dix fois le prix mensuel, et le prix reste le même au renouvellement : il n'y a pas de tarif d'appel qui augmente ensuite.
  2. Ajoutez des options si besoin : +10 Go NVMe, +1 vCPU, +1 Go de RAM ou sauvegarde étendue. Vous pourrez les modifier plus tard.
  3. Saisissez votre adresse e-mail, acceptez les Conditions, la Politique d'utilisation acceptable et l'Accord de traitement des données, puis payez avec Stripe.

Votre compte d'hébergement est créé automatiquement après le paiement, généralement en quelques minutes, et vous recevez un e-mail. La garantie de remboursement de 30 jours court à partir de votre premier paiement.

Un repère rapide sur les plans : Start, c'est 1 vCPU / 1 Go de RAM / 10 Go NVMe avec PHP et les sites statiques. Standard, c'est 2 / 2 Go / 25 Go et ajoute Node.js et Python, SSH avec clés et Git. Pro ajoute Redis. Business ajoute vos propres images de conteneurs. Les plans et options actuels figurent sur la page d'hébergement.

Étape 2 : ajouter un site web

Allez dans Websites → Add a website dans Account → Hosting.

  • Name : lettres minuscules, chiffres et tirets. Cela devient le dossier www-data/<name> dans votre dossier personnel.
  • Technology : PHP 8.1–8.5, Node.js 22 ou 24, Python 3.12, ou statique.
  • Web server (PHP uniquement) : Apache lit les fichiers .htaccess et constitue le choix sûr pour WordPress et la plupart des applications PHP qui y embarquent leurs règles de réécriture. nginx est plus léger et plus rapide pour les fichiers statiques mais ignore .htaccess. Vous choisissez par site et pouvez mélanger les deux dans un même compte.
  • Domain (facultatif) : votre propre domaine ou un sous-domaine d'un domaine de votre compte ; l'enregistrement DNS du sous-domaine est créé automatiquement. Sans domaine, le site fonctionne immédiatement sur son adresse de prévisualisation, <site>-<user>.hosting.medialab.works (HTTP uniquement tant que vous n'avez pas basculé le domaine).
  • Web root (PHP et statique) : le dossier à l'intérieur de www-data/<site> servi aux visiteurs, public par défaut ; . désigne le dossier du site lui-même.

À la création du site, son dossier reçoit une page de démarrage indiquant que le domaine atteint le serveur, où le site est hébergé et quelle version de PHP s'exécute. Remplacez-la par vos propres fichiers.

Où vont les fichiers :

Technologie Dossier
PHP, statique www-data/<site>/public (ou la racine web choisie)
Node.js, Python www-data/<site>/app

Étape 3 : connecter votre domaine et obtenir DNS et mail gratuitement

Lorsque vous ajoutez un domaine, nous créons trois choses pour vous : une zone DNS dans Cloudflare sur notre compte avec les enregistrements web et les enregistrements mail (MX, SPF, DKIM, DMARC, autoconfig), le domaine mail sur notre serveur mail avec sa clé DKIM, et le site web sur le serveur avec un certificat SSL dès que le domaine pointe vers nous.

Ce que vous faites : chez votre registrar, remplacez les serveurs de noms par les deux indiqués dans Account → Hosting → Domains. Le changement prend généralement de quelques minutes à quelques heures, parfois jusqu'à 48 heures. La page du domaine affiche chaque étape ; lorsque les serveurs de noms sont vus, la zone devient active et le certificat est émis automatiquement. Check DNS et Issue certificate vous permettent de réessayer immédiatement.

Vous gardez votre fournisseur DNS actuel ? Pointez plutôt un enregistrement A vers l'adresse IP indiquée dans le compte, et ajoutez vous-même les enregistrements mail si vous voulez de l'e-mail sur le domaine ; le tableau des enregistrements DNS du compte les liste. Sans nos serveurs de noms, les enregistrements DNS sont de votre responsabilité.

Étape 4 : déployer une application Node.js ou Python

Téléversez votre application dans www-data/<site>/app. Deux règles décident si elle fonctionne :

  • Elle doit écouter sur le port de la variable d'environnement PORT (8080 dans le conteneur) sur toutes les interfaces (0.0.0.0), pas seulement sur localhost. Le serveur web et le certificat se trouvent devant ; vous n'ouvrez aucun port vous-même.
  • L'ordre de démarrage compte. Pour Node.js : un start.sh exécutable dans app/, sinon npm start depuis package.json (les dépendances sont installées avec npm ci --omit=dev si node_modules est absent), sinon server.js, index.js, app.js ou main.js. Pour Python : un start.sh exécutable, sinon asgi.py (servi par des workers uvicorn dans gunicorn), sinon app.py avec un objet app ou wsgi.py avec application (gunicorn). requirements.txt est installé dans un environnement virtuel et réinstallé au démarrage lorsque le fichier a changé.

Après le téléversement d'une nouvelle version, appuyez sur Restart à côté du site. Tant qu'aucune application n'est trouvée, le site affiche une page d'attente qui indique ce qui manque.

Pour les applications PHP, le déroulé est familier : créez une base MariaDB dans Databases (son nom complet devient <user>_wp), téléversez le projet dans www-data/<site>, puis appuyez sur Detect dans Settings à côté du site. Nous reconnaissons Laravel, Symfony, WordPress, Drupal, Nextcloud, WHMCS et d'autres, et proposons la racine web. Les fichiers hors de la racine web (vendor/, storage/, .env, les données Nextcloud, attachments, downloads et templates_c de WHMCS) restent accessibles à l'application mais pas depuis le navigateur. Pour WordPress, DB_HOST vaut mlw-db:3390. Le mot de passe de votre utilisateur de base de données est affiché une seule fois, à la création de votre première base MariaDB : conservez-le.

Étape 5 : le mail depuis votre site sur le port 587

Le courrier sortant de vos sites passe par notre serveur mail avec une boîte aux lettres, sur le port 587. L'envoi direct sur le port 25 est bloqué, ce qui garde l'adresse du serveur hors des listes de spam. Boîtes aux lettres, webmail, IMAP et SMTP font partie de chaque plan.

Étape 6 : des sauvegardes que vous restaurez vous-même, et leurs limites honnêtes

Les sauvegardes s'exécutent chaque nuit avec restic, chiffrées, sur un disque séparé du même serveur. Vous pouvez restaurer vous-même fichiers et bases de données depuis votre compte, lancer des sauvegardes à la demande et télécharger un site ou une base depuis n'importe quelle sauvegarde. La rétention dépend du plan : 7 jours sur Start, 14 sur Standard, 14 quotidiennes plus 4 hebdomadaires sur Pro, 30 quotidiennes plus 12 mensuelles sur Business. La sauvegarde étendue les conserve aussi longtemps que sur le plan supérieur. Une restauration par notre équipe est également possible ; la première de chaque mois est gratuite.

Voici la partie honnête : les sauvegardes sont conservées sur le même serveur, sur un disque séparé, pas dans un second emplacement. Elles vous protètent des erreurs, d'une mise à jour ratée ou d'un site piraté, mais pas de la perte du serveur entier. Gardez votre propre copie de tout ce qui est important ; vous pouvez télécharger vos fichiers et bases de données à tout moment. Il n'y a aussi qu'un seul serveur : la disponibilité est couverte par notre SLA (99,9 % par mois, avec des crédits sur la facture suivante), mais il n'y a pas de bascule automatique vers une seconde machine. Et « illimité » sur Business signifie usage raisonnable : le CPU, la RAM et le disque du plan s'appliquent toujours, et les plafonds techniques n'existent que pour arrêter les abus (voir les Conditions).

Astuces et dépannage

  • Le site affiche la page d'attente : votre application n'a pas été trouvée ou n'écoute pas correctement. Vérifiez qu'elle se lie à 0.0.0.0:$PORT, puis appuyez sur Restart.
  • Lisez d'abord les journaux : chaque site journalise dans logs/<site>/ (nginx/ ou apache/ avec access.log et error.log, plus php/, node/ ou python/ pour la sortie de l'application). Les mêmes journaux apparaissent dans Settings → Logs.
  • Déplacer un site WordPress : téléversez l'archive, extrayez-la dans Files, corrigez wp-config.php, puis faites Detect sur l'application. Apache est le choix par défaut le plus sûr pour les règles de réécriture.
  • Téléversements volumineux : le gestionnaire de fichiers accepte les fichiers de toute taille autorisée par votre plan, envoyés par morceaux, et extrait .zip, .tar.gz, .tar.bz2 ou .tar.xz. Le téléchargement d'un dossier entier en .zip est préparé en arrière-plan et reste sous Operations and downloads pendant 24 heures.
  • Bloqué sur le DNS : attendez la propagation, puis utilisez Check DNS et Issue certificate pour réessayer sans ouvrir de ticket.
  • Besoin d'une base de données dans le navigateur : Adminer s'ouvre en un clic pour MariaDB et PostgreSQL, avec export et import .sql.

D'autres réponses se trouvent dans la base de connaissances et la FAQ ; le pas à pas de la commande à votre première boîte aux lettres est dans le guide de démarrage.

Conclusion

L'isolation par site n'est pas un mot marketing ici : c'est un compte Linux séparé avec ses propres limites et des conteneurs Podman rootless par site web, sur du matériel que nous exploitons nous-mêmes en Roumanie. Vous obtenez Apache ou nginx par site, PHP 8.1–8.5, Node.js 22/24 et Python 3.12 dès Standard, un DNS Cloudflare automatique avec les enregistrements mail, un SSL gratuit et un prix de renouvellement qui ne grimpe pas. Les limites sont énoncées clairement : les sauvegardes vivent sur le même serveur, et il n'y a qu'une machine. Si cela correspond à votre façon d'exploiter vos propres serveurs, la page d'hébergement présente les plans, et vous pouvez nous contacter pour tout ce que le guide ne couvre pas.

Cet article a été rédigé avec l’aide de l’IA à partir de la documentation de nos produits ou des sources indiquées et vérifié automatiquement avant publication.

À lire ensuite

Vous utilisez Emby, Jellyfin ou Nextcloud ?

Nos plugins et applications ajoutent la TV en direct, les sous-titres, l’inscription et la sécurité à votre propre serveur, avec un essai gratuit.