Carnet Tech en Vrac

Un ensemble de petites rubriques autonomes, chacune traitant de sujets variés et d’astuces utiles. Ces éléments, bien que trop succincts pour justifier un article complet en soi, offrent une série de conseils et d’informations intéressants regroupés. Cet article sera donc mis à jour régulièrement !

INDEX

AUTRE
DOCKER

DATA

OLAP (Online Analytical Processing) et OLTP (Online Transaction Processing) sont deux approches différentes pour gérer et utiliser les données en fonction des besoins :

  • OLTP est utilisé pour les opérations quotidiennes rapides et précises. Par exemple un site marchand ou une messagerie instantanée. Il faut être capable de gérer de nombreuses transactions simples rapidement. Il y a donc un besoin élevé de performance et de fiabilité. (Exemples de Technos : MySQL, PostgreSQL, Oracle, SQL Server).
  • OLAP est utilisé pour l’analyse et la prise de décision basée sur les données. Typiquement du Dashboarding, de la Dataviz / Data Analyse. Il a donc un besoin de bases de données optimisées pour des requêtes complexes sur de grandes quantités de données. C’est ici qu’on retrouvera essentiellement le modèle de raffinerie de données. (Exemples de technos : Redshift, BigQuery, Snowflake.)
 

ETL (Extract, Transform, Load) et ELT (Extract, Load, Transform) sont deux processus utilisés pour intégrer et préparer des données provenant de différentes sources pour l’analyse ou le stockage dans un entrepôt de données (data warehouse).

Dans un ETL les données sont transformées en dehors du système de destination. Cela peut inclure des opérations comme le nettoyage des données, l’agrégation, la conversion des formats, et l’application de règles de gestion. Ce n’est qu’ une fois transformées, les données sont chargées dans le système de destination (datawarehouse par exemple).
Exemples : Apache Nifi, Talend, Power Query

En revanche, dans un ELT, les données brutes sont directement chargées dans le système de destination. Les transformations sont effectuées après le chargement des données dans le système de destination. Les données sont ensuite transformées en utilisant la puissance de calcul de l’entrepôt de données ou du data lake.
Exemples : Google BigQuery, Amazon Redshift, Snowflake, Azure Synapse Analytics, et Databricks

Donc en gros, pour du big data on préférera l’ELT à l’ETL car il exploite la puissance de calcul des entrepôts de données modernes et des data lakes.

Pour aller plus loin : Article de IBM

CYBERSECURITE

EICAR

EICAR (European Institute for Computer Antivirus Research) est une organisation qui a, entre autres, créé un fichier de test standardisé pour vérifier le bon fonctionnement des logiciels antivirus. C’est est un fichier texte inoffensif qui contient une chaîne de caractères spécifique. Lorsque ce fichier est scanné par un antivirus, il doit être détecté comme un virus, même si ce n’en est pas un. L’objectif est de permettre aux utilisateurs de tester leurs logiciels antivirus pour s’assurer qu’ils fonctionnent correctement. 

Voici ce qu’il contient :

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Pour l’utiliser il faut enregistrer cette chaîne de caractères dans un fichier texte sous le nom eicar.com ou tout autre nom de fichier avec l’extension .com, .exe, .bat, .ps1 ou autres…

Puis lancer le scan avec l’antivirus.

Sitemap.xml et Robot.txt

Un fichier sitemap.xml est un fichier au format XML qui contient une liste de toutes les pages d’un site web, offrant ainsi aux moteurs de recherche un moyen de découvrir facilement et efficacement les différentes pages à indexer du site. Il permet de guider les moteurs de recherche, comme Google, à explorer (ou « crawler ») un site pour indexer son contenu.
Par exemple vous pouvez voir mon sitemap ici.
 
