Cours de Rémi JarjatCours de Rémi Jarjat
  • Liste des cours
  • Culture numérique
  • Git
    • Terminologie
    • Avant de commencer
    • Créer un dépôt (local)
    • Enregistrer des changements
    • Des branches
    • Mise en commun du travail
    • Annuler des changements
    • Réécrire l'historique
    • Des outils pour se simplifier Git
    • Exercices
    • Exemples pratiques
  • Linux
    • Installation
    • Historique
    • Rangement des fichiers
    • Les processus
    • Commandes de base
    • Commandes avancées
    • /linux/6-other-technologies.html
    • Exercices
    • Correction des exercices
  • PHP
    • Environnement de travail
    • Bases du PHP
    • Tests et boucles
    • Procédures et fonctions
    • Interagir avec l'utilisateur
    • La temporisation de sortie
    • PHP Doc et PSR
    • PHP Orienté objet
    • Héritage et objets
    • Factorisation
    • Manipuler la BdD avec PDO (PHP Data Object)
    • Architecture MVC
    • Webservices REST
    • Exercices - Bases
    • Exercices - Séparer en plusieurs fichiers
    • Exercices - POST et SESSION
    • Exercices - Panier et validation
    • Exercices - Objets
    • Exercices - BdD avec PDO
    • Projet - montage d'ordinateurs
    • Projet - Personnages de Jeux de Rôle
  • Symfony
    • Installer Symfony et son environnement de travail
    • Structure et utilisation d'un projet
    • Le routing
    • Les controllers
    • Twig
    • Les services et l'injection de dépendances
    • Doctrine et la BdD
    • Formulaires
    • Les traductions
    • Event listeners/subscribers
    • Connexion et sécurisation
    • Bundles
    • Easy Admin Bundle
    • API Platform
    • Pense-bêtes
    • Symfony au quotidien
    • Travailler avec Docker
    • Projet : annonces de SPA / éleveurs
    • Exercices
  • Javascript
    • Les bases du langage
    • Manipulation logique
    • Le DOM
    • JQuery
    • Ajax
    • Programmation orientée objet
    • Webpack
    • Outils utiles
    • Révisions
  • Serveur Lamp
  • Déploiement
    • Des outils et manières de faire
    • Déploiement par FTP
    • Wordpress
    • Intégrer Git dans le processus
    • GitHub Pages pour déployer facilement
    • Symfony et Angular
  • Docker
  • Intégration continue
  • Sécurité informatique

Des outils et manières de faire

  • Un serveur, comment ça marche ?
  • DevOps
  • Environnements
  • Bien choisir son hébergement
    • Quels critères ?
    • Exemples d'hébergeurs
  • Outils de transfert de fichiers
    • FTP
    • SSH
  • Quelques avis personnels

Un serveur, comment ça marche ?

Les étapes représentées dans le schéma ci-dessus :

  1. Un utilisateur demande le site https://www.drakona.fr.
  2. La requête est transmise à un serveur DNS, qui va faire le lien entre le nom de domaine et une adresse IP.
  3. La requête est transmise à cette adresse IP, qui correspond à un serveur, sur lequel est installé un serveur Web (Nginx / Apache / Caddy / etc).
  4. Le serveur Web fait le lien entre l'url demandée et un ensemble de fichiers et ces fichiers sont interprétés / exécutés.
  5. Le serveur Web renvoie la réponse à l'utilisateur.

On pourrait ajouter d'autres étapes (ce qu'il se passe au sein du serveur), mais c'est une autre histoire 😉.

DevOps

La mise en place d'un processus de déploiement (un script pour l'automatiser) relève souvent du travail du DevOps.

DevOps est un ensemble de pratiques et d'outils, ainsi qu'une philosophie culturelle. Son but est d'automatiser et d'intégrer les processus entre les équipes de développement et informatiques. DevOps met l'accent sur l'autonomisation des équipes, la communication et la collaboration transverses ainsi que l'automatisation technologique.

-- Atlassian

