Blog

Construire une image Docker et la déployer sur Clever Cloud

Guide pratique pour créer une image Docker et déployer une application open-source en production sur Clever Cloud, étape par étape.

Mathieu Ducrot Mathieu Ducrot
|
|
5 min de lecture
| Tech
Résumez cette page avec votre IA préférée :
Comment déployer facilement avec Docker sur Clever Cloud ?

Introduction

Clever Cloud supporte nativement PHP, Node.js, Python et bien d’autres runtimes. Mais il est souvent plus pratique de ressembler toutes la configuration dans une image Docker pour simplifier le déploiement.

Nous allons prendre en exemples 2 cas concrêts que nous utilisons chez SmartBooster : Maildev pour capturer les emails de test et Fider pour la gestion des feedbacks clients. Dans les deux cas, le workflow est identique.

1. La stratégie “utiliser plutôt que construire”

Pour les outils transverses (capture d’emails, gestion de feedbacks, monitoring…), développer une solution maison est rarement justifié. Des images Docker open-source couvrent ces besoins avec fiabilité.

La capture d’emails est un excellent exemple : en développement et en recette, vous ne voulez surtout pas que vos emails de test arrivent chez de vrais utilisateurs. Maildev intercepte tous les envois SMTP et les rend visibles dans une interface web, sans jamais les transmettre aux destinataires réels.

C’est une bonne pratique de qualité logicielle à mettre en place dès le début de tout projet.

L’approche consiste à créer un dépôt Git contenant uniquement un Dockerfile qui référence l’image publique, puis à déployer ce dépôt sur Clever Cloud comme n’importe quelle application.

2. Créer l’application Docker sur Clever Cloud

Depuis la console Clever Cloud, créez une nouvelle application en choisissant le runtime Docker.

Sélection du runtime Docker dans la console Clever Cloud

Quelques réglages à faire immédiatement après la création :

  • Scaling : une instance Nano suffit pour les outils légers comme Maildev. Pour un outil avec base de données comme Fider, passez en XS.
  • Force HTTPS : activez cette option dans l’onglet Information pour forcer le HTTPS sur toutes les requêtes. Forcer le HTTPS sur CleverCloud
  • Domain name : supprimez le domaine généré par défaut et ajoutez un sous-domaine personnalisé (ex: maildev.votreprojet.cleverapps.io).

Ajouter les add-ons nécessaires

Si l’outil requiert une base de données ou du stockage fichier, Clever Cloud propose des add-ons à lier directement à l’application :

  • PostgreSQL pour les outils avec persistance relationnelle (Fider utilise un plan XXS_SML minimum)
  • Cellar (compatible S3) pour le stockage de fichiers (images, pièces jointes)

Addons CleverCloud

3. Gérer l’exposition réseau

Le port 8080

Clever Cloud attend que votre application écoute sur le port 8080. Pour les images Docker qui exposent un autre port par défaut, vous devrez soit remapper dans le Dockerfile, soit configurer via variable d’environnement. Pour Fider, c’est simple : PORT=8080 dans les variables d’environnement suffit.

Les redirections TCP

Certains outils nécessitent un accès via un protocole autre que HTTP, comme le SMTP pour Maildev. Clever Cloud propose des redirections TCP : la plateforme attribue un port aléatoire (ex: 20425) qui redirige vers le port interne de votre conteneur.

TCP Redirect écran CleverCloud

Après avoir créé la redirection, copiez le port attribué et ajoutez la variable d’environnement CC_DOCKER_EXPOSED_TCP_PORT avec cette valeur dans la configuration de l’application.

4. Configurer via les variables d’environnement

Les variables d’environnement sont le seul mécanisme de configuration à utiliser. Elles permettent d’adapter le comportement de l’image sans modifier le Dockerfile, et de gérer proprement les secrets.

Clever Cloud injecte automatiquement les variables des add-ons liés (ex: POSTGRESQL_ADDON_DIRECT_URI, CELLAR_ADDON_KEY_ID). Référencez-les directement dans vos variables applicatives.