En revanche, si le site contient des URL sensibles (par exemple, des pages d’administration ou des pages privées réservées aux membres), il faut éviter de les inclure dans le sitemap. C’est une bonne pratique. Il faut alors les exclure explicitement lors de la création ou de la configuration de ton sitemap.
Le fichier virtuelrobots.txt empêche l’exploration des pages par les moteurs de recherche, mais n’empêche pas qu’elles figurent dans le sitemap.xml.
 
Avec WordPress ce fichier est généré par défaut.
Voici le mien.
 
Une config possible de ce robots.txt est la suivante :
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-login.php
Disallow: /wp-content/uploads/private/
Allow: /wp-content/uploads/public/
Disallow: /private-page/
Sitemap: https://www.exemple.com/sitemap.xml

User-agent: * : Cela signifie que les règles suivantes s’appliquent à tous les moteurs de recherche. Pour définir des règles spécifiques pour un moteur de recherche particulier (par exemple, Google),  remplacer * par le nom du robot, comme Googlebot.

Disallow: /wp-admin/ : Cela empêche les moteurs de recherche d’explorer toutes les pages du répertoire /wp-admin/, qui est le répertoire d’administration de WordPress.

[…]

Disallow: /secret-folder/ : Empêche les moteurs de recherche d’explorer le dossier /secret-folder/ et son contenu.

ATTENTION RAPPEL : La directive Disallow dans robots.txt indique aux moteurs de recherche de ne pas explorer ou crawler les pages ou répertoires spécifiés, mais elle n’empêche pas ces pages de figurer dans le sitemap XML

Pour en savoir plus : le site de la marmite – robots.txt et le site de la marmite – sitemap.xml !

DOCKER

.WSLCONFIG

Le processus vmmem est utilisé par Docker Desktop sur Windows lorsqu’il fonctionne avec WSL 2 (Windows Subsystem for Linux). WSL 2 utilise une machine virtuelle légère pour exécuter les distributions Linux, et cette machine virtuelle consomme de la mémoire qui est représentée par le processus vmmem.
 
Ctrl  + Shift + Esc pour voir la RAM utilisée ou dans un terminal powershell :
Get-Process -Name vmmem | Format-Table Id, Name, @{Name="WorkingSet(MB)";Expression={$_.WorkingSet64/1MB -as [int]}} -AutoSize
Pour limiter la consommation de RAM par le processus vmmem (Virtual Machine Memory) dans Windows, il faut configurer les paramètres de WSL 2. Pour cela :
  • Se placer dans C:\Users\VotreUserName\
  • créer un fichier nommer .wslconfig contenant ceci :
[wsl2]
memory=4GB

On peut spécifier cette valeur en Go (GB), Mo (MB), ou Ko (KB) selon les besoins.

Puis on redémarre wsl avec :

# extinction
wsl --shutdown

# re-démarrage
wsl -d DistributionToReboot
Ou en cliquant sur Docker Desktop dans notre exemple. Ainsi on a limité la consommation de mémoire du processus vmmem a 4GB de RAM.

OVERLAY2

Le dossier overlay2 se trouve généralement dans le répertoire /var/lib/docker/ (le répertoire de données par défaut de Docker). Il contient plusieurs éléments liés à la gestion des conteneurs et des images Docker.

Ce dossier peut grandir considérablement si tu utilises beaucoup d’images et de conteneurs Docker. Chaque fois qu’un nouveau conteneur est lancé ou qu’une image est téléchargée, de nouvelles couches peuvent être créées et stockées dans ce dossier. Si tu as beaucoup de conteneurs qui ne sont pas supprimés, ou si des images sont fréquemment téléchargées, le dossier peut rapidement atteindre une taille importante.

Pour le nettoyer :

#Supprimer les conteneurs inutilisés :

docker container prune

#Supprimer les images non utilisées :

docker image prune

#Pour supprimer les volumes non utilisés :

docker volume prune

#Supprimer tous les conteneurs, images, volumes et réseaux inutilisés :

docker system prune

#Nettoyer les images et les conteneurs non référencés :

docker image prune -a
docker container prune -a

