├── .gitignore ├── README.md ├── Vagrantfile ├── ansible.cfg ├── example.settings.yml └── playbooks ├── common └── handlers │ ├── main.yml │ ├── mysql.yml │ ├── nginx.yml │ └── php.yml ├── local_halt_destroy.yml ├── local_up.yml ├── roles ├── adminer │ ├── files │ │ ├── adminer-4.1.0-mysql-en.php │ │ └── adminer.css │ ├── tasks │ │ ├── adminer.yml │ │ ├── main.yml │ │ └── phpinfo.yml │ └── templates │ │ ├── index.php.j2 │ │ ├── nginx_adminer_vhost.j2 │ │ └── phpinfo.php.j2 ├── automated_testing │ ├── tasks │ │ ├── codeception.yml │ │ ├── main.yml │ │ ├── phantomjs.yml │ │ └── selenium.yml │ └── templates │ │ ├── chrome_repo.j2 │ │ ├── phantomjs.conf.j2 │ │ ├── selenium.conf.j2 │ │ ├── selenium_start.j2 │ │ ├── xvfb.conf.j2 │ │ ├── xvfb.j2 │ │ └── xvfb_start.j2 ├── base │ ├── tasks │ │ ├── aptget.yml │ │ ├── bashrc.yml │ │ ├── gitconfig.yml │ │ ├── main.yml │ │ └── vimrc.yml │ └── templates │ │ ├── bashrc.j2 │ │ └── gitconfig.j2 ├── front │ └── tasks │ │ ├── main.yml │ │ └── nodejs.yml ├── mysql │ ├── tasks │ │ ├── main.yml │ │ ├── mysql.yml │ │ └── sqlite.yml │ └── templates │ │ ├── my.cnf.j2 │ │ └── mysql_root.my.cnf.j2 ├── nginx │ ├── tasks │ │ ├── main.yml │ │ └── nginx.yml │ └── templates │ │ ├── default_server_block.j2 │ │ └── nginx.conf.j2 └── php │ ├── tasks │ ├── composer.yml │ ├── drush.yml │ ├── main.yml │ └── php.yml │ └── templates │ ├── opcache.ini.j2 │ └── php.ini.j2 ├── setup.yml ├── templates ├── host.j2 ├── index.j2 ├── vhost_default.j2 ├── vhost_drupal.j2 └── vhost_laravel.j2 ├── tests ├── adminer.yml ├── front.yml ├── main.yml ├── mysql.yml ├── nginx.yml └── php.yml └── virtual_hosts.yml /.gitignore: -------------------------------------------------------------------------------- 1 | # OS generated files # 2 | ###################### 3 | *~ 4 | .DS_Store* 5 | .project 6 | .settings 7 | ehthumbs.db 8 | Icon? 9 | Thumbs.db 10 | .svn 11 | .directory 12 | 13 | # IDE generated files # 14 | ####################### 15 | .project 16 | .settings 17 | *.bbprojectd 18 | *.sublime-project 19 | *.sublime-workspace 20 | *.tmproj 21 | *.pbxuser 22 | *.perspective 23 | *.perspectivev3 24 | *.mode1v3 25 | *.mode2v3 26 | *.swp 27 | *~.nib 28 | nbproject 29 | .komodotools 30 | .idea 31 | 32 | # Vagrant specific files # 33 | ########################## 34 | .vagrant 35 | 36 | # Provisioning specific files # 37 | ####################### 38 | host.ini 39 | settings.yml 40 | ansible.log -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vagrant-Ansible-PHP7 # 2 | 3 | Ansible provisioning of the Vagrant box for multiple PHP7 projects. It is designed so that you don't need to have things like webserver or Composer installed on your local system. You'll be able to do everything from within the virtual box. 4 | 5 | That setup is heavily inspired by [https://github.com/hashbangcode/vlad](https://github.com/hashbangcode/vlad) and [Laravel Homestead](http://laravel.com/docs/4.2/homestead). 6 | 7 | ## What's inside ## 8 | 9 | * Ubuntu 14.04 64-bit 10 | * Nginx 11 | * PHP7-FPM 12 | * MySQL + Adminer 13 | * Codeception + PhantomJS + Selenium + Chrome 14 | * NodeJS + Grunt + Bower + Gulp 15 | * Composer 16 | * Drush 17 | * Git, Vim, Midnight Commander, etc. 18 | 19 | ## Supported types of projects ## 20 | 21 | * Drupal 8 (not tested for Drupal 7) 22 | * Laravel 23 | * Custom PHP projects with a virtual host + customizable path to index.php 24 | * Custom PHP projects without a virtual host (quite handy for code katas). 25 | 26 | You can also specify if you would like the database to be created. 27 | 28 | ## Prerequisites ## 29 | 30 | 1. Linux or Mac 31 | 2. Vagrant ([latest version](https://www.vagrantup.com/downloads.html)) 32 | 3. Ansible ([installation instructions](http://docs.ansible.com/intro_installation.html)) 33 | 4. Virtual Box ([download](https://www.virtualbox.org/wiki/Downloads)) 34 | 5. NFS (This comes pre-installed on Mac OS X 10.5+ (Leopard and higher)) 35 | 36 | `sudo apt-get install nfs-kernel-server nfs-common portmap` 37 | 38 | 6. vagrant-triggers plugin 39 | 40 | `vagrant plugin install vagrant-triggers` 41 | 42 | ## Setup steps ## 43 | 44 | 1. Copy `example.settings.yml` to `settings.yml` 45 | 46 | `cp example.settings.yml settings.yml` 47 | 48 | 2. Open `settings.yml` with your favorite editor. 49 | 50 | * Provide your details for git setup. 51 | * Pick a webserver hostname. Phpinfo will be available at this URL. 52 | * Setup virtual hosts. See **Virtual hosts** section 53 | * Change the box IP address (if needed). 54 | * Change to box name to your liking. 55 | * Set the amount of RAM for the box (MB). 56 | * Change any other settings, though default are usually sufficient. 57 | 58 | 3. Run `vagrant up`. You will be asked for your system password in the beginning and in the end of the installation. 59 | 4. Run `vagrant ssh` to login to your box. All sites folders are in `~/sites` derectory. 60 | 61 | ## Virtual hosts ## 62 | 63 | You can have as many sites as you want on a single box. 64 | 65 | # Virtual hosts 66 | - alias: domain.local 67 | path: /absolute/path/to/project/folder/on/your/local/machine 68 | # Set the type of the virtual host 69 | # This can be one of "none", "default", "drupal", "laravel" 70 | vhost_type: "default" 71 | custom_aliases: sub1.domain.local sub2.domain.local 72 | # If you don't want the database to be created, you can simply remove the next line. 73 | db: projectdb 74 | # If you use the "default" vhost type, you can specify the folder where your index.php is located. 75 | # Example: "", "/public", "/www". Please use the slash, when the path is not empty. NO TRAILING SLASH. 76 | index_file_folder: "" 77 | 78 | Your project folders must exist but shouldn't contain any code. You will create a new application or clone the existing one from within the virtual box. 79 | 80 | Virtual hosts are updated every time you run `vagrant up` or `vagrant reload`. 81 | 82 | ## Creating an application ## 83 | 84 | Assuming that you've already created a virtual host for your app `domain.local`, go to `~/sites/domain.local`. 85 | 86 | Your application must reside in that folder, no subfolders. 87 | 88 | ~/sites/domain.local/index.php (For Drupal projects) 89 | ~/sites/domain.local/public/index.php (For Laravel projects) 90 | 91 | Open your browser and go to `domain.local/`. Job done. -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | # Vagrant LEMP Ansible 5 | # A PHP7 development platform in a box. 6 | # See the readme file (README.md) for more information. 7 | 8 | # If vagrant-trigger isn't instaled then exit 9 | if !Vagrant.has_plugin?("vagrant-triggers") 10 | puts "'vagrant-triggers' plugin is required" 11 | puts "This can be installed by running:" 12 | puts 13 | puts " vagrant plugin install vagrant-triggers" 14 | puts 15 | exit 16 | end 17 | 18 | # Find the current vagrant directory. 19 | vagrant_dir = File.expand_path(File.dirname(__FILE__)) 20 | provision_hosts_file = vagrant_dir + '/host.ini' 21 | 22 | # Include config from settings.yml 23 | require 'yaml' 24 | vconfig = YAML::load_file(vagrant_dir + "/settings.yml") 25 | 26 | # Configuration 27 | boxipaddress = vconfig['boxipaddress'] 28 | boxname = vconfig['boxname'] 29 | 30 | # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! 31 | VAGRANTFILE_API_VERSION = "2" 32 | 33 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 34 | 35 | # Configure virtual machine options. 36 | config.vm.box = "ubuntu/trusty64" 37 | config.vm.hostname = boxname 38 | 39 | config.vm.network :private_network, ip: boxipaddress 40 | 41 | # Set *Vagrant* VM name 42 | config.vm.define boxname do |boxname| 43 | end 44 | 45 | # Configure virtual machine setup. 46 | config.vm.provider :virtualbox do |v| 47 | v.customize ["modifyvm", :id, "--memory", vconfig["memory"]] 48 | v.customize ["modifyvm", :id, "--cpus", vconfig["cpus"]] 49 | v.customize ["modifyvm", :id, "--ioapic", "on"] 50 | v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] 51 | end 52 | 53 | # Set up NFS drive. 54 | nfs_setting = RUBY_PLATFORM =~ /darwin/ || RUBY_PLATFORM =~ /linux/ 55 | 56 | # SSH Set up. 57 | config.ssh.forward_agent = true 58 | 59 | # Run an Ansible playbook on setting the box up 60 | if !File.exist?(provision_hosts_file) 61 | config.trigger.before :up, :stdout => true, :force => true do 62 | run 'ansible-playbook -i ' + boxipaddress + ', --ask-sudo-pass ' + vagrant_dir + '/playbooks/local_up.yml --extra-vars "local_ip_address=' + boxipaddress + '"' 63 | end 64 | end 65 | 66 | # Run the halt/destroy playbook upon halting or destroying the box 67 | if File.exist?(provision_hosts_file) 68 | config.trigger.before [:halt, :destroy], :stdout => true, :force => true do 69 | run 'ansible-playbook -i ' + boxipaddress + ', --ask-sudo-pass ' + vagrant_dir + '/playbooks/local_halt_destroy.yml' 70 | end 71 | end 72 | 73 | # Provision vagrant box with Ansible. 74 | config.vm.provision "ansible" do |ansible| 75 | ansible.playbook = vagrant_dir + "/playbooks/setup.yml" 76 | ansible.host_key_checking = false 77 | ansible.extra_vars = {user:"vagrant"} 78 | if vconfig['ansible_verbosity'] != '' 79 | ansible.verbose = vconfig['ansible_verbosity'] 80 | end 81 | end 82 | 83 | # Create synced folders for each virtual host. 84 | vconfig['vhosts'].each do |vhost| 85 | site_alias = vhost['alias'] 86 | folder_path = vhost['path'] 87 | config.vm.synced_folder folder_path, 88 | vconfig['sites_dir'] + "/" + site_alias, 89 | create: true, 90 | type: "nfs", 91 | :nfs => nfs_setting 92 | end 93 | 94 | # Create all virtual hosts 95 | config.trigger.after [:up, :reload], :stdout => true, :force => true do 96 | run 'ansible-playbook -i ' + boxipaddress + ', -K --user=vagrant --private-key=' + vagrant_dir + '/.vagrant/machines/' + boxname + '/virtualbox/private_key ' + vagrant_dir + '/playbooks/virtual_hosts.yml --extra-vars "local_ip_address=' + boxipaddress + '"' 97 | end 98 | 99 | end 100 | -------------------------------------------------------------------------------- /ansible.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | log_path = ansible.log 3 | nocows = 0 -------------------------------------------------------------------------------- /example.settings.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # Configuration file 3 | # Change settings here to control how your box is set up. 4 | 5 | # Git settings 6 | git_name: "Your name" 7 | git_email: "your@email.com" 8 | 9 | # Welcome page settings 10 | webserver_hostname: 'vagrant-php7.local' 11 | webserver_hostname_alias: 'www.{{ webserver_hostname }}' 12 | 13 | # Virtual hosts 14 | vhosts: 15 | - alias: domain.local 16 | path: /absolute/path/to/project/folder/on/your/local/machine 17 | # Set the type of the virtual host 18 | # This can be one of "none", "default", "drupal", "laravel" 19 | vhost_type: "default" 20 | custom_aliases: sub1.domain.local sub2.domain.local 21 | # If you don't want the database to be created, you can simply remove the next line. 22 | db: projectdb 23 | # If you use the "default" vhost type, you can specify the folder where your index.php is located. 24 | # Example: "", "/public", "/www". Please use the slash, when the path is not empty. NO TRAILING SLASH. 25 | index_file_folder: "" 26 | 27 | # Vagrantfile configuration 28 | boxipaddress: "192.168.200.210" 29 | boxname: "vagrant" 30 | 31 | username: "vagrant" 32 | # The following 2 variables assume that the username is "vagrant". 33 | # If you change the username, please adjust the variables accordingly. 34 | home_dir: "/home/vagrant" 35 | sites_dir: "/home/vagrant/sites" 36 | 37 | # Give VM 1/4 of system memory 38 | memory: 1024 39 | # Give VM access to all cpu cores on the host 40 | # To find out the number of cores, run the following commands: 41 | # Mac: sysctl -n hw.ncpu 42 | # Linux: nproc 43 | cpus: 2 44 | 45 | # php.ini settings 46 | php_memory_limit: 512M 47 | php_max_execution_time: 60 48 | php_post_max_size: 100M 49 | php_upload_max_filesize: 100M 50 | php_display_errors: On 51 | php_display_startup_errors: On 52 | php_html_errors: On 53 | php_date_timezone: Pacific/Auckland 54 | 55 | # MySQL Settings 56 | mysql_port: 3306 57 | mysql_root_password: password 58 | server_hostname: vagrant 59 | dbuser: user 60 | dbpass: password 61 | 62 | # MySQL my.cnf settings 63 | mysql_max_allowed_packet: 128M 64 | mysql_character_set_server: utf8 65 | mysql_collation_server: utf8_general_ci 66 | 67 | # Local hosts file location 68 | # Default location on *nix hosts is '/etc/hosts' 69 | hosts_file_location: "/etc/hosts" 70 | 71 | # Set the level of verbosity that Ansible will use 72 | # This can be one of "", "v", "vv", "vvv", or "vvvv" 73 | ansible_verbosity: "" -------------------------------------------------------------------------------- /playbooks/common/handlers/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - include: mysql.yml 3 | - include: nginx.yml 4 | - include: php.yml -------------------------------------------------------------------------------- /playbooks/common/handlers/mysql.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: restart mysql 3 | service: name=mysql state=restarted 4 | sudo: true 5 | -------------------------------------------------------------------------------- /playbooks/common/handlers/nginx.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: restart nginx 3 | service: name=nginx state=restarted 4 | sudo: true 5 | -------------------------------------------------------------------------------- /playbooks/common/handlers/php.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: restart fpm 3 | raw: service php7.0-fpm restart 4 | sudo: true 5 | 6 | -------------------------------------------------------------------------------- /playbooks/local_halt_destroy.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: 127.0.0.1 3 | 4 | vars_files: 5 | - ../settings.yml 6 | 7 | tasks: 8 | - name: local actions destroy | delete local hosts.ini file 9 | file: dest=../host.ini state=absent 10 | delegate_to: 127.0.0.1 11 | 12 | - name: local actions destroy | remove reference of host from local hosts file 13 | lineinfile: 14 | dest='{{ hosts_file_location }}' 15 | state=absent 16 | regexp='.*?\sadminer.{{ webserver_hostname }}' 17 | delegate_to: 127.0.0.1 18 | sudo: true 19 | 20 | - name: local actions | remove reference of virtual hosts from local hosts file 21 | lineinfile: 22 | dest='{{ hosts_file_location }}' 23 | state=absent 24 | regexp='.*?\s{{ item.alias }} www.{{ item.alias }} {%- if item.custom_aliases is defined %} {{ item.custom_aliases }} {%- endif %}' 25 | when: item.vhost_type != "none" 26 | delegate_to: 127.0.0.1 27 | sudo: true 28 | with_items: 29 | - "{{ vhosts }}" 30 | 31 | - name: local actions | remove entry from known hosts 32 | command: ssh-keygen -R {{ boxipaddress }} 33 | delegate_to: 127.0.0.1 34 | -------------------------------------------------------------------------------- /playbooks/local_up.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: all 3 | 4 | gather_facts: false 5 | 6 | vars_files: 7 | - ../settings.yml 8 | 9 | tasks: 10 | - fail: msg="The system may not be provisioned according to the CMDB status." 11 | when: local_ip_address is not defined 12 | 13 | - name: local actions | remove entry from known hosts 14 | command: ssh-keygen -R {{ boxipaddress }} 15 | delegate_to: 127.0.0.1 16 | 17 | - name: local actions | write local host.ini file 18 | template: src=templates/host.j2 dest=../host.ini 19 | delegate_to: 127.0.0.1 20 | 21 | - name: local actions | remove reference of host from local hosts file 22 | lineinfile: 23 | dest='{{ hosts_file_location }}' 24 | state=absent 25 | regexp='.*?\sadminer.{{ webserver_hostname }}' 26 | delegate_to: 127.0.0.1 27 | sudo: true 28 | 29 | - name: local actions | add reference of host to local hosts file 30 | lineinfile: 31 | dest='{{ hosts_file_location }}' 32 | state=present 33 | line='{{ local_ip_address }} adminer.{{ webserver_hostname }}' 34 | delegate_to: 127.0.0.1 35 | sudo: true 36 | 37 | - name: local actions | remove reference of virtual hosts from local hosts file 38 | lineinfile: 39 | dest='{{ hosts_file_location }}' 40 | state=absent 41 | regexp='.*?\s{{ item.alias }} www.{{ item.alias }} {%- if item.custom_aliases is defined %} {{ item.custom_aliases }} {%- endif %}' 42 | when: item.vhost_type != "none" 43 | delegate_to: 127.0.0.1 44 | sudo: true 45 | with_items: 46 | - "{{ vhosts }}" 47 | 48 | - name: local actions | add reference of host to local hosts file 49 | lineinfile: 50 | dest='{{ hosts_file_location }}' 51 | state=present 52 | line='{{ local_ip_address }} {{ item.alias }} www.{{ item.alias }} {%- if item.custom_aliases is defined %} {{ item.custom_aliases }} {%- endif %}' 53 | when: item.vhost_type != "none" 54 | delegate_to: 127.0.0.1 55 | sudo: true 56 | with_items: 57 | - "{{ vhosts }}" -------------------------------------------------------------------------------- /playbooks/roles/adminer/files/adminer-4.1.0-mysql-en.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mkudenko/vagrant-ansible-php7/d01a9a1ec7e87241ee478f32d204f1267e073bc9/playbooks/roles/adminer/files/adminer-4.1.0-mysql-en.php -------------------------------------------------------------------------------- /playbooks/roles/adminer/files/adminer.css: -------------------------------------------------------------------------------- 1 | /* Theme "Nette" for Adminer, (c) David Grudl */ 2 | 3 | /* 4 | it is based on some parts of: 5 | - Nette Framework design - http://api.nette.org 6 | - CSS by Brade - http://www.bradezone.com 7 | - Silk icon set 1.3 by Mark James - http://www.famfamfam.com/lab/icons/silk 8 | - CSS icons by Hever - http://hev.cz 9 | */ 10 | 11 | 12 | body { 13 | background: #FFF; 14 | color: #333; 15 | font: 13px/18px Helvetica, Arial, sans-serif; 16 | } 17 | 18 | /* generic */ 19 | a, a:visited { 20 | padding: 3px 2px; 21 | color: #006AEB; 22 | text-decoration: none; 23 | } 24 | 25 | a:hover { 26 | background-color: #006AEB !important; 27 | border-bottom: 1px solid #006AEB; 28 | color: #FFF; 29 | } 30 | 31 | p { 32 | margin-bottom: 4px; 33 | padding-bottom: 4px; 34 | } 35 | 36 | h1 { 37 | background: none; 38 | border: none; 39 | color: #666; 40 | font-size: 18px; 41 | font-weight: bold; 42 | height: 40px; 43 | padding: 0 0 8px; 44 | } 45 | 46 | h2 { 47 | background: transparent; 48 | border: none; 49 | color: #333; 50 | font: 32px Georgia,serif; 51 | margin: 0; 52 | padding: 10px 0 8px; 53 | } 54 | 55 | h3 { 56 | font-size: 18px; 57 | font-weight: bold; 58 | margin: 0; 59 | padding: 4px 0; 60 | } 61 | 62 | fieldset { 63 | border: 1px solid #CCC; 64 | float: left; 65 | margin-bottom: 8px; 66 | margin-right: 4px; 67 | min-height: 48px; 68 | padding: 0 4px 4px; 69 | } 70 | 71 | fieldset div { 72 | margin-top: 4px; 73 | } 74 | 75 | input, select, textarea { 76 | border: 1px solid #CCC; 77 | color: #555; 78 | font: 13px Helvetica,Arial,sans-serif; 79 | padding: 3px; 80 | } 81 | 82 | select { 83 | padding: 2px; 84 | } 85 | 86 | textarea, .sqlarea { 87 | font-family: Consolas,monospace; 88 | height: 500px; 89 | } 90 | 91 | input[type=submit] { 92 | background: #4890E7; 93 | color: white; 94 | cursor: pointer; 95 | padding: 3px; 96 | border: none; 97 | } 98 | 99 | input[type=submit]:hover { 100 | background-color: #006AEB; 101 | } 102 | 103 | input[type=image], input[type=checkbox] { 104 | border: none; 105 | padding: 0; 106 | vertical-align: middle; 107 | } 108 | 109 | label input[type=checkbox], td input[type=radio], td span select { 110 | margin-right: 4px; 111 | } 112 | 113 | fieldset select { 114 | margin-right: 4px; 115 | } 116 | 117 | option { 118 | padding: 0 5px; 119 | } 120 | 121 | optgroup { 122 | font-size: 11px; 123 | } 124 | 125 | code { 126 | background: #EEE; 127 | font-family: Consolas,monospace; 128 | padding: 2px 4px; 129 | } 130 | 131 | code a:hover { 132 | background-color: transparent !important; 133 | } 134 | 135 | table { 136 | border: 1px solid #D0CDC4; 137 | font-size: inherit; 138 | margin: 4px 0 8px; 139 | } 140 | 141 | tbody tr:hover td, tbody tr:hover th { 142 | background: #EDF4FF; 143 | } 144 | 145 | th, td { 146 | background: inherit; 147 | border: 1px dotted #CCC; 148 | border-width:0 0 0 1px; 149 | font-weight: normal; 150 | margin: 0; 151 | padding: 3px 5px; 152 | text-align: left; 153 | vertical-align: top; 154 | } 155 | 156 | .odd th, .odd td { 157 | background: #FCFAF5; 158 | } 159 | 160 | .js .checked th, .js .checked td { 161 | background: #CEE0FC; 162 | } 163 | 164 | thead th, thead td { 165 | background: #F2EEE1; 166 | border-color: #D0CDC4; 167 | font-weight: bold; 168 | white-space: nowrap; 169 | } 170 | 171 | thead tr:hover td, thead tr:hover th, 172 | .js thead .checked th, .js thead .checked td { 173 | background: #F2EEE1; 174 | } 175 | 176 | th:first-child, td:first-child { 177 | border-color: transparent; 178 | white-space: nowrap; 179 | } 180 | 181 | td[align=right] { 182 | text-align: right; 183 | } 184 | 185 | table code { 186 | font-size: 13px; 187 | line-height: 18px; 188 | } 189 | 190 | .hidden { 191 | display: none; 192 | } 193 | 194 | .error, .message { 195 | background: transparent; 196 | font-weight: bold; 197 | padding: 0; 198 | } 199 | 200 | .error { 201 | color: #C00; 202 | } 203 | 204 | .message { 205 | color: #090; 206 | } 207 | 208 | /* specific */ 209 | 210 | #content { 211 | height: 100%; 212 | margin: 40px 0 0 300px; 213 | padding: 20px; 214 | background: white; 215 | z-index: 1; 216 | } 217 | 218 | #content:after { 219 | clear: both; 220 | content: ""; 221 | display: table; 222 | } 223 | 224 | #content > h2:before { 225 | display: block; 226 | content: ""; 227 | color: #FF9; 228 | font-size: 13px; 229 | background: #333; 230 | line-height: 40px; 231 | margin: 0; 232 | padding: 0 0 0 20px; 233 | position: fixed; 234 | top: 0; 235 | left: 300px; 236 | width: 100%; 237 | height: 40px; 238 | 239 | } 240 | 241 | #content > #breadcrumb + h2:before { 242 | display: none; 243 | } 244 | 245 | #content > p { 246 | clear: left; 247 | } 248 | 249 | #lang { 250 | background: #333; 251 | color: #FFF; 252 | height: 40px; 253 | line-height: 40px; 254 | padding: 0 0 0 40px; 255 | position: fixed; 256 | top: 0; 257 | left: 0; 258 | width: 260px; 259 | } 260 | 261 | #lang select { 262 | border: none; 263 | background: #5F5F5F; 264 | color: white; 265 | } 266 | 267 | #menu { 268 | background: #FCFAF5; 269 | border-right: 5px solid #E4E2DA; 270 | bottom: 0; 271 | margin: 0; 272 | overflow: auto; 273 | padding: 10px 15px; 274 | position: fixed; 275 | top: 40px; 276 | width: 240px; 277 | } 278 | 279 | #menu a { 280 | color: #333; 281 | border: none; 282 | margin-right: 4px; 283 | } 284 | 285 | #tables a { 286 | padding: 1px 2px; 287 | } 288 | 289 | #menu a:hover { 290 | color: #FFF; 291 | } 292 | 293 | #menu p { 294 | border: none; 295 | margin: 0 0 4px; 296 | padding: 0 0 4px; 297 | white-space: nowrap; 298 | } 299 | 300 | #breadcrumb { 301 | background: #333; 302 | color: #FFF; 303 | line-height: 40px; 304 | margin: 0; 305 | padding: 0 0 0 20px; 306 | position: fixed; 307 | top: 0; 308 | left: 300px; 309 | width: 100%; 310 | height: 40px; 311 | } 312 | 313 | #breadcrumb a { 314 | color: #FF9; 315 | } 316 | 317 | #breadcrumb a:hover { 318 | background: transparent; 319 | border-color: #FF9; 320 | color: #FF9; 321 | } 322 | 323 | #schema .table { 324 | background: #F3F3F3; 325 | padding: 4px 8px; 326 | } 327 | 328 | #logins a, #tables a { 329 | background: transparent; 330 | } 331 | 332 | /* IE hacks */ 333 | * + html th:first-child, * + html td:first-child { 334 | border-color: inherit; 335 | white-space: inherit; 336 | } 337 | 338 | * html #lang, * html #menu, * html #breadcrumb { 339 | position: absolute; 340 | } 341 | 342 | * html #lang { 343 | height: 30px; 344 | padding-top: 10px; 345 | } 346 | 347 | * html form#form { 348 | height: 100%; 349 | } 350 | 351 | #content > p.tabs + *:after { 352 | display: table; 353 | clear: both; 354 | content: ""; 355 | } 356 | 357 | 358 | 359 | /* icons */ 360 | .error { 361 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC") no-repeat scroll 0.8em center #FFEEEE; 362 | padding-left: 38px; 363 | } 364 | 365 | .message, #menu p.message { 366 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center #EEFFEE; 367 | padding-left: 38px; 368 | } 369 | 370 | a[href$="sql="] { 371 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC") no-repeat scroll left bottom; 372 | padding-left: 22px; 373 | } 374 | 375 | a[href*="dump="] { 376 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC") no-repeat scroll 2px center; 377 | padding-left: 22px; 378 | } 379 | 380 | a[href$="dump="] { 381 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC") no-repeat scroll 2px center ; 382 | padding-left: 22px; 383 | } 384 | 385 | select[name="db"] { 386 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC") no-repeat scroll left center white; 387 | padding-left: 16px; 388 | } 389 | 390 | select[name="db"] option { 391 | padding-left: 18px; 392 | } 393 | 394 | #menu p a[href*="&select="] { 395 | display: inline-block; 396 | margin-right: 8px; 397 | overflow: hidden; 398 | padding-left: 0; 399 | text-decoration: none; 400 | width: 16px; 401 | height: 16px; 402 | } 403 | 404 | #menu p a[href*="&select="]:before { 405 | content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII="); 406 | padding-right: 5px; 407 | display: inline-block; 408 | margin-top: 2px; 409 | } 410 | 411 | #menu p a[href*="&table="], #menu p a[href*="&view="] { 412 | display: inline-block; 413 | text-decoration: none; 414 | } 415 | 416 | a[href*="&create="] { 417 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC") no-repeat scroll 2px center; 418 | padding-left: 22px; 419 | } 420 | 421 | a[href$="&create="] { 422 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC") no-repeat scroll left center; 423 | padding-left: 22px; 424 | } 425 | 426 | a[href*="&default="] { 427 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ7SURBVHjabFPfa1JhGH6OR88odSKDaTEzS9i0jejXBtVuBzGooOgqoquu+heii27aRUTUaKx1nbAYDCqqm4raoBZDZrqhaCw31janm3r0eOb8+t4PFXW98Jz3O985z/P++j6JMQZJkroAODhk/Mfs/nZrJpLN8eUGxx/OqdQ/kgC3M7qub5fL5T1ujHtGvrYmlEolFggEnvB/j3IYiCe4VYF+IheLRaZpGiNPyOfzLJfLsXQ6zVKZDZZKpfaJkEkkQNEoCs9EeBJSVVUIZDIZkQ3tFQoFNjk5KURE+VWBczyD75VKBaFQCLu7uwJ8T4DWQ0ND1CtUewZZlgc4b65JQKQjSfXe8KggUfIEbf0zMnOvIFv6oKa+gBVWbhsbu03kSCRSj1xDTcSHWTj7bsLmOYXt391Y+jgx0iRAUf1+f+uEBFmNP4TZegHp+CIUSYe13QlLxxGbsTE6WSwWE4RaZIJbmYL9+CWU1gJQDkpYDi5BK5R2VDU3YGw9NF6vt+k9u3gPNu9laKtjMChlmCxumNkKnk0v3B19F48aG9OlLJLJZL1m685LdPZe5eTnMJjK0LMepGaDcA6PYPRWb5R4hsYSSMTlcuGAxhuZGEfniWHofycgKwylrBubM/M4fG0MbY6eeob7pvDz/TgsUhJlfj3WQk9h71SgpV3Y+hGGfP4+TLZDTSUaGodAj+Vfr+G/eAdtyW+ITs8g+CGN6Kcguq48gtt3thaoUi2b0XkmIi+7UiQfS2xCD7+B5+QgzOZurIcS8N14DKXDIzIkMrcCTVeIVZvnql5nw/VB+9fTxxxyf48H+T114cVU+MHb+a3VlmEReYNzk/8EGADOaaVGDf2TtwAAAABJRU5ErkJggg==") no-repeat scroll 2px center; 428 | padding-left: 22px; 429 | } 430 | 431 | #content p a[href*="&select="] { 432 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll 2px center; 433 | padding-left: 22px; 434 | } 435 | 436 | #content p a[href*="&page="] { 437 | background-image: none; 438 | padding: .2em .5em; 439 | } 440 | 441 | #content p a[href*="&edit="] { 442 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg==") no-repeat scroll 2px center; 443 | padding-left: 22px; 444 | } 445 | 446 | #content p a[href*="&table="] { 447 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC") no-repeat scroll 2px center; 448 | padding-left: 22px; 449 | } 450 | 451 | #content p a[href*="&database="] { 452 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=") no-repeat scroll 2px center; 453 | padding-left: 22px; 454 | } 455 | 456 | #content p a[href*="&schema="] { 457 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC") no-repeat scroll 2px center; 458 | padding-left: 22px; 459 | } 460 | 461 | #content p a[href*="&sql="] { 462 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=") no-repeat scroll 2px center; 463 | padding-left: 24px; 464 | } 465 | 466 | table tbody input[type="checkbox"] { 467 | display: block; 468 | float: left; 469 | } 470 | 471 | table a[href*="&edit="][href*="&where"] { 472 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC") no-repeat scroll right center; 473 | padding-right: 18px; 474 | } 475 | 476 | table input + a[href*="&edit="][href*="&where"] { 477 | clear: right; 478 | display: block; 479 | float: left; 480 | line-height: 15px; 481 | margin-right: 8px; 482 | overflow: hidden; 483 | padding: 0; 484 | text-decoration: none; 485 | width: 16px; 486 | } 487 | 488 | table input + a[href*="&edit="][href*="&where"]:before { 489 | content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC"); 490 | padding-right: 5px; 491 | } 492 | 493 | table input + a[href*="&edit="][href*="&where"]:hover { 494 | background: #FFC; 495 | color: white; 496 | margin-left: 19px; 497 | margin-top: -1px; 498 | overflow: visible; 499 | padding: 1px 2px; 500 | position: absolute; 501 | width: auto; 502 | } 503 | 504 | table a[href*="&clone="] { 505 | clear: right; 506 | display: block; 507 | float: left; 508 | line-height: 15px; 509 | margin-right: 8px; 510 | overflow: hidden; 511 | padding-top: 0; 512 | text-decoration: none; 513 | width: 16px; 514 | } 515 | 516 | table a[href*="&clone="]:before { 517 | content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADHSURBVCjPdZFNbsIwFAa/5B5FuQPCOQ9HQuqCq3SHUAtrrgFCSKQk8Y80XTjYJqiajRfj55GftNBKJtGoRiXSytlAZORzM1ckExjouHEm0LPdqHkTRnruXAgEPGpVq1JVCJ6RB3dOfHFEa7W5RzLx3kjPDse8ZxKisue9JwkByzevPQGZQnD8kHuunEvB43EcyD0dt/kEzzGdLD2/k9Ckb261zs9ZhiggVRO12jzN4Z5C+tQq90T+ETK20/J1tU2xeCOjpT7+APfbTaDnTb/mAAAAAElFTkSuQmCC"); 518 | padding-right: 5px; 519 | } 520 | 521 | table a[href*="&clone="]:hover { 522 | background: #FFC; 523 | border: 1px solid #CCC; 524 | color: white; 525 | font-size: .9em; 526 | margin-left: 42px; 527 | margin-top: -2px; 528 | overflow: visible; 529 | padding: 1px 2px; 530 | position: absolute; 531 | width: auto; 532 | } 533 | 534 | input[name="delete"], input[name="drop"] { 535 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVHjapFM5bsJQEB2zSIDFJrHYpEtyAyoKJAp6CrqIkBPkNDlBAKXjBEgUpKOBCyQNijFiEZvZl8z7wsjESYpkpNFfPO/Nmz9j6Xg80n/M9fWi3W7fMOnd4XAo8qogAbvO5xKvL6lU6s0aL1kVMDjP5ye/36+Gw2FyOp3EQFqtVtTr9WixWHT5/JhOp6s2ghP4ORaLyaFQiGazGa3Xa0HgdrvJ6/WSpmk0Go0MjnvIZDLVM0Gr1brm/WskEkkA3O/3abvdQjq5XC6xgoiVka7rNB6PNT6ns9nsu+OkpODxeBLBYJAGgwHt9/uzQ8Vms6Hdbie+KYqC+ASTFrARBMx2HwgEaDKZiHqn0yktl0uxtzrMMAyKx+MCc+4Cs13hwQCC1GQy+W3Lms2mUIUygbEqEBLNun8z8zswVgUfLO0WD4Z6kekn8/l8okNM8GFVUMYDoVWQ6HA4bEAzoyzL1O12kbRsJajwhYZhiUajJEnShWSAQaqqKnU6HahEGysXg9RoNPJ8+cwZZLSKp47m8/k5Kxzg4XBocNxDLper2ka5Xq+LUeatilahJLN1mEJ+ZDHKJthGAKvVauJnYi9ysHIqQee1xOsLg3/+mf5inwIMAJMhb74NwG5wAAAAAElFTkSuQmCC") no-repeat scroll left center; 536 | border: none; 537 | cursor: pointer; 538 | font-size: .9em; 539 | padding: 1px 5px 1px 18px; 540 | color: #999; 541 | } 542 | 543 | input[name="delete"]:hover, input[name="drop"]:hover { 544 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==") no-repeat scroll left center; 545 | color: red; 546 | } 547 | 548 | #logout { 549 | background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z7137p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/znJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoGDA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwdEaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoFlV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfFYy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6ooly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necAIi3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC") no-repeat scroll left center; 550 | border: none; 551 | cursor: pointer; 552 | margin-left: 6px; 553 | overflow: hidden; 554 | text-indent: 18px; 555 | width: 16px; 556 | } 557 | 558 | 559 | /* paginator */ 560 | .pages { 561 | margin: 1em 0; 562 | font-size: 90%; 563 | } 564 | 565 | .pages a[href*="&page="] { 566 | margin: .2em; 567 | padding: .2em .5em; 568 | border: 1px solid #9AAFE5; 569 | text-decoration: none; 570 | } -------------------------------------------------------------------------------- /playbooks/roles/adminer/tasks/adminer.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Adminer | create adminer directory 3 | file: path={{ sites_dir }}/adminer state=directory owner=vagrant mode=0777 recurse=yes 4 | sudo: true 5 | 6 | - name: Adminer | copy adminer 7 | copy: src=adminer-4.1.0-mysql-en.php dest={{ sites_dir }}/adminer/adminer-4.1.0-mysql-en.php 8 | sudo: true 9 | 10 | - name: Adminer | copy adminer stylesheet 11 | copy: src=adminer.css dest={{ sites_dir }}/adminer/adminer.css 12 | sudo: true 13 | 14 | - name: Adminer | copy index.php configuration file into place 15 | template: src=index.php.j2 dest={{ sites_dir }}/adminer/index.php 16 | sudo: true 17 | 18 | - name: Adminer | add vhost 19 | template: src=nginx_adminer_vhost.j2 dest=/etc/nginx/sites-available/adminer.{{ webserver_hostname }} 20 | sudo: true 21 | 22 | - name: Adminer | enable adminer site 23 | file: src=/etc/nginx/sites-available/adminer.{{ webserver_hostname }} dest=/etc/nginx/sites-enabled/adminer.{{ webserver_hostname }} state=link 24 | sudo: true 25 | 26 | - name: Adminer | restart nginx 27 | service: name=nginx state=restarted 28 | sudo: true 29 | 30 | - name: Adminer | restart fpm 31 | raw: service php7.0-fpm restart 32 | sudo: true 33 | -------------------------------------------------------------------------------- /playbooks/roles/adminer/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - include: adminer.yml 3 | - include: phpinfo.yml -------------------------------------------------------------------------------- /playbooks/roles/adminer/tasks/phpinfo.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Phpinfo | copy phpinfo.php into place 3 | template: src=phpinfo.php.j2 dest={{ sites_dir }}/adminer/phpinfo.php 4 | sudo: true 5 | 6 | -------------------------------------------------------------------------------- /playbooks/roles/adminer/templates/index.php.j2: -------------------------------------------------------------------------------- 1 | > /etc/apt/sources.list.d/google-chrome.list' 98 | # sudo apt-get update 99 | # sudo apt-get install google-chrome-stable 100 | 101 | # https://chromedriver.storage.googleapis.com/2.9/chromedriver_linux64.zip 102 | 103 | # export DISPLAY=":1" && java -jar /usr/bin/selenium-server-standalone.jar java -jar selenium-server-standalone-2.41.0.jar Dwebdriver.chrome.driver="C:/usr/local/bin/chromedriver" -------------------------------------------------------------------------------- /playbooks/roles/automated_testing/templates/chrome_repo.j2: -------------------------------------------------------------------------------- 1 | deb http://dl.google.com/linux/chrome/deb/ stable main 2 | -------------------------------------------------------------------------------- /playbooks/roles/automated_testing/templates/phantomjs.conf.j2: -------------------------------------------------------------------------------- 1 | [program:phantomjs] 2 | command=/usr/bin/phantomjs --webdriver=4445 3 | autostart=true 4 | autorestart=true 5 | stderr_logfile=/var/log/phantomjs.err.log 6 | stdout_logfile=/var/log/phantomjs.out.log -------------------------------------------------------------------------------- /playbooks/roles/automated_testing/templates/selenium.conf.j2: -------------------------------------------------------------------------------- 1 | [program:selenium_start] 2 | command=/usr/bin/selenium_start 3 | autostart=true 4 | autorestart=true 5 | stderr_logfile=/var/log/selenium.err.log 6 | stdout_logfile=/var/log/selenium.out.log -------------------------------------------------------------------------------- /playbooks/roles/automated_testing/templates/selenium_start.j2: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | export DISPLAY=":1" && java -jar /usr/bin/selenium-server-standalone-2.52.0.jar Dwebdriver.chrome.driver="/usr/local/bin/chromedriver" -------------------------------------------------------------------------------- /playbooks/roles/automated_testing/templates/xvfb.conf.j2: -------------------------------------------------------------------------------- 1 | [program:xvfb_start] 2 | command=/usr/bin/xvfb_start 3 | autostart=true 4 | autorestart=true 5 | stderr_logfile=/var/log/xvfb.err.log 6 | stdout_logfile=/var/log/xvfb.out.log -------------------------------------------------------------------------------- /playbooks/roles/automated_testing/templates/xvfb.j2: -------------------------------------------------------------------------------- 1 | XVFB=/usr/bin/Xvfb 2 | XVFBARGS=":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset" 3 | PIDFILE=/var/run/xvfb.pid 4 | case "$1" in 5 | start) 6 | echo -n "Starting virtual X frame buffer: Xvfb" 7 | start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS 8 | echo "." 9 | ;; 10 | stop) 11 | echo -n "Stopping virtual X frame buffer: Xvfb" 12 | start-stop-daemon --stop --quiet --pidfile $PIDFILE 13 | echo "." 14 | ;; 15 | restart) 16 | $0 stop 17 | $0 start 18 | ;; 19 | *) 20 | echo "Usage: /etc/init.d/xvfb {start|stop|restart}" 21 | exit 1 22 | esac 23 | 24 | exit 0 25 | -------------------------------------------------------------------------------- /playbooks/roles/automated_testing/templates/xvfb_start.j2: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | /etc/init.d/xvfb start -------------------------------------------------------------------------------- /playbooks/roles/base/tasks/aptget.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: apt-get | apt-get update 3 | apt: update_cache=yes cache_valid_time=3600 4 | sudo: true 5 | 6 | - name: apt-get | ensure core packages are installed 7 | apt: pkg={{ item }} state=installed 8 | sudo: true 9 | with_items: 10 | - atool 11 | - atop 12 | - curl 13 | - git 14 | - make 15 | - mc 16 | - python-software-properties 17 | - supervisor 18 | - tig 19 | - tree 20 | - vim 21 | - unzip -------------------------------------------------------------------------------- /playbooks/roles/base/tasks/bashrc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Bashrc Config | add .bashrc file 3 | template: src=bashrc.j2 dest=/home/{{ user }}/.bashrc 4 | sudo: true -------------------------------------------------------------------------------- /playbooks/roles/base/tasks/gitconfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Git Config | add .gitconfig file 3 | template: src=gitconfig.j2 dest=/home/{{ user }}/.gitconfig 4 | sudo: true -------------------------------------------------------------------------------- /playbooks/roles/base/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - include: aptget.yml 3 | - include: bashrc.yml 4 | - include: gitconfig.yml 5 | - include: vimrc.yml -------------------------------------------------------------------------------- /playbooks/roles/base/tasks/vimrc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Vim Config | Check if ~/.webscope-vim folder exists (ignore if fails) 3 | raw: ls ~/.webscope-vim 4 | register: webscope_vim_folder_exists 5 | ignore_errors: true 6 | 7 | - name: Vim Config | Download Webscope vim setup 8 | raw: git clone https://github.com/Webscope/webscope-vim.git ~/.webscope-vim 9 | when: webscope_vim_folder_exists.stdout.find('No such file or directory') != -1 10 | 11 | - name: Vim Config | Update vim plugins 12 | raw: cd ~/.webscope-vim && git submodule foreach git pull origin master 13 | 14 | - name: Vim Config | Check if ~/.vim folder exists (ignore if fails) 15 | raw: ls ~/.vim 16 | register: vim_folder_exists 17 | ignore_errors: true 18 | 19 | - name: Vimrc Config | Remove ~/.vim folder 20 | file: path=~/.vim 21 | state=absent 22 | when: vim_folder_exists.stdout.find('No such file or directory') == -1 23 | 24 | - name: Vim Config | Check if ~/.vimrc file exists (ignore if fails) 25 | raw: ls ~/.vimrc 26 | register: vimrc_exists 27 | ignore_errors: true 28 | 29 | - name: Vimrc Config | Remove ~/.vimrc file 30 | file: path=~/.vimrc 31 | state=absent 32 | when: vimrc_exists.stdout.find('No such file or directory') == -1 33 | 34 | - name: Vim Config | Setup vim config 35 | raw: cd ~/.webscope-vim && sh install.sh 36 | 37 | -------------------------------------------------------------------------------- /playbooks/roles/base/templates/bashrc.j2: -------------------------------------------------------------------------------- 1 | # Default Ubuntu stuff 2 | 3 | # ~/.bashrc: executed by bash(1) for non-login shells. 4 | # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) 5 | # for examples 6 | 7 | # If not running interactively, don't do anything 8 | case $- in 9 | *i*) ;; 10 | *) return;; 11 | esac 12 | 13 | # don't put duplicate lines or lines starting with space in the history. 14 | # See bash(1) for more options 15 | HISTCONTROL=ignoreboth 16 | 17 | # append to the history file, don't overwrite it 18 | shopt -s histappend 19 | 20 | # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) 21 | HISTSIZE=10000 22 | HISTFILESIZE=2000 23 | 24 | # check the window size after each command and, if necessary, 25 | # update the values of LINES and COLUMNS. 26 | shopt -s checkwinsize 27 | 28 | # If set, the pattern "**" used in a pathname expansion context will 29 | # match all files and zero or more directories and subdirectories. 30 | #shopt -s globstar 31 | 32 | # make less more friendly for non-text input files, see lesspipe(1) 33 | [ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" 34 | 35 | # set variable identifying the chroot you work in (used in the prompt below) 36 | if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then 37 | debian_chroot=$(cat /etc/debian_chroot) 38 | fi 39 | 40 | # set a fancy prompt (non-color, unless we know we "want" color) 41 | case "$TERM" in 42 | xterm-color) color_prompt=yes;; 43 | esac 44 | 45 | # uncomment for a colored prompt, if the terminal has the capability; turned 46 | # off by default to not distract the user: the focus in a terminal window 47 | # should be on the output of commands, not on the prompt 48 | force_color_prompt=yes 49 | 50 | if [ -n "$force_color_prompt" ]; then 51 | if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then 52 | # We have color support; assume it's compliant with Ecma-48 53 | # (ISO/IEC-6429). (Lack of such support is extremely rare, and such 54 | # a case would tend to support setf rather than setaf.) 55 | color_prompt=yes 56 | else 57 | color_prompt= 58 | fi 59 | fi 60 | 61 | if [ "$color_prompt" = yes ]; then 62 | PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' 63 | else 64 | PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' 65 | fi 66 | unset color_prompt force_color_prompt 67 | 68 | # If this is an xterm set the title to user@host:dir 69 | case "$TERM" in 70 | xterm*|rxvt*) 71 | PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" 72 | ;; 73 | *) 74 | ;; 75 | esac 76 | 77 | # enable color support of ls and also add handy aliases 78 | if [ -x /usr/bin/dircolors ]; then 79 | test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" 80 | alias ls='ls --color=auto' 81 | #alias dir='dir --color=auto' 82 | #alias vdir='vdir --color=auto' 83 | 84 | alias grep='grep --color=auto' 85 | alias fgrep='fgrep --color=auto' 86 | alias egrep='egrep --color=auto' 87 | fi 88 | 89 | # some more ls aliases 90 | alias ll='ls -alF' 91 | alias la='ls -A' 92 | alias l='ls -CF' 93 | 94 | # Add an "alert" alias for long running commands. Use like so: 95 | # sleep 10; alert 96 | alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' 97 | 98 | # Alias definitions. 99 | # You may want to put all your additions into a separate file like 100 | # ~/.bash_aliases, instead of adding them here directly. 101 | # See /usr/share/doc/bash-doc/examples in the bash-doc package. 102 | 103 | if [ -f ~/.bash_aliases ]; then 104 | . ~/.bash_aliases 105 | fi 106 | 107 | # enable programmable completion features (you don't need to enable 108 | # this, if it's already enabled in /etc/bash.bashrc and /etc/profile 109 | # sources /etc/bash.bashrc). 110 | if ! shopt -oq posix; then 111 | if [ -f /usr/share/bash-completion/bash_completion ]; then 112 | . /usr/share/bash-completion/bash_completion 113 | elif [ -f /etc/bash_completion ]; then 114 | . /etc/bash_completion 115 | fi 116 | fi 117 | 118 | # Custom stuff 119 | 120 | # Set dir colors 121 | export LSCOLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mng=01;35:*.pcx=01;35:*.yuv=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.pdf=00;32:*.ps=00;32:*.txt=00;32:*.patch=00;32:*.diff=00;32:*.log=00;32:*.tex=00;32:*.doc=00;32:*.flac=01;35:*.mp3=01;35:*.mpc=00;36:*.ogg=00;36:*.wav=00;36:*.mid=00;36:*.midi=00;36:*.au=00;36:*.flac=00;36:*.aac=00;36:*.ra=01;36:*.mka=01;36:'; 122 | export EDITOR=vim 123 | export PATH=${PATH}:${HOME}/bin 124 | export PATH=${PATH}:${HOME}/.composer/vendor/bin 125 | 126 | # Required for unicode screen 127 | alias screen="screen -U" 128 | 129 | alias ..='cd ..' 130 | alias -- -='cd -' 131 | 132 | alias bashrc='$EDITOR ~/.bashrc && source ~/.bashrc' 133 | 134 | alias g='git' 135 | alias gst='git status' 136 | alias gl='git log --oneline' 137 | alias gd='git diff' 138 | alias gc='git commit -m' 139 | alias gca='git commit -am' 140 | 141 | alias untarf='tar xf *.tar && rm *.tar' 142 | 143 | # Some fancy history stuff 144 | alias h='history | grep' # Easy history grep 145 | 146 | if [ -f ~/.git-completion.bash ]; then 147 | . ~/.git-completion.bash 148 | fi 149 | 150 | # Laravel aliases 151 | alias art='php artisan' 152 | alias amrs='php artisan migrate:refresh --seed' 153 | alias t='vendor/bin/codecept' 154 | 155 | # Drush aliases 156 | alias dca='drush cc all' 157 | alias dcm='drush cc menu' 158 | alias dfl='drush fl' 159 | alias drush='drush --strict=0' 160 | 161 | alias p='terminus' 162 | 163 | # System aliases 164 | alias restart='sudo service nginx restart && sudo service php7.0-fpm restart' 165 | 166 | # Other 167 | -------------------------------------------------------------------------------- /playbooks/roles/base/templates/gitconfig.j2: -------------------------------------------------------------------------------- 1 | [user] 2 | email = {{ git_email }} 3 | name = {{ git_name }} 4 | [color] 5 | ui = auto 6 | [color "branch"] 7 | current = yellow reverse 8 | local = yellow 9 | remote = green 10 | [color "diff"] 11 | meta = yellow bold 12 | frag = magenta bold 13 | old = red bold 14 | new = green bold 15 | [color "status"] 16 | added = yellow 17 | changed = green 18 | untracked = cyan 19 | [alias] 20 | st = status 21 | ci = commit 22 | br = branch 23 | co = checkout 24 | df = diff 25 | lg = log -p 26 | lol = log --graph --decorate --pretty=oneline --abbrev-commit 27 | lola = log --graph --decorate --pretty=oneline --abbrev-commit --all 28 | ls = ls-files 29 | [push] 30 | default = simple -------------------------------------------------------------------------------- /playbooks/roles/front/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - include: nodejs.yml -------------------------------------------------------------------------------- /playbooks/roles/front/tasks/nodejs.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Test | NPM is installed 3 | shell: npm -v 4 | register: npm_installed 5 | ignore_errors: true 6 | 7 | - name: NodeJS | Prepare for installation 8 | raw: "curl -sL https://deb.nodesource.com/setup | sudo bash -" 9 | sudo: true 10 | when: npm_installed|failed 11 | 12 | - name: NodeJS | Install NodeJS 13 | apt: name=nodejs state=present 14 | sudo: true 15 | 16 | - name: NodeJS | Install build-essentials package 17 | apt: name=build-essential state=present 18 | sudo: true 19 | 20 | - name: NodeJS | Install Grunt, Bower and Gulp 21 | command: npm install -g {{ item }} 22 | sudo: true 23 | with_items: 24 | - grunt 25 | - grunt-cli 26 | - bower 27 | - gulp -------------------------------------------------------------------------------- /playbooks/roles/mysql/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - include: mysql.yml 3 | - include: sqlite.yml 4 | -------------------------------------------------------------------------------- /playbooks/roles/mysql/tasks/mysql.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: MySQL | install mysql packages 3 | apt: pkg={{ item }} state=installed 4 | sudo: true 5 | with_items: 6 | - mysql-client 7 | - mysql-common 8 | - mysql-server 9 | - python-mysqldb 10 | 11 | - name: MySQL | create MySQL configuration file 12 | template: 13 | src=my.cnf.j2 14 | dest=/etc/mysql/my.cnf 15 | backup=yes 16 | owner=root 17 | group=root 18 | mode=0644 19 | sudo: true 20 | 21 | - name: MySQL | restart mysql 22 | service: name=mysql state=restarted 23 | sudo: true 24 | 25 | # MySQL database setup, this does the equivalent of mysql_secure_installation. 26 | - name: MySQL | Set the root password. 27 | mysql_user: name=root password={{ mysql_root_password }} host=localhost 28 | sudo: true 29 | 30 | - name: MySQL | Config for easy access as root user 31 | template: src=mysql_root.my.cnf.j2 dest=/root/.my.cnf 32 | sudo: true 33 | 34 | - name: MySQL | Config for easy access as root user 35 | template: src=mysql_root.my.cnf.j2 dest={{ home_dir }}/.my.cnf 36 | when: "'{{ user }}' != 'root'" 37 | 38 | - name: MySQL | Delete anonymous MySQL server user for {{ server_hostname }} 39 | mysql_user: name="" host="{{ server_hostname }}" state="absent" login_user=root login_password={{ mysql_root_password }} 40 | 41 | - name: MySQL | Delete anonymous MySQL server user for localhost 42 | mysql_user: name="" state="absent" host=localhost login_user=root login_password={{ mysql_root_password }} 43 | 44 | - name: MySQL | Secure the MySQL root user for IPV6 localhost (::1) 45 | mysql_user: name="root" password="{{ mysql_root_password }}" host="::1" login_user=root login_password={{ mysql_root_password }} 46 | 47 | - name: MySQL | Secure the MySQL root user for IPV4 localhost (127.0.0.1) 48 | mysql_user: name="root" password="{{ mysql_root_password }}" host="127.0.0.1" login_user=root login_password={{ mysql_root_password }} 49 | 50 | - name: MySQL | Secure the MySQL root user for localhost domain (localhost) 51 | mysql_user: name="root" password="{{ mysql_root_password }}" host="localhost" login_user=root login_password={{ mysql_root_password }} 52 | 53 | - name: MySQL | Secure the MySQL root user for {{ server_hostname }} domain 54 | mysql_user: name="root" password="{{ mysql_root_password }}" host="{{ server_hostname }}" login_user=root login_password={{ mysql_root_password }} 55 | 56 | - name: MySQL | Remove the MySQL test database 57 | mysql_db: db=test state=absent login_user=root login_password={{ mysql_root_password }} 58 | 59 | - name: MySQL | create application database user 60 | mysql_user: name={{ dbuser }} password={{ dbpass }} priv=*.*:ALL host='%' state=present login_password={{ mysql_root_password }} login_user=root 61 | 62 | - name: MySQL | restart mysql 63 | service: name=mysql state=restarted 64 | sudo: true -------------------------------------------------------------------------------- /playbooks/roles/mysql/tasks/sqlite.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: MySQL | install sqlite packages 3 | apt: pkg={{ item }} state=installed 4 | sudo: true 5 | with_items: 6 | - php7.0-sqlite3 7 | - sqlite3 8 | - libsqlite3-dev 9 | -------------------------------------------------------------------------------- /playbooks/roles/mysql/templates/my.cnf.j2: -------------------------------------------------------------------------------- 1 | # 2 | # The MySQL database server configuration file. 3 | # 4 | # You can copy this to one of: 5 | # - "/etc/mysql/my.cnf" to set global options, 6 | # - "~/.my.cnf" to set user-specific options. 7 | # 8 | # One can use all long options that the program supports. 9 | # Run program with --help to get a list of available options and with 10 | # --print-defaults to see which it would actually understand and use. 11 | # 12 | # For explanations see 13 | # http://dev.mysql.com/doc/mysql/en/server-system-variables.html 14 | 15 | # This will be passed to all mysql clients 16 | # It has been reported that passwords should be enclosed with ticks/quotes 17 | # escpecially if they contain "#" chars... 18 | # Remember to edit /etc/mysql/debian.cnf when changing the socket location. 19 | [client] 20 | port = {{ mysql_port }} 21 | socket = /var/run/mysqld/mysqld.sock 22 | 23 | # Here is entries for some specific programs 24 | # The following values assume you have at least 32M ram 25 | 26 | # This was formally known as [safe_mysqld]. Both versions are currently parsed. 27 | [mysqld_safe] 28 | socket = /var/run/mysqld/mysqld.sock 29 | nice = 0 30 | log-error=/var/log/mysqld.log 31 | pid-file=/var/run/mysqld/mysqld.pid 32 | 33 | [mysqld] 34 | # 35 | # * Basic Settings 36 | # 37 | user = mysql 38 | pid-file = /var/run/mysqld/mysqld.pid 39 | socket = /var/run/mysqld/mysqld.sock 40 | port = {{ mysql_port }} 41 | basedir = /usr 42 | datadir = /var/lib/mysql 43 | tmpdir = /tmp 44 | lc-messages-dir = /usr/share/mysql 45 | skip-external-locking 46 | # 47 | # Instead of skip-networking the default is now to listen only on 48 | # localhost which is more compatible and is not less secure. 49 | bind-address = 127.0.0.1 50 | # 51 | # * Fine Tuning 52 | # 53 | key_buffer = 16M 54 | max_allowed_packet = {{ mysql_max_allowed_packet }} 55 | thread_stack = 192K 56 | thread_cache_size = 8 57 | # This replaces the startup script and checks MyISAM tables if needed 58 | # the first time they are touched 59 | myisam-recover = BACKUP 60 | #max_connections = 100 61 | #table_cache = 64 62 | #thread_concurrency = 10 63 | # 64 | # * Query Cache Configuration 65 | # 66 | query_cache_limit = 1M 67 | query_cache_size = 16M 68 | # 69 | # * Logging and Replication 70 | # 71 | # Both location gets rotated by the cronjob. 72 | # Be aware that this log type is a performance killer. 73 | # As of 5.1 you can enable the log at runtime! 74 | #general_log_file = /var/log/mysql/mysql.log 75 | #general_log = 1 76 | # 77 | # Error log - should be very few entries. 78 | # 79 | log_error = /var/log/mysql/error.log 80 | # 81 | # Here you can see queries with especially long duration 82 | #log_slow_queries = /var/log/mysql/mysql-slow.log 83 | #long_query_time = 2 84 | #log-queries-not-using-indexes 85 | # 86 | # The following can be used as easy to replay backup logs or for replication. 87 | # note: if you are setting up a replication slave, see README.Debian about 88 | # other settings you may need to change. 89 | #server-id = 1 90 | #log_bin = /var/log/mysql/mysql-bin.log 91 | expire_logs_days = 10 92 | max_binlog_size = 100M 93 | #binlog_do_db = include_database_name 94 | #binlog_ignore_db = include_database_name 95 | # 96 | # * InnoDB 97 | # 98 | # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. 99 | # Read the manual for more InnoDB related options. There are many! 100 | # 101 | # * Security Features 102 | # 103 | # Read the manual, too, if you want chroot! 104 | # chroot = /var/lib/mysql/ 105 | # 106 | # For generating SSL certificates I recommend the OpenSSL GUI "tinyca". 107 | # 108 | # ssl-ca=/etc/mysql/cacert.pem 109 | # ssl-cert=/etc/mysql/server-cert.pem 110 | # ssl-key=/etc/mysql/server-key.pem 111 | # 112 | # Disabling symbolic-links is recommended to prevent assorted security risks 113 | symbolic-links=0 114 | # 115 | character_set_server={{ mysql_character_set_server }} 116 | collation_server={{ mysql_collation_server }} 117 | # 118 | innodb_file_per_table 119 | 120 | [mysqldump] 121 | quick 122 | quote-names 123 | max_allowed_packet = 16M 124 | 125 | [mysql] 126 | #no-auto-rehash # faster start of mysql but no tab completition 127 | 128 | [isamchk] 129 | key_buffer = 16M 130 | 131 | # 132 | # * IMPORTANT: Additional settings that can override those from this file! 133 | # The files must end with '.cnf', otherwise they'll be ignored. 134 | # 135 | !includedir /etc/mysql/conf.d/ 136 | -------------------------------------------------------------------------------- /playbooks/roles/mysql/templates/mysql_root.my.cnf.j2: -------------------------------------------------------------------------------- 1 | [client] 2 | user=root 3 | password={{ mysql_root_password }} -------------------------------------------------------------------------------- /playbooks/roles/nginx/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - include: nginx.yml -------------------------------------------------------------------------------- /playbooks/roles/nginx/tasks/nginx.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Nginx | install nginx 3 | apt: pkg=nginx state=installed 4 | sudo: true 5 | 6 | - name: Nginx | nginx settings 7 | template: src=nginx.conf.j2 8 | dest=/etc/nginx/nginx.conf 9 | backup=yes 10 | sudo: true 11 | notify: 12 | - restart nginx 13 | 14 | - name: Nginx | disable default server block 15 | file: path=/etc/nginx/sites-enabled/default 16 | state=absent 17 | sudo: true 18 | notify: 19 | - restart nginx 20 | 21 | - name: Nginx | set default login directory 22 | lineinfile: dest={{ home_dir }}/.bashrc state=present line='cd {{ sites_dir }}' 23 | 24 | - name: Nginx | restart nginx 25 | service: name=nginx state=restarted 26 | sudo: true -------------------------------------------------------------------------------- /playbooks/roles/nginx/templates/default_server_block.j2: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80 default_server; 3 | listen [::]:80 default_server ipv6only=on; 4 | 5 | server_name {{ webserver_hostname }} {{ webserver_hostname_alias }}; 6 | 7 | root {{ sites_dir }}/{{ webserver_hostname }}; 8 | 9 | index index.html index.htm index.php; 10 | 11 | charset utf-8; 12 | 13 | location / { 14 | try_files $uri $uri/ /index.php?$query_string; 15 | } 16 | 17 | access_log off; 18 | error_log /var/log/nginx/{{ webserver_hostname }}-error.log error; 19 | 20 | error_page 404 /index.php; 21 | 22 | sendfile off; 23 | 24 | location ~ \.php$ { 25 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 26 | fastcgi_pass unix:/run/php/php7.0-fpm.sock; 27 | fastcgi_index index.php; 28 | include fastcgi_params; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /playbooks/roles/nginx/templates/nginx.conf.j2: -------------------------------------------------------------------------------- 1 | user {{ username }}; 2 | worker_processes auto; 3 | pid /run/nginx.pid; 4 | 5 | events { 6 | worker_connections 1024; 7 | # multi_accept on; 8 | } 9 | 10 | http { 11 | 12 | ## 13 | # Basic Settings 14 | ## 15 | 16 | sendfile on; 17 | tcp_nopush on; 18 | tcp_nodelay on; 19 | keepalive_timeout 65; 20 | types_hash_max_size 2048; 21 | # server_tokens off; 22 | 23 | server_names_hash_bucket_size 64; 24 | # server_name_in_redirect off; 25 | 26 | include /etc/nginx/mime.types; 27 | default_type application/octet-stream; 28 | 29 | ## 30 | # Logging Settings 31 | ## 32 | 33 | access_log /var/log/nginx/access.log; 34 | 35 | ## 36 | # Gzip Settings 37 | ## 38 | 39 | gzip on; 40 | gzip_disable "msie6"; 41 | 42 | # gzip_vary on; 43 | # gzip_proxied any; 44 | # gzip_comp_level 6; 45 | # gzip_buffers 16 8k; 46 | # gzip_http_version 1.1; 47 | # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 48 | 49 | ## 50 | # Virtual Host Configs 51 | ## 52 | 53 | include /etc/nginx/conf.d/*.conf; 54 | include /etc/nginx/sites-enabled/*; 55 | } 56 | 57 | 58 | #mail { 59 | # # See sample authentication script at: 60 | # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript 61 | # 62 | # # auth_http localhost/auth.php; 63 | # # pop3_capabilities "TOP" "USER"; 64 | # # imap_capabilities "IMAP4rev1" "UIDPLUS"; 65 | # 66 | # server { 67 | # listen localhost:110; 68 | # protocol pop3; 69 | # proxy on; 70 | # } 71 | # 72 | # server { 73 | # listen localhost:143; 74 | # protocol imap; 75 | # proxy on; 76 | # } 77 | #} 78 | -------------------------------------------------------------------------------- /playbooks/roles/php/tasks/composer.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: PHP | Check if Composer is installed (ignore if fails) 3 | raw: composer 4 | register: composer_installed 5 | ignore_errors: true 6 | 7 | - name: PHP | Install Composer 8 | shell: curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer creates=/usr/local/bin/composer 9 | when: composer_installed.stdout.find('command not found') != -1 10 | sudo: true 11 | -------------------------------------------------------------------------------- /playbooks/roles/php/tasks/drush.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Drush | Check if Drush is installed (ignore if fails) 3 | raw: drush --version 4 | register: drush_installed 5 | ignore_errors: true 6 | 7 | - name: Drush | install drush via composer 8 | command: composer global require drush/drush 9 | when: drush_installed.stdout.find('command not found') != -1 10 | 11 | - name: Drush | set drush to executable 12 | command: chmod u+x drush chdir=/home/{{ user }}/.config/composer/vendor/drush/drush 13 | when: drush_installed.stdout.find('command not found') != -1 14 | 15 | - name: Drush | link up the drush command so everyone can run it 16 | file: src=/home/{{ user }}/.config/composer/vendor/drush/drush/drush dest=/usr/bin/drush state=link 17 | when: drush_installed.stdout.find('command not found') != -1 18 | sudo: true 19 | 20 | - name: Drush | clear drush cache 21 | command: drush cc drush 22 | -------------------------------------------------------------------------------- /playbooks/roles/php/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - include: php.yml 3 | - include: composer.yml 4 | - include: drush.yml -------------------------------------------------------------------------------- /playbooks/roles/php/tasks/php.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: PHP | Add php-7.0 PPA 3 | apt_repository: repo='ppa:ondrej/php' 4 | state=present 5 | update_cache=yes 6 | sudo: true 7 | 8 | - name: PHP | install php packages 9 | apt: pkg={{ item }} state=installed 10 | with_items: 11 | - php7.0-fpm 12 | - php7.0-cli 13 | - php7.0-common 14 | - php7.0-curl 15 | - php7.0-json 16 | - php7.0-gd 17 | - php7.0-mcrypt 18 | - php7.0-odbc 19 | - php7.0-pgsql 20 | - php7.0-mbstring 21 | - php7.0-mysql 22 | - php7.0-xmlrpc 23 | - php7.0-opcache 24 | - php7.0-intl 25 | - php7.0-bz2 26 | - php7.0-xml 27 | sudo: true 28 | 29 | - name: PHP | FPM php.ini 30 | template: 31 | src=php.ini.j2 32 | dest=/etc/php/7.0/fpm/php.ini 33 | backup=yes 34 | owner=root 35 | group=root 36 | mode=0644 37 | sudo: true 38 | 39 | - name: PHP | CLI php.ini 40 | template: 41 | src=php.ini.j2 42 | dest=/etc/php/7.0/cli/php.ini 43 | backup=yes 44 | owner=root 45 | group=root 46 | mode=0644 47 | sudo: true 48 | 49 | - name: PHP | configure opcache 50 | template: 51 | src=opcache.ini.j2 52 | dest=/etc/php/7.0/mods-available/opcache.ini 53 | backup=yes 54 | owner=root 55 | group=root 56 | mode=0644 57 | sudo: true 58 | 59 | - name: PHP | configure for nginx 1 60 | lineinfile: dest=/etc/php/7.0/fpm/pool.d/www.conf regexp="^[#|;]?group = www" insertafter="^[#|;]?group = www" line="group = vagrant" 61 | sudo: true 62 | 63 | - name: PHP | configure for nginx 2 64 | lineinfile: dest=/etc/php/7.0/fpm/pool.d/www.conf regexp="^[#|;]?listen\.group = www" insertafter="^[#|;]?listen\.group = www" line="listen.group = vagrant" 65 | sudo: true 66 | 67 | - name: PHP | configure for nginx 3 68 | lineinfile: dest=/etc/php/7.0/fpm/pool.d/www.conf regexp="^[#|;]?listen\.mode = 0660" insertafter="^[#|;]?listen\.mode = 0660" line="listen.mode = 0660" 69 | sudo: true 70 | 71 | - name: PHP | restart nginx 72 | raw: service php7.0-fpm restart 73 | sudo: true 74 | 75 | - name: PHP | restart fpm 76 | raw: service php7.0-fpm restart 77 | sudo: true -------------------------------------------------------------------------------- /playbooks/roles/php/templates/opcache.ini.j2: -------------------------------------------------------------------------------- 1 | ; configuration for php opcache module 2 | zend_extension=opcache.so 3 | opcache.validate_timestamps = 1 4 | opcache.revalidate_freq = 0 5 | opcache.memory_consumption = 64 6 | opcache.interned_strings_buffer = 16 7 | opcache.max_accelerated_files = 4000 8 | opcache.fast_shutdown = 1 -------------------------------------------------------------------------------- /playbooks/roles/php/templates/php.ini.j2: -------------------------------------------------------------------------------- 1 | [PHP] 2 | 3 | ;;;;;;;;;;;;;;;;;;; 4 | ; About php.ini ; 5 | ;;;;;;;;;;;;;;;;;;; 6 | ; PHP's initialization file, generally called php.ini, is responsible for 7 | ; configuring many of the aspects of PHP's behavior. 8 | 9 | ; PHP attempts to find and load this configuration from a number of locations. 10 | ; The following is a summary of its search order: 11 | ; 1. SAPI module specific location. 12 | ; 2. The PHPRC environment variable. (As of PHP 5.2.0) 13 | ; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0) 14 | ; 4. Current working directory (except CLI) 15 | ; 5. The web server's directory (for SAPI modules), or directory of PHP 16 | ; (otherwise in Windows) 17 | ; 6. The directory from the --with-config-file-path compile time option, or the 18 | ; Windows directory (C:\windows or C:\winnt) 19 | ; See the PHP docs for more specific information. 20 | ; http://php.net/configuration.file 21 | 22 | ; The syntax of the file is extremely simple. Whitespace and lines 23 | ; beginning with a semicolon are silently ignored (as you probably guessed). 24 | ; Section headers (e.g. [Foo]) are also silently ignored, even though 25 | ; they might mean something in the future. 26 | 27 | ; Directives following the section heading [PATH=/www/mysite] only 28 | ; apply to PHP files in the /www/mysite directory. Directives 29 | ; following the section heading [HOST=www.example.com] only apply to 30 | ; PHP files served from www.example.com. Directives set in these 31 | ; special sections cannot be overridden by user-defined INI files or 32 | ; at runtime. Currently, [PATH=] and [HOST=] sections only work under 33 | ; CGI/FastCGI. 34 | ; http://php.net/ini.sections 35 | 36 | ; Directives are specified using the following syntax: 37 | ; directive = value 38 | ; Directive names are *case sensitive* - foo=bar is different from FOO=bar. 39 | ; Directives are variables used to configure PHP or PHP extensions. 40 | ; There is no name validation. If PHP can't find an expected 41 | ; directive because it is not set or is mistyped, a default value will be used. 42 | 43 | ; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one 44 | ; of the INI constants (On, Off, True, False, Yes, No and None) or an expression 45 | ; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a 46 | ; previously set variable or directive (e.g. ${foo}) 47 | 48 | ; Expressions in the INI file are limited to bitwise operators and parentheses: 49 | ; | bitwise OR 50 | ; ^ bitwise XOR 51 | ; & bitwise AND 52 | ; ~ bitwise NOT 53 | ; ! boolean NOT 54 | 55 | ; Boolean flags can be turned on using the values 1, On, True or Yes. 56 | ; They can be turned off using the values 0, Off, False or No. 57 | 58 | ; An empty string can be denoted by simply not writing anything after the equal 59 | ; sign, or by using the None keyword: 60 | 61 | ; foo = ; sets foo to an empty string 62 | ; foo = None ; sets foo to an empty string 63 | ; foo = "None" ; sets foo to the string 'None' 64 | 65 | ; If you use constants in your value, and these constants belong to a 66 | ; dynamically loaded extension (either a PHP extension or a Zend extension), 67 | ; you may only use these constants *after* the line that loads the extension. 68 | 69 | ;;;;;;;;;;;;;;;;;;; 70 | ; About this file ; 71 | ;;;;;;;;;;;;;;;;;;; 72 | ; PHP comes packaged with two INI files. One that is recommended to be used 73 | ; in production environments and one that is recommended to be used in 74 | ; development environments. 75 | 76 | ; php.ini-production contains settings which hold security, performance and 77 | ; best practices at its core. But please be aware, these settings may break 78 | ; compatibility with older or less security conscience applications. We 79 | ; recommending using the production ini in production and testing environments. 80 | 81 | ; php.ini-development is very similar to its production variant, except it is 82 | ; much more verbose when it comes to errors. We recommend using the 83 | ; development version only in development environments, as errors shown to 84 | ; application users can inadvertently leak otherwise secure information. 85 | 86 | ; This is php.ini-production INI file. 87 | 88 | ;;;;;;;;;;;;;;;;;;; 89 | ; Quick Reference ; 90 | ;;;;;;;;;;;;;;;;;;; 91 | ; The following are all the settings which are different in either the production 92 | ; or development versions of the INIs with respect to PHP's default behavior. 93 | ; Please see the actual settings later in the document for more details as to why 94 | ; we recommend these changes in PHP's behavior. 95 | 96 | ; display_errors 97 | ; Default Value: On 98 | ; Development Value: On 99 | ; Production Value: Off 100 | 101 | ; display_startup_errors 102 | ; Default Value: Off 103 | ; Development Value: On 104 | ; Production Value: Off 105 | 106 | ; error_reporting 107 | ; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED 108 | ; Development Value: E_ALL 109 | ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT 110 | 111 | ; html_errors 112 | ; Default Value: On 113 | ; Development Value: On 114 | ; Production value: On 115 | 116 | ; log_errors 117 | ; Default Value: Off 118 | ; Development Value: On 119 | ; Production Value: On 120 | 121 | ; max_input_time 122 | ; Default Value: -1 (Unlimited) 123 | ; Development Value: 60 (60 seconds) 124 | ; Production Value: 60 (60 seconds) 125 | 126 | ; output_buffering 127 | ; Default Value: Off 128 | ; Development Value: 4096 129 | ; Production Value: 4096 130 | 131 | ; register_argc_argv 132 | ; Default Value: On 133 | ; Development Value: Off 134 | ; Production Value: Off 135 | 136 | ; request_order 137 | ; Default Value: None 138 | ; Development Value: "GP" 139 | ; Production Value: "GP" 140 | 141 | ; session.gc_divisor 142 | ; Default Value: 100 143 | ; Development Value: 1000 144 | ; Production Value: 1000 145 | 146 | ; session.hash_bits_per_character 147 | ; Default Value: 4 148 | ; Development Value: 5 149 | ; Production Value: 5 150 | 151 | ; short_open_tag 152 | ; Default Value: On 153 | ; Development Value: Off 154 | ; Production Value: Off 155 | 156 | ; track_errors 157 | ; Default Value: Off 158 | ; Development Value: On 159 | ; Production Value: Off 160 | 161 | ; url_rewriter.tags 162 | ; Default Value: "a=href,area=href,frame=src,form=,fieldset=" 163 | ; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" 164 | ; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" 165 | 166 | ; variables_order 167 | ; Default Value: "EGPCS" 168 | ; Development Value: "GPCS" 169 | ; Production Value: "GPCS" 170 | 171 | ;;;;;;;;;;;;;;;;;;;; 172 | ; php.ini Options ; 173 | ;;;;;;;;;;;;;;;;;;;; 174 | ; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini" 175 | ;user_ini.filename = ".user.ini" 176 | 177 | ; To disable this feature set this option to empty value 178 | ;user_ini.filename = 179 | 180 | ; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes) 181 | ;user_ini.cache_ttl = 300 182 | 183 | ;;;;;;;;;;;;;;;;;;;; 184 | ; Language Options ; 185 | ;;;;;;;;;;;;;;;;;;;; 186 | 187 | ; Enable the PHP scripting language engine under Apache. 188 | ; http://php.net/engine 189 | engine = On 190 | 191 | ; This directive determines whether or not PHP will recognize code between 192 | ; tags as PHP source which should be processed as such. It is 193 | ; generally recommended that should be used and that this feature 194 | ; should be disabled, as enabling it may result in issues when generating XML 195 | ; documents, however this remains supported for backward compatibility reasons. 196 | ; Note that this directive does not control the would work. 308 | ; http://php.net/syntax-highlighting 309 | ;highlight.string = #DD0000 310 | ;highlight.comment = #FF9900 311 | ;highlight.keyword = #007700 312 | ;highlight.default = #0000BB 313 | ;highlight.html = #000000 314 | 315 | ; If enabled, the request will be allowed to complete even if the user aborts 316 | ; the request. Consider enabling it if executing long requests, which may end up 317 | ; being interrupted by the user or a browser timing out. PHP's default behavior 318 | ; is to disable this feature. 319 | ; http://php.net/ignore-user-abort 320 | ;ignore_user_abort = On 321 | 322 | ; Determines the size of the realpath cache to be used by PHP. This value should 323 | ; be increased on systems where PHP opens many files to reflect the quantity of 324 | ; the file operations performed. 325 | ; http://php.net/realpath-cache-size 326 | ;realpath_cache_size = 16k 327 | 328 | ; Duration of time, in seconds for which to cache realpath information for a given 329 | ; file or directory. For systems with rarely changing files, consider increasing this 330 | ; value. 331 | ; http://php.net/realpath-cache-ttl 332 | ;realpath_cache_ttl = 120 333 | 334 | ; Enables or disables the circular reference collector. 335 | ; http://php.net/zend.enable-gc 336 | zend.enable_gc = On 337 | 338 | ; If enabled, scripts may be written in encodings that are incompatible with 339 | ; the scanner. CP936, Big5, CP949 and Shift_JIS are the examples of such 340 | ; encodings. To use this feature, mbstring extension must be enabled. 341 | ; Default: Off 342 | ;zend.multibyte = Off 343 | 344 | ; Allows to set the default encoding for the scripts. This value will be used 345 | ; unless "declare(encoding=...)" directive appears at the top of the script. 346 | ; Only affects if zend.multibyte is set. 347 | ; Default: "" 348 | ;zend.script_encoding = 349 | 350 | ;;;;;;;;;;;;;;;;; 351 | ; Miscellaneous ; 352 | ;;;;;;;;;;;;;;;;; 353 | 354 | ; Decides whether PHP may expose the fact that it is installed on the server 355 | ; (e.g. by adding its signature to the Web server header). It is no security 356 | ; threat in any way, but it makes it possible to determine whether you use PHP 357 | ; on your server or not. 358 | ; http://php.net/expose-php 359 | expose_php = Off 360 | 361 | ;;;;;;;;;;;;;;;;;;; 362 | ; Resource Limits ; 363 | ;;;;;;;;;;;;;;;;;;; 364 | 365 | ; Maximum execution time of each script, in seconds 366 | ; http://php.net/max-execution-time 367 | ; Note: This directive is hardcoded to 0 for the CLI SAPI 368 | max_execution_time = {{ php_max_execution_time }} 369 | 370 | ; Maximum amount of time each script may spend parsing request data. It's a good 371 | ; idea to limit this time on productions servers in order to eliminate unexpectedly 372 | ; long running scripts. 373 | ; Note: This directive is hardcoded to -1 for the CLI SAPI 374 | ; Default Value: -1 (Unlimited) 375 | ; Development Value: 60 (60 seconds) 376 | ; Production Value: 60 (60 seconds) 377 | ; http://php.net/max-input-time 378 | max_input_time = 60 379 | 380 | ; Maximum input variable nesting level 381 | ; http://php.net/max-input-nesting-level 382 | ;max_input_nesting_level = 64 383 | 384 | ; How many GET/POST/COOKIE input variables may be accepted 385 | ; max_input_vars = 1000 386 | 387 | ; Maximum amount of memory a script may consume (128MB) 388 | ; http://php.net/memory-limit 389 | memory_limit = {{ php_memory_limit }} 390 | 391 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 392 | ; Error handling and logging ; 393 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 394 | 395 | ; This directive informs PHP of which errors, warnings and notices you would like 396 | ; it to take action for. The recommended way of setting values for this 397 | ; directive is through the use of the error level constants and bitwise 398 | ; operators. The error level constants are below here for convenience as well as 399 | ; some common settings and their meanings. 400 | ; By default, PHP is set to take action on all errors, notices and warnings EXCEPT 401 | ; those related to E_NOTICE and E_STRICT, which together cover best practices and 402 | ; recommended coding standards in PHP. For performance reasons, this is the 403 | ; recommend error reporting setting. Your production server shouldn't be wasting 404 | ; resources complaining about best practices and coding standards. That's what 405 | ; development servers and development settings are for. 406 | ; Note: The php.ini-development file has this setting as E_ALL. This 407 | ; means it pretty much reports everything which is exactly what you want during 408 | ; development and early testing. 409 | ; 410 | ; Error Level Constants: 411 | ; E_ALL - All errors and warnings (includes E_STRICT as of PHP 5.4.0) 412 | ; E_ERROR - fatal run-time errors 413 | ; E_RECOVERABLE_ERROR - almost fatal run-time errors 414 | ; E_WARNING - run-time warnings (non-fatal errors) 415 | ; E_PARSE - compile-time parse errors 416 | ; E_NOTICE - run-time notices (these are warnings which often result 417 | ; from a bug in your code, but it's possible that it was 418 | ; intentional (e.g., using an uninitialized variable and 419 | ; relying on the fact it is automatically initialized to an 420 | ; empty string) 421 | ; E_STRICT - run-time notices, enable to have PHP suggest changes 422 | ; to your code which will ensure the best interoperability 423 | ; and forward compatibility of your code 424 | ; E_CORE_ERROR - fatal errors that occur during PHP's initial startup 425 | ; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's 426 | ; initial startup 427 | ; E_COMPILE_ERROR - fatal compile-time errors 428 | ; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) 429 | ; E_USER_ERROR - user-generated error message 430 | ; E_USER_WARNING - user-generated warning message 431 | ; E_USER_NOTICE - user-generated notice message 432 | ; E_DEPRECATED - warn about code that will not work in future versions 433 | ; of PHP 434 | ; E_USER_DEPRECATED - user-generated deprecation warnings 435 | ; 436 | ; Common Values: 437 | ; E_ALL (Show all errors, warnings and notices including coding standards.) 438 | ; E_ALL & ~E_NOTICE (Show all errors, except for notices) 439 | ; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.) 440 | ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) 441 | ; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED 442 | ; Development Value: E_ALL 443 | ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT 444 | ; http://php.net/error-reporting 445 | error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT 446 | 447 | ; This directive controls whether or not and where PHP will output errors, 448 | ; notices and warnings too. Error output is very useful during development, but 449 | ; it could be very dangerous in production environments. Depending on the code 450 | ; which is triggering the error, sensitive information could potentially leak 451 | ; out of your application such as database usernames and passwords or worse. 452 | ; For production environments, we recommend logging errors rather than 453 | ; sending them to STDOUT. 454 | ; Possible Values: 455 | ; Off = Do not display any errors 456 | ; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) 457 | ; On or stdout = Display errors to STDOUT 458 | ; Default Value: On 459 | ; Development Value: On 460 | ; Production Value: Off 461 | ; http://php.net/display-errors 462 | display_errors = {{ php_display_errors }} 463 | 464 | ; The display of errors which occur during PHP's startup sequence are handled 465 | ; separately from display_errors. PHP's default behavior is to suppress those 466 | ; errors from clients. Turning the display of startup errors on can be useful in 467 | ; debugging configuration problems. We strongly recommend you 468 | ; set this to 'off' for production servers. 469 | ; Default Value: Off 470 | ; Development Value: On 471 | ; Production Value: Off 472 | ; http://php.net/display-startup-errors 473 | display_startup_errors = {{ php_display_startup_errors }} 474 | 475 | ; Besides displaying errors, PHP can also log errors to locations such as a 476 | ; server-specific log, STDERR, or a location specified by the error_log 477 | ; directive found below. While errors should not be displayed on productions 478 | ; servers they should still be monitored and logging is a great way to do that. 479 | ; Default Value: Off 480 | ; Development Value: On 481 | ; Production Value: On 482 | ; http://php.net/log-errors 483 | log_errors = On 484 | 485 | ; Set maximum length of log_errors. In error_log information about the source is 486 | ; added. The default is 1024 and 0 allows to not apply any maximum length at all. 487 | ; http://php.net/log-errors-max-len 488 | log_errors_max_len = 1024 489 | 490 | ; Do not log repeated messages. Repeated errors must occur in same file on same 491 | ; line unless ignore_repeated_source is set true. 492 | ; http://php.net/ignore-repeated-errors 493 | ignore_repeated_errors = Off 494 | 495 | ; Ignore source of message when ignoring repeated messages. When this setting 496 | ; is On you will not log errors with repeated messages from different files or 497 | ; source lines. 498 | ; http://php.net/ignore-repeated-source 499 | ignore_repeated_source = Off 500 | 501 | ; If this parameter is set to Off, then memory leaks will not be shown (on 502 | ; stdout or in the log). This has only effect in a debug compile, and if 503 | ; error reporting includes E_WARNING in the allowed list 504 | ; http://php.net/report-memleaks 505 | report_memleaks = On 506 | 507 | ; This setting is on by default. 508 | ;report_zend_debug = 0 509 | 510 | ; Store the last error/warning message in $php_errormsg (boolean). Setting this value 511 | ; to On can assist in debugging and is appropriate for development servers. It should 512 | ; however be disabled on production servers. 513 | ; Default Value: Off 514 | ; Development Value: On 515 | ; Production Value: Off 516 | ; http://php.net/track-errors 517 | track_errors = Off 518 | 519 | ; Turn off normal error reporting and emit XML-RPC error XML 520 | ; http://php.net/xmlrpc-errors 521 | ;xmlrpc_errors = 0 522 | 523 | ; An XML-RPC faultCode 524 | ;xmlrpc_error_number = 0 525 | 526 | ; When PHP displays or logs an error, it has the capability of formatting the 527 | ; error message as HTML for easier reading. This directive controls whether 528 | ; the error message is formatted as HTML or not. 529 | ; Note: This directive is hardcoded to Off for the CLI SAPI 530 | ; Default Value: On 531 | ; Development Value: On 532 | ; Production value: On 533 | ; http://php.net/html-errors 534 | html_errors = {{ php_html_errors }} 535 | 536 | ; If html_errors is set to On *and* docref_root is not empty, then PHP 537 | ; produces clickable error messages that direct to a page describing the error 538 | ; or function causing the error in detail. 539 | ; You can download a copy of the PHP manual from http://php.net/docs 540 | ; and change docref_root to the base URL of your local copy including the 541 | ; leading '/'. You must also specify the file extension being used including 542 | ; the dot. PHP's default behavior is to leave these settings empty, in which 543 | ; case no links to documentation are generated. 544 | ; Note: Never use this feature for production boxes. 545 | ; http://php.net/docref-root 546 | ; Examples 547 | ;docref_root = "/phpmanual/" 548 | 549 | ; http://php.net/docref-ext 550 | ;docref_ext = .html 551 | 552 | ; String to output before an error message. PHP's default behavior is to leave 553 | ; this setting blank. 554 | ; http://php.net/error-prepend-string 555 | ; Example: 556 | ;error_prepend_string = "" 557 | 558 | ; String to output after an error message. PHP's default behavior is to leave 559 | ; this setting blank. 560 | ; http://php.net/error-append-string 561 | ; Example: 562 | ;error_append_string = "" 563 | 564 | ; Log errors to specified file. PHP's default behavior is to leave this value 565 | ; empty. 566 | ; http://php.net/error-log 567 | ; Example: 568 | ;error_log = php_errors.log 569 | ; Log errors to syslog (Event Log on Windows). 570 | ;error_log = syslog 571 | 572 | ;windows.show_crt_warning 573 | ; Default value: 0 574 | ; Development value: 0 575 | ; Production value: 0 576 | 577 | ;;;;;;;;;;;;;;;;; 578 | ; Data Handling ; 579 | ;;;;;;;;;;;;;;;;; 580 | 581 | ; The separator used in PHP generated URLs to separate arguments. 582 | ; PHP's default setting is "&". 583 | ; http://php.net/arg-separator.output 584 | ; Example: 585 | ;arg_separator.output = "&" 586 | 587 | ; List of separator(s) used by PHP to parse input URLs into variables. 588 | ; PHP's default setting is "&". 589 | ; NOTE: Every character in this directive is considered as separator! 590 | ; http://php.net/arg-separator.input 591 | ; Example: 592 | ;arg_separator.input = ";&" 593 | 594 | ; This directive determines which super global arrays are registered when PHP 595 | ; starts up. G,P,C,E & S are abbreviations for the following respective super 596 | ; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty 597 | ; paid for the registration of these arrays and because ENV is not as commonly 598 | ; used as the others, ENV is not recommended on productions servers. You 599 | ; can still get access to the environment variables through getenv() should you 600 | ; need to. 601 | ; Default Value: "EGPCS" 602 | ; Development Value: "GPCS" 603 | ; Production Value: "GPCS"; 604 | ; http://php.net/variables-order 605 | variables_order = "GPCS" 606 | 607 | ; This directive determines which super global data (G,P & C) should be 608 | ; registered into the super global array REQUEST. If so, it also determines 609 | ; the order in which that data is registered. The values for this directive 610 | ; are specified in the same manner as the variables_order directive, 611 | ; EXCEPT one. Leaving this value empty will cause PHP to use the value set 612 | ; in the variables_order directive. It does not mean it will leave the super 613 | ; globals array REQUEST empty. 614 | ; Default Value: None 615 | ; Development Value: "GP" 616 | ; Production Value: "GP" 617 | ; http://php.net/request-order 618 | request_order = "GP" 619 | 620 | ; This directive determines whether PHP registers $argv & $argc each time it 621 | ; runs. $argv contains an array of all the arguments passed to PHP when a script 622 | ; is invoked. $argc contains an integer representing the number of arguments 623 | ; that were passed when the script was invoked. These arrays are extremely 624 | ; useful when running scripts from the command line. When this directive is 625 | ; enabled, registering these variables consumes CPU cycles and memory each time 626 | ; a script is executed. For performance reasons, this feature should be disabled 627 | ; on production servers. 628 | ; Note: This directive is hardcoded to On for the CLI SAPI 629 | ; Default Value: On 630 | ; Development Value: Off 631 | ; Production Value: Off 632 | ; http://php.net/register-argc-argv 633 | register_argc_argv = Off 634 | 635 | ; When enabled, the ENV, REQUEST and SERVER variables are created when they're 636 | ; first used (Just In Time) instead of when the script starts. If these 637 | ; variables are not used within a script, having this directive on will result 638 | ; in a performance gain. The PHP directive register_argc_argv must be disabled 639 | ; for this directive to have any affect. 640 | ; http://php.net/auto-globals-jit 641 | auto_globals_jit = On 642 | 643 | ; Whether PHP will read the POST data. 644 | ; This option is enabled by default. 645 | ; Most likely, you won't want to disable this option globally. It causes $_POST 646 | ; and $_FILES to always be empty; the only way you will be able to read the 647 | ; POST data will be through the php://input stream wrapper. This can be useful 648 | ; to proxy requests or to process the POST data in a memory efficient fashion. 649 | ; http://php.net/enable-post-data-reading 650 | ;enable_post_data_reading = Off 651 | 652 | ; Maximum size of POST data that PHP will accept. 653 | ; Its value may be 0 to disable the limit. It is ignored if POST data reading 654 | ; is disabled through enable_post_data_reading. 655 | ; http://php.net/post-max-size 656 | post_max_size = {{ php_post_max_size }} 657 | 658 | ; Automatically add files before PHP document. 659 | ; http://php.net/auto-prepend-file 660 | auto_prepend_file = 661 | 662 | ; Automatically add files after PHP document. 663 | ; http://php.net/auto-append-file 664 | auto_append_file = 665 | 666 | ; By default, PHP will output a character encoding using 667 | ; the Content-type: header. To disable sending of the charset, simply 668 | ; set it to be empty. 669 | ; 670 | ; PHP's built-in default is text/html 671 | ; http://php.net/default-mimetype 672 | default_mimetype = "text/html" 673 | 674 | ; PHP's default character set is set to UTF-8. 675 | ; http://php.net/default-charset 676 | default_charset = "UTF-8" 677 | 678 | ; PHP internal character encoding is set to empty. 679 | ; If empty, default_charset is used. 680 | ; http://php.net/internal-encoding 681 | ;internal_encoding = 682 | 683 | ; PHP input character encoding is set to empty. 684 | ; If empty, default_charset is used. 685 | ; http://php.net/input-encoding 686 | ;input_encoding = 687 | 688 | ; PHP output character encoding is set to empty. 689 | ; If empty, default_charset is used. 690 | ; mbstring or iconv output handler is used. 691 | ; See also output_buffer. 692 | ; http://php.net/output-encoding 693 | ;output_encoding = 694 | 695 | ;;;;;;;;;;;;;;;;;;;;;;;;; 696 | ; Paths and Directories ; 697 | ;;;;;;;;;;;;;;;;;;;;;;;;; 698 | 699 | ; UNIX: "/path1:/path2" 700 | ;include_path = ".:/usr/share/php" 701 | ; 702 | ; Windows: "\path1;\path2" 703 | ;include_path = ".;c:\php\includes" 704 | ; 705 | ; PHP's default setting for include_path is ".;/path/to/php/pear" 706 | ; http://php.net/include-path 707 | 708 | ; The root of the PHP pages, used only if nonempty. 709 | ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root 710 | ; if you are running php as a CGI under any web server (other than IIS) 711 | ; see documentation for security issues. The alternate is to use the 712 | ; cgi.force_redirect configuration below 713 | ; http://php.net/doc-root 714 | doc_root = 715 | 716 | ; The directory under which PHP opens the script using /~username used only 717 | ; if nonempty. 718 | ; http://php.net/user-dir 719 | user_dir = 720 | 721 | ; Directory in which the loadable extensions (modules) reside. 722 | ; http://php.net/extension-dir 723 | ; extension_dir = "./" 724 | ; On windows: 725 | ; extension_dir = "ext" 726 | 727 | ; Directory where the temporary files should be placed. 728 | ; Defaults to the system default (see sys_get_temp_dir) 729 | ; sys_temp_dir = "/tmp" 730 | 731 | ; Whether or not to enable the dl() function. The dl() function does NOT work 732 | ; properly in multithreaded servers, such as IIS or Zeus, and is automatically 733 | ; disabled on them. 734 | ; http://php.net/enable-dl 735 | enable_dl = Off 736 | 737 | ; cgi.force_redirect is necessary to provide security running PHP as a CGI under 738 | ; most web servers. Left undefined, PHP turns this on by default. You can 739 | ; turn it off here AT YOUR OWN RISK 740 | ; **You CAN safely turn this off for IIS, in fact, you MUST.** 741 | ; http://php.net/cgi.force-redirect 742 | ;cgi.force_redirect = 1 743 | 744 | ; if cgi.nph is enabled it will force cgi to always sent Status: 200 with 745 | ; every request. PHP's default behavior is to disable this feature. 746 | ;cgi.nph = 1 747 | 748 | ; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape 749 | ; (iPlanet) web servers, you MAY need to set an environment variable name that PHP 750 | ; will look for to know it is OK to continue execution. Setting this variable MAY 751 | ; cause security issues, KNOW WHAT YOU ARE DOING FIRST. 752 | ; http://php.net/cgi.redirect-status-env 753 | ;cgi.redirect_status_env = 754 | 755 | ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's 756 | ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok 757 | ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting 758 | ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting 759 | ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts 760 | ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. 761 | ; http://php.net/cgi.fix-pathinfo 762 | cgi.fix_pathinfo=0 763 | 764 | ; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate 765 | ; security tokens of the calling client. This allows IIS to define the 766 | ; security context that the request runs under. mod_fastcgi under Apache 767 | ; does not currently support this feature (03/17/2002) 768 | ; Set to 1 if running under IIS. Default is zero. 769 | ; http://php.net/fastcgi.impersonate 770 | ;fastcgi.impersonate = 1 771 | 772 | ; Disable logging through FastCGI connection. PHP's default behavior is to enable 773 | ; this feature. 774 | ;fastcgi.logging = 0 775 | 776 | ; cgi.rfc2616_headers configuration option tells PHP what type of headers to 777 | ; use when sending HTTP response code. If set to 0, PHP sends Status: header that 778 | ; is supported by Apache. When this option is set to 1, PHP will send 779 | ; RFC2616 compliant header. 780 | ; Default is zero. 781 | ; http://php.net/cgi.rfc2616-headers 782 | ;cgi.rfc2616_headers = 0 783 | 784 | ;;;;;;;;;;;;;;;; 785 | ; File Uploads ; 786 | ;;;;;;;;;;;;;;;; 787 | 788 | ; Whether to allow HTTP file uploads. 789 | ; http://php.net/file-uploads 790 | file_uploads = On 791 | 792 | ; Temporary directory for HTTP uploaded files (will use system default if not 793 | ; specified). 794 | ; http://php.net/upload-tmp-dir 795 | ;upload_tmp_dir = 796 | 797 | ; Maximum allowed size for uploaded files. 798 | ; http://php.net/upload-max-filesize 799 | upload_max_filesize = {{ php_upload_max_filesize }} 800 | 801 | ; Maximum number of files that can be uploaded via a single request 802 | max_file_uploads = 20 803 | 804 | ;;;;;;;;;;;;;;;;;; 805 | ; Fopen wrappers ; 806 | ;;;;;;;;;;;;;;;;;; 807 | 808 | ; Whether to allow the treatment of URLs (like http:// or ftp://) as files. 809 | ; http://php.net/allow-url-fopen 810 | allow_url_fopen = On 811 | 812 | ; Whether to allow include/require to open URLs (like http:// or ftp://) as files. 813 | ; http://php.net/allow-url-include 814 | allow_url_include = Off 815 | 816 | ; Define the anonymous ftp password (your email address). PHP's default setting 817 | ; for this is empty. 818 | ; http://php.net/from 819 | ;from="john@doe.com" 820 | 821 | ; Define the User-Agent string. PHP's default setting for this is empty. 822 | ; http://php.net/user-agent 823 | ;user_agent="PHP" 824 | 825 | ; Default timeout for socket based streams (seconds) 826 | ; http://php.net/default-socket-timeout 827 | default_socket_timeout = 60 828 | 829 | ; If your scripts have to deal with files from Macintosh systems, 830 | ; or you are running on a Mac and need to deal with files from 831 | ; unix or win32 systems, setting this flag will cause PHP to 832 | ; automatically detect the EOL character in those files so that 833 | ; fgets() and file() will work regardless of the source of the file. 834 | ; http://php.net/auto-detect-line-endings 835 | ;auto_detect_line_endings = Off 836 | 837 | ;;;;;;;;;;;;;;;;;;;;;; 838 | ; Dynamic Extensions ; 839 | ;;;;;;;;;;;;;;;;;;;;;; 840 | 841 | ; If you wish to have an extension loaded automatically, use the following 842 | ; syntax: 843 | ; 844 | ; extension=modulename.extension 845 | ; 846 | ; For example, on Windows: 847 | ; 848 | ; extension=msql.dll 849 | ; 850 | ; ... or under UNIX: 851 | ; 852 | ; extension=msql.so 853 | ; 854 | ; ... or with a path: 855 | ; 856 | ; extension=/path/to/extension/msql.so 857 | ; 858 | ; If you only provide the name of the extension, PHP will look for it in its 859 | ; default extension directory. 860 | ; 861 | ; Windows Extensions 862 | ; Note that ODBC support is built in, so no dll is needed for it. 863 | ; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5+) 864 | ; extension folders as well as the separate PECL DLL download (PHP 5+). 865 | ; Be sure to appropriately set the extension_dir directive. 866 | ; 867 | ;extension=php_bz2.dll 868 | ;extension=php_curl.dll 869 | ;extension=php_fileinfo.dll 870 | ;extension=php_gd2.dll 871 | ;extension=php_gettext.dll 872 | ;extension=php_gmp.dll 873 | ;extension=php_intl.dll 874 | ;extension=php_imap.dll 875 | ;extension=php_interbase.dll 876 | ;extension=php_ldap.dll 877 | ;extension=php_mbstring.dll 878 | ;extension=php_exif.dll ; Must be after mbstring as it depends on it 879 | ;extension=php_mysqli.dll 880 | ;extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client 881 | ;extension=php_openssl.dll 882 | ;extension=php_pdo_firebird.dll 883 | ;extension=php_pdo_mysql.dll 884 | ;extension=php_pdo_oci.dll 885 | ;extension=php_pdo_odbc.dll 886 | ;extension=php_pdo_pgsql.dll 887 | ;extension=php_pdo_sqlite.dll 888 | ;extension=php_pgsql.dll 889 | ;extension=php_shmop.dll 890 | 891 | ; The MIBS data available in the PHP distribution must be installed. 892 | ; See http://www.php.net/manual/en/snmp.installation.php 893 | ;extension=php_snmp.dll 894 | 895 | ;extension=php_soap.dll 896 | ;extension=php_sockets.dll 897 | ;extension=php_sqlite3.dll 898 | ;extension=php_tidy.dll 899 | ;extension=php_xmlrpc.dll 900 | ;extension=php_xsl.dll 901 | 902 | ;;;;;;;;;;;;;;;;;;; 903 | ; Module Settings ; 904 | ;;;;;;;;;;;;;;;;;;; 905 | 906 | [CLI Server] 907 | ; Whether the CLI web server uses ANSI color coding in its terminal output. 908 | cli_server.color = On 909 | 910 | [Date] 911 | ; Defines the default timezone used by the date functions 912 | ; http://php.net/date.timezone 913 | date.timezone = {{ php_date_timezone }} 914 | 915 | ; http://php.net/date.default-latitude 916 | ;date.default_latitude = 31.7667 917 | 918 | ; http://php.net/date.default-longitude 919 | ;date.default_longitude = 35.2333 920 | 921 | ; http://php.net/date.sunrise-zenith 922 | ;date.sunrise_zenith = 90.583333 923 | 924 | ; http://php.net/date.sunset-zenith 925 | ;date.sunset_zenith = 90.583333 926 | 927 | [filter] 928 | ; http://php.net/filter.default 929 | ;filter.default = unsafe_raw 930 | 931 | ; http://php.net/filter.default-flags 932 | ;filter.default_flags = 933 | 934 | [iconv] 935 | ; Use of this INI entry is deprecated, use global input_encoding instead. 936 | ; If empty, default_charset or input_encoding or iconv.input_encoding is used. 937 | ; The precedence is: default_charset < intput_encoding < iconv.input_encoding 938 | ;iconv.input_encoding = 939 | 940 | ; Use of this INI entry is deprecated, use global internal_encoding instead. 941 | ; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. 942 | ; The precedence is: default_charset < internal_encoding < iconv.internal_encoding 943 | ;iconv.internal_encoding = 944 | 945 | ; Use of this INI entry is deprecated, use global output_encoding instead. 946 | ; If empty, default_charset or output_encoding or iconv.output_encoding is used. 947 | ; The precedence is: default_charset < output_encoding < iconv.output_encoding 948 | ; To use an output encoding conversion, iconv's output handler must be set 949 | ; otherwise output encoding conversion cannot be performed. 950 | ;iconv.output_encoding = 951 | 952 | [intl] 953 | ;intl.default_locale = 954 | ; This directive allows you to produce PHP errors when some error 955 | ; happens within intl functions. The value is the level of the error produced. 956 | ; Default is 0, which does not produce any errors. 957 | ;intl.error_level = E_WARNING 958 | 959 | [sqlite] 960 | ; http://php.net/sqlite.assoc-case 961 | ;sqlite.assoc_case = 0 962 | 963 | [sqlite3] 964 | ;sqlite3.extension_dir = 965 | 966 | [Pcre] 967 | ;PCRE library backtracking limit. 968 | ; http://php.net/pcre.backtrack-limit 969 | ;pcre.backtrack_limit=100000 970 | 971 | ;PCRE library recursion limit. 972 | ;Please note that if you set this value to a high number you may consume all 973 | ;the available process stack and eventually crash PHP (due to reaching the 974 | ;stack size limit imposed by the Operating System). 975 | ; http://php.net/pcre.recursion-limit 976 | ;pcre.recursion_limit=100000 977 | 978 | ;Enables or disables JIT compilation of patterns. This requires the PCRE 979 | ;library to be compiled with JIT support. 980 | ;pcre.jit=1 981 | 982 | [Pdo] 983 | ; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" 984 | ; http://php.net/pdo-odbc.connection-pooling 985 | ;pdo_odbc.connection_pooling=strict 986 | 987 | ;pdo_odbc.db2_instance_name 988 | 989 | [Pdo_mysql] 990 | ; If mysqlnd is used: Number of cache slots for the internal result set cache 991 | ; http://php.net/pdo_mysql.cache_size 992 | pdo_mysql.cache_size = 2000 993 | 994 | ; Default socket name for local MySQL connects. If empty, uses the built-in 995 | ; MySQL defaults. 996 | ; http://php.net/pdo_mysql.default-socket 997 | pdo_mysql.default_socket= 998 | 999 | [Phar] 1000 | ; http://php.net/phar.readonly 1001 | ;phar.readonly = On 1002 | 1003 | ; http://php.net/phar.require-hash 1004 | ;phar.require_hash = On 1005 | 1006 | ;phar.cache_list = 1007 | 1008 | [mail function] 1009 | ; For Win32 only. 1010 | ; http://php.net/smtp 1011 | SMTP = localhost 1012 | ; http://php.net/smtp-port 1013 | smtp_port = 25 1014 | 1015 | ; For Win32 only. 1016 | ; http://php.net/sendmail-from 1017 | ;sendmail_from = me@example.com 1018 | 1019 | ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). 1020 | ; http://php.net/sendmail-path 1021 | ;sendmail_path = 1022 | 1023 | ; Force the addition of the specified parameters to be passed as extra parameters 1024 | ; to the sendmail binary. These parameters will always replace the value of 1025 | ; the 5th parameter to mail(). 1026 | ;mail.force_extra_parameters = 1027 | 1028 | ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename 1029 | mail.add_x_header = On 1030 | 1031 | ; The path to a log file that will log all mail() calls. Log entries include 1032 | ; the full path of the script, line number, To address and headers. 1033 | ;mail.log = 1034 | ; Log mail to syslog (Event Log on Windows). 1035 | ;mail.log = syslog 1036 | 1037 | [SQL] 1038 | ; http://php.net/sql.safe-mode 1039 | sql.safe_mode = Off 1040 | 1041 | [ODBC] 1042 | ; http://php.net/odbc.default-db 1043 | ;odbc.default_db = Not yet implemented 1044 | 1045 | ; http://php.net/odbc.default-user 1046 | ;odbc.default_user = Not yet implemented 1047 | 1048 | ; http://php.net/odbc.default-pw 1049 | ;odbc.default_pw = Not yet implemented 1050 | 1051 | ; Controls the ODBC cursor model. 1052 | ; Default: SQL_CURSOR_STATIC (default). 1053 | ;odbc.default_cursortype 1054 | 1055 | ; Allow or prevent persistent links. 1056 | ; http://php.net/odbc.allow-persistent 1057 | odbc.allow_persistent = On 1058 | 1059 | ; Check that a connection is still valid before reuse. 1060 | ; http://php.net/odbc.check-persistent 1061 | odbc.check_persistent = On 1062 | 1063 | ; Maximum number of persistent links. -1 means no limit. 1064 | ; http://php.net/odbc.max-persistent 1065 | odbc.max_persistent = -1 1066 | 1067 | ; Maximum number of links (persistent + non-persistent). -1 means no limit. 1068 | ; http://php.net/odbc.max-links 1069 | odbc.max_links = -1 1070 | 1071 | ; Handling of LONG fields. Returns number of bytes to variables. 0 means 1072 | ; passthru. 1073 | ; http://php.net/odbc.defaultlrl 1074 | odbc.defaultlrl = 4096 1075 | 1076 | ; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. 1077 | ; See the documentation on odbc_binmode and odbc_longreadlen for an explanation 1078 | ; of odbc.defaultlrl and odbc.defaultbinmode 1079 | ; http://php.net/odbc.defaultbinmode 1080 | odbc.defaultbinmode = 1 1081 | 1082 | ;birdstep.max_links = -1 1083 | 1084 | [Interbase] 1085 | ; Allow or prevent persistent links. 1086 | ibase.allow_persistent = 1 1087 | 1088 | ; Maximum number of persistent links. -1 means no limit. 1089 | ibase.max_persistent = -1 1090 | 1091 | ; Maximum number of links (persistent + non-persistent). -1 means no limit. 1092 | ibase.max_links = -1 1093 | 1094 | ; Default database name for ibase_connect(). 1095 | ;ibase.default_db = 1096 | 1097 | ; Default username for ibase_connect(). 1098 | ;ibase.default_user = 1099 | 1100 | ; Default password for ibase_connect(). 1101 | ;ibase.default_password = 1102 | 1103 | ; Default charset for ibase_connect(). 1104 | ;ibase.default_charset = 1105 | 1106 | ; Default timestamp format. 1107 | ibase.timestampformat = "%Y-%m-%d %H:%M:%S" 1108 | 1109 | ; Default date format. 1110 | ibase.dateformat = "%Y-%m-%d" 1111 | 1112 | ; Default time format. 1113 | ibase.timeformat = "%H:%M:%S" 1114 | 1115 | [MySQLi] 1116 | 1117 | ; Maximum number of persistent links. -1 means no limit. 1118 | ; http://php.net/mysqli.max-persistent 1119 | mysqli.max_persistent = -1 1120 | 1121 | ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements 1122 | ; http://php.net/mysqli.allow_local_infile 1123 | ;mysqli.allow_local_infile = On 1124 | 1125 | ; Allow or prevent persistent links. 1126 | ; http://php.net/mysqli.allow-persistent 1127 | mysqli.allow_persistent = On 1128 | 1129 | ; Maximum number of links. -1 means no limit. 1130 | ; http://php.net/mysqli.max-links 1131 | mysqli.max_links = -1 1132 | 1133 | ; If mysqlnd is used: Number of cache slots for the internal result set cache 1134 | ; http://php.net/mysqli.cache_size 1135 | mysqli.cache_size = 2000 1136 | 1137 | ; Default port number for mysqli_connect(). If unset, mysqli_connect() will use 1138 | ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the 1139 | ; compile-time value defined MYSQL_PORT (in that order). Win32 will only look 1140 | ; at MYSQL_PORT. 1141 | ; http://php.net/mysqli.default-port 1142 | mysqli.default_port = 3306 1143 | 1144 | ; Default socket name for local MySQL connects. If empty, uses the built-in 1145 | ; MySQL defaults. 1146 | ; http://php.net/mysqli.default-socket 1147 | mysqli.default_socket = 1148 | 1149 | ; Default host for mysql_connect() (doesn't apply in safe mode). 1150 | ; http://php.net/mysqli.default-host 1151 | mysqli.default_host = 1152 | 1153 | ; Default user for mysql_connect() (doesn't apply in safe mode). 1154 | ; http://php.net/mysqli.default-user 1155 | mysqli.default_user = 1156 | 1157 | ; Default password for mysqli_connect() (doesn't apply in safe mode). 1158 | ; Note that this is generally a *bad* idea to store passwords in this file. 1159 | ; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") 1160 | ; and reveal this password! And of course, any users with read access to this 1161 | ; file will be able to reveal the password as well. 1162 | ; http://php.net/mysqli.default-pw 1163 | mysqli.default_pw = 1164 | 1165 | ; Allow or prevent reconnect 1166 | mysqli.reconnect = Off 1167 | 1168 | [mysqlnd] 1169 | ; Enable / Disable collection of general statistics by mysqlnd which can be 1170 | ; used to tune and monitor MySQL operations. 1171 | ; http://php.net/mysqlnd.collect_statistics 1172 | mysqlnd.collect_statistics = On 1173 | 1174 | ; Enable / Disable collection of memory usage statistics by mysqlnd which can be 1175 | ; used to tune and monitor MySQL operations. 1176 | ; http://php.net/mysqlnd.collect_memory_statistics 1177 | mysqlnd.collect_memory_statistics = Off 1178 | 1179 | ; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. 1180 | ; http://php.net/mysqlnd.net_cmd_buffer_size 1181 | ;mysqlnd.net_cmd_buffer_size = 2048 1182 | 1183 | ; Size of a pre-allocated buffer used for reading data sent by the server in 1184 | ; bytes. 1185 | ; http://php.net/mysqlnd.net_read_buffer_size 1186 | ;mysqlnd.net_read_buffer_size = 32768 1187 | 1188 | [OCI8] 1189 | 1190 | ; Connection: Enables privileged connections using external 1191 | ; credentials (OCI_SYSOPER, OCI_SYSDBA) 1192 | ; http://php.net/oci8.privileged-connect 1193 | ;oci8.privileged_connect = Off 1194 | 1195 | ; Connection: The maximum number of persistent OCI8 connections per 1196 | ; process. Using -1 means no limit. 1197 | ; http://php.net/oci8.max-persistent 1198 | ;oci8.max_persistent = -1 1199 | 1200 | ; Connection: The maximum number of seconds a process is allowed to 1201 | ; maintain an idle persistent connection. Using -1 means idle 1202 | ; persistent connections will be maintained forever. 1203 | ; http://php.net/oci8.persistent-timeout 1204 | ;oci8.persistent_timeout = -1 1205 | 1206 | ; Connection: The number of seconds that must pass before issuing a 1207 | ; ping during oci_pconnect() to check the connection validity. When 1208 | ; set to 0, each oci_pconnect() will cause a ping. Using -1 disables 1209 | ; pings completely. 1210 | ; http://php.net/oci8.ping-interval 1211 | ;oci8.ping_interval = 60 1212 | 1213 | ; Connection: Set this to a user chosen connection class to be used 1214 | ; for all pooled server requests with Oracle 11g Database Resident 1215 | ; Connection Pooling (DRCP). To use DRCP, this value should be set to 1216 | ; the same string for all web servers running the same application, 1217 | ; the database pool must be configured, and the connection string must 1218 | ; specify to use a pooled server. 1219 | ;oci8.connection_class = 1220 | 1221 | ; High Availability: Using On lets PHP receive Fast Application 1222 | ; Notification (FAN) events generated when a database node fails. The 1223 | ; database must also be configured to post FAN events. 1224 | ;oci8.events = Off 1225 | 1226 | ; Tuning: This option enables statement caching, and specifies how 1227 | ; many statements to cache. Using 0 disables statement caching. 1228 | ; http://php.net/oci8.statement-cache-size 1229 | ;oci8.statement_cache_size = 20 1230 | 1231 | ; Tuning: Enables statement prefetching and sets the default number of 1232 | ; rows that will be fetched automatically after statement execution. 1233 | ; http://php.net/oci8.default-prefetch 1234 | ;oci8.default_prefetch = 100 1235 | 1236 | ; Compatibility. Using On means oci_close() will not close 1237 | ; oci_connect() and oci_new_connect() connections. 1238 | ; http://php.net/oci8.old-oci-close-semantics 1239 | ;oci8.old_oci_close_semantics = Off 1240 | 1241 | [PostgreSQL] 1242 | ; Allow or prevent persistent links. 1243 | ; http://php.net/pgsql.allow-persistent 1244 | pgsql.allow_persistent = On 1245 | 1246 | ; Detect broken persistent links always with pg_pconnect(). 1247 | ; Auto reset feature requires a little overheads. 1248 | ; http://php.net/pgsql.auto-reset-persistent 1249 | pgsql.auto_reset_persistent = Off 1250 | 1251 | ; Maximum number of persistent links. -1 means no limit. 1252 | ; http://php.net/pgsql.max-persistent 1253 | pgsql.max_persistent = -1 1254 | 1255 | ; Maximum number of links (persistent+non persistent). -1 means no limit. 1256 | ; http://php.net/pgsql.max-links 1257 | pgsql.max_links = -1 1258 | 1259 | ; Ignore PostgreSQL backends Notice message or not. 1260 | ; Notice message logging require a little overheads. 1261 | ; http://php.net/pgsql.ignore-notice 1262 | pgsql.ignore_notice = 0 1263 | 1264 | ; Log PostgreSQL backends Notice message or not. 1265 | ; Unless pgsql.ignore_notice=0, module cannot log notice message. 1266 | ; http://php.net/pgsql.log-notice 1267 | pgsql.log_notice = 0 1268 | 1269 | [bcmath] 1270 | ; Number of decimal digits for all bcmath functions. 1271 | ; http://php.net/bcmath.scale 1272 | bcmath.scale = 0 1273 | 1274 | [browscap] 1275 | ; http://php.net/browscap 1276 | ;browscap = extra/browscap.ini 1277 | 1278 | [Session] 1279 | ; Handler used to store/retrieve data. 1280 | ; http://php.net/session.save-handler 1281 | session.save_handler = files 1282 | 1283 | ; Argument passed to save_handler. In the case of files, this is the path 1284 | ; where data files are stored. Note: Windows users have to change this 1285 | ; variable in order to use PHP's session functions. 1286 | ; 1287 | ; The path can be defined as: 1288 | ; 1289 | ; session.save_path = "N;/path" 1290 | ; 1291 | ; where N is an integer. Instead of storing all the session files in 1292 | ; /path, what this will do is use subdirectories N-levels deep, and 1293 | ; store the session data in those directories. This is useful if 1294 | ; your OS has problems with many files in one directory, and is 1295 | ; a more efficient layout for servers that handle many sessions. 1296 | ; 1297 | ; NOTE 1: PHP will not create this directory structure automatically. 1298 | ; You can use the script in the ext/session dir for that purpose. 1299 | ; NOTE 2: See the section on garbage collection below if you choose to 1300 | ; use subdirectories for session storage 1301 | ; 1302 | ; The file storage module creates files using mode 600 by default. 1303 | ; You can change that by using 1304 | ; 1305 | ; session.save_path = "N;MODE;/path" 1306 | ; 1307 | ; where MODE is the octal representation of the mode. Note that this 1308 | ; does not overwrite the process's umask. 1309 | ; http://php.net/session.save-path 1310 | ;session.save_path = "/var/lib/php/sessions" 1311 | 1312 | ; Whether to use strict session mode. 1313 | ; Strict session mode does not accept uninitialized session ID and regenerate 1314 | ; session ID if browser sends uninitialized session ID. Strict mode protects 1315 | ; applications from session fixation via session adoption vulnerability. It is 1316 | ; disabled by default for maximum compatibility, but enabling it is encouraged. 1317 | ; https://wiki.php.net/rfc/strict_sessions 1318 | session.use_strict_mode = 0 1319 | 1320 | ; Whether to use cookies. 1321 | ; http://php.net/session.use-cookies 1322 | session.use_cookies = 1 1323 | 1324 | ; http://php.net/session.cookie-secure 1325 | ;session.cookie_secure = 1326 | 1327 | ; This option forces PHP to fetch and use a cookie for storing and maintaining 1328 | ; the session id. We encourage this operation as it's very helpful in combating 1329 | ; session hijacking when not specifying and managing your own session id. It is 1330 | ; not the be-all and end-all of session hijacking defense, but it's a good start. 1331 | ; http://php.net/session.use-only-cookies 1332 | session.use_only_cookies = 1 1333 | 1334 | ; Name of the session (used as cookie name). 1335 | ; http://php.net/session.name 1336 | session.name = PHPSESSID 1337 | 1338 | ; Initialize session on request startup. 1339 | ; http://php.net/session.auto-start 1340 | session.auto_start = 0 1341 | 1342 | ; Lifetime in seconds of cookie or, if 0, until browser is restarted. 1343 | ; http://php.net/session.cookie-lifetime 1344 | session.cookie_lifetime = 0 1345 | 1346 | ; The path for which the cookie is valid. 1347 | ; http://php.net/session.cookie-path 1348 | session.cookie_path = / 1349 | 1350 | ; The domain for which the cookie is valid. 1351 | ; http://php.net/session.cookie-domain 1352 | session.cookie_domain = 1353 | 1354 | ; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript. 1355 | ; http://php.net/session.cookie-httponly 1356 | session.cookie_httponly = 1357 | 1358 | ; Handler used to serialize data. php is the standard serializer of PHP. 1359 | ; http://php.net/session.serialize-handler 1360 | session.serialize_handler = php 1361 | 1362 | ; Defines the probability that the 'garbage collection' process is started 1363 | ; on every session initialization. The probability is calculated by using 1364 | ; gc_probability/gc_divisor. Where session.gc_probability is the numerator 1365 | ; and gc_divisor is the denominator in the equation. Setting this value to 1 1366 | ; when the session.gc_divisor value is 100 will give you approximately a 1% chance 1367 | ; the gc will run on any give request. 1368 | ; Default Value: 1 1369 | ; Development Value: 1 1370 | ; Production Value: 1 1371 | ; http://php.net/session.gc-probability 1372 | session.gc_probability = 0 1373 | 1374 | ; Defines the probability that the 'garbage collection' process is started on every 1375 | ; session initialization. The probability is calculated by using the following equation: 1376 | ; gc_probability/gc_divisor. Where session.gc_probability is the numerator and 1377 | ; session.gc_divisor is the denominator in the equation. Setting this value to 1 1378 | ; when the session.gc_divisor value is 100 will give you approximately a 1% chance 1379 | ; the gc will run on any give request. Increasing this value to 1000 will give you 1380 | ; a 0.1% chance the gc will run on any give request. For high volume production servers, 1381 | ; this is a more efficient approach. 1382 | ; Default Value: 100 1383 | ; Development Value: 1000 1384 | ; Production Value: 1000 1385 | ; http://php.net/session.gc-divisor 1386 | session.gc_divisor = 1000 1387 | 1388 | ; After this number of seconds, stored data will be seen as 'garbage' and 1389 | ; cleaned up by the garbage collection process. 1390 | ; http://php.net/session.gc-maxlifetime 1391 | session.gc_maxlifetime = 1440 1392 | 1393 | ; NOTE: If you are using the subdirectory option for storing session files 1394 | ; (see session.save_path above), then garbage collection does *not* 1395 | ; happen automatically. You will need to do your own garbage 1396 | ; collection through a shell script, cron entry, or some other method. 1397 | ; For example, the following script would is the equivalent of 1398 | ; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): 1399 | ; find /path/to/sessions -cmin +24 -type f | xargs rm 1400 | 1401 | ; Check HTTP Referer to invalidate externally stored URLs containing ids. 1402 | ; HTTP_REFERER has to contain this substring for the session to be 1403 | ; considered as valid. 1404 | ; http://php.net/session.referer-check 1405 | session.referer_check = 1406 | 1407 | ; How many bytes to read from the file. 1408 | ; http://php.net/session.entropy-length 1409 | ;session.entropy_length = 32 1410 | 1411 | ; Specified here to create the session id. 1412 | ; http://php.net/session.entropy-file 1413 | ; Defaults to /dev/urandom 1414 | ; On systems that don't have /dev/urandom but do have /dev/arandom, this will default to /dev/arandom 1415 | ; If neither are found at compile time, the default is no entropy file. 1416 | ; On windows, setting the entropy_length setting will activate the 1417 | ; Windows random source (using the CryptoAPI) 1418 | ;session.entropy_file = /dev/urandom 1419 | 1420 | ; Set to {nocache,private,public,} to determine HTTP caching aspects 1421 | ; or leave this empty to avoid sending anti-caching headers. 1422 | ; http://php.net/session.cache-limiter 1423 | session.cache_limiter = nocache 1424 | 1425 | ; Document expires after n minutes. 1426 | ; http://php.net/session.cache-expire 1427 | session.cache_expire = 180 1428 | 1429 | ; trans sid support is disabled by default. 1430 | ; Use of trans sid may risk your users' security. 1431 | ; Use this option with caution. 1432 | ; - User may send URL contains active session ID 1433 | ; to other person via. email/irc/etc. 1434 | ; - URL that contains active session ID may be stored 1435 | ; in publicly accessible computer. 1436 | ; - User may access your site with the same session ID 1437 | ; always using URL stored in browser's history or bookmarks. 1438 | ; http://php.net/session.use-trans-sid 1439 | session.use_trans_sid = 0 1440 | 1441 | ; Select a hash function for use in generating session ids. 1442 | ; Possible Values 1443 | ; 0 (MD5 128 bits) 1444 | ; 1 (SHA-1 160 bits) 1445 | ; This option may also be set to the name of any hash function supported by 1446 | ; the hash extension. A list of available hashes is returned by the hash_algos() 1447 | ; function. 1448 | ; http://php.net/session.hash-function 1449 | session.hash_function = 0 1450 | 1451 | ; Define how many bits are stored in each character when converting 1452 | ; the binary hash data to something readable. 1453 | ; Possible values: 1454 | ; 4 (4 bits: 0-9, a-f) 1455 | ; 5 (5 bits: 0-9, a-v) 1456 | ; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") 1457 | ; Default Value: 4 1458 | ; Development Value: 5 1459 | ; Production Value: 5 1460 | ; http://php.net/session.hash-bits-per-character 1461 | session.hash_bits_per_character = 5 1462 | 1463 | ; The URL rewriter will look for URLs in a defined set of HTML tags. 1464 | ; form/fieldset are special; if you include them here, the rewriter will 1465 | ; add a hidden field with the info which is otherwise appended 1466 | ; to URLs. If you want XHTML conformity, remove the form entry. 1467 | ; Note that all valid entries require a "=", even if no value follows. 1468 | ; Default Value: "a=href,area=href,frame=src,form=,fieldset=" 1469 | ; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" 1470 | ; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" 1471 | ; http://php.net/url-rewriter.tags 1472 | url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" 1473 | 1474 | ; Enable upload progress tracking in $_SESSION 1475 | ; Default Value: On 1476 | ; Development Value: On 1477 | ; Production Value: On 1478 | ; http://php.net/session.upload-progress.enabled 1479 | ;session.upload_progress.enabled = On 1480 | 1481 | ; Cleanup the progress information as soon as all POST data has been read 1482 | ; (i.e. upload completed). 1483 | ; Default Value: On 1484 | ; Development Value: On 1485 | ; Production Value: On 1486 | ; http://php.net/session.upload-progress.cleanup 1487 | ;session.upload_progress.cleanup = On 1488 | 1489 | ; A prefix used for the upload progress key in $_SESSION 1490 | ; Default Value: "upload_progress_" 1491 | ; Development Value: "upload_progress_" 1492 | ; Production Value: "upload_progress_" 1493 | ; http://php.net/session.upload-progress.prefix 1494 | ;session.upload_progress.prefix = "upload_progress_" 1495 | 1496 | ; The index name (concatenated with the prefix) in $_SESSION 1497 | ; containing the upload progress information 1498 | ; Default Value: "PHP_SESSION_UPLOAD_PROGRESS" 1499 | ; Development Value: "PHP_SESSION_UPLOAD_PROGRESS" 1500 | ; Production Value: "PHP_SESSION_UPLOAD_PROGRESS" 1501 | ; http://php.net/session.upload-progress.name 1502 | ;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" 1503 | 1504 | ; How frequently the upload progress should be updated. 1505 | ; Given either in percentages (per-file), or in bytes 1506 | ; Default Value: "1%" 1507 | ; Development Value: "1%" 1508 | ; Production Value: "1%" 1509 | ; http://php.net/session.upload-progress.freq 1510 | ;session.upload_progress.freq = "1%" 1511 | 1512 | ; The minimum delay between updates, in seconds 1513 | ; Default Value: 1 1514 | ; Development Value: 1 1515 | ; Production Value: 1 1516 | ; http://php.net/session.upload-progress.min-freq 1517 | ;session.upload_progress.min_freq = "1" 1518 | 1519 | [Assertion] 1520 | ; Switch whether to compile assertions at all (to have no overhead at run-time) 1521 | ; -1: Do not compile at all 1522 | ; 0: Jump over assertion at run-time 1523 | ; 1: Execute assertions 1524 | ; Changing from or to a negative value is only possible in php.ini! (For turning assertions on and off at run-time, see assert.active, when zend.assertions = 1) 1525 | ; Default Value: 1 1526 | ; Development Value: 1 1527 | ; Production Value: -1 1528 | ; http://php.net/zend.assertions 1529 | zend.assertions = -1 1530 | 1531 | ; Assert(expr); active by default. 1532 | ; http://php.net/assert.active 1533 | ;assert.active = On 1534 | 1535 | ; Throw an AssertationException on failed assertions 1536 | ; http://php.net/assert.exception 1537 | ;assert.exception = On 1538 | 1539 | ; Issue a PHP warning for each failed assertion. (Overridden by assert.exception if active) 1540 | ; http://php.net/assert.warning 1541 | ;assert.warning = On 1542 | 1543 | ; Don't bail out by default. 1544 | ; http://php.net/assert.bail 1545 | ;assert.bail = Off 1546 | 1547 | ; User-function to be called if an assertion fails. 1548 | ; http://php.net/assert.callback 1549 | ;assert.callback = 0 1550 | 1551 | ; Eval the expression with current error_reporting(). Set to true if you want 1552 | ; error_reporting(0) around the eval(). 1553 | ; http://php.net/assert.quiet-eval 1554 | ;assert.quiet_eval = 0 1555 | 1556 | [COM] 1557 | ; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs 1558 | ; http://php.net/com.typelib-file 1559 | ;com.typelib_file = 1560 | 1561 | ; allow Distributed-COM calls 1562 | ; http://php.net/com.allow-dcom 1563 | ;com.allow_dcom = true 1564 | 1565 | ; autoregister constants of a components typlib on com_load() 1566 | ; http://php.net/com.autoregister-typelib 1567 | ;com.autoregister_typelib = true 1568 | 1569 | ; register constants casesensitive 1570 | ; http://php.net/com.autoregister-casesensitive 1571 | ;com.autoregister_casesensitive = false 1572 | 1573 | ; show warnings on duplicate constant registrations 1574 | ; http://php.net/com.autoregister-verbose 1575 | ;com.autoregister_verbose = true 1576 | 1577 | ; The default character set code-page to use when passing strings to and from COM objects. 1578 | ; Default: system ANSI code page 1579 | ;com.code_page= 1580 | 1581 | [mbstring] 1582 | ; language for internal character representation. 1583 | ; This affects mb_send_mail() and mbstring.detect_order. 1584 | ; http://php.net/mbstring.language 1585 | ;mbstring.language = Japanese 1586 | 1587 | ; Use of this INI entry is deprecated, use global internal_encoding instead. 1588 | ; internal/script encoding. 1589 | ; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*) 1590 | ; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. 1591 | ; The precedence is: default_charset < internal_encoding < iconv.internal_encoding 1592 | ;mbstring.internal_encoding = 1593 | 1594 | ; Use of this INI entry is deprecated, use global input_encoding instead. 1595 | ; http input encoding. 1596 | ; mbstring.encoding_traslation = On is needed to use this setting. 1597 | ; If empty, default_charset or input_encoding or mbstring.input is used. 1598 | ; The precedence is: default_charset < intput_encoding < mbsting.http_input 1599 | ; http://php.net/mbstring.http-input 1600 | ;mbstring.http_input = 1601 | 1602 | ; Use of this INI entry is deprecated, use global output_encoding instead. 1603 | ; http output encoding. 1604 | ; mb_output_handler must be registered as output buffer to function. 1605 | ; If empty, default_charset or output_encoding or mbstring.http_output is used. 1606 | ; The precedence is: default_charset < output_encoding < mbstring.http_output 1607 | ; To use an output encoding conversion, mbstring's output handler must be set 1608 | ; otherwise output encoding conversion cannot be performed. 1609 | ; http://php.net/mbstring.http-output 1610 | ;mbstring.http_output = 1611 | 1612 | ; enable automatic encoding translation according to 1613 | ; mbstring.internal_encoding setting. Input chars are 1614 | ; converted to internal encoding by setting this to On. 1615 | ; Note: Do _not_ use automatic encoding translation for 1616 | ; portable libs/applications. 1617 | ; http://php.net/mbstring.encoding-translation 1618 | ;mbstring.encoding_translation = Off 1619 | 1620 | ; automatic encoding detection order. 1621 | ; "auto" detect order is changed according to mbstring.language 1622 | ; http://php.net/mbstring.detect-order 1623 | ;mbstring.detect_order = auto 1624 | 1625 | ; substitute_character used when character cannot be converted 1626 | ; one from another 1627 | ; http://php.net/mbstring.substitute-character 1628 | ;mbstring.substitute_character = none 1629 | 1630 | ; overload(replace) single byte functions by mbstring functions. 1631 | ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), 1632 | ; etc. Possible values are 0,1,2,4 or combination of them. 1633 | ; For example, 7 for overload everything. 1634 | ; 0: No overload 1635 | ; 1: Overload mail() function 1636 | ; 2: Overload str*() functions 1637 | ; 4: Overload ereg*() functions 1638 | ; http://php.net/mbstring.func-overload 1639 | ;mbstring.func_overload = 0 1640 | 1641 | ; enable strict encoding detection. 1642 | ; Default: Off 1643 | ;mbstring.strict_detection = On 1644 | 1645 | ; This directive specifies the regex pattern of content types for which mb_output_handler() 1646 | ; is activated. 1647 | ; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml) 1648 | ;mbstring.http_output_conv_mimetype= 1649 | 1650 | [gd] 1651 | ; Tell the jpeg decode to ignore warnings and try to create 1652 | ; a gd image. The warning will then be displayed as notices 1653 | ; disabled by default 1654 | ; http://php.net/gd.jpeg-ignore-warning 1655 | ;gd.jpeg_ignore_warning = 0 1656 | 1657 | [exif] 1658 | ; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. 1659 | ; With mbstring support this will automatically be converted into the encoding 1660 | ; given by corresponding encode setting. When empty mbstring.internal_encoding 1661 | ; is used. For the decode settings you can distinguish between motorola and 1662 | ; intel byte order. A decode setting cannot be empty. 1663 | ; http://php.net/exif.encode-unicode 1664 | ;exif.encode_unicode = ISO-8859-15 1665 | 1666 | ; http://php.net/exif.decode-unicode-motorola 1667 | ;exif.decode_unicode_motorola = UCS-2BE 1668 | 1669 | ; http://php.net/exif.decode-unicode-intel 1670 | ;exif.decode_unicode_intel = UCS-2LE 1671 | 1672 | ; http://php.net/exif.encode-jis 1673 | ;exif.encode_jis = 1674 | 1675 | ; http://php.net/exif.decode-jis-motorola 1676 | ;exif.decode_jis_motorola = JIS 1677 | 1678 | ; http://php.net/exif.decode-jis-intel 1679 | ;exif.decode_jis_intel = JIS 1680 | 1681 | [Tidy] 1682 | ; The path to a default tidy configuration file to use when using tidy 1683 | ; http://php.net/tidy.default-config 1684 | ;tidy.default_config = /usr/local/lib/php/default.tcfg 1685 | 1686 | ; Should tidy clean and repair output automatically? 1687 | ; WARNING: Do not use this option if you are generating non-html content 1688 | ; such as dynamic images 1689 | ; http://php.net/tidy.clean-output 1690 | tidy.clean_output = Off 1691 | 1692 | [soap] 1693 | ; Enables or disables WSDL caching feature. 1694 | ; http://php.net/soap.wsdl-cache-enabled 1695 | soap.wsdl_cache_enabled=1 1696 | 1697 | ; Sets the directory name where SOAP extension will put cache files. 1698 | ; http://php.net/soap.wsdl-cache-dir 1699 | soap.wsdl_cache_dir="/tmp" 1700 | 1701 | ; (time to live) Sets the number of second while cached file will be used 1702 | ; instead of original one. 1703 | ; http://php.net/soap.wsdl-cache-ttl 1704 | soap.wsdl_cache_ttl=86400 1705 | 1706 | ; Sets the size of the cache limit. (Max. number of WSDL files to cache) 1707 | soap.wsdl_cache_limit = 5 1708 | 1709 | [sysvshm] 1710 | ; A default size of the shared memory segment 1711 | ;sysvshm.init_mem = 10000 1712 | 1713 | [ldap] 1714 | ; Sets the maximum number of open links or -1 for unlimited. 1715 | ldap.max_links = -1 1716 | 1717 | [mcrypt] 1718 | ; For more information about mcrypt settings see http://php.net/mcrypt-module-open 1719 | 1720 | ; Directory where to load mcrypt algorithms 1721 | ; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) 1722 | ;mcrypt.algorithms_dir= 1723 | 1724 | ; Directory where to load mcrypt modes 1725 | ; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) 1726 | ;mcrypt.modes_dir= 1727 | 1728 | [dba] 1729 | ;dba.default_handler= 1730 | 1731 | [opcache] 1732 | ; Determines if Zend OPCache is enabled 1733 | ;opcache.enable=0 1734 | 1735 | ; Determines if Zend OPCache is enabled for the CLI version of PHP 1736 | ;opcache.enable_cli=0 1737 | 1738 | ; The OPcache shared memory storage size. 1739 | ;opcache.memory_consumption=64 1740 | 1741 | ; The amount of memory for interned strings in Mbytes. 1742 | ;opcache.interned_strings_buffer=4 1743 | 1744 | ; The maximum number of keys (scripts) in the OPcache hash table. 1745 | ; Only numbers between 200 and 100000 are allowed. 1746 | ;opcache.max_accelerated_files=2000 1747 | 1748 | ; The maximum percentage of "wasted" memory until a restart is scheduled. 1749 | ;opcache.max_wasted_percentage=5 1750 | 1751 | ; When this directive is enabled, the OPcache appends the current working 1752 | ; directory to the script key, thus eliminating possible collisions between 1753 | ; files with the same name (basename). Disabling the directive improves 1754 | ; performance, but may break existing applications. 1755 | ;opcache.use_cwd=1 1756 | 1757 | ; When disabled, you must reset the OPcache manually or restart the 1758 | ; webserver for changes to the filesystem to take effect. 1759 | ;opcache.validate_timestamps=1 1760 | 1761 | ; How often (in seconds) to check file timestamps for changes to the shared 1762 | ; memory storage allocation. ("1" means validate once per second, but only 1763 | ; once per request. "0" means always validate) 1764 | ;opcache.revalidate_freq=2 1765 | 1766 | ; Enables or disables file search in include_path optimization 1767 | ;opcache.revalidate_path=0 1768 | 1769 | ; If disabled, all PHPDoc comments are dropped from the code to reduce the 1770 | ; size of the optimized code. 1771 | ;opcache.save_comments=1 1772 | 1773 | ; If enabled, a fast shutdown sequence is used for the accelerated code 1774 | ;opcache.fast_shutdown=0 1775 | 1776 | ; Allow file existence override (file_exists, etc.) performance feature. 1777 | ;opcache.enable_file_override=0 1778 | 1779 | ; A bitmask, where each bit enables or disables the appropriate OPcache 1780 | ; passes 1781 | ;opcache.optimization_level=0xffffffff 1782 | 1783 | ;opcache.inherited_hack=1 1784 | ;opcache.dups_fix=0 1785 | 1786 | ; The location of the OPcache blacklist file (wildcards allowed). 1787 | ; Each OPcache blacklist file is a text file that holds the names of files 1788 | ; that should not be accelerated. The file format is to add each filename 1789 | ; to a new line. The filename may be a full path or just a file prefix 1790 | ; (i.e., /var/www/x blacklists all the files and directories in /var/www 1791 | ; that start with 'x'). Line starting with a ; are ignored (comments). 1792 | ;opcache.blacklist_filename= 1793 | 1794 | ; Allows exclusion of large files from being cached. By default all files 1795 | ; are cached. 1796 | ;opcache.max_file_size=0 1797 | 1798 | ; Check the cache checksum each N requests. 1799 | ; The default value of "0" means that the checks are disabled. 1800 | ;opcache.consistency_checks=0 1801 | 1802 | ; How long to wait (in seconds) for a scheduled restart to begin if the cache 1803 | ; is not being accessed. 1804 | ;opcache.force_restart_timeout=180 1805 | 1806 | ; OPcache error_log file name. Empty string assumes "stderr". 1807 | ;opcache.error_log= 1808 | 1809 | ; All OPcache errors go to the Web server log. 1810 | ; By default, only fatal errors (level 0) or errors (level 1) are logged. 1811 | ; You can also enable warnings (level 2), info messages (level 3) or 1812 | ; debug messages (level 4). 1813 | ;opcache.log_verbosity_level=1 1814 | 1815 | ; Preferred Shared Memory back-end. Leave empty and let the system decide. 1816 | ;opcache.preferred_memory_model= 1817 | 1818 | ; Protect the shared memory from unexpected writing during script execution. 1819 | ; Useful for internal debugging only. 1820 | ;opcache.protect_memory=0 1821 | 1822 | ; Allows calling OPcache API functions only from PHP scripts which path is 1823 | ; started from specified string. The default "" means no restriction 1824 | ;opcache.restrict_api= 1825 | 1826 | ; Mapping base of shared memory segments (for Windows only). All the PHP 1827 | ; processes have to map shared memory into the same address space. This 1828 | ; directive allows to manually fix the "Unable to reattach to base address" 1829 | ; errors. 1830 | ;opcache.mmap_base= 1831 | 1832 | ; Enables and sets the second level cache directory. 1833 | ; It should improve performance when SHM memory is full, at server restart or 1834 | ; SHM reset. The default "" disables file based caching. 1835 | ;opcache.file_cache= 1836 | 1837 | ; Enables or disables opcode caching in shared memory. 1838 | ;opcache.file_cache_only=0 1839 | 1840 | ; Enables or disables checksum validation when script loaded from file cache. 1841 | ;opcache.file_cache_consistency_checks=1 1842 | 1843 | ; Enables or disables copying of PHP code (text segment) into HUGE PAGES. 1844 | ; This should improve performance, but requires appropriate OS configuration. 1845 | ;opcache.huge_code_pages=1 1846 | 1847 | [curl] 1848 | ; A default value for the CURLOPT_CAINFO option. This is required to be an 1849 | ; absolute path. 1850 | ;curl.cainfo = 1851 | 1852 | [openssl] 1853 | ; The location of a Certificate Authority (CA) file on the local filesystem 1854 | ; to use when verifying the identity of SSL/TLS peers. Most users should 1855 | ; not specify a value for this directive as PHP will attempt to use the 1856 | ; OS-managed cert stores in its absence. If specified, this value may still 1857 | ; be overridden on a per-stream basis via the "cafile" SSL stream context 1858 | ; option. 1859 | ;openssl.cafile= 1860 | 1861 | ; If openssl.cafile is not specified or if the CA file is not found, the 1862 | ; directory pointed to by openssl.capath is searched for a suitable 1863 | ; certificate. This value must be a correctly hashed certificate directory. 1864 | ; Most users should not specify a value for this directive as PHP will 1865 | ; attempt to use the OS-managed cert stores in its absence. If specified, 1866 | ; this value may still be overridden on a per-stream basis via the "capath" 1867 | ; SSL stream context option. 1868 | ;openssl.capath= 1869 | 1870 | ; Local Variables: 1871 | ; tab-width: 4 1872 | ; End: 1873 | -------------------------------------------------------------------------------- /playbooks/setup.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: all 3 | 4 | vars_files: 5 | - ../settings.yml 6 | 7 | roles: 8 | - base 9 | - nginx 10 | - php 11 | - mysql 12 | - adminer 13 | - automated_testing 14 | - front 15 | 16 | post_tasks: 17 | - include: tests/main.yml 18 | 19 | handlers: 20 | - include: common/handlers/main.yml 21 | -------------------------------------------------------------------------------- /playbooks/templates/host.j2: -------------------------------------------------------------------------------- 1 | [all] 2 | {{ local_ip_address }} ansible_ssh_user=vagrant ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key -------------------------------------------------------------------------------- /playbooks/templates/index.j2: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Holding Page 6 | 7 | 8 |
9 |

