CérénIT

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

Installation de Sympa sur Debian Jessie

sympa debian mailing-list newsletter liste de diffusion

Contexte

Un de nos clients souhaite pouvoir envoyer des newsletters à ses membres et utiliser des listes de diffusion pour la communication entre les membres.

Ayant de précédentes expériences avec mailman, je me suis naturellement tourné vers celui-ci. Pour l’occasion, j’ai installé une première instance de mailman3 via mailman-bundler. Si l’installation se fait sans trop de soucis, les versions packagées avec mailman-bundler ne sont pas les plus récentes et contiennent des bugs (parfois déjà corrigés dans les versions supérieures) rendant quelques fonctionnalités inopérantes (comme la modération des messages) ou provoquant des comportements étranges (certaines modifications d’options de liste ne sont parfois pas pris en compte). Même si le service fonctionnait à peu près correctement, nous décidions de revenir en mailman dans sa version 2. Même si cela résolvait les problèmes de stabilité et les bugs, il nous manquait une fonctionnalité : l’abonnement à une liste sans confirmation (la confirmation par réponse à un email étant jugé trop complexe).

Pour revenir à Mailman 3, la documentation et les développeurs considèrent qu’il n’est pas encore tout à fait prêt. A l’instar de la suite KDE, il faudra attendre une version 3.2 ou plus pour pouvoir l’utiliser sereinement. En tous cas, la nouvelle interface est prometteuse !

Notre client souhaitant pouvoir envoyer des listes avec son nom de domaine et celui-ci n’étant pas forcément prêt à payer pour cette fonctionnalité, cela disqualifiait plusieurs solutions hébergées (SaaS).

Je me suis donc rabattu sur Sympa.

Installation

Pré-requis

  • Debian 8 Jessie, à jour.
  • Avoir un serveur postfix installé et configuré

Installation de sympa

Initialement, je voulais utiliser Postgres comme base de données, il s’est avéré que l’installateur debian ou sympa échoue. De guerre lasse, je me suis rabattu sur MySQL qui de toutes façons est considéré comme une dépendance de Sympa et je suis passé par la configuration via db-config. Pour le serveur web, ayant déjà un apache2 sur ce serveur pour mailman, je suis resté sur cette configuration.

Avant toute chose, s’assurer que /etc/mailname correspond bien à votre DNS utilisé pour le mail. Sympa semble prendre cette valeur par défaut et semble ignorer une mise à jour de ce fichier postérieurement à son installation.

apt update
apt install sympa

A ce stade vous avez une première configuration de sympa avec MySQL initialisée pour vos données.

Ensuite, vérifier que les dépendances de Sympa sont bien à jour et complètes ; Installer les librairies dont vous avez besoin pour votre scénario.

sympa_wizard --check

Ensuite, vous pouvez soit éditer les fichiers de configuration /etc/sympa/sympa.conf et /etc/sympa/wwsympa.conf ou bien utiliser le script prévu à cet effet : sympa_wizard. Cela revient au même, le script prend en compte les valeurs du fichiers et complète le cas échéant avec vos nouvelles réponses. Ce sont surtout les premières questions qui sont importantes avec la définition des hôtes, url et surtout la définition des listmaster. Les emails définis comme listmaster pourront en effet administrer Sympa. Pensez également a bien activer le support de fastcgi pour éviter une erreur 500.

Ensuite, en m’inspirant des fichiers /etc/apache2/conf-available/sympa.conf /etc/apache2/conf-available/sympa.conf et /etc/apache2/conf-available/sympa-soap.conf fournis par Sympa, j’ai créé le fichier (simplifié) suivant dans /etc/apache2/sites-available/sympa.conf :

#
# Apache >> 2.4 configuration for Sympa
#

<IfModule mod_fcgid.c>
    Alias /static-sympa /var/lib/sympa/static_content
    <Directory /var/lib/sympa/static_content>
        Require all granted
    </Directory>

    ScriptAlias /wws /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi
    <Directory /usr/lib/cgi-bin/sympa>
        Require all granted
    </Directory>
</IfModule>

#
# Apache >> 2.4 configuration for Sympa (soap webservice)
#

<IfModule mod_fcgid.c>
    ScriptAlias /sympasoap /usr/lib/cgi-bin/sympa/sympa_soap_server-wrapper.fcgi
    <Directory /usr/lib/cgi-bin/sympa>
        Require all granted
    </Directory>
</IfModule>

