So erstellen Sie ein Marionettenmodul zur Automatisierung der WordPress-Installation unter Ubuntu 14.04

Einführung

Puppet ist ein Konfigurationsmanagement-Tool, mit dem Systemadministratoren die Prozesse für die Wartung der IT-Infrastruktur eines Unternehmens automatisieren. Das Schreiben einzelner Puppet-Manifestdateien reicht aus, um einfache Aufgaben zu automatisieren. Wenn Sie jedoch einen gesamten Workflow automatisieren möchten, ist es ideal, stattdessen ein Puppet-Modul zu erstellen und zu verwenden. Ein Puppet-Modul ist nur eine Sammlung von Manifesten sowie von Dateien, die für diese Manifeste erforderlich sind, und wird sauber zu einem wiederverwendbaren und gemeinsam nutzbaren Paket gebündelt.

WordPress ist eine sehr beliebte Blogging-Plattform. Als Administrator müssen Sie möglicherweise WordPress und seine Abhängigkeiten (Apache, PHP und MySQL) sehr oft installieren. Dieser Installationsprozess ist ein guter Kandidat für die Automatisierung, und heute erstellen wir ein Puppet-Modul, das genau das tut.

Was dieses Tutorial beinhaltet

In diesem Tutorial erstellen Sie ein Puppet-Modul, das die folgenden Aktivitäten ausführen kann:

  • Installieren Sie Apache und PHP

  • Installieren Sie MySQL

  • Erstellen Sie eine Datenbank und einen Datenbankbenutzer unter MySQL für WordPress

  • Installieren und konfigurieren Sie WordPress

Anschließend erstellen Sie ein einfaches Manifest, das das Modul verwendet, um WordPress unter Ubuntu 14.04 einzurichten. Am Ende dieses Tutorials haben Sie ein wiederverwendbares WordPress-Modul und eine funktionierende WordPress-Installation auf dem Server.

Voraussetzungen

Sie benötigen Folgendes:

Schritt 1 - Puppet im Standalone-Modus installieren

Um Puppet mithilfe von zu installieren, muss das Repository des Puppet Labs-Pakets zur Liste der verfügbaren Repositorys hinzugefügt werden. Puppet Labs hat ein Debian-Paket, das dies tut. Der Name dieses Pakets hängt von der von Ihnen verwendeten Ubuntu-Version ab. Da dieses Tutorial Ubuntu 14.04, Trusty Tahr, verwendet, müssen Sie + puppetlabs-release-trusty.deb + herunterladen und installieren.

Erstellen Sie ein Verzeichnis und verschieben Sie es in Ihr "+ Downloads +" - Verzeichnis:

mkdir ~/Downloads
cd ~/Downloads

Holen Sie sich das Paket:

wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
sudo dpkg -i puppetlabs-release-trusty.deb

Sie können Puppet jetzt mit + apt-get installieren.

sudo apt-get update
sudo apt-get install puppet

Marionette ist jetzt installiert. Sie können überprüfen, indem Sie Folgendes eingeben:

sudo puppet --version

Es sollte die Version von Puppet drucken. Zum Zeitpunkt des Schreibens ist die neueste Version * 3.7.1 *.

  • Hinweis *: Wenn eine Warnmeldung angezeigt wird, überprüfen Sie die Lösung in Schritt 2.

Schritt 2 - Installieren Sie Apache- und MySQL-Module

Das Verwalten von Apache und MySQL ist so verbreitet, dass PuppetLabs eigene Module für sie hat. Wir werden diese Module verwenden, um Apache und MySQL zu installieren und zu konfigurieren.

Mit dem folgenden Befehl können Sie alle auf Ihrem System installierten Puppet-Module auflisten:

sudo puppet module list

Sie finden derzeit keine installierten Module.

Möglicherweise wird eine Warnmeldung mit folgendem Inhalt angezeigt:

