diff --git a/PORTS b/PORTS
index 43b8d76..95e64d7 100644
--- a/PORTS
+++ b/PORTS
@@ -1,37 +1,37 @@
 reserved-for-legacy-docker-migration-medium-priority
      3000   Mastodon public HTTP
      4000   Mastodon streaming HTTP
     15674   RabbitMQ
-    37080   Notifications center HTTP
     41080   Nasqueron Tools HTTP
 
 reserved-for-legacy-docker-migration-low-priority
      4440   Rundeck HTTP
     21080   Drupal CRM HTTP
     22080   Zammad HTTP
     27080   Grafana HTTP
     28080   phragile HTTP
     29080   etcd HTTP
     32080   Discourse HTTP
     40080   RocketChat HTTP
 
 paas-docker
      5000   Docker registry HTTP
      9090   Openfire HTTP
     20080   Nasqueron API - Docker registry API
     22220   Phabricator Aphlict (client)
     22221   Phabricator Aphlict (admin)
     23080   Phabricator HTTP - River Sector
     24080   Tommy HTTP - CI
     24180   Tommy HTTP - CD
     25080   Auth Grove HTTP
     26080   Sentry HTTP
     31080   Phabricator HTTP - DevCentral
     33080   Bugzilla HTTP - Espace Win
     34080   Etherpad
     35080   Phabricator HTTP - Wolfplex
     36080   Phabricator HTTP - Zed
+    37080   Notifications center HTTP
     38080   Jenkins HTTP - CD
     39080   Cachet HTTP
     42080   Jenkins HTTP - CI
     50000   Jenkins master's port for JNLP-based Jenkins agents - CD
diff --git a/pillar/credentials/zr.sls b/pillar/credentials/zr.sls
index c4e1ec3..4810e84 100644
--- a/pillar/credentials/zr.sls
+++ b/pillar/credentials/zr.sls
@@ -1,76 +1,82 @@
 #   -------------------------------------------------------------
 #   Salt configuration for Nasqueron servers
 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 #   Project:        Nasqueron
 #   Created:        2018-09-12
 #   License:        Trivial work, not eligible to copyright
 #   -------------------------------------------------------------
 
 zr_credentials:
 
   #
   # Credentials used by Nasqueron services
   #
 
   nasqueron:
 
     # login.nasqueron.org
     auth-grove:
       mysql: 67
 
     # status.nasqueron.org
     cachet:
       mysql: 47
       app_key: 126
 
     # pad.nasqueron.org
     etherpad:
       # This API key is used by Wolfplex API to access to the pad lists
       api: 125
 
+    # notifications.nasqueron.org
+    notifications:
+      broker: 56
+      mailgun: 82
+      sentry: 141
+
     # sentry.nasqueron.org
     sentry:
       postgresql: 139
       app_key: 140
 
   #
   # Credentials used by Nasqueron members private services
   #
 
   dereckson:
 
     # River Sector
     phabricator:
       mysql: 133
 
   #
   # Credentials used by Espace Win services
   #
 
   espacewin:
 
     # bugzilla.espace-win.org
     bugzilla:
       mysql: 131
 
   #
   # Credentials used by Wolfplex services
   #
 
   wolfplex:
 
     # phabricator.wolfplex.be
     phabricator:
       mysql: 135
       mailgun: 138
 
   #
   # Credentials used by Zed services
   #
 
   zed:
 
     # code.zed.dereckson.be
     phabricator:
       mysql: 134
       sendgrid: 45