Vagrant : Holding page

10 |
11 |
12 |
13 |

If you are seeing this page then you have set up the Vagrant Laravel box correctly.

14 | 15 |
16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /playbooks/templates/vhost_default.j2: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | 4 | server_name {{ item.alias }} www.{{ item.alias }} {%- if item.custom_aliases is defined %} {{ item.custom_aliases }} {%- endif %}; 5 | 6 | root {{ sites_dir }}/{{ item.alias }}{{ item.index_file_folder | default("") }}; 7 | 8 | index index.html index.htm index.php; 9 | 10 | charset utf-8; 11 | 12 | location / { 13 | try_files $uri $uri/ /index.php?q=$uri&$args; 14 | } 15 | 16 | location = /favicon.ico { access_log off; log_not_found off; } 17 | location = /robots.txt { access_log off; log_not_found off; } 18 | 19 | access_log off; 20 | error_log /var/log/nginx/{{ item.alias }}-error.log error; 21 | 22 | error_page 404 /index.php; 23 | 24 | sendfile off; 25 | 26 | location ~ \.php$ { 27 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 28 | fastcgi_pass unix:/run/php/php7.0-fpm.sock; 29 | fastcgi_index index.php; 30 | include fastcgi_params; 31 | } 32 | 33 | location ~ /\.ht { 34 | deny all; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /playbooks/templates/vhost_drupal.j2: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | 4 | server_name {{ item.alias }} www.{{ item.alias }} {%- if item.custom_aliases is defined %} {{ item.custom_aliases }} {%- endif %}; 5 | 6 | root {{ sites_dir }}/{{ item.alias }}; 7 | 8 | index index.html index.htm index.php; 9 | 10 | charset utf-8; 11 | 12 | location / { 13 | try_files $uri $uri/ /index.php?q=$uri&$args; 14 | } 15 | 16 | location = /favicon.ico { access_log off; log_not_found off; } 17 | location = /robots.txt { access_log off; log_not_found off; } 18 | 19 | access_log off; 20 | error_log /var/log/nginx/{{ item.alias }}-error.log error; 21 | 22 | error_page 404 /index.php; 23 | 24 | sendfile off; 25 | 26 | location ~ \.php$ { 27 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 28 | fastcgi_pass unix:/run/php/php7.0-fpm.sock; 29 | fastcgi_index index.php; 30 | include fastcgi_params; 31 | } 32 | 33 | location ~ /\.ht { 34 | deny all; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /playbooks/templates/vhost_laravel.j2: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | 4 | server_name {{ item.alias }} www.{{ item.alias }} {%- if item.custom_aliases is defined %} {{ item.custom_aliases }} {%- endif %}; 5 | 6 | root {{ sites_dir }}/{{ item.alias }}/public; 7 | 8 | index index.html index.htm index.php; 9 | 10 | charset utf-8; 11 | 12 | location / { 13 | try_files $uri $uri/ /index.php?$query_string; 14 | } 15 | 16 | location = /favicon.ico { access_log off; log_not_found off; } 17 | location = /robots.txt { access_log off; log_not_found off; } 18 | 19 | access_log off; 20 | error_log /var/log/nginx/{{ item.alias }}-error.log error; 21 | 22 | error_page 404 /index.php; 23 | 24 | sendfile off; 25 | 26 | location ~ \.php$ { 27 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 28 | fastcgi_pass unix:/run/php/php7.0-fpm.sock; 29 | fastcgi_index index.php; 30 | include fastcgi_params; 31 | } 32 | 33 | location ~ /\.ht { 34 | deny all; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /playbooks/tests/adminer.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Test | get adminer redirect 3 | local_action: command curl -I adminer.{{ webserver_hostname }} 4 | register: adminer_redirect 5 | ignore_errors: true 6 | 7 | - name: Test | test adminer redirect 8 | fail: msg="Adminer redirect is not working" 9 | when: adminer_redirect.stdout.find('http://adminer.{{ webserver_hostname }}/?username={{ dbuser }}') == -1 10 | 11 | - name: Test | get adminer host URL 12 | local_action: command curl -I adminer.{{ webserver_hostname }}/?username={{ dbuser }} 13 | register: adminer_curl 14 | ignore_errors: true 15 | 16 | - name: Test | test adminer host is accessible 17 | fail: msg="Adminer host is not accessible" 18 | when: adminer_curl.stdout.find('200 OK') == -1 -------------------------------------------------------------------------------- /playbooks/tests/front.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Test | NodeJS is installed 3 | shell: nodejs -v 4 | 5 | - name: Test | NPM is installed 6 | shell: npm -v 7 | 8 | - name: Test | Grunt is installed 9 | shell: grunt --version 10 | 11 | - name: Test | Bower is installed 12 | shell: bower --version 13 | 14 | - name: Test | Gulp is installed 15 | shell: gulp --version -------------------------------------------------------------------------------- /playbooks/tests/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - include: php.yml 3 | - include: nginx.yml 4 | - include: mysql.yml 5 | - include: adminer.yml 6 | - include: front.yml -------------------------------------------------------------------------------- /playbooks/tests/mysql.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Test | MySQL is installed 3 | shell: mysql --version -------------------------------------------------------------------------------- /playbooks/tests/nginx.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Test | Nginx is installed 3 | shell: nginx -v -------------------------------------------------------------------------------- /playbooks/tests/php.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Test | PHP is installed 3 | shell: php -v 4 | always_run: yes 5 | 6 | - name: Test | Get PHP-FPM service status 7 | shell: service php7.0-fpm status 8 | always_run: yes 9 | register: fpm_status 10 | ignore_errors: true 11 | sudo: true 12 | 13 | - name: Test | PHP-FPM is running 14 | fail: msg="PHP-FPM is not running." 15 | when: fpm_status.stdout.find('running') == -1 16 | 17 | - name: Test | Composer is installed 18 | shell: composer 19 | always_run: yes 20 | 21 | - name: Test | Drush is installed 22 | shell: drush 23 | always_run: yes -------------------------------------------------------------------------------- /playbooks/virtual_hosts.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: all 3 | 4 | vars_files: 5 | - ../settings.yml 6 | 7 | tasks: 8 | 9 | - name: Nginx | add "default" vhosts 10 | template: src=templates/vhost_default.j2 dest=/etc/nginx/sites-available/{{ item.alias }} 11 | when: item.vhost_type == "default" 12 | sudo: true 13 | with_items: 14 | - "{{ vhosts }}" 15 | 16 | - name: Nginx | add "drupal" vhosts 17 | template: src=templates/vhost_drupal.j2 dest=/etc/nginx/sites-available/{{ item.alias }} 18 | when: item.vhost_type == "drupal" 19 | sudo: true 20 | with_items: 21 | - "{{ vhosts }}" 22 | 23 | - name: Nginx | add "laravel" vhosts 24 | template: src=templates/vhost_laravel.j2 dest=/etc/nginx/sites-available/{{ item.alias }} 25 | when: item.vhost_type == "laravel" 26 | sudo: true 27 | with_items: 28 | - "{{ vhosts }}" 29 | 30 | - name: Nginx | enable vhosts 31 | file: src=/etc/nginx/sites-available/{{ item.alias }} dest=/etc/nginx/sites-enabled/{{ item.alias }} state=link 32 | when: item.vhost_type != "none" 33 | sudo: true 34 | with_items: 35 | - "{{ vhosts }}" 36 | notify: 37 | - restart nginx 38 | - restart fpm 39 | 40 | - name: MySQL | create applications databases 41 | mysql_db: 42 | name={{ item.db }} 43 | state=present 44 | login_password={{ mysql_root_password }} 45 | login_user=root 46 | collation={{ mysql_collation_server }} 47 | when: item.db is defined 48 | with_items: 49 | - "{{ vhosts }}" 50 | 51 | handlers: 52 | - include: common/handlers/main.yml 53 | --------------------------------------------------------------------------------