mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-07-23 16:21:22 +02:00
vagrant & ansible scripts added inc docs in README
This commit is contained in:
32
README.md
32
README.md
@@ -13,12 +13,44 @@ I think the problem with patterns is that often people do know them but don't kn
|
||||
You should look at and run the tests to see what happens in the example.
|
||||
To do this, you should install dependencies with `Composer` first:
|
||||
|
||||
### [optional] Using a Virtual Machine (VM)
|
||||
|
||||
If you wish to use a ready made VM environment, you can easily create one with Vagrant and Ansible.
|
||||
|
||||
```bash
|
||||
$ vagrant up
|
||||
```
|
||||
|
||||
### Install dependencies
|
||||
|
||||
```bash
|
||||
$ composer install
|
||||
```
|
||||
|
||||
Read more about how to install and use `Composer` on your local machine [here](https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx).
|
||||
|
||||
### Running test suite
|
||||
|
||||
```bash
|
||||
$ ./vendor/bin/phpunit
|
||||
```
|
||||
|
||||
Output example
|
||||
|
||||
```bash
|
||||
vagrant@design-patterns:/vagrant$ ./vendor/bin/phpunit
|
||||
PHPUnit 4.6.10 by Sebastian Bergmann and contributors.
|
||||
|
||||
Configuration read from /vagrant/phpunit.xml
|
||||
|
||||
................................................................. 65 / 71 ( 91%)
|
||||
......
|
||||
|
||||
Time: 554 ms, Memory: 5.75Mb
|
||||
|
||||
OK (71 tests, 128 assertions)
|
||||
```
|
||||
|
||||
## Patterns
|
||||
|
||||
The patterns can be structured in roughly three different categories. Please click on the [:notebook:](http://en.wikipedia.org/wiki/Software_design_pattern) for a full explanation of the pattern on Wikipedia.
|
||||
|
59
Vagrantfile
vendored
Executable file
59
Vagrantfile
vendored
Executable file
@@ -0,0 +1,59 @@
|
||||
##################################################
|
||||
# Generated by phansible.com
|
||||
##################################################
|
||||
|
||||
#If your Vagrant version is lower than 1.5, you can still use this provisioning
|
||||
#by commenting or removing the line below and providing the config.vm.box_url parameter,
|
||||
#if it's not already defined in this Vagrantfile. Keep in mind that you won't be able
|
||||
#to use the Vagrant Cloud and other newer Vagrant features.
|
||||
Vagrant.require_version ">= 1.5"
|
||||
|
||||
# Check to determine whether we're on a windows or linux/os-x host,
|
||||
# later on we use this to launch ansible in the supported way
|
||||
# source: https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
||||
def which(cmd)
|
||||
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
||||
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
||||
exts.each { |ext|
|
||||
exe = File.join(path, "#{cmd}#{ext}")
|
||||
return exe if File.executable? exe
|
||||
}
|
||||
end
|
||||
return nil
|
||||
end
|
||||
Vagrant.configure("2") do |config|
|
||||
|
||||
config.vm.provider :virtualbox do |v|
|
||||
v.name = "design-patterns"
|
||||
v.customize [
|
||||
"modifyvm", :id,
|
||||
"--name", "design-patterns",
|
||||
"--memory", 512,
|
||||
"--natdnshostresolver1", "on",
|
||||
"--cpus", 1,
|
||||
]
|
||||
end
|
||||
|
||||
config.vm.box = "ubuntu/trusty64"
|
||||
|
||||
config.vm.network :private_network, ip: "192.168.11.2"
|
||||
config.ssh.forward_agent = true
|
||||
|
||||
#############################################################
|
||||
# Ansible provisioning (you need to have ansible installed)
|
||||
#############################################################
|
||||
|
||||
|
||||
if which('ansible-playbook')
|
||||
config.vm.provision "ansible" do |ansible|
|
||||
ansible.playbook = "ansible/playbook.yml"
|
||||
ansible.inventory_path = "ansible/inventories/dev"
|
||||
ansible.limit = 'all'
|
||||
end
|
||||
else
|
||||
config.vm.provision :shell, path: "ansible/windows.sh", args: ["default"]
|
||||
end
|
||||
|
||||
|
||||
config.vm.synced_folder "./", "/vagrant", type: "nfs"
|
||||
end
|
2
ansible/inventories/dev
Executable file
2
ansible/inventories/dev
Executable file
@@ -0,0 +1,2 @@
|
||||
[phansible-web]
|
||||
192.168.11.2
|
11
ansible/playbook.yml
Executable file
11
ansible/playbook.yml
Executable file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
- hosts: all
|
||||
sudo: true
|
||||
vars_files:
|
||||
- vars/all.yml
|
||||
roles:
|
||||
- server
|
||||
- vagrant_local
|
||||
- php
|
||||
- xdebug
|
||||
- app
|
5
ansible/roles/app/tasks/main.yml
Executable file
5
ansible/roles/app/tasks/main.yml
Executable file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
# application tasks to be customized and to run after the main provision
|
||||
- name: update file db
|
||||
sudo: yes
|
||||
shell: updatedb
|
3
ansible/roles/php/handlers/main.yml
Executable file
3
ansible/roles/php/handlers/main.yml
Executable file
@@ -0,0 +1,3 @@
|
||||
---
|
||||
- name: restart php5-fpm
|
||||
service: name=php5-fpm enabled=yes state=restarted
|
9
ansible/roles/php/tasks/configure.yml
Executable file
9
ansible/roles/php/tasks/configure.yml
Executable file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
#- stat: path=/etc/php5/fpm/php.ini
|
||||
# register: phpfpm
|
||||
|
||||
- stat: path=/etc/php5/cli/php.ini
|
||||
register: phpcli
|
||||
|
||||
- include: php-cli.yml
|
||||
when: phpcli.stat.exists
|
25
ansible/roles/php/tasks/main.yml
Executable file
25
ansible/roles/php/tasks/main.yml
Executable file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
- name: Add ppa Repository
|
||||
sudo: yes
|
||||
apt_repository: repo=ppa:ondrej/{{ php.ppa }}
|
||||
|
||||
- name: Update apt
|
||||
sudo: yes
|
||||
apt: update_cache=yes
|
||||
|
||||
- name: Install php5
|
||||
sudo: yes
|
||||
apt: pkg=php5 state=latest
|
||||
|
||||
- name: Install PHP Packages
|
||||
sudo: yes
|
||||
apt: pkg={{ item }} state=latest
|
||||
with_items: php.packages
|
||||
when: php.packages is defined
|
||||
|
||||
- name: Install pear
|
||||
sudo: yes
|
||||
apt: pkg=php-pear state=latest
|
||||
|
||||
- include: configure.yml
|
||||
- include: pecl.yml
|
26
ansible/roles/php/tasks/pecl.yml
Executable file
26
ansible/roles/php/tasks/pecl.yml
Executable file
@@ -0,0 +1,26 @@
|
||||
- name: Install
|
||||
apt: pkg="php5-dev" state=present
|
||||
when: php.pecl_packages is defined
|
||||
|
||||
- name: Install Package
|
||||
shell: echo "\n\n\n\n\n\n\n\n\n" | pecl install {{ item }}
|
||||
register: pecl_result
|
||||
changed_when: "'already installed' not in pecl_result.stdout"
|
||||
failed_when: "pecl_result.stderr or ('ERROR' in pecl_result.stdout)"
|
||||
with_items: php.pecl_packages
|
||||
when: php.pecl_packages is defined
|
||||
|
||||
- name: Create extension .ini file
|
||||
template: >
|
||||
src="extension.tpl"
|
||||
dest="/etc/php5/mods-available/{{ item }}.ini"
|
||||
owner="root"
|
||||
group="root"
|
||||
mode=0644
|
||||
with_items: php.pecl_packages
|
||||
when: php.pecl_packages is defined
|
||||
|
||||
- name: Enable extension
|
||||
shell: php5enmod {{ item }}
|
||||
with_items: php.pecl_packages
|
||||
when: php.pecl_packages is defined
|
10
ansible/roles/php/tasks/php-cli.yml
Executable file
10
ansible/roles/php/tasks/php-cli.yml
Executable file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
- name: ensure timezone is set in cli php.ini
|
||||
lineinfile: dest=/etc/php5/cli/php.ini
|
||||
regexp='date.timezone ='
|
||||
line='date.timezone = {{ server.timezone }}'
|
||||
|
||||
- name: enabling opcache cli
|
||||
lineinfile: dest=/etc/php5/cli/php.ini
|
||||
regexp=';opcache.enable_cli=0'
|
||||
line='opcache.enable_cli=1'
|
2
ansible/roles/php/templates/extension.tpl
Executable file
2
ansible/roles/php/templates/extension.tpl
Executable file
@@ -0,0 +1,2 @@
|
||||
; Configuration for php PECL {{ item }} extension
|
||||
extension={{ item }}.so
|
31
ansible/roles/server/tasks/main.yml
Executable file
31
ansible/roles/server/tasks/main.yml
Executable file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
- name: Update apt
|
||||
sudo: yes
|
||||
apt: update_cache=yes
|
||||
|
||||
- name: Install System Packages
|
||||
sudo: yes
|
||||
apt: pkg={{ item }} state=latest
|
||||
with_items:
|
||||
- curl
|
||||
- wget
|
||||
- python-software-properties
|
||||
|
||||
- name: Install Extra Packages
|
||||
sudo: yes
|
||||
apt: pkg={{ item }} state=latest
|
||||
with_items: server.packages
|
||||
when: server.packages is defined
|
||||
|
||||
- name: Configure the timezone
|
||||
sudo: yes
|
||||
template: src=timezone.tpl dest=/etc/timezone
|
||||
|
||||
- name: More Configure the timezone
|
||||
sudo: yes
|
||||
file: src=/usr/share/zoneinfo/{{server.timezone}} dest=/etc/localtime state=link force=yes backup=yes
|
||||
|
||||
- name: Set default system language pack
|
||||
shell: locale-gen {{server.locale}}
|
||||
sudo: yes
|
||||
|
1
ansible/roles/server/templates/timezone.tpl
Executable file
1
ansible/roles/server/templates/timezone.tpl
Executable file
@@ -0,0 +1 @@
|
||||
{{server.timezone}}
|
11
ansible/roles/vagrant_local/tasks/main.yml
Executable file
11
ansible/roles/vagrant_local/tasks/main.yml
Executable file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: Set the hostname in /etc/hostname
|
||||
shell: echo {{ vagrant_local.vm.hostname }} > /etc/hostname
|
||||
when: vagrant_local.vm.hostname is defined
|
||||
|
||||
- name: Set the hostname
|
||||
shell: hostname {{ vagrant_local.vm.hostname }}
|
||||
when: vagrant_local.vm.hostname is defined
|
||||
|
||||
- name: Update /etc/hosts
|
||||
lineinfile: dest=/etc/hosts regexp='^127\.0\.0\.1' line='127.0.0.1 localhost {{ vagrant_local.vm.hostname }}' owner=root group=root mode=0644
|
7
ansible/roles/xdebug/defaults/main.yml
Executable file
7
ansible/roles/xdebug/defaults/main.yml
Executable file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
xdebug:
|
||||
settings:
|
||||
- xdebug.remote_enable=1
|
||||
- xdebug.idekey=PHPSTORM
|
||||
- xdebug.remote_connect_back=1
|
||||
- xdebug.remote_port=9000
|
4
ansible/roles/xdebug/tasks/main.yml
Executable file
4
ansible/roles/xdebug/tasks/main.yml
Executable file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
- name: Install xDebug
|
||||
sudo: yes
|
||||
apt: pkg=php5-xdebug state=latest
|
15
ansible/vars/all.yml
Executable file
15
ansible/vars/all.yml
Executable file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
server:
|
||||
install: '1'
|
||||
packages: [vim, htop, iotop, bwm-ng]
|
||||
timezone: UTC
|
||||
locale: en_US.UTF-8
|
||||
vagrant_local:
|
||||
install: '1'
|
||||
vm: { base_box: trusty64, hostname: design-patterns, ip: 192.168.11.2, sharedfolder: ./, enableWindows: '1', useVagrantCloud: '1', syncType: nfs }
|
||||
php:
|
||||
install: '1'
|
||||
ppa: php5-5.6
|
||||
packages: [php5-cli, php5-intl, php5-mcrypt, php5-mysql, php5-curl, php5-json]
|
||||
xdebug:
|
||||
install: '1'
|
31
ansible/windows.sh
Executable file
31
ansible/windows.sh
Executable file
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Update Repositories
|
||||
sudo apt-get update
|
||||
|
||||
# Determine Ubuntu Version
|
||||
. /etc/lsb-release
|
||||
|
||||
# Decide on package to install for `add-apt-repository` command
|
||||
#
|
||||
# USE_COMMON=1 when using a distribution over 12.04
|
||||
# USE_COMMON=0 when using a distribution at 12.04 or older
|
||||
USE_COMMON=$(echo "$DISTRIB_RELEASE > 12.04" | bc)
|
||||
|
||||
if [ "$USE_COMMON" -eq "1" ];
|
||||
then
|
||||
sudo apt-get install -y software-properties-common
|
||||
else
|
||||
sudo apt-get install -y python-software-properties
|
||||
fi
|
||||
|
||||
# Add Ansible Repository & Install Ansible
|
||||
sudo add-apt-repository -y ppa:ansible/ansible
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ansible
|
||||
|
||||
# Setup Ansible for Local Use and Run
|
||||
cp /vagrant/ansible/inventories/dev /etc/ansible/hosts -f
|
||||
chmod 666 /etc/ansible/hosts
|
||||
cat /vagrant/ansible/files/authorized_keys >> /home/vagrant/.ssh/authorized_keys
|
||||
sudo ansible-playbook /vagrant/ansible/playbook.yml -e hostname=$1 --connection=local
|
Reference in New Issue
Block a user