diff --git a/pillar/paas/docker.sls b/pillar/paas/docker.sls
index fc565fe..2cb9814 100644
--- a/pillar/paas/docker.sls
+++ b/pillar/paas/docker.sls
@@ -1,407 +1,421 @@
 #   -------------------------------------------------------------
 #   Salt — Provision Docker engine
 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 #   Project:        Nasqueron
 #   Created:        2018-03-10
 #   License:        Trivial work, not eligible to copyright
 #   -------------------------------------------------------------
 
 docker_aliases:
   - &ipv4_equatower 51.255.124.10
   - &intra_equatower 10.0.1.1
 
 #   -------------------------------------------------------------
 #   Images
 #
 #   You can append a :tag (by default, latest is used).
 #
 #   It's not possible to specify Docker library images only by final name.
 #   See https://docs.saltstack.com/en/latest/ref/states/all/salt.states.docker_image.html
 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
 docker_images:
   '*':
     - certbot/certbot
 
   dwellers:
     # Core services
     - nasqueron/mysql:5.7
     - nasqueron/rabbitmq
 
     # Infrastructure and development services
     - dereckson/cachet
     - nasqueron/notifications
 
   equatower:
     # Core services
     - library/postgres
     - library/redis:3.2-alpine
     - library/registry
     - nasqueron/mysql
 
     # Nasqueron services
     - nasqueron/auth-grove
 
     # Nasqueron API microservices
     - nasqueron/docker-registry-api
 
     # Infrastructure and development services
     - nasqueron/aphlict
     - nasqueron/etherpad:production
     - nasqueron/phabricator
 
     # Continuous deployment jobs
     - jenkins/jenkins
     - nasqueron/jenkins-slave-node
     - nasqueron/jenkins-slave-php
     - nasqueron/jenkins-slave-rust
     - nasqueron/tommy
 
     # Sentry
     - library/sentry
     - tianon/exim4
 
 #   -------------------------------------------------------------
 #   Networks
 #
 #   Containers can be grouped by network, instead to use links.
 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
 docker_networks:
   dwellers:
     bugzilla:
       subnet: 172.21.3.0/24
   equatower:
     cd:
       subnet: 172.18.1.0/24
     ci:
       subnet: 172.18.2.0/24
 
 #   -------------------------------------------------------------
 #   Docker engine configuration
 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
 docker_daemon:
   equatower:
     storage-driver: devicemapper
     storage-opts:
         - "dm.thinpooldev=/dev/mapper/wharf-thinpool"
         - "dm.use_deferred_removal=true"
         - "dm.use_deferred_deletion=true"
 
 docker_devicemapper:
   equatower:
     thinpool: wharf-thinpool
 
 #   -------------------------------------------------------------
 #   Containers
 #
 #   The docker_containers entry allow to declare
 #   containers by image by servers
 #
 #   The hierarchy is so as following.
 #
 #   docker_containers:
 #     server with the Docker engine:
 #       service codename:
 #         instance name:
 #            container properties
 #
 #   The service codename must match a state file in
 #   the roles/paas-docker/containers/ directory.
 #
 #   The container will be run with the specified instance name.
 #
 #   **nginx**
 #
 #   The container properties can also describe the information
 #   needed to configure nginx with the host and app_port key.
 #
 #   In such case, a matching vhost file should be declared as
 #   roles/paas-docker/nginx/files/vhosts/<service codename>.sls
 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
 docker_containers:
 
   #
   # Dwellers is the engine for Mastodon and CI intelligent bus services
   #
   dwellers:
 
     #
     # Core services
     #
 
     mysql:
       bugzilla_db:
         network: bugzilla
         version: 5.7
 