<VirtualHost *>
    ServerName listes.domaine.fr
    ServerAdmin contact@cerenit.fr

    RewriteEngine On
    RewriteRule ^/$ /wws/lists [R=301,L]
</VirtualHost>

Puis, activation du site via :

a2ensite sympa
systemctl restart apache2

Ajustement de la configuration de Postfix

Dans /etc/postfix/master.cf, ajouter :

# Services Pour sympa
sympa   unix        -   n   n   -   -   pipe
    flags=R user=sympa argv=/usr/lib/sympa/bin/queue ${recipient}
sympabounce unix    -   n   n   -   -   pipe
    flags=R user=sympa argv=/usr/lib/sympa/bin/bouncequeue ${recipient}

Dans /etc/postfix/main.cf, ajouter :

#
## SYMPA
#

# Tranport vers les services sympa*
transport_maps = regexp:/etc/postfix/sympa_transport.cf
local_recipient_maps = regexp:/etc/postfix/sympa_transport.cf

# Un seul envoi/destinataire envoyé aux services sympa* à la fois
sympa_destination_recipient_limit = 1
sympabounce_destination_recipient_limit = 1

Et dans /etc/postfix/sympa_transport.cf :

/^.*-owner\@listes\.domaine\.fr$/ sympabounce:
/^.*\@listes\.domaine\.fr$/       sympa:

Il ne nous reste plus qu’à redémarrer Postfix et Sympa pour s’assurer que nos modifications ont bien été prises en compte :

systemctl restart postfix sympa

Première utilisation

Il ne vous reste plus qu’à aller sur http://listes.domaine.fr/wws/ et vous devriez avoir l’interface de Sympa.

Cliquer alors sur “1ère connection”, rentrer un des emails de listmaster pour obtenir votre mot de passe et pouvoir administrer Sympa en fonction de vos besoins.

Web, Ops & Data - Février 2017

machine-learning sécurité header cookie nosql rethinkdb postgres csrf hacker ingénierie over-engineering ux

Admin Sys

HTML,JS,CSS

  • Les sections HTML, CSS et JavaScript de MDN sont disponibles en français : " TL;DR : Les 1 749 pages de MDN pour les sections HTML/JS/CSS sont désormais disponibles, à jour, en français." ; MDN (ou plus longuement le « Mozilla Developer Network ») est un wiki, documentant les technologies web. Si la langue de Shakespeare vous rebutait, vous n’avez plus aucune raison maintenant. Impréssionnant travail en tous cas !

Machine learning

(No)SQL

  • RethinkDB joins The Linux Foundation : l’arrêt de la société (Octobre 2016) ne signifiera donc pas la fin du projet opensource associé. Il est peut être encore un peu tôt pour statuer sur la pérénité du projet, mais au moins, il y a une lueur au bout du tunnel. Pour rappel, RethinkDB est une base de données scalable, orientée temps réel et document (JSON). L’article permet de voir également les enjeux de licences/propriété intellectuelle.
  • RethinkDB versus PostgreSQL: my personal experience : Un retour d’expérience sur RethinkDB vs Postgres avec Postgres qui gagne à la fin (comme toujours ! :-) ). Il semble néanmoins avoir un volume de données et un traffic que tout le nonde n’a pas.
  • Is Postgresql good enough? : revue des différents cas d’utilisation des bases NoSQL et voir comment / dans quelle(s) mesure(s) on peut y répondre avec Postgres. L’idée est de se dire que plutôt d’avoir n outils (et la gestion de l’expertise qui va avec), autant en avoir moins, qui répondent au besoin même s’ils ne font pas aussi bien que l’outil de référence.
  • PostgreSQL worst practices, version FOSDEM PGDay 2017 : revue des mauvaises pratiques Postgres pour vous faire prendre les bonnes.
  • Zero Downtime Postgres Upgrades : Présentation d’une architecture Postgres multi-noeuds permettant la gestion du failover.

Opinions

Sécurité

  • Cross-Site Request Forgery is dead! : il est possible de sécuriser de plus en plus ses cookies pour tuer toute tentative de CSRF. Il est conseillé de lire préalablement Tough cookies pour avoir le petit rappel sur les cookies et leurs attributs.
  • A new security header: Referrer Policy : un nouveau Header http, au state de recommandation du W3C, va faire son apparition et permet de définir des politiques sur la gestion du referer (le propager ou pas).

UX

  • Dois-je utiliser ? : Une revue des écueils des carrousels, pop-in, un défilement inifini, etc avec exemples, des solutions, des alternatives et des argumentaires.

Web, Ops & Data - Janvier 2017

