Voici un exemple de déploiement automatisé Web

Plan

Source : https://blog.octo.com/bd-linfrastructure-as-code-iac/

https://blog.octo.com/wp-content/uploads/2019/07/infra_as_code_v3-1-724×1024.png

Refaire le plan ci-dessous

Étape 1 : Packer : Création de l’ISO

Permet de préparer des templates d’images LXC, afin de déployer les conteneurs plus rapidement par la suite (on imagine devoir déployer 10, 20, 100 conteneurs)

Étape 2 : Terraform : Déploiement de l’ISO Packer

Terraform nous permet de déployer notre infrastructure : en partant des templates fabriqués avec Packer, Terraform créé nos conteneurs

Étape 3 : Configurer les conteneurs avec Ansible

Ansible enfin utilise les conteneurs fraichement fabriqués pour les configurer avec nos services. Ici, un wordpress, et un nextcloud.

Deploy

Les tests d’intégration continue / déploiement continu

Jenkins : Plus utilisés

Conteneurs

  • Docker est
  • RKT

https://github.com/geerlingguy/packer-debian-10

HAproxy : load balancing

Automatisation et gestion de configuration : Ansible : gestion de la configuration des serveurs esclaves ;

Gestion de projet

Jira est un outil de gestion de projet Agile qui permet de planifier, suivre et gérer les projets de développement logiciel. Avec Jira, chaque membre de l’équipe de développement peut suivre l’avancée des projets et définir les priorités du sprint.

D’un autre côté, Trello se démarque par son intuitivité et sa simplicité pour gérer les différentes tâches du projet.

Gestion des secrets

Avec le besoin d’avoir une sécurisation toujours plus performante, de nouveaux outils de gestion des secrets apparaissent comme Vault. Vault permet une organisation des secrets statique et dynamique.

Secrets, le service de gestion des secrets de Kubernetes est une alternative à Vault.

Kubernetes

Packer : Voir ici : https://wooster.checkmy.ws/2014/06/cms-dev-environnement/

Soit :

  • Packer
  • Vagrant cloud

L’exécution d’un template Packer fait appel à 3 composants :

  • des composants “Builders” permettant de piloter la machine virtuelle qui va être créée en fonction du fournisseur
  • des composants “Provisioners” servant à préparer la configuration de la machine
  • des composants optionnels “Post-Processor” permettant de définir des formats de sortie.

Exemple :

{
  "variables": {
  },
  "builders": [{
    "type": "virtualbox-iso",
    "name": "trusty64",
    "guest_os_type": "Ubuntu_64",
    "iso_url": "http://releases.ubuntu.com/trusty/ubuntu-14.04.3-server-amd64.iso",
    "iso_checksum": "01545fa976c8367b4f0d59169ac4866c",
    "iso_checksum_type": "md5",
    "guest_os_type": "Ubuntu_64",
    "http_directory": "http",
    "disk_size": "20000",
    "hard_drive_interface": "sata",
    "ssh_username": "vagrant",
    "ssh_password": "vagrant",
    "ssh_wait_timeout": "1200s",
    "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now",
    "boot_command": [
        "<esc><esc><enter><wait>",
        "/install/vmlinuz noapic ",
        "preseed/url=http://:/preseed.cfg ",
        "debian-installer=en_US auto locale=en_US kbd-chooser/method=USA ",
        "hostname= ",
        "fb=false debconf/frontend=noninteractive ",
        "keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA ",
        "keyboard-configuration/variant=USA console-setup/ask_detect=false ",
        "netcfg/choose_interface=auto ",
        "initrd=/install/initrd.gz -- <enter>"
    ],
    "vboxmanage": [
        ["modifyvm", "", "--memory", "512"],
        ["modifyvm", "", "--cpus", "1"],
        ["modifyvm", "", "--natpf1", "ssh,tcp,127.0.0.1,2222,,22"],
        ["modifyvm", "", "--macaddress2", "auto"],
        ["modifyvm", "", "--nic2", "hostonly"],
        ["modifyvm", "", "--hostonlyadapter2", "vboxnet2"]

    ]
  }],
    "provisioners": [{
    "type": "shell",
    "execute_command": "echo 'vagrant' |  sudo -E -S sh ''",
    "script": "./post-install.sh"
  }],
  "post-processors": [{
    "type": "vagrant",
    "compression_level": "4",
    "keep_input_artifact": true
  }]
}

Logiciel

Sonarqube : Lien

Jenkins : Lien

Source : https://fredix.xyz/2019/05/build-push-deploy/

  1. Ecrire un Dockerfile
  2. Construire une image
  3. La publier sur un registre (le plus souvent le hub docker)
  4. Ecrire un docker-compose pour l’instancier sur son serveur.

L’étape 1 peut être longue selon la complexité du projet, mais comme ce n’est pas le sujet ici j’ai pris un projet basique.
L’étape 2 peut être faite sur un PC/VM Linux sauf si l’architure cible n’est pas du x86. Dans ce cas il faudra construire l’image sur un raspberry PI (si la cible est de l’ARMv7) ou un serveur ARM64v8 chez scaleway.
L’étape 3 devra être faite depuis la machine où l’on a construit l’image.
L’étape 4 sur son serveur Docker ou un des managers du Docker swarm.

Nexus : Lien

Tuto Jenkins : https://code.tutsplus.com/tutorials/introduction-to-jenkins-an-open-source-continuous-integration-server–cms-23879

Solution basique ( Sans intégration continue )

Solution évolué ( Avec intégration continue )

J