On parle de DevOps pour désigner un ensemble de méthodes de travail, permettant de simplifier la communication et le travail des développeurs et des équipes opérationnelles (d'où DevOps). Le but est de "graisser les rouages" et de faciliter le travail des équipes, en général en automatisant certaines tâches (CI / CD, pipelines, Actions, etc.).

Schéma représentant le cycle de vie DevOps

Environnements

Souvent, nos réalisations vont devoir être vérifiés par plusieurs personnes, pour vérifier la conformité avec la demande initiale :

  • soit même : environnement de travail local, pour développer et voir le résultat de ce que l'on produit + tests unitaires et fonctionnels automatiques
  • nos pairs / notre équipe : SIT ou Test d'intégration
  • Vérification par le client : UAT ou Test de validation

Ensuite vient la mise en production, c'est-à-dire mettre la dernière version à disposition des clients finaux de l'application.

Toutes ces étapes nécessitent un déploiement sur un environnement différent, d'où la nécessité d'avoir un processus constant, incluant simplement les variations liées aux environnements.

De la même manière, ces différents environnements vont présenter exactement différents états (tickets, branches, versions, etc.) en même temps. Ce qui implique une méthodologie de travail plus générale, pour s'y retrouver.

Bien choisir son hébergement

Quels critères ?

  • Espace disponible
  • Hébergement spécialisé (Wordpress)
  • Prise en compte des langages utilisés (Php / NodeJS)
  • Base de données
  • Accès en SSH ou non (automatisation / commandes)
  • Couts ( ⚠️ parfois en fonction de la charge)

Exemples d'hébergeurs

Des hébergeurs que nous avons utilisés chez Drakona :

  • GitHub pages
  • OVH
  • O2Switch
  • Infomaniak
  • Ionos

D'autres, renommés :

  • Gandi
  • AWS (Amazon)
  • Google Cloud
  • Hostinger
  • Planet Hoster

D'autres encore, plus spécialisés :

  • WordPress.com
  • Platform.sh ou UpSun

Vous trouverez même des listes pour classer les hébergeurs, mais j'ai beaucoup de mal à y faire confiance, principalement parce que les prix annoncés dans ces listes correspondent rarement à la réalité et que ce sont des tas de liens sponsorisés.

Outils de transfert de fichiers

FTP

Un moyen simple, basique, est de déplacer les fichiers sur le serveur, via une interface graphique, telle que FileZilla, ou en ligne de commande. Il sert également à récupérer des fichiers sur le même serveur, ce qui peut permettre de partager le travail entre plusieurs ordinateurs en utilisant le serveur comme "base".

Pour des sites composés uniquement de fichiers HTML, CSS et JavaScript, c'est une méthode simple et efficace !

Le FTP est un protocole de transfert de fichiers, permettant de se connecter à un serveur pour mettre en ligne des fichiers ou en récupérer depuis un serveur.

Pour déployer un site en FTP, nous avons besoin :

  • de l'adresse du site (IP ou nom de domaine)
  • d'un port à utiliser
  • d'un identifiant et d'un mot de passe ou d'une clé SSH valide (ajoutée au serveur)
  • de FileZilla ou d'un outil de FTP équivalent.

Quelques exemples de déploiement par FTP sont disponibles dans la page suivante.

Avantages de FTP

  • Très rapide à prendre en main
  • Les hébergements les moins chers le permettent toujours
  • Rien de plus efficace pour des sites simples (HTML, CSS, JS et même PHP)

Inconvénients de FTP

  • Pose des problèmes pour la gestion de version (et le travail collaboratif)
  • Plus difficilement automatisable (mais loin d'être infaisable, des outils existent)
  • Pas ou peu utilisable avec des frameworks comme Symfony ou Angular (besoin de lancer des commandes)
  • La complexité du déploiement augmente avec la quantité de dossiers / fichiers

SSH

Secure Shell (SSH) est un protocole de communication sécurisé. Le protocole de connexion impose un échange de clés de chiffrement en début de connexion. Par la suite, tous les segments TCP sont authentifiés et chiffrés.

-- Wikipedia

On parle souvent de connexion SSH pour l'établissement d'une connexion avec un serveur distant (en général, une machine Linux). Cette connexion permet d'interagir avec cette machine via son terminal.

Pour établir la connexion, des échanges de clés SSH et/ou de mots de passe ont lieu pour valider l'identité de la personne qui se connecte et du serveur.

Exemple de clé publique qui est envoyée :

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDIZSiXTcNWfFcq1vTzhvBylpaVOjNStXHb0lNSZ2zoXrDDHvHpMUuulsLJl4gpYJzqC2eCRigl9tGDdz25/RRZtzU5TJfw90bVl5cB5SxImNWZdE7g78PhoO+niEj1vcgkmh27805BvdBeSE1yVVdIt0ZexwwiKqdZmLNs66DRVC/YE9LP0CBaWmNANx1FZAoAvU1U1AJhPL9sax5xPg4hHNdAjGXusTQRyew67GcLL/ACqyX4Q81tm9QphJipfD4n7Ska318dj8ARhRTge/M4n2eIcI1RRkkDbuklMCM3mZ10oGD+Pc8gRl+RLafHL27JEWK4Ty4T7ArE0mOgsFoxZWQCcWrp08eMhviMKzNQQnuHawjpKhDGA8HbC/GfSoldOprORmp6lqbLJ32qqU0kuVhmjLdb0qH3XXfK97yHqm8G92gA1f6ACE4rsbJ5XtMbZO/7Yr6oJykJ4LYuk7NqRmhF4bRVKwL/MbOS8egIEq8xBcgGC+SSD8m54u8vWAk= remi@XXXX

Avantages

  • Possibilité de lancer des commandes (donc plus de possibilités)
  • Très automatisable
  • En général, plus sécurisé (gestion des accès par clé SSH)

Inconvénients

  • Tous les hébergements ne le permettent pas
  • Gestion des accès plus ou moins aisée

SCP / RSync / SFTP

Ces outils permettant de communiquer avec un serveur via SSH et de transmettre des fichiers.

SCP permet de copier des fichiers / dossiers (dans un sens ou dans l'autre), alors que RSync permet de Synchroniser des dossiers (transferts dans les deux sens simultanément).

SFTP, quant à lui, est identique à FTP, mais utiliser un tunnel sécurisé (d'où le S). C'est en général le protocole à utiliser quand on utilise FTP (avec FileZilla, par exemple).

Quelques avis personnels

Il est important de choisir un hébergement adapté à vos besoins, non seulement au moment où vous souscrivez le contrat, mais aussi pour l'avenir et les objectifs du site que vous voulez déployer.

Certaines offres de cloud peuvent être tentantes pour gérer le futur, et il faut simplement toujours avoir leurs contraintes en tête (coûts dépendant du traffic, de l'espace utilisé, etc.).

Pensez également à la charge de travail que représente le fait d'avoir un hébergement (la même chose que pour votre application). Que faut-il faire pour s'assurer qu'il reste à jour ? Quel temps cela occupe-t-il par mois ? Pouvez-vous vous le permettre ? Si ça n'est pas le cas, il faut prévoir soit un autre hébergement, soit de déléguer (faisable quand on est une entreprise 😉 ).

Mettre en ligne un site en utilisant le protocole FTP ou l'outil SCP ne me semble pas viable sur le long terme. Passer un peu de temps à prévoir l'automatisation peut vous faire gagner un temps précieux (et c'est parfois simple à mettre en place) !

C'est pour ça qu'on utilise des outils comme :

  • Deployer pour nos sites (surtout PHP/Symfony)
  • GitHub Pages pour les documentations
  • des outils de CI/CD (Github Actions par exemple) pour vérifier notre code et le mettre en ligne.

Nous avons utilisé pas mal d'autres outils par le passé et avons beaucoup auto-hébergé (avec des serveurs dédiés ou VPS) des sites comme celui que vous consultez actuellement, mais le temps passé en vaut-il le coût ?

Dernières mise à jour :
Next
Déploiement par FTP