docker arm hypriot api rest raml python csp kubernetes spark kafka stream rancher json ansible devops elasticsearch postgres timezone pip virtualenv sql service worker react foundation

Nouvelle année, nouveau format - au programme une édition mensuelle mixant brèves et des choses plus construites/élaborées (j’espère le mois prochain)

En Bref

API

ARM / RPi

  • Setup Kubernetes on a Raspberry Pi Cluster easily the official way! : Kubernetes, la solution d’orchestration de conteneurs, devient de plus en plus utilisable sur un enrionnement ARM (Raspberry, etc). Il faut que je réessaie ça sur mon Picocluster ; les derniers essais n’étaient pas très probant mais je n’avais pas utilisé apparemment le bon driver réseau (ie flannel et non pas weave pour ARM comme indiqué dans le billet).
  • HypriotOS 1.2 avec Docker 1.13 est également disponible pour vos RPi.

Big Data

  • Databricks and Apache Spark 2016 Year in Review : Databricks, l’éditeur de Spark, fait sa revue de l’année 2016 et des apports significatifs réalisés sur Spark : Support SQL, Structured Streaming, Spark 2.x.
  • Introduction to Kafka Streams with a Real-Life Example : l’auteur montre les limites de la combinaison Kafka+Spark (j’en ai vécu une partie) et propose son retour d’expérience sur la migration vers Kafka Streams (et conforte l’opinion que j’avais). Reste la problématique du monitoring de Kafka Streams à améliorer même si des solutions adhoc sont listées.
  • Towards a realtime streaming architecture : dans la continuité du billet précédent, retour d’expérience d’une entreprise passant de Spark+Kafka à Kafka, Kafka Streams, Kafka Connect et Akka pour faire du vrai streaming (et pas du micro-batch). Intéressant de voir qu’ils jugent Flink trop complexe pour le moment au regard de leurs besoins. Globalement, l’article montre le problème récurrent dans une architecture big data de la maitrise de l’ensemble des composants pour bien les faire fonctionner. Confluent, en apportant Kafka Streams et Kafka Connect autour de Kafka, semble avoir trouver le bon créneau combinant (une relative) simplicité technologique et performance.

CLI

Container & Orchrestration

DevOps

  • 10 astuces Ansible : revue de 10 bonnes pratiques concernant l’outil d’automatisation Ansible. Il me manquait la personnalisation du logger et de ansible.cfg

Elasticsearch

Opinions

  • Tools & Teams : au-delà du “Utiliser le bon outil pour la bonne tâche”, c’est surtout d’utiliser les outils avec lesquelles une équipe est efficace à un instant donnée. La vision a long terme étant d’aller au-delà des outils vers les concepts afin d’avoir une compétence/expérience qui s’affranchit plus facilement des outils (qui ne sont pas éternels).

Postgres

  • Simple but handy postgresql features : Sympa le \watch ou jsonb_pretty pour respectivement surveiller le résultat d’une requête et affichrer proprement une donnée au format JSON.

Python

  • Records, SQL for Humans : comme tous les projets de Kenneth Reitz (requests, maya, etc), une API simple pour manipuler des données (ici des requêtes SQL)
  • pytz : World Timezone Definitions for Python - permet de faire des calculs sur les dates, la librairie gérerait également les heures d’été/d’hiver dans les calculs.
  • Announcing Pipenv! : Vous réviez d’un outil combinant pip et virtualenv et avec des options supplémentaires, Kenneth Reitz l’a fait durant un week-end…

Sécurité

  • Web Security 101 : présentation des principaux concepts, des cas d’exemples et des moyens de se prémunir.
  • Introducing support for Content Security Policy Level 2 : Microsoft Edge se dote du support de niveau 2 de Content Security Policy (CSP) afin de permettre au propriétaire d’un site de mieux protéger ses clients en déclarant les ressources autorisées ou pas.
  • Github’s Post CSP Journey : retour des équipes de Github sur l’implémentation de CSP et les points encore à adresser (spoiler : non, CSP n’est pas l’arme ultime). Ces points sont peut être des cas marginaux pour des sites classiques mais pas pour Github. Intéressant à lire.

Web

Web, Ops & Data - Semaine 51

docker kubernetes elasticsearch tick chronograf python date ansible redis hypriot arm

Plateform TICK

  • Beta 3 of Chronograf : Chronograf 1.1 continue son bonhomme de chemin avec la parution d’une bêta 3 apportant son lot d’améliorations et de correctifs.

