Die Standardinstallation einer BlueMind-Plattform ist einfach durchzuführen und erfordert nach der Definition der Architektur nur wenige Schritte. In bestimmten Fällen sollte eine Installation jedoch industrialisiert werden, damit sie viele Male wiederholt werden kann. Das trifft beispielsweise für einen Hosting-Anbieter oder einen Kunden mit vielen Benutzern und mehreren Plattformen zu.
Ansible ist eine Automatisierungs-Engine, die eine solche Industrialisierung ermöglicht. Im vorliegenden Artikel wird die Einrichtung von BlueMind mit Ansible beschrieben, es ist aber durchaus möglich, sich auf andere Tools wie z. B. Saltstack, Puppet oder Chef zu stützen.
Ansible – was ist das?
Ansible ist ein IT-Automatisierungstool, das die Bereitstellung Ihrer Anwendungen und Systeme vereinfacht. Es erübrigt bei der Bereitstellung oder Aktualisierung einer Anwendung das Verfassen von Skripten oder personenbezogenen Codes.
Ansible hat den Vorteil, ohne einen Bereitstellungsagenten auf dem Zielserver auszukommen, da sämtliche Installations- und Konfigurationsanweisungen mithilfe des SSH-Agenten ausgeführt werden, der auf Linux-Servern weit verbreitet ist.
Konkret kann Ansible drei Aufgabentypen automatisieren:
- Provisionierung: Einrichtung der verschiedenen Server, die Sie in Ihrer Infrastruktur benötigen
- Konfigurationsverwaltung: Änderung der Konfiguration einer Anwendung, eines Betriebssystems oder Peripheriegeräts, Starten und Stoppen von Diensten, Installation oder Aktualisierung von Anwendungen, Umsetzung einer Sicherheitsstrategie oder Durchführung verschiedener weiterer Konfigurationsaufgaben
- Bereitstellung von Anwendungen: Automatisierte Bereitstellung intern entwickelter Anwendungen auf Ihren Produktionssystemen zur Vereinfachung der Anwendungsentwicklung
In diesem Artikel wird die Verwendung von Ansible durch BlueMind im Rahmen der Automatisierung repetitiver Aufgaben der Systemverwaltung behandelt. Für weitere Informationen über die Einsatzmöglichkeiten von Ansible empfehlen wir den neuen Lernparcours „Einführung in Ansible“ von Cloud Academy.
Ansible und BlueMind
Wir verfolgen hier nicht das Ziel, Sie mit Ansible vertraut zu machen, sondern wir möchten Ihnen mit diesem Produkt unsere Bereitstellungsmethoden nahebringen.
- Einhaltung der Bereitstellungsregeln
Es gibt verschiedene Methoden der Bereitstellung mit Ansible. Die vorgestellte Methode stützt sich auf eine Inventardatei, die den oder die zu installierenden BlueMind-Server, die BlueMind-eigenen und von unseren Teams mit Hilfe von Git-Repositories zur Verfügung gestellten Rollen sowie Playbook-Beispiele zur Anordnung der Vorgänge enthält.
- Harmonisierung der Installationen
Die Verwendung von Ansible bietet zahlreiche Vorteile. Wenn Sie viele BlueMind-Instanzen für verschiedene Clients bereitstellen, sparen Sie Zeit. Insbesondere können Sie die Konfigurationen client- und nutzungsspezifisch vereinheitlichen, sodass die Bereitstellung der Installationen industrialisiert und damit die Disparitäten zwischen den BlueMind-Instanzen begrenzt werden.
Sie können sich auch – in einem anderen Kontext – auf Ansible stützen, um Ihre Entwicklungs-, Qualifizierungs-, Produktionsvorbereitungs- und Produktionsumgebungen so bereitzustellen, dass identische Konfigurationen garantiert werden. Dies maximiert insbesondere den Erfolg Ihrer Bereitstellungs- oder Aktualisierungsprojekte.
Im weiteren Verlauf dieses Artikels interessieren wir uns für die Bereitstellung eines einfachen BlueMind-Servers, der mehrere Hundert Benutzer aufnehmen kann. Anschließend werden wir sehen, dass es möglich ist, eine BlueMind-Instanz bestehend aus zwei BlueMind-Servern, einem Core-Server und einem Back-End-Server mit den Daten der Benutzer bereitzustellen.
Abschließend werden wir uns die Entwicklungsperspektiven anschauen und sehen, dass es durchaus möglich ist, sich an die vorhandenen Rollen anzulehnen, um einen dedizierten Elasticsearch-Server oder auch einen BM-Edge-Server bereitzustellen. Man könnte auch einen Disaster-Recovery-Mechanismus in Betracht ziehen, mit dem ein Server im Fall seines kompletten Ausfalls auf der Basis von Sicherheitskopien vollständig wiederhergestellt wird.
Umgebung:
Voraussetzung: ein installierter Ansible-Server. In unserem Fall handelt es sich nicht um die letzte Version, aber die Rollen sind vollständig kompatibel:
root@nmc-Ansible:~# Ansible --version
Ansible 2.7.5
config file = /etc/Ansible/Ansible.cfg
configured module search path = [u'/root/.Ansible/plugins/modules', u'/usr/share/Ansible/plugins/modules']
Ansible python module location = /usr/lib/python2.7/dist-packages/Ansible
executable location = /usr/bin/Ansible
python version = 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516]
Installation eines BlueMind-Servers:
- Rufen Sie die Datei u500_requirements.yml ab, die hier zur Verfügung steht.
Ansible-galaxy install -r u500_requirements.yml
- extracting bluemind_requirements to /etc/Ansible/roles/bluemind_requirements
- bluemind_requirements (master) was installed successfully
- extracting bluemind_single_server to /etc/Ansible/roles/bluemind_single_server
- bluemind_single_server (master) was installed successfully
Mit der Ansible-Galaxy-Steuerung können Sie alle Rollen herunterladen, die auf Git zur Verfügung stehen. Beachten Sie, dass kurz- oder mittelfristig neue Versionen erhältlich sein können.
- Erstellen Sie das Playbook wie folgt:
root@nmc-Ansible:/etc/Ansible# cat playbooks/bm/bluemind_single_server.yml
---
- name: Configuring BlueMind requirements
hosts: all
become: yes
become_method: su
roles:
- bluemind_requirements
- bluemind_single_server
- Erstellen Sie Ihre Inventardatei, in unserem Fall gestützt auf eine yml-Datei, die unter /etc/Ansible/inventory zur Verfügung steht.
cat inventory/bluemind_single_server.yml
bluemind_single_server:
hosts:
nmc-core.blue-mind.loc:
Ansible_host: 192.168.0.15
Ansible_become_password: « SET_ROOT_PASSWORD_HERE"
Ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
Ansible_user: bluemind
vars:
sw_password: "admin"
external_url: "mail.blue-mind.loc"
subscription_contact: "admin@blue-mind.loc"
local_works_directory: "/usr/local/bluemind/"
email_domain: "blue-mind.loc"
subscription_file: "/usr/local/bluemind/subscribe.bmz"
Hier einige Erläuterungen:
Es werden globale Variablen bestimmt, die für folgende Angaben erforderlich sind:
- Die öffentliche Adresse für den Zugang zum Server, wiedergegeben mit vars.external_url
- Der Name des Kontakts, um die mit dem Abonnement verbundenen Benachrichtigungen über vars.subscription_contact zu erhalten
- Email_domain zur Angabe der Standarddomäne, die Sie erstellen möchten
- Sw_password zur Bezeichnung des Passworts, das für das /setup und für den Zugriff auf die TICK-Konsole, falls Sie sie installieren, einzugeben ist
- Local_works_directory für die Speicherung von Informationen, die für die Ausführung der Ansible-Rollen benötigt werden. Es empfiehlt sich, z. B. pro Client einen Ordner anzulegen.
- subscription_file als Standort der Abonnementdatei, die für die Installation mit Ansible erforderlich ist
Starten Sie die Installation:
Ansible-playbook -l bluemind_single_server playbooks/bm/bluemind_single_server.yml
PLAY [Configuring BlueMind requirements]
*********************
TASK [Gathering Facts]
*********************
ok: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Load Operating System : Debian 9]
*********************
ok: [nmc-core.blue-mind.loc] => (item=/etc/Ansible/roles/bluemind_requirements/vars/debian_family.yml)
TASK [bluemind_requirements : include_tasks]
*********************
skipping: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : include_tasks]
*********************
included: /etc/Ansible/roles/bluemind_requirements/tasks/debian.yml for nmc-core.blue-mind.loc
TASK [bluemind_requirements : assert]
*********************
ok: [nmc-core.blue-mind.loc] => {
"changed": false,
"msg": "All assertions passed"
}
TASK [bluemind_requirements : set /etc/hostname]
*********************
ok: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Ensure en_US.UTF-8 locale exists]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Set LC_ALL]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Set LANG]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Install apt Packages]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Update]
*********************
ok: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Upgrade apt packages]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Install your subscribe file]
*********************
changed: [nmc-core.blue-mind.loc -> localhost]
TASK [bluemind_requirements : Copy BlueMind repository file into the server]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Adding BlueMind Public Key]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Configure BM repository priority]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : apt_repository]
*********************
skipping: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Update repositories]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_single_server : include_tasks]
*********************
skipping: [nmc-core.blue-mind.loc]
TASK [bluemind_single_server : include_tasks]
*********************
included: /etc/Ansible/roles/bluemind_single_server/tasks/debian.yml for nmc-core.blue-mind.loc
TASK [bluemind_single_server : Install BlueMind Packages]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_single_server : Install BlueMind]
*********************
changed: [nmc-core.blue-mind.loc]
PLAY RECAP
*********************
nmc-core.blue-mind.loc : ok=19 changed=12 unreachable=0 failed=0
Nach Abschluss der Installation müssen Sie nur noch Ihren Server konfigurieren.
Mit der bluemind_requirements-Rolle kann man das Abonnement auf den bzw. die BlueMind-Server verschieben. Das Abonnement wird anhand der bmz- Abonnementdatei abgerufen, die in den Variablen der „bluemind_single_server“-Gruppe angegeben werden muss.
Damit kann auch überprüft werden, dass die Konfiguration des Systems der von BlueMind erwarteten Konfiguration entspricht.
Seit BlueMind 4.1 ist es auch möglich, die Aktualisierungen von BlueMind über die Befehlszeile zu starten. Auf diese Weise brauchen Sie für eine Aktualisierung nur noch ein Playbook zu starten, damit die BlueMind-Pakete aktualisiert und das /setup ausgeführt werden, ohne sich mit der Webschnittstelle verbinden zu müssen.
Achtung: Vergessen Sie nicht, diesen Anweisungstyp in einem Screen/Tmux oder einem anderen vergleichbaren Tool zu starten.
Aktualisierung des BlueMind-Servers:
root@nmc-Ansible:/etc/Ansible# Ansible-playbook -l bluemind_single_server playbooks/bm/bluemind_upgrade.yml
PLAY [Configuring BlueMind requirements]
*********************
TASK [Gathering Facts]
*********************
ok: [nmc-core.blue-mind.loc]
TASK [bluemind_upgrade : include_tasks]
*********************
skipping: [nmc-core.blue-mind.loc]
TASK [bluemind_upgrade : include_tasks]
*********************
included: /etc/Ansible/roles/bluemind_upgrade/tasks/debian.yml for nmc-core.blue-mind.loc
TASK [bluemind_upgrade : apt update cache]
*********************
ok: [nmc-core.blue-mind.loc]
TASK [bluemind_upgrade : Verify aptitude package]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_upgrade : apt update & clean]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_upgrade : apt dist-upgrade]
*********************
ok: [nmc-core.blue-mind.loc]
TASK [bluemind_upgrade : shell]
*********************
changed: [nmc-core.blue-mind.loc]
PLAY RECAP
*********************
nmc-core.blue-mind.loc : ok=7 changed=3 unreachable=0 failed=0
Installation eines Shard- und eines Core-Servers:
In diesem zweiten Beispiel werden wir einen Bluemind Core-Server installieren und die Daten der Nachrichten, Kontakte, Kalender usw. auf einen dedizierten Server (im Bluemind-Jargon „shard“ genannt) verlagern.
Auf die gleiche Weise wird die Datei u1000_requirements.yml abgerufen, die über diesen Link erhältlich ist.
Ansible-galaxy install -r u1000_requirements.yml
Variablen werden auf die gleiche Weise gefunden:
---
bluemind:
hosts:
nmc-core.blue-mind.loc:
Ansible_host: 192.168.0.15
Ansible_become_password: "SET_ROOT_PASSWORD_HERE"
Ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
Ansible_user: bluemind
nmc-data.blue-mind.loc:
Ansible_host: 192.168.0.16
Ansible_become_password: "SET_ROOT_PASSWORD_HERE"
Ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
Ansible_user: bluemind
vars:
sw_password: "admin"
external_url: "mail.blue-mind.loc"
tick_module: true
synchro_ldap_module: false
subscription_contact: "admin@blue-mind.loc"
synchro_ad_module: false
local_works_directory: "/usr/local/bluemind/"
email_domain: "blue-mind.loc"
subscription_file: "/usr/local/bluemind/subscribe.bmz"
shardip: "192.168.0.16"
export_ldap_module: false
core_server_fqdn: "nmc-core.blue-mind.loc"
In diesem Fall verlagert man in die bluemind_core-Rolle die Möglichkeit, die TICK-Module direkt zu installieren, LDAP oder AD zu synchronisieren oder LDAP zu exportieren.Man könnte sehr wohl die Einführung eines neuen Moduls für die Bereitstellung von bm-mapi oder die Signaturen von Unternehmen in Betracht ziehen.
root@nmc-Ansible:/etc/Ansible# Ansible-playbook -l bluemind playbooks/bm/bluemind_core_cyrus.yml
PLAY [Configuring BlueMind requirements]
*********************
TASK [Gathering Facts]
*********************
ok: [nmc-core.blue-mind.loc]
ok: [nmc-data.blue-mind.loc]
TASK [bluemind_requirements : Load Operating System : Debian 9]
*********************
ok: [nmc-data.blue-mind.loc] => (item=/etc/Ansible/roles/bluemind_requirements/vars/debian_family.yml)
ok: [nmc-core.blue-mind.loc] => (item=/etc/Ansible/roles/bluemind_requirements/vars/debian_family.yml)
TASK [bluemind_requirements : include_tasks]
*********************
skipping: [nmc-data.blue-mind.loc]
skipping: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : include_tasks]
*********************
included: /etc/Ansible/roles/bluemind_requirements/tasks/debian.yml for nmc-data.blue-mind.loc, nmc-core.blue-mind.loc
TASK [bluemind_requirements : assert]
*********************
ok: [nmc-data.blue-mind.loc] => {
"changed": false,
"msg": "All assertions passed"
}
ok: [nmc-core.blue-mind.loc] => {
"changed": false,
"msg": "All assertions passed"
}
TASK [bluemind_requirements : set /etc/hostname]
*********************
ok: [nmc-core.blue-mind.loc]
ok: [nmc-data.blue-mind.loc]
TASK [bluemind_requirements : Ensure en_US.UTF-8 locale exists]
*********************
ok: [nmc- core.blue-mind.loc]
changed: [nmc-data.blue-mind.loc]
TASK [bluemind_requirements : Set LC_ALL]
*********************
ok: [nmc-core.blue-mind.loc]
changed: [nmc-data.blue-mind.loc]
TASK [bluemind_requirements : Set LANG]
*********************
changed: [nmc-data.blue-mind.loc]
ok: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Install apt Packages]
*********************
changed: [nmc-core.blue-mind.loc]
changed: [nmc-data.blue-mind.loc]
TASK [bluemind_requirements : Update]
*********************
ok: [nmc-data.blue-mind.loc]
ok: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Upgrade apt packages]
*********************
changed: [nmc-data.blue-mind.loc]
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Install your subscribe file]
*********************
changed: [nmc-data.blue-mind.loc -> localhost]
changed: [nmc-core.blue-mind.loc -> localhost]
TASK [bluemind_requirements : Copy BlueMind repository file into the server]
*********************
changed: [nmc-core.blue-mind.loc]
changed: [nmc-data.blue-mind.loc]
TASK [bluemind_requirements : Adding BlueMind Public Key]
*********************
changed: [nmc-data.blue-mind.loc]
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Configure BM repository priority]
*********************
changed: [nmc-data.blue-mind.loc]
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : apt_repository]
*********************
skipping: [nmc-data.blue-mind.loc]
skipping: [nmc-core.blue-mind.loc]
TASK [bluemind_requirements : Update repositories]
*********************
changed: [nmc-data.blue-mind.loc]
changed: [nmc-core.blue-mind.loc]
PLAY [Install BlueMind Data]
*********************
TASK [Gathering Facts]
*********************
ok: [nmc-data.blue-mind.loc]
TASK [bluemind_cyrus : include_tasks]
*********************
skipping: [nmc-data.blue-mind.loc]
TASK [bluemind_cyrus : include_tasks]
*********************
included: /etc/Ansible/roles/bluemind_cyrus/tasks/debian.yml for nmc-data.blue-mind.loc
TASK [bluemind_cyrus : Install BlueMind Packages]
*********************
changed: [nmc-data.blue-mind.loc]
TASK [bluemind_cyrus : Install Tick Packages]
*********************
changed: [nmc-data.blue-mind.loc]
PLAY [Install BlueMind Core]
*********************
TASK [Gathering Facts]
*********************
ok: [nmc-core.blue-mind.loc]
TASK [bluemind_core : include_tasks]
*********************
skipping: [nmc-core.blue-mind.loc]
TASK [bluemind_core : include_tasks]
*********************
included: /etc/Ansible/roles/bluemind_core/tasks/debian.yml for nmc-core.blue-mind.loc
TASK [bluemind_core : Install BlueMind Packages]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_core : Install Tick Packages]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_core : Install Export LDAP Packages]
*********************
skipping: [nmc-core.blue-mind.loc]
TASK [bluemind_core : Install Synhcro LDAP Packages]
*********************
skipping: [nmc-core.blue-mind.loc]
TASK [bluemind_core : Install Synchro AD Packages]
*********************
skipping: [nmc-core.blue-mind.loc]
TASK [bluemind_core : Install and configure Core Service with a shard server]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_core : Install and configure Core Service]
*********************
skipping: [nmc-core.blue-mind.loc]
TASK [bluemind_core : Fetch mcast.id]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_core : Fetch bm-core.tok]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_core : Disabled bm-cyrus-imapd if shard is defined]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_core : Disabled bm-lmtpd if shard is defined]
*********************
changed: [nmc-core.blue-mind.loc]
TASK [bluemind_core : Configure Tick]
*********************
changed: [nmc-core.blue-mind.loc]
RUNNING HANDLER [bluemind_core : restart NGINX]
*********************
changed: [nmc-core.blue-mind.loc]
RUNNING HANDLER [bluemind_core : stop bm-cyrus-imapd]
*********************
changed: [nmc-core.blue-mind.loc]
RUNNING HANDLER [bluemind_core : stop bm-lmtpd]
*********************
changed: [nmc-core.blue-mind.loc]
PLAY RECAP
*********************
nmc-core.blue-mind.loc : ok=29 changed=18 unreachable=0 failed=0
nmc-data.blue-mind.loc : ok=20 changed=12 unreachable=0 failed=0
Und auf die gleiche Weise ist die Bereitstellung einer BlueMind-Instanz, die sich aus einem Core-Server, einem Back-End-Server für Daten und einem dedizierten Elasticsearch-Server zusammensetzt, anhand von Beispielen für eine Bereitstellung mit 3000 Benutzern möglich.
Beispiele für diese Verwendung finden Sie hier: https://forge.bluemind.net/stash/projects/BMAN/repos/ansible_sample/browse
Zum Abschluss …
Eine der größten Herausforderung bei der Installation eines neuen Mailsystems besteht darin, eine kontinuierliche und unterbrechungsfreie Integration und Bereitstellung zu ermöglichen. Dies erfordert gewöhnlich einen sehr hohen Kodierungsaufwand mit zahlreichen Tools und daher sehr viel Zeit und Ressourcen.
Ansible ist ein leistungsstarkes Open-Source-Automatisierungstool, das diesen Zeitaufwand und die Ressourcen auf ein Minimum reduziert und gleichzeitig die Verfügbarkeit des Dienstes garantiert. Bei Installationen mit zahlreichen Benutzern gestattet BlueMind mit Ansible eine Reduzierung der Ausfallzeiten, eine Minimierung der Fehler durch manuelle Vorgänge und einen wertvollen Zeitgewinn.
In Kürze werden zahlreiche komplementäre Rollen zur Verfügung stehen, die insbesondere den Start einer geplanten Aufgabe, die Konfiguration des BlueMind-Systems, die Konfiguration der Signaturen von Unternehmen, die LDAP-Synchronisierung usw. ermöglichen.
Im vorliegenden Artikel wird die Verwendung von Ansible beschrieben. Es ist aber durchaus möglich, sich auf andere Tools wie z. B. Saltstack, Puppet oder Chef zu stützen. BlueMind kann Sie bei der Übertragung der Ansible-Beispiele auf ein anderes Bereitstellungstool unterstützen.
Informationen über unseren DevOps-Ansatz und die kontinuierliche Integration erhalten Sie hier.
Verfasser des Artikels: Manuel Guilley, BlueMind-Integrator.