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:
-
* Ubuntu 14.04 * Server
-
Ein sudo Benutzer
-
Sie sollten wissen, wie Sie WordPress verwalten, wenn Sie das Setup der Systemsteuerung erreicht haben. Wenn Sie dabei Hilfe benötigen, lesen Sie die späteren Abschnitte unter https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-ubuntu-14-04#step-five-%E2%80 % 94-Installation-über-das-Web-Interface-abschließen [dieses Tutorial]
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.
Bild: https://assets.digitalocean.com/articles/wordpress_puppet/1.png [WordPress Welcome]
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:
https://www.digitalocean.com/community/tutorials/installationsanleitung für die Serverinfrastruktur
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.