+    #
+    # Notifications center
+    #
+
+    notifications:
+      notifications:
+        host: notifications.nasqueron.org
+        app_port: 37080
+        broker_link: white-rabbit
+        credentials:
+          broker: nasqueron.notifications.broker
+          mailgun: nasqueron.notifications.mailgun
+          sentry: nasqueron.notifications.sentry
+
     #
     # Bugzilla
     #
 
     bugzilla:
       ew_bugzilla:
         host: bugzilla.espace-win.org
         app_port: 33080
         network: bugzilla
         mysql:
           host: bugzilla_db
           db: EspaceWin_Bugs
         credential: espacewin.bugzilla.mysql
 
   #
   # Equatower is the current production engine
   #
   equatower:
 
      #
      # Core services
      #
 
     mysql:
       acquisitariat: {}
       phpbb_db: {}
 
     postgresql:
       sentry_db:
         credential: nasqueron.sentry.postgresql
 
     redis:
       sentry_redis: {}
 
     registry:
       registry:
         app_port: 5000
         ip: *intra_equatower
 
      #
      # CI and CD
      #
 
     jenkins:
       jenkins_cd:
         realm: cd
         host: cd.nasqueron.org
         app_port: 38080
         jnlp_port: 50000
       jenkins_ci:
         realm: ci
         host: ci.nasqueron.org
         app_port: 42080
         jnlp_port: 55000
 
     jenkins_slave:
       # Slaves for CD
       apsile: &php_for_cd
         image: php
         realm: cd
 
       elapsi: *php_for_cd
 
       rust_brown:
         image: rust
         realm: cd
 
       yarabokin:
         image: node
         realm: cd
 
       zateki: &php_for_ci
         image: php
         realm: ci
 
       zenerre: *php_for_ci
 
     tommy:
       tommy_ci:
         app_port: 24080
         host: builds.nasqueron.org
         aliases:
           - build.nasqueron.org
         jenkins_url: https://ci.nasqueron.org
 
       tommy_cd:
         # No host definition, as this dashboard is mounted on infra.nasqueron.org
         app_port: 24180
         jenkins_url: https://cd.nasqueron.org
 
     # Infrastructure and development services
 
     phabricator:
       # Nasqueron instance
       devcentral:
         app_port: 31080
         host: devcentral.nasqueron.org
         aliases:
           - phabricator.nasqueron.org
         blogs:
           servers:
             host: servers.nasqueron.org
             aliases:
               - server.nasqueron.org
               - serveur.nasqueron.org
               - serveurs.nasqueron.org
         mailer: mailgun
         credentials:
           mysql: zed.phabricator.mysql
         static_host: phabricator-files-for-devcentral-nasqueron.spacetechnology.net
         title: Nasqueron DevCentral
         mysql_link: acquisitariat
         skip_container: True
 
       # Private instance for Dereckson
       river_sector:
         app_port: 23080
         host: river-sector.dereckson.be
         static_host: phabricator-files-for-river-sector.nasqueron.org
         mailer: _
         credentials:
           mysql: dereckson.phabricator.mysql
         storage:
           namespace: river_sector
         title: River Sector
         mysql_link: acquisitariat
 
       # Wolfplex instance
       wolfplex_phab:
         app_port: 35080
         host: phabricator.wolfplex.be
         aliases:
           - phabricator.wolfplex.org
         static_host: phabricator-files-for-wolfplex.nasqueron.org
         mailer: mailgun
         credentials:
           mailgun: wolfplex.phabricator.mailgun
           mysql: wolfplex.phabricator.mysql
         storage:
           namespace: wolfphab
         title: Wolfplex Phabricator
         mysql_link: acquisitariat
 
       # Zed instance
       zed_code:
         app_port: 36080
         host: code.zed.dereckson.be
         static_host: phabricator-files-for-zed.nasqueron.org
         mailer: sendgrid
         credentials:
           mysql: zed.phabricator.mysql
           sendgrid: zed.phabricator.sendgrid
         storage:
           namespace: zedphab
         title: Zed
         mysql_link: acquisitariat
 
     aphlict:
       aphlict:
         ports:
           client: 22280
           admin: 22281
 
     cachet:
       cachet:
         app_port: 39080
         host: status.nasqueron.org
         credential: nasqueron.cachet.mysql
         app_key: nasqueron.cachet.app_key
         mysql_link: acquisitariat
 
     etherpad:
       pad:
         app_port: 34080
         host: pad.nasqueron.org
         aliases:
           - pad.wolfplex.org
           - pad.wolfplex.be
         credential: nasqueron.etherpad.api
         mysql_link: acquisitariat
 
     auth-grove:
       login:
         app_port: 25080
         host: login.nasqueron.org
         credential: nasqueron.auth-grove.mysql
         mysql_link: acquisitariat
 
     # API microservices
 
     docker-registry-api:
       api-docker-registry:
         app_port: 20080
         api_entry_point: /docker/registry
         registry_instance: registry
 
     # phpBB SaaS
     # The SaaS uses a MySQL instance, declared in the MySQL section.
 
     # Openfire
     openfire:
       openfire:
         ip: *ipv4_equatower
         app_port: 9090
         host: xmpp.nasqueron.org
 
     # Sentry
     # The Sentry instance uses a Redis and a PostgreSQL instance,
     # declared above.
     exim:
       sentry_smtp:
         mailname: mx.sentry.nasqueron.org
 
     sentry:
       sentry_web_1:
         app_port: 26080
         host: sentry.nasqueron.org
 
         # As an instance is divided between a web, a cron and a worker
         # containers, we need an identified to share a data volume.
         realm: nasqueron
 
     sentry_worker:
       sentry_worker_1:
         realm: nasqueron
 
     sentry_cron:
       sentry_cron:
         realm: nasqueron
 
  #   -------------------------------------------------------------
  #   Ports listened by XMPP
  #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
 xmpp_ports:
   - 3478
   - 5222 # Client to server
   - 5223 # Client to server (Encrypted (legacy-mode) connections)
   - 5262 # Connections managers
   - 5269 # Server to server
   - 5275 # External components
   - 5276 # External components (Encrypted (legacy-mode) connections)
   - 7070 # HTTP binding
   - 7443 # HTTP binding with TLS
   - 7777 # File transfer proxy
   - 9090 # Web administration server
   - 9091 # Web administration server with TLS
 
  #   -------------------------------------------------------------
  #   Zemke-Rhyne clients
  #
  #   This section should list all the Docker engines server
  #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
 zr_clients:
   - key: 2
     allowedConnectionFrom:
       - 172.27.26.49
       - dwellers.nasqueron.drake
       - dwellers.nasqueron.org
     restrictCommand:
     comment: Zemke-Rhyne
 
   - key: 123
     allowedConnectionFrom:
       - equatower.nasqueron.org
     restrictCommand:
     comment: Zemke-Rhyne