Pour Fider, le bloc de variables minimal ressemble à ceci :

BASE_URL="https://fider.votreprojet.fr"
DATABASE_URL="%POSTGRESQL_ADDON_DIRECT_URI%"
PORT="8080"
JWT_SECRET="votre_secret_64_caractères"
EMAIL_NOREPLY="no-reply@votreprojet.fr"

Et pour Maildev votre liste de variable d’environnement est minime avec juste le port HTTP et la redirection TCP :

Variable d'environnement PORT et TCP

5. Le Dockerfile et l’automatisation CI/CD

Le Dockerfile est volontairement minimal : il référence l’image publique et expose les ports nécessaires. Voici le fichier complet pour Maildev, avec le relay vers Tipimail pour les envois réels depuis la recette :

FROM maildev/maildev:1.1.1
LABEL maintainer="dev@email.fr"

EXPOSE 8080 {PORT_TCP}

CMD ["--web-user", "{USER}", "--web-pass", "{PASSWORD}",
     "--web", "8080",
     "--smtp", "{PORT_TCP}",
     "--hide-extensions", "STARTTLS",
     "--outgoing-host", "{SMTP_HOST}",
     "--outgoing-port", "{SMTP_PORT}",
     "--outgoing-user", "{SMTP_USER}",
     "--outgoing-pass", "{SMTP_PASS}"]

Détail des paramètres :

  • --web-user / --web-pass : identifiants HTTP Basic pour protéger l’interface web de visualisation des emails
  • --web 8080 : port d’écoute de l’interface web (obligatoire sur Clever Cloud)
  • --smtp {PORT_TCP} : port d’écoute SMTP, à remplacer par la valeur de votre redirection TCP Clever Cloud
  • --hide-extensions STARTTLS : désactive STARTTLS pour éviter les erreurs de handshake TLS sur les connexions internes
  • --outgoing-host / --outgoing-port / --outgoing-user / --outgoing-pass : configuration du relay SMTP sortant vers votre service d’envoi d’email (Mailgun, Brevo, Tipimail…) pour les emails que vous choisissez explicitement de laisser partir en recette

Pour automatiser les déploiements depuis GitLab, ajoutez un job utilisant l’image clevercloud/clever-tools :

deploy:
  stage: deploy
  image:
    name: clevercloud/clever-tools:latest
    entrypoint: ["/bin/sh", "-c"]
  when: manual
  script:
    - clever deploy -f -a nom-de-votre-app

L’option when: manual est recommandée pour les environnements de production : le déploiement se déclenche sur action volontaire depuis l’interface GitLab, pas à chaque push.

6. Maintenir l’application

Les logs sont accessibles directement depuis la console Clever Cloud ou via la CLI avec clever logs. Ils sont indispensables pour diagnostiquer les erreurs au démarrage du conteneur, notamment les problèmes de connexion aux add-ons ou de configuration manquante.

Pour les tâches d’initialisation complexes (migrations de base de données, création de bucket…), Clever Cloud propose la variable CC_POST_BUILD_HOOK qui exécute un script shell après le build et avant le démarrage du conteneur.

Conclusion

Un dépôt Git avec un Dockerfile de 5 lignes, quelques variables d’environnement et un add-on PostgreSQL : c’est tout ce qu’il faut pour héberger un outil complet sur Clever Cloud. Cette approche s’applique à des dizaines d’outils open-source et évite de réinventer des solutions pour des besoins transverses bien couverts par l’écosystème Docker.

Si vous utilisez déjà Clever Cloud pour vos applications Symfony ou Node.js, vous pouvez centraliser l’ensemble de votre infrastructure sur la même plateforme.

Mathieu Ducrot
Mathieu Ducrot CTO
Mots clés :
#DevOps #Vélocité

Articles similaires

Vous avez un projet ?

Contactez-nous pour savoir comment nous pouvons vous aider.