Bonjour à tous,

Voici un petit retour technique sur la migration qui a eu lieu la semaine dernière vers le cloud Ikoula, certains d'entre vous peuvent être intéressés par ça vu que c'est le thème du forum.

Il y a 3 mois nous avions lancé une campagne de financement pour aider mondedie.fr à payer sa nouvelle infrastructure. La société ikoula a répondu à notre appel en nous proposant un partenariat, partenariat que nous avons donc accepté sans trop hésiter.

Thomas, community manager chez ikoula, nous a orienté vers les offres Cloud Public. Ce type d'offre permet de déployer rapidement des instances SSD depuis une interface Cloudstack (Apache Cloudstack).

Depuis la console de gestion, on retrouve différentes sections permettant de créer de nouvelles instances, des disques virtuels SSD, des snapshots, contrôler les paramètres réseaux...etc

Il faut savoir qu'il y a deux types de topologie réseau chez Ikoula :

  • Un mode Direct-Routing, les VMs sont déployées avec une IPv4 publique via un pare-feu en mode bridge.
  • Un mode Advance-Routing, ce coup-ci les VMs sont déployées derrière un routeur virtuel avec une IPv4 privée via un pare-feu configuré en NAT et PAT.

Pour nos besoins, nous avons choisis le second type de topologie par mesure de sécurité essentiellement car nous n'avions pas besoin que nos VMs soient toutes accessibles avec une IPv4, l'instance hébergeant les bases de données étant en backend et uniquement accessible depuis les équipements du réseau virtuel.

Donc le but de cette migration est de gagner en flexibilité, efficacité et sécurité en séparant les différents services sur plusieurs VM et en automatisant le déploiement et la configuration des différentes instances via Docker.

On est parti de l'idée de faire une migration side-by-side, c'est à dire de transposer l'ancienne architecture en gardant exactement les mêmes services/sous-domaines (forum, upload image, chat, webmail...etc) tout en ayant une organisation radicalement différente côté backend.

Donc voici l’architecture finale retenue pour mondedie.fr :

Il y a donc 3 VMs, chacune ayant un rôle bien précis :

  • mondedie-web contient 10 conteneurs : le serveur web/reverse proxy (nginx), l'hébergeur d'image (lutim), le paste (zerobin), flarum, le chat (mondedie-chat) ...etc
  • mondedie-bdd contient 2 conteneurs : la base de données MySQL pour le forum/mails et la base de données Redis pour le chat.
  • mondedie-mail contient 2 conteneurs : notre serveur de mail pour l'envoie des notifications du forum ainsi que nos boites mail et notre serveur DNS/DNSSEC autoritaire sur le domaine mondedie.fr.

Comme on l'a dit tout à l'heure, les 3 VMs n'ont pas d'IP publique elles se trouvent toutes au sein d'un réseau virtuel privé inaccessible depuis l'extérieur, il faut donc configurer des redirections de port et modifier les règles du pare-feu pour rediriger les flux vers les bonnes instances. Tout ceci se met très facilement en place depuis l'interface de gestion Cloudstack, la documentation d'Ikoula étant suffisamment claire à ce niveau là.

Documentation prise en main : https://express.ikoula.com/sites/default/files/cloudpublic_starter_document.pdf

Nous avons aussi revu la méthode de déploiement du forum et du chat, maintenant que l'ensemble des applications sont dans des conteneurs docker, il devient beaucoup plus aisé de déployer une application sans trop d'effort. Docker possède un mécanisme appelé "Automated Builds" permettant de construire automatiquement une image docker après la mise à jour d'un dépôt Github/Bitbucket, le forum et le chat étant versionnés avec Git, cette solution est parfaitement adaptée, nous avons couplé ça avec le mécanisme de hook fournit par Git pour pousser les modifications à distance sans avoir à se connecter sur la VM web.

Au niveau des sauvegardes, tout est géré depuis l'interface de gestion Cloudstack, les disques virtuels bénéficies de snapshots réguliers pour éviter une perte de données en cas d'incident. Nous allons mettre aussi en place une autre solution de sauvegarde des bases de données, et ainsi avoir une seconde alternative de récupération, en plus des snapshots.

