Jaskier

Présentation Link to heading

Du DevOps, ca parait peut-être pas grand chose si l’on connait, mais, la découverte complète du domaine ne fut pas une balade tranquille.

Le sujet original est ici, il s’agit “seulement” de créer une instance custom sur l’instance openstack dédiée, puis d’y déployer un nextcloud, wordpress, ainsi qu’un service fait main, en go, le tout automatiquement.

Je vais essayer, dans ce qui suit, de présenter ce qui a été produit (sans ordre, aucun).

Openstack / DigitalOcean Link to heading

Le but içi n’était bien-sur pas de monter un openstack, mais d’apprendre à utiliser celui qui nous était donné. L’instance donné possédant déjà la configuration globale (mise à disposition d’image, etc), nous n’avions “qu’a” l’utiliser.

Suite à la fermeture de l’Openstack avant la date de rendu (merci l’université, de ne pas payer l’infra), j’ai décidé de remplacer Openstack par le provider DigitalOcean, qui propose aussi une API similaire à OpenStack (et des crédits gratuits 🤑), et m’a donc permis de tester mon code.

Après une courte prise en main de l’interface graphique, il était tempte d’apprendre à utiliser l’API avec OpenTofu

OpenTofu / Terraform Link to heading

Après l’Infrastructure As Click, c’est l’heure de l’Infrastructure As Code avec OpenTofu.

OpenTofu, c’est : un Fork de Terraform, Terraform c’est : INCROYABLE.

“Incroyable, c’est à dire ?”

Terraform permet de créer une infrastrcture (une ou plusieurs VM(s)), à partir de quelques courts fichiers de configurations, en utilisant l’API de tout plein de providers différents.

Il suffit, pour cela de déclarer des ressources.

resource "digitalocean_droplet" "jaskier" {
    image = "debian-12-x64"
    name = "jaskier"
    region = "fra1"
    size = "s-2vcpu-2gb"
    ssh_keys = [
      data.digitalocean_ssh_key.devops.id,
    ]
    ipv6  = true
    user_data=file("cloud_init")

  connection {
    host = self.ipv4_address
    user = "root"
    type = "ssh"
    private_key = file(var.pvt_key)
    timeout = "2m"
  }
}

Par exemple, l’extrait ci-dessus crée une ressource de type digitalocean_droplet, avec le nom jaskier. On lui donne tout plein d’attributs (read the doc).

Dans le projet, on a aussi crée un firewall, pour permettre l’ouverture de ports, ainsi que les enregistrements DNS (OVH puis CloudFlare) , pour annoncer l’IP de la machine récemment crée.

TODO ? Link to heading

Pour cette partie, une source d’amélioration serait l’automatisation des annonces DNS pour tous les sous-domaines, ainsi que pour IPV4/IPV6

Docker Link to heading

Dans ce projet, j’ai utilisé Docker pour deux chose distinct :

  • Build le service en Go (un simple serveur en GO qui répond sur un port donné, mais faut imaginer 💭), avec un simple Dockerfile.
  • Un Docker Compose, qui déploie :
    • Un nextcloud, ainsi que son instance MariaDB
    • Un Wordpress, ainsi que son instance MariaDB
    • Un prometheus-node-exporter, prometheus, ainsi que grafana, pour monitorer notre belle machine toute neuve.
    • Et enfin, le service le plus compliqué à configurer de cette liste, j’ai nommé traefik. Même s’il permet plein de fonctionnalité incroyable, ici, je l’ai seulement utilisé comme reverse-proxy, pour mettre chaque service derrière sont nom de domaine, et en HTTPS, bien sur.

Et tout ca, configuré dans le Docker-compose, mais aussi dans plusieurs autres fichiers externes, ainsi qu’avec la gestion des secrets.

TODO ? Link to heading

  • Si possible, j’aimerai bien que la configurations soit mieux géré et notamment, si possible, tout mettre dans des fichiers externes, pour séparer la définition des services et leur configuration. (Cela permettrait aussi d’aléger le playbook ansible)

La gestion des secrets (Vault, quoi) Link to heading

Ansible, Truc de dingue Link to heading

TODO Link to heading

  • Apprendre à utiliser une organisation claire des taches et des roles, pour pouvoir éclater le déploiement sans perdre en cohérence.
  • Mettre le

Gitlab-CI, ou la cause d’une petite crise de nerf Link to heading

TODO : Et après ? Link to heading

  • Faire de la prévision : être proactif sur le monitoring, pour essayer de pouvoir détecter les pbs avant qu’ils n’arrivent

Illustration designed by Freepik