Utiliser du -sch pour voir la différence de poids après nettoyage.

RESEAU

0.0.0.0 vs 127.0.0.1 vs Localhost

Tout d’abord 127.0.0.1 et localhost c’est la même chose.
  • 127.0.0.1 : C’est une adresse IP spéciale qui fait référence à l’ordinateur lui-même. Les données restent dans le système. C’est une adresse de loopback.
  • localhost : C’est un nom de domaine qui est presque toujours associé à l’adresse 127.0.0.1. Voir le fichier host : C:\Windows\System32\Drivers\etc\hosts ou /etc/hosts (linux)
En revanche 0.0.0.0 signifie « toutes les adresses IP » ou « n’importe quelle adresse IP ». Elle est souvent utilisée pour dire qu’un serveur doit écouter sur toutes les interfaces réseau disponibles. C’est à utiliser dans des config ! Exemples :
  • Lorsqu’un serveur (comme un serveur web ou une application) est configuré pour écouter sur l’adresse 0.0.0.0, cela signifie qu’il accepte les connexions sur toutes les interfaces réseau de la machine. Autrement dit, il peut recevoir des requêtes venant de n’importe quelle adresse IP assignée à la machine, y compris localhost, mais aussi d’autres adresses IP locales ou externes. Si notre machine a pour IP locale 192.168.1.10 on pourra ccéder au serveur web via localhost, 127.0.0.1, et 192.168.1.10.

DEV

load_env()

from dotenv import load_dotenv
load_dotenv()

# en amont pip install python-dotenv
# Accéder aux variables d'environnement
api_key = os.getenv('API_KEY')
db_password = os.getenv('DB_PASSWORD')
debug_mode = os.getenv('DEBUG')
Cela permet de charger les variables d’environnement depuis un fichier .env dans un environnement Python. Cela permet de séparer la configuration de l’application (comme les clés API, les mots de passe et autres informations sensibles) du code source de l’application. 
Ici on a placé le fichier .env à la racine du projet tel que :
mon_projet/
│
├── .env
├── main.py
└── autres_fichiers.py
et .env contenant :
API_KEY=12345abcdef
DB_PASSWORD=supersecretpassword
DEBUG=True
Remarque : Par défaut, load_dotenv() cherche le fichier .env dans le répertoire où le script Python est exécuté. Si le fichier .env est placé dans un autre répertoire, on peut spécifier son chemin relatif ou absolu comme argument pour load_dotenv().
load_dotenv(dotenv_path='config/.env')
ATTENTION : Il est donc crucial de le protéger lorsque ton application est déployée sur un serveur, afin de garantir la sécurité de ces informations !
  • Ajouter le fichier.env à .gitignore pour éviter qu’il ne soit inclus dans les dépôts Git.
  • Limiter l’accès au fichier.env en modifiant ses permissions, avec un chmod 600 .env par exemple.
  • S’assurer que le répertoire racine ou le fichier .env n’est pas accessible par le serveur web en configurant le serveur (Apache, Nginx, etc.) pour bloquer l’accès direct aux fichiers sensibles.
  • Une bonne pratique consiste à stocker des variables d’environnement directement au niveau du système d’exploitation par exemple dans le fichier /etc/environment ou dans un script bash de démarrage.
    export DB_PASSWORD="supersecretpassword"
  • Utiliser un gestionnaire de secrets pour stocker et gérer les informations sensibles comme Vault de HashiCorp, AWS Secrets Manager, ou Azure Key Vault.
  • Et autres solution de cryptage, WAF etc

Remarque : Docker Compose prend automatiquement en charge la lecture du fichier .env et injecte ces variables dans les conteneurs lorsqu’ils sont lancés. Plus besoin de load_env().

version: '3'

services:
  db:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
      - MYSQL_DATABASE=mydatabase
    ports:
      - "3306:3306"
    networks:
      - mynetwork

networks:
  mynetwork:
    driver: bridge
