mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-07-25 01:01:19 +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.
|
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:
|
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
|
```bash
|
||||||
$ composer install
|
$ 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).
|
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
|
## 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.
|
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