diff --git a/roles/paas-docker/containers/notifications.sls b/roles/paas-docker/containers/notifications.sls
new file mode 100644
index 0000000..78360df
--- /dev/null
+++ b/roles/paas-docker/containers/notifications.sls
@@ -0,0 +1,46 @@
+#   -------------------------------------------------------------
+#   Salt — Provision Docker engine
+#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#   Project:        Nasqueron
+#   Created:        2016-01-23
+#   License:        Trivial work, not eligible to copyright
+#   -------------------------------------------------------------
+
+{% set containers = pillar['docker_containers'][grains['id']] %}
+
+{% for instance, container in containers['notifications'].items() %}
+
+#   -------------------------------------------------------------
+#   Container
+#
+#   Image:          nasqueron/notifications
+#   Description:    Listen to webhooks, fire notifications to
+#                   the broker. Used for CI / IRC notifications.
+#   Services used:  RabbitMQ broker (white-rabbit)
+#                   Docker volume   (/data/notifications/storage)
+#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+{{ instance }}:
+  docker_container.running:
+    - detach: True
+    - interactive: True
+    - image: nasqueron/notifications
+    - binds: /srv/notifications/storage:/var/wwwroot/default/storage
+    - links:
+        - {{ container['broker_link'] }}:mq
+    - environment:
+        - BROKER_HOST: mq
+        - BROKER_USER: {{ salt['zr.get_username'](container['credentials']['broker']) }}
+        - BROKER_PASS: {{ salt['zr.get_password'](container['credentials']['broker']) }}
+        - BROKER_VHOST: dev
+
+        - MAILGUN_DOMAIN: {{ salt['zr.get_username'](container['credentials']['mailgun']) }}
+        - MAILGUN_APIKEY: {{ salt['zr.get_password'](container['credentials']['mailgun']) }}
+
+        - SENTRY_DSN: https://{{ salt['zr.get_username'](container['credentials']['sentry']) }}:{{ salt['zr.get_password'](container['credentials']['sentry']) }}@sentry.nasqueron.org/2
+    - ports:
+        - 80
+    - port_bindings:
+        - {{ container['app_port'] }}:80
+
+{% endfor %}