Installation de Sympa sur Debian Jessie


17/03/2017 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.

Syndication

Restez informé(s) de notre actualité en vous abonnant au flux du blog (Atom)

Nuage de tags

kubernetes docker timeseries influxdb warp10 grafana traefik elasticsearch kafka postgres python ansible aws sécurité terraform mysql redis telegraf git ovh tick chronograf cloud dashboard docker-compose hashicorp timescaledb cassandra helm podman ptsm swarm test vector flux iot kapacitor rancher timescale cérénit influxdata log machine-learning monitoring postgresql raspberrypi s3 spark sql vscode arm bilan comptabilité confluent devops gitlab gitlab-ci iac java ksql microservice nomad perspective prometheus serverless service-mesh angularjs api bigdatahebdo cli cncf consul container discovery dns flows gcp gke graphql influxace ingress javascript npm opensource operator rook scaleway ssh stream vault warpscript windows architecture cert-manager containerd csp documentation elastic forecast geospatial golang hpkp json kafka-streams kibana kubedb lambda lean licence maesh mariadb microsoft mqtt nginx orientdb quasardb redhat registry rest rethinkdb reverse-proxy rgpd warpstudio wireguard agile anomalie apm arima azure bash big-data ceph certificat challenge cluster co2 continous-delivery continous-integration cookie datatask dataviz dbt deployment diff django edge esp32 facebook fec fluxlang gdpr google-analytics grav hsts http/3 https hypriot ia influxdays istio jq k3s lets-encrypt linux load-balancer longhorn meetup metabase mobile molecule mongodb nosql nvidia openebs openhab openssh ovhcloud pandas parquet percona performance php pip pipeline questdb reaper replication rootless rpi rsyslog runc résilience scale secrets société solr sre systemd tempo timezone tinygo tls virtualenv vitess vue.js wagtail warpfleet yarn accessibilité acme adoptopenjdk agpl akka alerte alertes alibaba amazon-emr amqp anonymisation anthos apache-pulsar ara arduino arrow artefact asgi automation automatisation automl awstats banque bastion beam beat bi bme680 bootstrap bounded-context branche brigade browser buildah buildkit calico cd cdc cdk centos certificats cgroups chart check checklist chrome ci cilium cio circuitpython clever-cloud clickhouse cloud-init cloud-native cloud-storage cloudflare clusterip cnab cni cockroachdb code codeurs-en-seine commit confluence conftest consul-connect context continous-deployment conventional-commit coreos cors covid19 cqrs crash cri cron crontab csi csrf css cto curl d3.js daemonset data data-engineer data-pipelining data.gouv.fr databricks datacenter date date-scientist ddd debezium debian delta deprek8 desktop devoxx dig distributed-systems dive docker-app docker-hub docker-registry dockerfile dockershim documentdb dog dokcer données-personnelles draft dredd drop-in dsi duckdb duration déploiement ebs ec2 elassandra electron elk engineering entreprise etcd euclidia event-sourcing faas falco falcor feature-policy fedora feed filebeat firebase firefox fish flash flask fleet flink flovea fluentd font foundation framework frenchtech frontend fsync fugue fullstack git-filter-repo github gitignore gitpod glacier glowroot goaccess google google-cloud-next gpg gpu grep grid géospatial hacker hadoop haproxy harbor hdfs header holt-winters html html5 http httpx hue iaac ibm iiot immutable incident index indluxdata influxcloud infrastructure-as-code ingénierie inspec jenkins jless jquery jvm jwt k3d k6 k8s k9s kaniko katz kubeadm kubecon kubectl label laravel leap-second lens letsencrypt libssh linky linter liste-de-diffusion lmap loadbalancer logstash logstatsh loi loki lstm mailing-list management matomo maturité mesh mesos message metallb micro-service minio mot-de-passe multi-cloud médecine métrique n8n nebula network newsletter nodejs nodeport notebook notifications nrtsearch null numérique object-storage observability observabilité opa opendata openmetrics openshit openstack openweb opnsense over-engineering packaging partiql password persistent-volume-claim pico pipenv pivot pod portainer portworx prediction prescience privacy-shield production promql prophet prévision psp ptyhon publicité pubsub pulsar push pyenv pérénnité qualité quay queue quic ram rambleed raml react readme recaptcha recherche redistimeseries reindex reinvent reliability remote-execution repository responsive retention-policy revocation revue-de-code rexec rhel rkt robotframework rolespec root rpo rto rust rwd réseau résultat safe-harbor sarima scanner schema scp search select semiconducteur serverless-architecture service service-account service-worker setuptools sftp sha1 shard shard-duration shard-group sharding shell shipyard sidecar singer socket souveraineté-numérique spectre spinnaker sqlite sri ssh-agent ssl stabilité stash statistique stm32 storage sudo superset suse sympa sysdig syslog-ng sérénité task tavern template terracost terrascan test-unitaire thingspeak tidb tiers time timecale timer timestream training transformation travail trésorerie tsfel tsfr tsl ubuntu unikernel unit ux velero vendredi victoria-metrics vie-privée virtualbox virtualisation vm vnc volume voxxeddays vpc vpn wasm workflow yaml yield yq yubikey zip