├── .gitignore ├── .gitmodules ├── Dockerfile ├── README.md ├── Vagrantfile ├── docker ├── htaccess ├── openstack ├── start └── wordpress.sql /.gitignore: -------------------------------------------------------------------------------- 1 | .vagrant 2 | openrc 3 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "wordpress"] 2 | path = wordpress 3 | url = git@github.com:paulczar/WordPress.git 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Creates wordpress install 2 | # 3 | # Author: Paul Czarkowski 4 | # Date: 08/11/2013 5 | 6 | 7 | FROM paulczar/apache2-php 8 | MAINTAINER Paul Czarkowski "paul@paulcz.net" 9 | 10 | RUN apt-get -y install php5-mysql 11 | 12 | ADD wordpress /var/www 13 | ADD start /wordpress/start 14 | RUN chmod 700 /wordpress/start 15 | ADD wordpress.sql /wordpress/wordpress.sql 16 | 17 | CMD ["/wordpress/start"] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker Web Application Demo 2 | 3 | This demo is a lightweight bash script to bring together several Docker Containers to create a tiered web application like you would deploy to Amazon. 4 | 5 | It is as simple as running `./run_demo` and takes about 5 seconds to build the whole stack, 4 seconds of which are are artificial sleeps to allow mysql to keep up. 6 | 7 | An environment like this is perfect for testing major version changes, database schema changes, etc very quickly and easily during the development process. 8 | 9 | See the following Repos for the Docker buildfiles 10 | 11 | * https://github.com/paulczar/docker-wordpress 12 | * https://github.com/paulczar/docker-apache2 13 | * https://github.com/paulczar/docker-haproxy 14 | * https://github.com/paulczar/docker-mysql 15 | 16 | # Architecture 17 | 18 | ``` 19 | 20 | | :80 21 | | 22 | -------------- 23 | | HAProxy | 24 | -------------- 25 | | | 26 | :80 / \ :80 27 | / \ 28 | -------------- -------------- 29 | | Apache/WP | | Apache/WP | 30 | -------------- -------------- 31 | \ / 32 | :3306 \ / :3306 33 | -------------- 34 | | HAProxy | 35 | -------------- 36 | | | 37 | :3306 / \ :3306 38 | / \ 39 | -------------- -------------- 40 | | MySQL01 | | MySQL02 | 41 | -------------- -------------- 42 | ^ ^ 43 | |______________| 44 | 45 | Master <-> Master 46 | Replication 47 | 48 | ``` 49 | 50 | # Requirements 51 | 52 | * Docker 53 | * Internet 54 | 55 | 56 | # Launch the Demo 57 | 58 | you may want to preload the docker containers 59 | 60 | ``` 61 | docker pull paulczar/mysql 62 | docker pull paulczar/apache2-wordpress 63 | docker pull paulczar/haproxy-mysql 64 | docker pull paulczar/haproxy-web 65 | ``` 66 | 67 | ## Vagrant Dev Environment 68 | 69 | `$ vagrant up` 70 | 71 | will launch the Vagrant dev environment. 72 | 73 | ## Docker Test Environment 74 | 75 | `$ source ./docker` 76 | 77 | will deploy a test environment in your local docker 78 | 79 | ## Openstack Prod Environment 80 | 81 | _needs to be the openstack docker - https://github.com/paulczar/cookbook-openstack-docker_ 82 | 83 | `$ source ./openstack` 84 | 85 | 86 | # Output should look like 87 | 88 | ``` 89 | Create MySQL Tier 90 | ----------------- 91 | * Create MySQL01 92 | * Create MySQL02 93 | * Sleep for two seconds for servers to come online... 94 | * Creat replication user 95 | * Export Data from MySQL01 to MySQL02 96 | -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly. 97 | * Set MySQL01 as master on MySQL02 98 | * Set MySQL02 as master on MySQL01 99 | * Start Slave on both Servers 100 | * Create database 'wordpress' on MySQL01 101 | * Sleep 2 seconds, then check that database 'wordpress' exists on MySQL02 102 | wordpress 103 | 104 | Create MySQL Load Balancer 105 | -------------------------- 106 | * Create HAProxy-MySQL 107 | * Check our haproxy works 108 | (should show alternating server_id) 109 | server_id 1 110 | server_id 2 111 | server_id 1 112 | server_id 2 113 | 114 | Create Wordpress Web Servers 115 | ------------------------ 116 | * Create WordPress01 117 | * Create WordPress02 118 | 119 | Create Web Load Balancer 120 | -------------------------- 121 | * Create HAProxy-Web 122 | * Check it works 123 | PHP API 20090626 124 | Environment Created! 125 | -------------------- 126 | 127 | Browse to http://172.17.0.30 to access your wordpress site 128 | 129 | Variables available fo you :- 130 | 131 | MYSQL01_IP : 172.17.0.25 132 | MYSQL02_IP : 172.17.0.26 133 | HAPROXY_MYSQL_IP : 172.17.0.27 134 | WORDPRESS1_IP : 172.17.0.28 135 | WORDPRESS2_IP : 172.17.0.29 136 | HAPROXY_WEB_IP : 172.17.0.30 137 | 138 | ``` 139 | 140 | # Authors 141 | 142 | Paul Czarkowski - paul@paulcz.net 143 | 144 | # License 145 | 146 | Copyright 2013 Paul Czarkowski 147 | 148 | Licensed under the Apache License, Version 2.0 (the "License"); 149 | you may not use this file except in compliance with the License. 150 | You may obtain a copy of the License at 151 | 152 | http://www.apache.org/licenses/LICENSE-2.0 153 | 154 | Unless required by applicable law or agreed to in writing, software 155 | distributed under the License is distributed on an "AS IS" BASIS, 156 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 157 | See the License for the specific language governing permissions and 158 | limitations under the License. 159 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | require "vagrant" 5 | 6 | if Vagrant::VERSION < "1.2.1" 7 | raise "Use a newer version of Vagrant (1.2.1+)" 8 | end 9 | 10 | 11 | # Allows us to pick a different box by setting Environment Variables 12 | BOX_NAME = ENV['BOX_NAME'] || "precise64" 13 | BOX_URI = ENV['BOX_URI'] || "https://opscode-vm-bento.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_provisionerless.box" 14 | 15 | Vagrant.configure("2") do |config| 16 | # Cachier - speeds up subsequent runs. 17 | # vagrant plugin install vagrant-cachier 18 | config.cache.auto_detect = true 19 | #config.cache.enable_nfs = true 20 | 21 | 22 | config.vm.define :wordpress do |config| 23 | config.vm.hostname = "wordpress" 24 | config.vm.box = BOX_NAME 25 | config.vm.box_url = BOX_URI 26 | config.vm.synced_folder "wordpress", "/var/www" 27 | config.vm.network :private_network, ip: "33.33.33.33" 28 | config.vm.network :forwarded_port, guest: 80, host: 8080 29 | config.ssh.forward_agent = true 30 | config.vm.provision :shell, :inline => <<-SCRIPT 31 | apt-get update 32 | DEBIAN_FRONTEND=noninteractive apt-get -y -q install apache2 mysql-server php5-mysql php5 libapache2-mod-php5 33 | service apache2 restart 34 | /usr/bin/mysqladmin create wordpress 35 | [[ -e /vagrant/wordpress.sql ]] && /usr/bin/mysql wordpress < /vagrant/wordpress.sql 36 | echo you may want to run the following :- 37 | #echo "sudo su -c 'echo \"33.33.33.33 wordpress\" >> /etc/hosts'" 38 | echo "sudo sed -i 's/^.*wordpress.*$/33.33.33.33 wordpress/' /etc/hosts" 39 | SCRIPT 40 | config.vm.provider :virtualbox do |vb| 41 | vb.customize ["modifyvm", :id, "--cpus", 2] 42 | vb.customize ["modifyvm", :id, "--memory", 2048] 43 | end 44 | end 45 | end 46 | -------------------------------------------------------------------------------- /docker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo 4 | echo "Create MySQL Tier" 5 | echo "-----------------" 6 | echo "* Create MySQL01" 7 | 8 | MYSQL01=$(docker run -d paulczar/mysql mysqld_safe --server-id=1 --log-bin=mysql-bin --log-slave-updates=1 --auto_increment_increment=2 --auto_increment_offset=1) 9 | MYSQL01_IP=$(docker inspect $MYSQL01 | grep IPAd | awk -F'"' '{print $4}') 10 | 11 | echo "* Create MySQL02" 12 | 13 | MYSQL02=$(docker run -d paulczar/mysql mysqld_safe --server-id=2 --log-bin=mysql-bin --log-slave-updates=1 --auto_increment_increment=2 --auto_increment_offset=2) 14 | MYSQL02_IP=$(docker inspect $MYSQL02 | grep IPAd | awk -F'"' '{print $4}') 15 | 16 | echo "* Sleep for two seconds for servers to come online..." 17 | sleep 2 18 | 19 | echo "* Creat replication user" 20 | 21 | mysql -uroot -proot -h $MYSQL01_IP -AN -e 'GRANT REPLICATION SLAVE ON *.* TO "replication"@"%" IDENTIFIED BY "password";' 22 | mysql -uroot -proot -h $MYSQL01_IP -AN -e 'flush privileges;' 23 | 24 | 25 | echo "* Export Data from MySQL01 to MySQL02" 26 | 27 | mysqldump -uroot -proot -h $MYSQL01_IP --single-transaction --all-databases \ 28 | --flush-privileges | mysql -uroot -proot -h $MYSQL02_IP 29 | 30 | echo "* Set MySQL01 as master on MySQL02" 31 | 32 | MYSQL01_Position=$(mysql -uroot -proot -h $MYSQL01_IP -e "show master status \G" | grep Position | awk '{print $2}') 33 | MYSQL01_File=$(mysql -uroot -proot -h $MYSQL01_IP -e "show master status \G" | grep File | awk '{print $2}') 34 | 35 | mysql -uroot -proot -h $MYSQL02_IP -AN -e "CHANGE MASTER TO master_host='$MYSQL01_IP', master_port=3306, \ 36 | master_user='replication', master_password='password', master_log_file='$MYSQL01_File', \ 37 | master_log_pos=$MYSQL01_Position;" 38 | 39 | echo "* Set MySQL02 as master on MySQL01" 40 | 41 | MYSQL02_Position=$(mysql -uroot -proot -h $MYSQL02_IP -e "show master status \G" | grep Position | awk '{print $2}') 42 | MYSQL02_File=$(mysql -uroot -proot -h $MYSQL02_IP -e "show master status \G" | grep File | awk '{print $2}') 43 | 44 | mysql -uroot -proot -h $MYSQL01_IP -AN -e "CHANGE MASTER TO master_host='$MYSQL02_IP', master_port=3306, \ 45 | master_user='replication', master_password='password', master_log_file='$MYSQL02_File', \ 46 | master_log_pos=$MYSQL02_Position;" 47 | 48 | echo "* Start Slave on both Servers" 49 | mysql -uroot -proot -h $MYSQL01_IP -AN -e "start slave;" 50 | mysql -uroot -proot -h $MYSQL02_IP -AN -e "start slave;" 51 | 52 | echo "* Create database 'wordpress' on MySQL01" 53 | 54 | mysql -uroot -proot -h $MYSQL01_IP -e "create database wordpress;" 55 | 56 | echo "* Load up Site SQL data" 57 | 58 | mysql -uroot -proot -h $MYSQL01_IP wordpress < wordpress.sql 59 | 60 | echo "* Sleep 2 seconds, then check that database 'wordpress' exists on MySQL02" 61 | 62 | sleep 2 63 | mysql -uroot -proot -h $MYSQL02_IP -e "show databases; \G" | grep wordpress 64 | 65 | echo 66 | echo "Create MySQL Load Balancer" 67 | echo "--------------------------" 68 | 69 | echo "* Create HAProxy-MySQL" 70 | 71 | mysql -uroot -proot -h $MYSQL01_IP -AN -e "GRANT USAGE ON *.* TO 'haproxy'@'%';" 72 | 73 | HAPROXY_MYSQL=$(docker run -d paulczar/haproxy-mysql /haproxy/start "$MYSQL01_IP:3306,$MYSQL02_IP:3306") 74 | HAPROXY_MYSQL_IP=$(docker inspect $HAPROXY_MYSQL | grep IPAd | awk -F'"' '{print $4}') 75 | 76 | echo "* Check our haproxy works" 77 | echo " (should show alternating server_id)" 78 | 79 | mysql -uroot -proot -h $HAPROXY_MYSQL_IP -e 'show variables like "server_id"' | grep server_id 80 | mysql -uroot -proot -h $HAPROXY_MYSQL_IP -e 'show variables like "server_id"' | grep server_id 81 | mysql -uroot -proot -h $HAPROXY_MYSQL_IP -e 'show variables like "server_id"' | grep server_id 82 | mysql -uroot -proot -h $HAPROXY_MYSQL_IP -e 'show variables like "server_id"' | grep server_id 83 | 84 | echo 85 | echo "Create Wordpress Web Servers" 86 | echo "------------------------" 87 | 88 | echo "* Create WordPress01" 89 | WORDPRESS1=$(docker run -d paulczar/apache2-wordpress /wordpress/start $HAPROXY_MYSQL_IP) 90 | WORDPRESS1_IP=$(docker inspect $WORDPRESS1 | grep IPAd | awk -F'"' '{print $4}') 91 | 92 | echo "* Create WordPress02" 93 | WORDPRESS2=$(docker run -d paulczar/apache2-wordpress /wordpress/start $HAPROXY_MYSQL_IP) 94 | WORDPRESS2_IP=$(docker inspect $WORDPRESS2 | grep IPAd | awk -F'"' '{print $4}') 95 | 96 | echo 97 | echo "Create Web Load Balancer" 98 | echo "--------------------------" 99 | 100 | echo "* Create HAProxy-Web" 101 | HAPROXY_WEB=$(docker run -d paulczar/haproxy-web /haproxy/start "$WORDPRESS1_IP:80,$WORDPRESS2_IP:80") 102 | HAPROXY_WEB_IP=$(docker inspect $HAPROXY_WEB | grep IPAd | awk -F'"' '{print $4}') 103 | 104 | echo "* Check it works" 105 | 106 | curl -s http://$HAPROXY_WEB_IP/phpinfo.php | grep "PHP API" 107 | 108 | 109 | echo "Environment Created!" 110 | echo "--------------------" 111 | echo 112 | echo "Browse to http://$HAPROXY_WEB_IP to access your wordpress site" 113 | echo 114 | echo Variables available fo you :- 115 | echo 116 | echo MYSQL01_IP : $MYSQL01_IP 117 | echo MYSQL02_IP : $MYSQL02_IP 118 | echo HAPROXY_MYSQL_IP : $HAPROXY_MYSQL_IP 119 | echo WORDPRESS1_IP : $WORDPRESS1_IP 120 | echo WORDPRESS2_IP : $WORDPRESS2_IP 121 | echo HAPROXY_WEB_IP : $HAPROXY_WEB_IP 122 | echo 123 | echo you may want to run the following :- 124 | #echo "sudo su -c 'echo \"$HAPROXY_WEB_IP wordpress\" >> /etc/hosts'" 125 | echo "sudo sed -i 's/^.*wordpress.*$/$HAPROXY_WEB_IP wordpress/' /etc/hosts" 126 | -------------------------------------------------------------------------------- /htaccess: -------------------------------------------------------------------------------- 1 | DirectoryIndex index.php -------------------------------------------------------------------------------- /openstack: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | [[ -e openrc ]] || echo "no openrc found"; exit 1 4 | source openrc 5 | 6 | #echo some basic house keeping 7 | #echo ------------------------ 8 | 9 | #cho - Create really small flavor 10 | #FLAVOR_ID=42 11 | #nova flavor-create m1.demo $FLAVOR_ID 256 0 1 12 | 13 | #echo - add 3306 and 80 to default security group 14 | #nova secgroup-add-rule default tcp 3306 3306 0.0.0.0/0 15 | #nova secgroup-add-rule default tcp 80 80 0.0.0.0/0 16 | 17 | echo 18 | echo MySQL Servers 19 | echo ------------- 20 | echo -n "- boot mysql01 ." 21 | 22 | tee /tmp/mysql01.txt < /dev/null 23 | #docker 24 | image: paulczar/mysql 25 | cmd: "mysqld_safe --server-id=1 --log-bin=mysql-bin --log-slave-updates=1 --auto_increment_increment=2 --auto_increment_offset=1" 26 | EOF 27 | 28 | MYSQL01_ID=$(nova boot --flavor m1.tiny --image docker mysql01 --user-data /tmp/mysql01.txt | grep '| id' | awk '{print $4}') 29 | until [ $(nova show $MYSQL01_ID | grep status | awk '{ print $4}') == "ACTIVE" ]; do 30 | sleep 1 31 | echo -n "." 32 | done 33 | MYSQL01_IP=$(nova show $MYSQL01_ID | grep 'public network' | awk '{print $5}') 34 | echo " - $MYSQL01_IP" 35 | 36 | echo -n "- boot mysql02 ." 37 | 38 | tee /tmp/mysql02.txt < /dev/null 39 | #docker 40 | image: paulczar/mysql 41 | cmd: "mysqld_safe --server-id=2 --log-bin=mysql-bin --log-slave-updates=1 --auto_increment_increment=2 --auto_increment_offset=2" 42 | EOF 43 | 44 | 45 | MYSQL02_ID=$(nova boot --flavor m1.tiny --image docker mysql02 --user-data /tmp/mysql02.txt | grep '| id' | awk '{print $4}') 46 | until [ $(nova show $MYSQL02_ID | grep status | awk '{ print $4}') == "ACTIVE" ]; do 47 | sleep 1 48 | echo -n "." 49 | done 50 | MYSQL02_IP=$(nova show $MYSQL02_ID | grep 'public network' | awk '{print $5}') 51 | echo " - $MYSQL02_IP" 52 | 53 | echo "- Sleep for a few seconds, give MySQL a chance to start" 54 | sleep 5 55 | 56 | echo "- Creat replication user" 57 | 58 | mysql -uroot -proot -h $MYSQL01_IP -AN -e 'GRANT REPLICATION SLAVE ON *.* TO "replication"@"%" IDENTIFIED BY "password";' 59 | mysql -uroot -proot -h $MYSQL01_IP -AN -e 'flush privileges;' 60 | 61 | 62 | echo "- Export Data from MySQL01 to MySQL02" 63 | 64 | mysqldump -uroot -proot -h $MYSQL01_IP --single-transaction --all-databases \ 65 | --flush-privileges | mysql -uroot -proot -h $MYSQL02_IP 66 | 67 | echo "- Set MySQL01 as master on MySQL02" 68 | 69 | MYSQL01_Position=$(mysql -uroot -proot -h $MYSQL01_IP -e "show master status \G" | grep Position | awk '{print $2}') 70 | MYSQL01_File=$(mysql -uroot -proot -h $MYSQL01_IP -e "show master status \G" | grep File | awk '{print $2}') 71 | 72 | mysql -uroot -proot -h $MYSQL02_IP -AN -e "CHANGE MASTER TO master_host='$MYSQL01_IP', master_port=3306, \ 73 | master_user='replication', master_password='password', master_log_file='$MYSQL01_File', \ 74 | master_log_pos=$MYSQL01_Position;" 75 | 76 | echo "- Set MySQL02 as master on MySQL01" 77 | 78 | MYSQL02_Position=$(mysql -uroot -proot -h $MYSQL02_IP -e "show master status \G" | grep Position | awk '{print $2}') 79 | MYSQL02_File=$(mysql -uroot -proot -h $MYSQL02_IP -e "show master status \G" | grep File | awk '{print $2}') 80 | 81 | mysql -uroot -proot -h $MYSQL01_IP -AN -e "CHANGE MASTER TO master_host='$MYSQL02_IP', master_port=3306, \ 82 | master_user='replication', master_password='password', master_log_file='$MYSQL02_File', \ 83 | master_log_pos=$MYSQL02_Position;" 84 | 85 | echo "- Start Slave on both Servers" 86 | mysql -uroot -proot -h $MYSQL01_IP -AN -e "start slave;" 87 | mysql -uroot -proot -h $MYSQL02_IP -AN -e "start slave;" 88 | 89 | echo "- Create database 'wordpress' on MySQL01" 90 | 91 | mysql -uroot -proot -h $MYSQL01_IP -e "create database wordpress;" 92 | 93 | echo "- Fill it with data" 94 | 95 | mysql -uroot -proot -h $MYSQL01_IP wordpress < wordpress.sql 96 | 97 | echo "- Sleep 2 seconds, then check that database 'wordpress' exists on MySQL02" 98 | 99 | sleep 2 100 | mysql -uroot -proot -h $MYSQL02_IP -e "show databases; \G" | grep wordpress 101 | 102 | 103 | echo 104 | echo "Create MySQL Load Balancer" 105 | echo "--------------------------" 106 | 107 | echo -n "- Create HAProxy-MySQL" 108 | 109 | mysql -uroot -proot -h $MYSQL01_IP -AN -e "GRANT USAGE ON *.* TO 'haproxy'@'%';" 110 | 111 | tee /tmp/haproxy-mysql.txt < /dev/null 112 | #docker 113 | image: paulczar/haproxy-mysql 114 | cmd: /haproxy/start $MYSQL01_IP:3306,$MYSQL02_IP:3306 115 | EOF 116 | 117 | HAPROXY_MYSQL=$(nova boot --flavor m1.tiny --image docker haproxy-mysql --user-data /tmp/haproxy-mysql.txt | grep '| id' | awk '{print $4}') 118 | until [ $(nova show $HAPROXY_MYSQL | grep status | awk '{ print $4}') == "ACTIVE" ]; do 119 | sleep 1 120 | echo -n "." 121 | done 122 | HAPROXY_MYSQL_IP=$(nova show $HAPROXY_MYSQL | grep 'public network' | awk '{print $5}') 123 | echo " - $HAPROXY_MYSQL_IP" 124 | 125 | echo "- Check our haproxy works" 126 | echo " (should show alternating server_id)" 127 | 128 | mysql -uroot -proot -h $HAPROXY_MYSQL_IP -e 'show variables like "server_id"' | grep server_id 129 | mysql -uroot -proot -h $HAPROXY_MYSQL_IP -e 'show variables like "server_id"' | grep server_id 130 | mysql -uroot -proot -h $HAPROXY_MYSQL_IP -e 'show variables like "server_id"' | grep server_id 131 | mysql -uroot -proot -h $HAPROXY_MYSQL_IP -e 'show variables like "server_id"' | grep server_id 132 | 133 | 134 | echo 135 | echo "Create Wordpress Web Servers" 136 | echo "------------------------" 137 | echo -n "- Create WordPress01" 138 | 139 | tee /tmp/wordpress.txt < /dev/null 140 | #docker 141 | image: paulczar/apache2-wordpress 142 | cmd: /var/www/start $HAPROXY_MYSQL_IP 143 | EOF 144 | 145 | WORDPRESS1=$(nova boot --flavor m1.tiny --image docker wordpress01 --user-data /tmp/wordpress.txt | grep '| id' | awk '{print $4}') 146 | until [ $(nova show $WORDPRESS1 | grep status | awk '{ print $4}') == "ACTIVE" ]; do 147 | sleep 1 148 | echo -n "." 149 | done 150 | 151 | WORDPRESS1_IP=$(nova show $WORDPRESS1 | grep 'public network' | awk '{print $5}') 152 | echo " - $WORDPRESS1_IP" 153 | 154 | echo -n "- Create WordPress02" 155 | 156 | WORDPRESS2=$(nova boot --flavor m1.tiny --image docker wordpress02 --user-data /tmp/wordpress.txt | grep '| id' | awk '{print $4}') 157 | until [ $(nova show $WORDPRESS2 | grep status | awk '{ print $4}') == "ACTIVE" ]; do 158 | sleep 1 159 | echo -n "." 160 | done 161 | WORDPRESS2_IP=$(nova show $WORDPRESS2 | grep 'public network' | awk '{print $5}') 162 | echo " - $WORDPRESS2_IP" 163 | 164 | echo 165 | echo "Create Web Load Balancer" 166 | echo "--------------------------" 167 | 168 | echo -n "- Create HAProxy-Web" 169 | 170 | tee /tmp/haproxy-web.txt < /dev/null 171 | #docker 172 | image: paulczar/haproxy-web 173 | cmd: /haproxy/start $WORDPRESS1_IP:80,$WORDPRESS2_IP:80 174 | EOF 175 | 176 | HAPROXY_WEB=$(nova boot --flavor m1.tiny --image docker haproxy-web --user-data /tmp/haproxy-web.txt | grep '| id' | awk '{print $4}') 177 | until [ $(nova show $HAPROXY_WEB | grep status | awk '{ print $4}') == "ACTIVE" ]; do 178 | sleep 1 179 | echo -n "." 180 | done 181 | HAPROXY_WEB_IP=$(nova show $HAPROXY_WEB | grep 'public network' | awk '{print $5}') 182 | 183 | 184 | echo "- Check it works" 185 | 186 | curl -s http://$HAPROXY_WEB_IP/phpinfo.php | grep "PHP API" 187 | 188 | 189 | echo "Environment Created!" 190 | echo "--------------------" 191 | echo 192 | echo "Browse to http://$HAPROXY_WEB_IP to access your wordpress site" 193 | echo 194 | echo Server Details :- 195 | echo 196 | echo MYSQL01_IP : $MYSQL01_IP 197 | echo MYSQL02_IP : $MYSQL02_IP 198 | echo HAPROXY_MYSQL_IP : $HAPROXY_MYSQL_IP 199 | echo WORDPRESS1_IP : $WORDPRESS1_IP 200 | echo WORDPRESS2_IP : $WORDPRESS2_IP 201 | echo HAPROXY_WEB_IP : $HAPROXY_WEB_IP 202 | echo 203 | echo you may want to run the following :- 204 | echo "# sudo echo \"$HAPROXY_WEB_IP wordpress\" >> /etc/hosts" -------------------------------------------------------------------------------- /start: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DB_NAME=${DB_NAME:-"wordpress"} 4 | DB_USER=${DB_USER:-"root"} 5 | DB_PASSWORD=${DB_PASSWORD:-"root"} 6 | DB_HOST=${DB_HOST:-$1} 7 | 8 | tee /var/www/wp-config.php < 31 | EOF 32 | 33 | apache2 -D FOREGROUND --------------------------------------------------------------------------------