Niveau sécurité, un nœud central Ossec avec 2 agents se chargent de la surveillance des instances, on ne détaillera pas ce point ici, ce n'est pas le but mais un tutoriel est disponible sur le forum pour ceux qui sont intéressés : https://mondedie.fr/d/5821

Voila, je pense qu'on a fait le tour, cette migration n'a pas été de tout repos parce qu'on partait d'une infra radicalement différente, mais nous sommes content que tout ceci soit enfin en place, la maintenance et l'évolutivité sera beaucoup plus simple à présent.

Merci d'avoir d'avoir lu jusqu'au bout. Si vous avez des questions sur certains points, n'hésitez pas à poster dans ce fil de discussion.

En vous souhaitant une agréable visite sur mondedie.fr !

Le Staff de mondedie.fr

Merci à Ikoula pour la proposition du partenariat et le soutient envers notre communauté.

Merci à Xataz pour l'aide apportée lors de la migration et Wonderfall pour les petites rustines (iptables, lutim) post-migration 😉

Merci à BXT pour avoir fait du DDOS en direction du forum pour montrer les faiblesses à ce niveau là, nous avons pu renforcer nos méthodes de mitigation :noel:

5 jours plus tard
On me remercie même pas pour la sécurisation du site, très bien je note

WP!
Quelle aventure ! Maintenant ça a l'air bien propre côté backend.
Merci Ikoula, et bravo à l'ensemble du staff.
J'ai modifié l'auteur du post ^^ ( du coup tu me dois une dédicace Hardware )
Merci Ikoula. Franchement j'avoue que cloudstack, c'est top ^^.

Et je dois avouer qu'on a bien travaillé ^^ (auto-congrat)
Super infra les mecs ! impressionnant
Bonjour,

Nous sommes ravis de vous avoir chez nous !

Merci Hardware pour ce superbe article et merci à l'équipe pour vos efforts.
Vraiment sympa ! Petite faute de frappe :
" il font donc configurer des redirections de port et modifier" => il faut donc
Quelques questions/remarques :
- quid d'un backup/failover vers un autre réseau dans le cas où le réseau ikoula tombe ?
- quel est le SLA sur le cloud ?
- quelles possibilités avez-vous pour faire tourner une version de développement en parallèle de la production avec une bascule possible en garantissant un downtime proche de 0 sur ce cloud ? (en gros quid du stack dev/staging/prod)

Merci à toute l'équipe de mondedie pour l'investissement ainsi qu'à iKoula pour avoir permis ce partenariat !
Soyuka wrote:quid d'un backup/failover vers un autre réseau dans le cas où le réseau ikoula tombe ?
Je pense qu'on serait un peu hors budget et de tout manière on a pas de contrainte de service, si le réseau de Ikoula devait tomber un jour ou l'autre, le forum sera indisponible. Par contre si ça touche qu'une zone ou un datacenter, on peut rétablir assez rapidement le service en basculant les flux réseaux sur des instances de secours présentes dans un autre datacenter. Le PRA pourrait se faire en un temps raisonnable en utilisant les modèles de nos VHD.
Soyuka wrote:quel est le SLA sur le cloud ?
Je ne le connais pas pour les offres cloud, mais on doit être à 99.9% j'imagine, je vais me renseigner.
Soyuka wrote:quelles possibilités avez-vous pour faire tourner une version de développement en parallèle de la production avec une bascule possible en garantissant un downtime proche de 0 sur ce cloud ? (en gros quid du stack dev/staging/prod)
En fait c'est assez simple à mettre en place avec notre méthode actuelle, on peut gérer ça au niveau du hook de Git. Par exemple pour push la version de production il suffirai de faire git push ikoula prod ou celle de dev git push ikoula dev, ensuite le hook détermine la branche et pull puis reload le conteneur concerné (dev/prod), chaque conteneur ayant son propre vhost nginx avec deux sous-domaines bien distincts dev.mondedie.fr / www.mondedie.fr
Bonjour,

Je me permet d'intervenir étant peu être plus à même de répondre à cette question, effectivement nous garantissons un SLA de 99.9 %

