PhpRiot
News Archive
PhpRiot Newsletter
Your Email Address:

More information

Setting up EC2 for Drupal with Puppet

Note: This article was originally published at Planet PHP on 14 February 2012.
Planet PHP

I'm currently working on a project that involves running Drupal on Amazon EC2. To save time in setting up future new VM instances, I decided to take the opportunity to learn puppet. For the time being, I'm using a single VM to run the full LAMP stack and running puppet without a server by copying my puppet manifest to the VM and using puppet's apply command to apply it locally. However, this manifest can easily be adapted for a multi-VM environment. After some tinkering, I came up with the code below.

class web { package { 'httpd': ensure = 'present', } package { 'php': ensure = 'present', } # Update this to use your respective time zone value exec { 'php_config': command = '/bin/sed -i "s/^;date.timezone =/date.timezone = \'America\/Chicago\'/g" /etc/php.ini', require = Package['php'], } service { 'httpd': ensure = 'running', enable = true, hasrestart = true, hasstatus = true, subscribe = Package['httpd', 'php'], }# Drupal requirements start here package { 'php-pdo': ensure = 'present', require = Package['php'], } package { 'php-mysql': ensure = 'present', require = Package['php'], } package { 'php-xml': ensure = 'present', require = Package['php'], } package { 'php-gd': ensure = 'present', require = Package['php'], } package { 'php-mbstring': ensure = 'present', require = Package['php'], } # Drupal requirements end here } class mysql { package { 'mysql-server': ensure = 'present', } service { 'mysqld': ensure = 'running', enable = true, hasrestart = true, hasstatus = true, subscribe = Package['mysql-server'], } # Equivalent to /usr/bin/mysql_secure_installation without providing or setting a password exec { 'mysql_secure_installation': command = '/usr/bin/mysql -uroot -e "DELETE FROM mysql.user WHERE User=\'\'; DELETE FROM mysql.user WHERE User=\'root\' AND Host NOT IN (\'localhost\', \'127.0.0.1\', \'::1\'); DROP DATABASE IF EXISTS test; FLUSH PRIVILEGES;" mysql', require = Service['mysqld'], } } class {'web': } class {'mysql': }

With this code saved to a file called manifest.pp (.pp being the file extension for puppet manifests), I can spin up a VM and do the following to set it up:

scp -i key.pem manifest.pp ec2-user@host:~/ ssh -i key.pem ec2-user@host sudo yum upgrade -y sudo yum install -y puppet sudo puppet apply manifest.pp rm -f manifest.pp exit

At this point, I have a basic Apache/MySQL/PHP configuration capable of receiving a Drupal 7 installation.