Container & Orchestration

  • Kubernetes 1.5: Supporting Production Workloads : Kubernetes, dans cette version 1.5, apporte des améliorations notamment sur la gestion des applications statefull (passage d’un statut alpha à beta) et plein de choses en alpha : le support des containers windows, la fédération de cluster kubernetes, la haute disponibilité, etc.
  • containerd – a core container runtime project for the industry : Docker Inc continue de modulariser Docker (Engine) en publiant “containerd” et en prévoyant de le donner à une fondation en début d’année prochaine. Containerd est la partie centrale d’exécution du container. Il a été déployé silencieusement depuis Docker 1.11. L’idée de containerd serait de devenir le “format” universel pour faire tourner des containers sur lequel tout le monde s’appuierait… A suivre dans la guerre des containers et des initiatives de standardisation (ou pas).
  • An Early Look at Ansible Container v0.3.0 : Ansible 2.x permet déjà d’interagir avec les containers docker, ansible-container permet d’aller plus loin dans la gestion des containers avec ansible. Cette version apportera le support du format docker-compose v2 et le support de docker 1.12. Même si je suis parvenu à piloter des containers docker avec Ansible 2.2, j’avoue qu’il y a quelques bugs pénibles et j’ai pas forcément l’impression que ce soit la bonne façon de faire. Peut⁻être que ce module apportera des réponses ou qu’il faut repenser la chose différemment.
  • Making Elasticsearch in Docker Swarm Elastic : Un billet intéressant sur le déploiement d’Elaticsearch dans un contexte Docker Swarm. En effet, la partie pénible est de gérer la découverte par IP des noeuds et de rendre cela accessible de l’extérieur du cluster. Le billet présente des astuces pour le faire. J’aurais bien aimé l’avoir il y a de cela 6 mois à 1 an…

NoSQL

ARM

  • Hypriot OS 1.1.2 : vos raspberry pi vont être gatés avec les dernières versions de Docker, Docker-Compose et Docker-Machine. Je détaillerai en janvier la mise en place d’un cluster docker avec Hypriot OS avec 5 Raspberry et 2 Cubietruck qui permettent d’avoir un stockage distribué/résilient avec GlusterFS.

Python

Bonnes fêtes de fin d’année à tous !

Web, Ops & Data - Semaine 50

docker rancher mobile log grafana chronograf statistique packaging npm sécurité csp

Mobile

  • [Lecture] The 2016 U.S. Mobile App Report : Eric, sur la base des chiffres de 2016 rappelle que “[…] vouloir initier la diffusion de son produit/service par une app mobile, c’est partir avec un boulet au pied” et ce même si les statistiques de téléchargement d’applicaitons s’améliorent. Un site web adapté pour mobile sera donc suffisent à court terme (voire tout court), faudrait juste simplifier la création d’un raccourci sur la page d’accueil pour mettre son site mobile au même niveau qu’une application préférée…

Container & Orchestration

  • Rancher 1.2 Is Now Available! : En plus d’apporter la compatibilité avec les dernières versions de Docker (Swarm), Docker-Compose et Kubernes, cette version apporte un meilleur support des plugins réseaux et stockage de Kubernetes & Docker, ainsi qu’une amélioration de la haute disponibilité, de la gestion du cycle de vie de ses applications et une nouvelle politique de sortie de version avec un rythme mensuel.
  • Docker acquires Infinit: a new data layer for distributed applications : En faisant l’acquisition d’Infinit (société française !), Docker semble vouloir promettre un stockage distribué notamment pour les composants statefull (base de données, logs, etc) et ce de façon sécurisée (au sens sécurité ou résilience, cela n’est pas encore précisé).

Mode de travail

  • La revue de code bienveillante : l’article revient sur les bonnes habitudes à prendre dans le cadre d’une revue de code pour qu’elle soit d’une part efficace pour tous et avec la bonne façon de faire.
  • How we stay connected as a remote company : Petit retour pratique sur les habitudes prises au quotidien chez Gitlab pour gérer des équipes distantes.

Packaging

  • npm-based release workflow : Thomas décrit très clairement comment utiliser les fonctionnalités de npm pour gérer le cycle de release de son application (génération du changelog, gestion des numéros de versions, création des tags git, etc).

Statistiques, logs, monitoring (et vie privée)

Sécurité

  • Content Security Policy : la retranscription de la conférence donnée par Nicolas Hoffmann à Codeurs en Seine 2016 sur CSP, la couche sécurité coté navigateurs permettant d’indiquer quels ressources distantes votre site autorise ou pas.
21 22 23 24 25