CérénIT

Le blog tech de Nicolas Steinmetz (Time Series, IoT, Web, Ops, Data)

Web, Ops, IoT et Time Series - Juin 2024

caddy reverse-proxy api https fastapi parquet postgres htmx python ruff queue lakehouse repository pattern warp10

Cette édition et les précédentes sont également disponibles sur substack Web, Ops, IoT & Time Series pour ceux qui préfèrent les emails ou la consommation via l’app Substack

API

Data

IoT

Python

  • SqlAlchemy 1.4 async ORM with FastAPI : en 2022, nous avions utilisé cet article comme base pour les projets FastAPI. Il couvrait de bout en bout ce que l’on attendait : SQLAlechmy, Alembic (migrations), Async et Tests. Le petit plus est sur le pattern du Repository, fort utile pour avoir une abstraction au dessus de la base de données.
  • Fast API — Repository Pattern and Service Layer : une version plus récente, rajoutant le concept de Service en plus de celui du Repository.
  • FastCRUD : Un meta-package qui vous embarque tout pour générer dynamiquement vos endpoints d’API sur la base de vos modèles de données.
  • FastHX, fastapi-htmx & Using HTMX with FastAPI : pour ceux qui veulent faire du FastAPI et du HTMX
  • FastUI : un projet de l’équipe de Pydantic pour générer des interfaces web à partir de votre code Python.
  • Summary of Major Changes Between Python Versions : Liste des principales évolutions et principaux apports d’une version majeure de Pytohn à une autre.
  • Adopt-Ruff : un outil pour trouver les règles Ruff que votre projet ne respecte pas encore en vue de pouvoir les ajouer au fur et à mesure.
  • Introduction to Polars : tout est dans le titre, une introduction à Polars.

Ops

  • Caddy 2.8.x (dernière version: 2.8.4 : quelques fonctionnalités supplémentaires au niveau de HTTP/3 ou des certificats, mais surtout un gros travail de nettoyage et de rationnalisation de code (dépendances dépréciées / non maintenues, etc).
  • Le projet Caddy-Docker-Proxy passe en version version 2.9.x en intégrant Caddy 2.8.

Time Series

Web

Web, Ops, IoT et Time Series - Janvier 2024

reverse-proxy caddy traefik docker cron lora lorawan duckdb mysql postgres sqlite

Après presque 2 ans de silence et le remplacement de Hugo et Bootstrap par Zola et Tailwind/daisyUI l’été dernier pour générer le site, je vous souhaite une bonne année à tous et la résolution de publier plus régulièrement mes trouvailles…

Data

TL;DR: DuckDB can attach MySQL, Postgres, and SQLite databases in addition to databases stored in its own format. This allows data to be read into DuckDB and moved between these systems in a convenient manner.

IoT

Ops

  • DKron via Dkron pilote vos crontab : un gestionnaire de cron distribué, avec une jolie interface et uen API - que demander de plus ? Sur un modèle agent/serveur, le serveur dRkon distribue les tâches aux agents dKron concernés. les agents dKron étant déployés sur les serveurs sur lesquels les jobs doivent s’exécuter.

Reverse Proxy

  • Caddy : si vous avez besoin d’un reverse-proxy avec gestion automatique des certificats et redirection HTTP > HTTPS et plein d’autres choses encore mais sans nécessité d’intégration avec Docker comme Traefik, alors jetez un coup d’oeil à Caddy. Il permet également d’avoir un certificat sur localhost. Comme Traefik, il est écrit en Go.

J’avoue que la concision de Caddy vs Traefik et le provider file est bien appréciable:

# Caddyfile
xxx.cerenit.fr {
	reverse_proxy 127.0.0.1:3000
}
# Traefik
http:
  middlewares:
    redirectToHttps:
      redirectScheme:
        permanent: true
        scheme: https
  routers:
    grafana:
      entryPoints:
        - websecure
        - web
      middlewares:
        - redirectToHttps
      rule: Host(`xxx.cerenit.fr`)
      service: grafana@file
      tls:
        certResolver: le
  services:
    grafana:
      loadBalancer:
        servers:
        - url: http://127.0.0.1:3000/

Pour un serveur, la migration de Traefik vers Caddy fait passer le fichier de configuration de 172 lignes à 27 - soit presque 6 fois moins ! 😏

  • Caddy-Docker-Proxy via Caddy Docker Proxy, Like Traefik But Better? : si vous souhaitez aller plus loin dans l’intégration Caddy/Docker dans l’objectif de remplacer Traefik, cela semble être une bonne piste. C’est une version modifiée de Caddy pour s’interfacer avec Docker. L’intégration se fait notamment via les labels, comme pour Traefik. A voir si on peut déployer la version standalone en dehors d’un conteneur comme on peut le faire avec Traefik. Cela éviterit ainsi que chaque container à exposer via Caddy-Docker-Proxy rejoigne le réseau ad-hoc.

Exemple:

services:
  whoami:
    image: traefik/whoami
    networks:
      - caddy
    labels:
      caddy: whoami.example.com
      caddy.reverse_proxy: "{{upstreams 80}}"

networks:
  caddy:
    external: true