Tehtävä 6 – Oma puppet moduli
GitHub – Repository – tässä ovat modulin manifesteja.
Kurssin pääteksi viimeiseenä tehtävänä on rakentaa oma moduli.
Vähän ajateltuna päätin valita tällaisen tehtävän josta on hyötyä jatkossakin. WordPress asentavan modulin teko kuulosti mielenkintoiselta, mutta vähän haastavalta. Loppujen lopuksi päätin ryhtyä rakentamaan just sen.
Suunnittelu.
Kuten jokainen WordPress asentanut tietää, asennus kokonaisuus koostuu muutamasta asiasta. Ne ovat LAMP-asennus, tietokannan muokkaminen (uusi käyttäjä, salasanat), WordPress paketin asennus. Päätin tehdä oma manifesti jokaiselle vaiheille erikseen. Päätin käyttää myös Puppet Labs Package joka järjestää modulin niin että siitä voidaan muutamalla komennolla luoda tar.gz paketti ja asentaa sitten toiseen koneen. Aloitin laatamalla sen.
$ sudo apt-get update $ wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb sudo dpkg -i puppetlabs-release-trusty.deb
$ sudo apt-get install puppet $ sudo puppet module install puppetlabs-apache $ sudo puppet module install puppetlabs-mysql $mkdir ~/MyModules
$ cd~/MyModules
Generoin modulin rungon jonka sitten lähden muokkamaan:
$ sudo puppet module generate do-wordpress --skip-interview
–skip-interview ohittaa tietojen syötön metadata.json tiedostoon jossa modulin metadata sijaitse
Sitten kirjoitin ensimmäisen manifestin joka käsitelee Apache ja PHP:tä
$ nano ~/MyModules/do-wordpress/manifests/web.pp
Käytä "Takaisin" painiketta katsottua manifestia GitHub.com:issa.
https://github.com/xelsinki/test/blob/master/web.pp
Seuraavaksi kirjoitin manifestin jossa sijaitsee muuttujat.
$ nano ~/MyModules/do-wordpress/manifests/conf.pp
https://github.com/xelsinki/test/blob/master/conf.pp
Ideana on se, että muuttujia vaihdetaan vain tässä tiedostossa. Kun moduli käynnistetään toisella serverilla, niin riittää että yksityistietoja muokkataan vain tässä.
Muuttujia on yhteensä 7:
$root_password
– root käyttäjän salasana
$db_name
– tietokannan nimi
$db_user
– tietokannan käyttäjä
$db_host
– host missä tietokanta sijaitse
$db_user_password
-tietokannan käyttäjän salasana
ja vielä 2 muuttujia koostuvia mitkä tarvitaan seuraavassa manifestissa.
$db_user_host = "${db_user}@${db_host}"
– käyttäjä@host
$db_user_host_db= "${db_user}@${db_host}/${db_name}.*"
– käyttäjä@host/tietokanta.*
Seuraavaksi kirjoitin tietokanta moduulin:
$ sudo nano ~/MyModules/do-wordpress/manifests/db.pp
https://github.com/xelsinki/test/blob/master/db.pp
Tässä manifestissa muokkataan MySQL Server ja Client tietoja.
– Määritetään root salasana
– Luodaan wordpress tietokanta
– Luodaan wordpress tietokanna käyttäjän
– Annetaan käyttäjälle täydet oikeuden muokkata tietokanta
Seuraavaksi laatasin wordpress asennus paketin. Valmista pakettia Ubuntun repositorissa ei ole, niin on helpompi laadata sen käsiin do-wordpress/files kansioon. Purkasin sen /tmp kansioon, otin kopion wp-config-sample.php tiedostosta do-wordpress/template kansioon ja käytän sen rungona wordpress konfiguraatiossa. Sitten tyhjensin /tmp kansion ja avasin kopioidun tiedoston muokattavaksi.
mkdir ~/MyModules/do-wordpress/files
cd ~/MyModules/do-wordpress/files
wget http://wordpress.org/latest.tar.gz
mkdir ~/MyModules/do-wordpress/templates
cd /tmp
tar -xvzf ~/MyModules/do-wordpress/files/latest.tar.gz
cp /tmp/wordpress/wp-config-sample.php ~/MyModules/do-wordpress/templates/wp-config.php.erb
rm -rf /tmp/wordpress
sudo nano ~/MyModules/do-wordpress/templates/wp-config.php.erb
https://github.com/xelsinki/test/blob/master/wp-config.php.erb
Laitoin sinne muutujat.
<?php
define('DB_NAME', '<%= scope.lookupvar('wordpress::conf::db_name') %>');
define('DB_USER', '<%= scope.lookupvar('wordpress::conf::db_user') %>');
define('DB_PASSWORD', '<%= scope.lookupvar('wordpress::conf::db_user_password') %>');
define('DB_HOST', '<%= scope.lookupvar('wordpress::conf::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');
Seuraavaksi kirjoitin wordpress manifestin:
nano ~/MyModules/do-wordpress/manifests/wp.pp
https://github.com/xelsinki/test/blob/master/wp.pp
Tässä manifestissa puretaan ladattu latest.tar.gz (wordpress paketti), kopioidaan sen /var/www kansioon jossa sijaitse apachen pyörittämät web-sivut. Viimeisenä kopiodaan templateista aikaisemmin luomani wp-config.php.erb oikeaan paikaan josta wordpress hae konfiguraatiot.
Viimeisenä modulin manifestina kirjoitin init.pp jossa määritään käynnistysvuorot:
nano ~/MyModules/do-wordpress/manifests/init.pp