Warning: Setting templatedir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations
(at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1071:in `each')

Um diese Warnung zu entfernen, bearbeiten Sie die Datei mit und kommentieren Sie die Zeile aus:

sudo nano /etc/puppet/puppet.conf

Nach den Änderungen sollte die Datei den folgenden Inhalt haben. Sie kommentieren gerade die Zeile aus:

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter


[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

Das sollte die Warnmeldung entfernen.

Installieren Sie die PuppetLabs Apache- und MySQL-Module:

sudo puppet module install puppetlabs-apache
sudo puppet module install puppetlabs-mysql

Überprüfen Sie die Installation, indem Sie die Module erneut auflisten:

sudo puppet module list

Sie sollten die Apache- und MySQL-Module in der Liste sehen können.

/etc/puppet/modules
├── puppetlabs-apache (v1.1.1)
├── puppetlabs-concat (v1.1.1)
├── puppetlabs-mysql (v2.3.1)
└── puppetlabs-stdlib (v4.3.2)

Schritt 3 - Erstellen Sie ein neues Modul für WordPress

Erstellen Sie ein neues Verzeichnis, in dem alle benutzerdefinierten Module gespeichert werden.

mkdir ~/MyModules
cd ~/MyModules

Nennen wir unser Modul. Generieren Sie das generische neue Modul:

puppet module generate do-wordpress --skip-interview

Wenn Sie das Flag nicht angeben, ist der Befehl interaktiv und fordert Sie mit verschiedenen Fragen zum Modul auf, die Datei zu füllen.

Zu diesem Zeitpunkt wurde ein neues Verzeichnis mit dem Namen erstellt. Es enthält Code für das Hauptfenster und eine Verzeichnisstruktur, die zum Erstellen des Moduls erforderlich ist.

Bearbeiten Sie die zu ersetzende Datei.

nano ~/MyModules/do-wordpress/metadata.json

Diese Änderung ist erforderlich, da in Puppet derzeit bug geöffnet ist. Nach der Änderung sollte Ihre Datei folgendermaßen aussehen:

{
 "name": "do-wordpress",
 "version": "0.1.0",
 "author": "do",
 "summary": null,
 "license": "Apache 2.0",
 "source": "",
 "project_page": null,
 "issues_url": null,
 "dependencies": [
   {"name":,"version_requirement":">= 1.0.0"}
 ]
}

Schritt 4 - Erstellen Sie ein Manifest, um Apache und PHP zu installieren

Verwenden Sie diese Option, um eine Datei mit dem Namen im Verzeichnis zu erstellen und zu bearbeiten, die Apache und PHP installiert:

nano ~/MyModules/do-wordpress/manifests/web.pp

Installieren Sie Apache und PHP mit den Standardparametern. Wir verwenden als MPM (Multi-Processing Module), um die Kompatibilität mit anderen Bibliotheken zu maximieren.

Fügen Sie der Datei genau den folgenden Code hinzu:

class wordpress::web {

   # Install Apache
   class {'apache':
       mpm_module => 'prefork'
   }

   # Add support for PHP
   class {'::apache::mod::php': }
}

Schritt 5 - Erstellen Sie eine Datei zum Speichern von Konfigurationsvariablen

Verwenden Sie diese Option, um eine Datei mit dem Namen im Verzeichnis zu erstellen und zu bearbeiten.

nano ~/MyModules/do-wordpress/manifests/conf.pp

In dieser Datei sollten Sie benutzerdefinierte Konfigurationswerte wie Kennwörter und Namen festlegen. Jede andere Konfigurationsdatei auf dem System bezieht ihre Werte aus dieser Datei.

Wenn Sie in Zukunft die Wordpress / MySQL-Konfiguration ändern müssen, müssen Sie nur diese Datei ändern.

Fügen Sie der Datei den folgenden Code hinzu. Stellen Sie sicher, dass Sie die Datenbankwerte durch die benutzerdefinierten Informationen ersetzen, die Sie mit WordPress verwenden möchten. Sie werden höchstwahrscheinlich den Wert von beibehalten wollen. Sie * sollten * das und ändern.

Variablen, die Sie bearbeiten können oder sollten, sind markiert in:

class wordpress::conf {
   # You can change the values of these variables
   # according to your preferences

   $root_password = ''
   $db_name = ''
   $db_user = ''
   $db_user_password = ''
   $db_host = ''

   # Don't change the following variables

   # This will evaluate to wp@localhost
   $db_user_host = "${db_user}@${db_host}"

   # This will evaluate to wp@localhost/wordpress.*
   $db_user_host_db = "${db_user}@${db_host}/${db_name}.*"
}

Schritt 6 - Erstellen Sie ein Manifest für MySQL

Verwenden Sie diese Option, um eine Datei mit dem Namen im Verzeichnis zu erstellen und zu bearbeiten:

nano ~/MyModules/do-wordpress/manifests/db.pp

Dieses Manifest bewirkt Folgendes:

  • Installiert den MySQL Server

  • Legt das Root-Passwort für den MySQL-Server fest

  • Erstellt eine Datenbank für Wordpress

  • Erstellt einen Benutzer für Wordpress

  • Gewährt dem Benutzer Berechtigungen für den Zugriff auf die Datenbank

  • Installiert den MySQL-Client und Bindungen für verschiedene Sprachen

    Alle oben genannten Aktionen werden von den Klassen "+

    mysql :: server" und "+ :: mysql :: client" ausgeführt.

Fügen Sie der Datei den folgenden Code genau wie gezeigt hinzu. Inline-Kommentare dienen dem besseren Verständnis:

class wordpress::db {

   class { '::mysql::server':

       # Set the root password
       root_password => $wordpress::conf::root_password,

       # Create the database
       databases => {
           "${wordpress::conf::db_name}" => {
               ensure => 'present',
               charset => 'utf8'
           }
       },

       # Create the user
       users => {
           "${wordpress::conf::db_user_host}" => {
               ensure => present,
               password_hash => mysql_password("${wordpress::conf::db_user_password}")
           }
       },

       # Grant privileges to the user
       grants => {
           "${wordpress::conf::db_user_host_db}" => {
               ensure     => 'present',
               options    => ['GRANT'],
               privileges => ['ALL'],
               table      => "${wordpress::conf::db_name}.*",
               user       => "${wordpress::conf::db_user_host}",
           }
       },
   }

   # Install MySQL client and all bindings
   class { '::mysql::client':
       require => Class['::mysql::server'],
       bindings_enable => true
   }
}

Schritt 7 - Laden Sie das neueste WordPress herunter

Laden Sie das neueste WordPress-Installationspaket von der http://wordpress.org [offizielle Website] herunter und speichern Sie es im Verzeichnis.

Erstellen und verschieben Sie in ein neues Verzeichnis:

mkdir ~/MyModules/do-wordpress/files
cd ~/MyModules/do-wordpress/files

Laden Sie die Dateien herunter:

wget http://wordpress.org/latest.tar.gz

Schritt 8 - Erstellen Sie eine Vorlage für wp-config.php

Möglicherweise wissen Sie bereits, dass Wordpress eine Datei benötigt, die Informationen über die MySQL-Datenbank enthält, die es verwenden darf. Eine Vorlage wird verwendet, damit Puppet diese Datei mit den richtigen Werten erstellen kann.

Erstellen Sie ein neues Verzeichnis mit dem Namen.

mkdir ~/MyModules/do-wordpress/templates

In das Verzeichnis verschieben:

cd /tmp

Extrahieren Sie die WordPress-Dateien:

tar -xvzf ~/MyModules/do-wordpress/files/latest.tar.gz  # Extract the tar

Die heruntergeladene Datei enthält eine Datei. Kopieren Sie die Datei in das Verzeichnis als.

cp /tmp/wordpress/wp-config-sample.php ~/MyModules/do-wordpress/templates/wp-config.php.erb

Bereinigen Sie das Verzeichnis:

rm -rf /tmp/wordpress  # Clean up

Bearbeiten Sie die Datei + wp-config.php.erb + mit.

nano ~/MyModules/do-wordpress/templates/wp-config.php.erb

Verwenden Sie die in definierten Variablen, um die Werte für,, und festzulegen. Sie können die unten gezeigten genauen Einstellungen verwenden, wodurch Ihre tatsächlichen Variablen aus der zuvor erstellten Datei abgerufen werden. Die mit gekennzeichneten Elemente entsprechen genau den Änderungen, die Sie in den vier datenbankbezogenen Zeilen vornehmen müssen.

Wenn Sie die Kommentare ignorieren, sollte Ihre Datei folgendermaßen aussehen:

<?php
define('DB_NAME', '');
define('DB_USER', '');
define('DB_PASSWORD', '');
define('DB_HOST', '');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

$table_prefix  = 'wp_';

define('WP_DEBUG', false);

if ( !defined('ABSPATH') )
   define('ABSPATH', dirname(__FILE__) . '/');

require_once(ABSPATH . 'wp-settings.php');

Schritt 9 - Erstellen Sie ein Manifest für Wordpress

Verwenden Sie diese Option, um eine Datei mit dem Namen "+ manifests +" zu erstellen und zu bearbeiten:

nano ~/MyModules/do-wordpress/manifests/wp.pp

Dieses Manifest führt die folgenden Aktionen aus:

  • Kopiert den Inhalt des Wordpress-Installationspakets nach. Dies muss getan werden, da die Standardkonfiguration von Apache Dateien ausliefert

  • Erzeugt eine Datei mit der Vorlage

Fügen Sie der Datei den folgenden Code genau wie gezeigt hinzu:

class wordpress::wp {

   # Copy the Wordpress bundle to /tmp
   file { '/tmp/latest.tar.gz':
       ensure => present,
       source => "puppet:///modules/wordpress/latest.tar.gz"
   }

   # Extract the Wordpress bundle
   exec { 'extract':
       cwd => "/tmp",
       command => "tar -xvzf latest.tar.gz",
       require => File['/tmp/latest.tar.gz'],
       path => ['/bin'],
   }

   # Copy to /var/www/
   exec { 'copy':
       command => "cp -r /tmp/wordpress/* /var/www/",
       require => Exec['extract'],
       path => ['/bin'],
   }

   # Generate the wp-config.php file using the template
   file { '/var/www/wp-config.php':
       ensure => present,
       require => Exec['copy'],
       content => template("wordpress/wp-config.php.erb")
   }
}

Schritt 10 - Erstellen Sie init.pp, ein Manifest, das die anderen Manifeste integriert

Jedes Puppet-Modul muss eine Datei mit dem Namen haben. Wenn ein externes Manifest Ihr Modul enthält, wird der Inhalt dieser Datei ausgeführt. Der Befehl + puppet module generate + hat bereits eine generische Version dieser Datei für Sie erstellt.

Bearbeiten mit * nano *:

nano ~/MyModules/do-wordpress/manifests/init.pp

Lassen Sie die Datei den folgenden Inhalt haben.

Sie können die kommentierten Erklärungen und Beispiele oben lassen. Es sollte einen leeren Block für die Klasse "+ wordpress " geben. Fügen Sie den hier gezeigten Inhalt hinzu, so dass der ` wordpress +` - Block wie der unten gezeigte aussieht. Stellen Sie sicher, dass die Klammern richtig verschachtelt sind.

Inline-Kommentare erläutern die Einstellungen:

class wordpress {
   # Load all variables
   class { 'wordpress::conf': }

   # Install Apache and PHP
   class { 'wordpress::web': }

   # Install MySQL
   class { 'wordpress::db': }

   # Run Wordpress installation only after Apache is installed
   class { 'wordpress::wp':
       require => Notify['Apache Installation Complete']
   }

   # Display this message after MySQL installation is complete
   notify { 'MySQL Installation Complete':
       require => Class['wordpress::db']
   }

   # Display this message after Apache installation is complete
   notify { 'Apache Installation Complete':
       require => Class['wordpress::web']
   }

   # Display this message after Wordpress installation is complete
   notify { 'Wordpress Installation Complete':
       require => Class['wordpress::wp']
   }
}

Schritt 11 - Erstellen Sie das WordPress-Modul

Das Modul kann nun gebaut werden. Wechseln Sie in das Verzeichnis MyModules:

cd ~/MyModules

Verwenden Sie den Befehl + puppet module build +, um das Modul zu erstellen:

sudo puppet module build do-wordpress

Sie sollten die folgende Ausgabe eines erfolgreichen Builds sehen:

Notice: Building /home/user/MyModules/do-wordpress for release
Module built: /home/user/MyModules/do-wordpress/pkg/do-wordpress-0.1.0.tar.gz

Das Modul kann jetzt verwendet und freigegeben werden. Sie finden das installierbare Bundle im Verzeichnis des Moduls.

Schritt 12 - Installieren Sie das WordPress-Modul

Um das Modul verwenden zu können, muss es zuerst installiert werden. Verwenden Sie den Befehl + puppet module install.

sudo puppet module install ~/MyModules/do-wordpress/pkg/do-wordpress-0.1.0.tar.gz

Wenn Sie nach der Installation den Befehl + sudo puppet module list ausführen, sollte eine Ausgabe ähnlich der folgenden angezeigt werden:

/etc/puppet/modules
├── do-wordpress (v0.1.0)
├── puppetlabs-apache (v1.1.1)
├── puppetlabs-concat (v1.1.1)
├── puppetlabs-mysql (v2.3.1)
└── puppetlabs-stdlib (v4.3.2)

Nach der Installation sollten Sie dieses Modul für alle Puppet-Befehle als "+ do-wordpress +" bezeichnen.

Aktualisieren oder Deinstallieren des Moduls

Wenn Sie Installationsfehler erhalten oder Konfigurationsprobleme mit WordPress feststellen, müssen Sie wahrscheinlich Änderungen an einem oder mehreren der Manifeste und zugehörigen Dateien vornehmen, die wir zuvor im Tutorial erstellt haben.

Oder Sie möchten das Modul einfach irgendwann deinstallieren.

Verwenden Sie diesen Befehl, um das Modul zu aktualisieren oder zu deinstallieren:

sudo puppet module uninstall do-wordpress

Wenn Sie nur deinstallieren möchten, sind Sie fertig.

Nehmen Sie andernfalls die erforderlichen Änderungen vor, erstellen Sie das Modul neu und installieren Sie es erneut (siehe Schritte 11-12).

Schritt 13 - Verwenden Sie das Modul in einer eigenständigen Manifest-Datei, um WordPress zu installieren

Um das Modul zur Installation von Wordpress zu verwenden, müssen Sie ein neues Manifest erstellen und anwenden.

Verwenden Sie diese Option, um eine Datei mit dem Namen "+ install-wp.pp +" im Verzeichnis (oder einem anderen Verzeichnis Ihrer Wahl) zu erstellen und zu bearbeiten.

nano /tmp/install-wp.pp

Fügen Sie der Datei genau wie gezeigt den folgenden Inhalt hinzu:

class { 'wordpress':
}

Wenden Sie das Manifest mit + puppet apply + an. Dies ist der Schritt, der WordPress auf Ihrem Server zum Laufen bringt:

sudo puppet apply /tmp/install-wp.pp

Es ist in Ordnung, ein oder zwei Warnungen zu sehen.

Es wird eine Weile dauern, bis dies ausgeführt wird. Wenn dies abgeschlossen ist, werden Wordpress und alle zugehörigen Abhängigkeiten installiert und ausgeführt.

Die letzten erfolgreichen Installationszeilen sollten folgendermaßen aussehen:

Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/authn_core.load]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/status.load]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/mpm_prefork.load]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/status.conf]/ensure: removed
Notice: /Stage[main]/Apache/File[/etc/apache2/mods-enabled/mpm_prefork.conf]/ensure: removed
Notice: /Stage[main]/Apache::Service/Service[httpd]: Triggered 'refresh' from 55 events
Notice: Finished catalog run in 55.91 seconds

Sie können einen Browser öffnen und http: /// besuchen. Sie sollten den WordPress-Begrüßungsbildschirm sehen.

Von hier aus können Sie Ihr WordPress-Kontrollfeld normal konfigurieren.

Bereitstellen auf mehreren Servern

Wenn Sie Puppet in einer Agent-Master-Konfiguration ausführen und WordPress auf einem oder mehreren Remotecomputern installieren möchten, müssen Sie lediglich die Zeile + class {'wordpress':} + zu den * node * -Definitionen von hinzufügen diese Maschinen. Weitere Informationen zur Agent-Master-Konfiguration und zu Knotendefinitionen finden Sie in diesem Lernprogramm:

Fazit

Mit diesem Tutorial haben Sie gelernt, ein eigenes Puppet-Modul zu erstellen, das WordPress für Sie einrichtet. Darauf können Sie weiter aufbauen, um Unterstützung für die automatische Installation bestimmter Designs und Plugins hinzuzufügen. Wenn Sie der Meinung sind, dass Ihr Modul auch für andere nützlich sein könnte, können Sie es auf Puppet Forge veröffentlichen.