Je souhaiterai aussi rebondir sur un élément afin qu'il n'y ait pas de confusion, le snapshot permet effectivement de faire une copie des données d'une vm et d'être réutilisé de plusieurs façons mais comme le souligne Hardware il faut recourir à une solution de backup externe.
Dans la mesure où les snapshots sont stockés au même endroit que les instances, ils sont très utiles pour revenir à une version précédente de l'instance.

En cas de crash de l'hôte, au même titre que l'instance ils seraient injoignables. C'est pourquoi je recommande une solution agnostique de l'environnement d'hébergement. En passant cette remarque vaut pour d'autres environnements.

Après il faut savoir qu'un snapshot peut s'exporter depuis l'interface et que le processus est automatisable depuis l'API

Enfin je dirai sympa le rajout du DNS
Merci pour ce complément d'information, je suis plutôt intéressé par l'exportation des snapshots via l'API, je regarderai ça ce week-end
J'avais dans l'idée de produire une documentation sur notre wiki et de vous filer le lien car il faut quand savoir certaines choses comme le fait que le snapshot doit être convertit en volume avant de pouvoir le télécharger etc ...

Je vais voir si j'ai le temps de faire ça aujourd'hui par contre pour la partie API ce sera plutôt la semaine prochaine dailleurs si tu regardes ce weekend n'hésites pas à me faire des retours
Hardware wrote:
Je pense qu'on serait un peu hors budget
bonjour,

justement c'est quoi le budget pour avoir cette nouvelle infra par mois ? (si ce n'est pas indiscret)

Merci
J'ai tout lu mais j'ai pas tout compris ^^'
Merci pour ce témoignage et tout ces détails qui même sans tout comprendre aident bien à se faire une idée du pourquoi du comment 😛
Au fur et à mesure que j'aurai lu, compris et progressé via mondedie.fr je reviendrai sur ce topic qui dresse un plan précis d'une infrastructure (qu'on connait)
En fait c'est assez simple à mettre en place avec notre méthode actuelle, on peut gérer ça au niveau du hook de Git. Par exemple pour push la version de production il suffirai de faire git push ikoula prod ou celle de dev git push ikoula dev, ensuite le hook détermine la branche et pull puis reload le conteneur concerné (dev/prod), chaque conteneur ayant son propre vhost nginx avec deux sous-domaines bien distincts dev.mondedie.fr / www.mondedie.fr
Vraiment sympa ca, donc si je comprends bien 1 instance docker par branche gérés par leurs propres vhost nginx. Bien joué 🙂. Par contre j'imagine que c'est pas en place ? Peut-être pas d'utilité pour l'instant.

Ca serait sympa de publier les confs docker histoire que les plus novices puissent comprendre un mieux leur utilisation au sein de l'infra.

Effectivement, la solution de secours coûte cher et n'est pas forcément nécessaire ici, mais je suis content d'avoir soulevé la question d'un backup externe 😛.
SplinterSnake wrote: bonjour,

justement c'est quoi le budget pour avoir cette nouvelle infra par mois ? (si ce n'est pas indiscret)

Merci
Vers les 45€/mois on connait pas le chiffre exacte pour l'instant, de plus il varie en fonction de nos snapshots.
soyuka wrote: Vraiment sympa ca, donc si je comprends bien 1 instance docker par branche gérés par leurs propres vhost nginx. Bien joué 🙂. Par contre j'imagine que c'est pas en place ? Peut-être pas d'utilité pour l'instant.

Ca serait sympa de publier les confs docker histoire que les plus novices puissent comprendre un mieux leur utilisation au sein de l'infra.

Effectivement, la solution de secours coûte cher et n'est pas forcément nécessaire ici, mais je suis content d'avoir soulevé la question d'un backup externe 😛.
Les hooks sont en place que pour la production pour l'instant. Pour le moment on push comme des barbares direct en prod ^^
Par contre je crois qu'il y a qu'une seule instance docker justement hardware te dira ça mieux que moi ou xataz

Oui pour les backups y a pas encore de solution définitive en place. Hardware test quelque chose en ce moment https://github.com/hardware/mysql-glacier
ou alors on réutilise un script que j'avais fait en interne + les snapshots.
9 mois plus tard

Hello,

Petite question, quel type de VM avez vous choisis? Pico, Micro,... ?

Merci d'avance,

mondedie-web c'est une small
mondedie-mail c'est une pico
mondedie-bdd c'est une micro