avec un .env tel que :
DB_USER=myuser
DB_PASSWORD=mysecretpassword
DB_HOST=localhost

AUTRES

DU -SCH vs LS - LTR

Les commandes du -sch et ls -ltr sont toutes deux utilisées pour obtenir des informations sur les fichiers et répertoires dans un système Unix ou Linux, mais elles servent des objectifs différents et présentent des informations de manière distincte.
du -sch /chemin/vers/répertoire

# du : Signifie "disk usage" (utilisation du disque). Cette commande affiche l'espace disque utilisé par les fichiers et répertoires.
# -s : Résumé. Affiche uniquement le total pour chaque argument.
# -c : Total. Affiche un total cumulé pour tous les arguments fournis.
# -h : Human-readable. Affiche les tailles dans un format lisible par l'homme (Ko, Mo, Go).

# remarque : pour avoir que les fichier les plus 
# volumineux (gigaoctets)
du -sch * | grep G
Cette commande montre la taille de chaque sous-répertoire et un total général à la fin.
ls -ltr /chemin/vers/répertoire

# ls : Liste les fichiers et répertoires.
# -l : Format long. Affiche des informations détaillées sur les fichiers (permissions, nombre de liens, propriétaire, groupe, taille, date de modification, nom).
# -t : Trie par date de modification, du plus récent au plus ancien.
# -r : Inverse l'ordre de tri. Avec -t, cela affiche du plus ancien au plus récent.
Cette commande affiche les fichiers et répertoires avec des détails comme les permissions, la taille, la date de modification, et le nom, triés par date de modification.
 
Mais pourquoi a-t-on des différences de résultats sur la taille des dossiers avec ces deux commandes ?
 
ls -ltr n’indique que le poids du dossier en lui-même, sans tenir compte de son contenu.
 
En revanche, du -sch renvoie une taille totale qui correspond à la taille cumulée de tous les fichiers et sous-dossiers contenus dans le dossier, calculée récursivement.

Montée de versions de serveurs Linux

Voir sa version
Ici nous prendrons l’exemple d’une distribution Debian.  Pour vérifier la version de Debian installée, les commandes suivantes peuvent être utilisées :
cat /etc/os-release

# ou

lsb_release -a
Pour vérifier si la version actuelle est une version à long terme (LTS) ou pour connaître les nouvelles versions disponibles, il est possible de consulter le site de Debian
cat /etc/apt/sources.list

# Peut aussi fournir des informations intéressantes
Voir aussi pour Ubuntu.
Montée de version mineure
Pour faire une montée de version mineure, c’est-à-dire installer les dernières mises à jour de sécurité et correctifs sans changer la version principale de Debian
# Pour des mises à jour de sécurité régulières

sudo apt update
sudo apt upgrade

# Pour une mise à jour complète du système sans installer de nouvelles versions majeures de paquets :

sudo apt full-upgrade
Montée de version majeure
Pour passer à une version majeure (par exemple, de Debian 10 à Debian 11), ce tuto est parfait.
 
Attention : Les montées de version majeures peuvent introduire des changements dans les bibliothèques et les configurations système, pouvant affecter les applications installées. Il est recommandé de check les compatibilités et de tester les montées de version dans un environnement de développement ou de pré-production avant de les appliquer en production.
 
Remarques :
  • une montée de version sur Red Hat (ou CentOS) peut être réalisée différemment, avec des commandes spécifiques, comme dnf ou yum pour les versions plus anciennes. De plus RHEL (Red Hat Entrprise Linux) est une distro payante donc la documentation n’est pas aussi facilement trouvable.
  • Dans le cadre d’Ubuntu, une convention a été mise en place pour la numérotation des versions de la distribution. Les numéros de version d’Ubuntu sont composés de deux chiffres représentant respectivement le mois et l’année de la sortie. Par exemple, pour Ubuntu 20.04, le 20 représente l’année (2020) et le 04 représente le mois (avril). Seules les versions paires sont LTS.

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *