Morot : Puppet : déployer automatiquement une applications Web avec les services Apache/PHP/MySQL
dimanche 15 octobre 2017 à 17:42Dans ce court article, je vous propose de découvrir comment avec Puppet, il est simple de déployer un serveur Web complet prêt à accueillir une application web depuis son dépôt GIT. Je vais prendre pour exemple le célèbre CMS WordPress.
Premièrement, on installe les modules dont on aura besoin :
puppet module install puppetlabs-apache --version 2.3.0 puppet module install puppetlabs-mysql --version 5.1.0 puppet module install puppetlabs-vcsrepo
Partons sur une simple définition de node dans le fichier /etc/puppetlabs/code/environments/production/manifests/site.pp contenant notre serveur web. On installe Apache avec le moteur prefork et non pas worker fourni par défaut car on souhaite installer mod_php. Enfin on créé un VirtualHost www.morot.test dont les fichiers seront dans le répertoire /srv/www :
node 'www' { class { 'apache': default_vhost => false, mpm_module => prefork, } class { 'apache::mod::php': } apache::vhost { 'www.morot.test': port => '80', docroot => '/srv/www/', } }
On ajoute ensuite le serveur MySQL avec les modules php pour mysql :
class { '::mysql::server': root_password => 'secret', remove_default_accounts => true, } class { 'mysql::bindings::php': }
Nous avons ensuite besoin d’une base de données dédiée pour notre WordPress, nous allons la créé avec un compte autorisé à y accéder. Le mot de passe est encodé au format de hash de la commande MySQL PASSWORD(‘secret’); :
mysql_database { 'wordpress': ensure => 'present', charset => 'utf8', collate => 'utf8_general_ci', } mysql_user { 'wordpress@localhost': ensure => 'present', password_hash => '*14E65567ABDB5135D0CFD9A70B3032C179A49EE7' } mysql_grant { 'wordpress@localhost/wordpress.*': ensure => 'present', options => ['GRANT'], privileges => ['ALL'], table => 'wordpress.*', user => 'wordpress@localhost', }
L’ensemble des bases de données seront sauvegardées tous les jours à 02:10 et conservées sept jours. Le script est fourni par le module Puppet.
class { 'mysql::server::backup': backupuser => 'backup', backuppassword => 'secret', backupdir => '/srv/mysqlbackups', backupcompress => true, backuprotate => 7, file_per_database => true, time => ['2','10'] }
Enfin, il ne nous reste plus qu’à récupérer les sources de notre application depuis le dépôt, pour une version taillée pour un développeur il serait possible de prendre la branche master.
vcsrepo { '/srv/www': ensure => latest, provider => git, source => 'https://github.com/WordPress/WordPress.git', revision => '4.8-branch', }
Nous avons terminé, pour aller au bout des choses, il faudrait pousser un wp-config.php depuis un template Puppet et injecter le SQL modèle lors de la création de la base. En version complète notre manifeste donne :
node 'www' { class { 'apache': default_vhost => false, mpm_module => prefork, } class { 'apache::mod::php': } apache::vhost { 'www.morot.test': port => '80', docroot => '/srv/www/', } class { '::mysql::server': root_password => 'secret', remove_default_accounts => true, } class { 'mysql::bindings::php': } mysql_database { 'wordpress': ensure => 'present', charset => 'utf8', collate => 'utf8_general_ci', } mysql_user { 'wordpress@localhost': ensure => 'present', password_hash => '*14E65567ABDB5135D0CFD9A70B3032C179A49EE7' } mysql_grant { 'wordpress@localhost/wordpress.*': ensure => 'present', options => ['GRANT'], privileges => ['ALL'], table => 'wordpress.*', user => 'wordpress@localhost', } class { 'mysql::server::backup': backupuser => 'backup', backuppassword => 'secret', backupdir => '/srv/mysqlbackups', backupcompress => true, backuprotate => 7, file_per_database => true, time => ['2','10'] } vcsrepo { '/srv/www': ensure => latest, provider => git, source => 'https://github.com/WordPress/WordPress.git', revision => '4.8-branch', } }
Original post of Morot.Votez pour ce billet sur Planet Libre.
Articles similaires
- Morot : Puppet : automatiser la construction d’un volume GlusterFS répliqué (14/09/2017)
- theClimber : Extraire les strings d'une application basée sur Hyla TPL ou sur PHP Lib (21/12/2010)
- theClimber : Récupérer les tweets d'une instance statusnet en live avec javascript (02/02/2011)
- ®om : Configurer le thème des applications GTK sous KDE (15/05/2012)
- crowd42 : Cours et exercices gratuits sur la sécurité des applications web (12/05/2013)