# # Cookbook Name:: typo3_site # Recipe:: default # # Copyright sgalinski Internet Services # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. ########################## ### Add hostname entry ### ########################## hostsfile_entry node['typo3_site']['ip_address'] do hostname node['typo3_site']['hostname'] action :append end hostsfile_entry node['typo3_site']['ip_address'] do hostname node['typo3_site']['server_aliases'] action :append end ################################### ### Install additional packages ### ################################### include_recipe 'graphicsmagick' include_recipe 'apache2' include_recipe 'apache2::mod_php5' include_recipe 'apache2::mod_ssl' %w(php5-curl php5-intl php5-gd php5-mcrypt php5-mysql php5-imagick).each do |name| package name do action :install end end ################################ ### Modify Php Configuration ### ################################ replace_or_add 'Increase time limit' do path '/etc/php5/apache2/php.ini' pattern 'max_execution_time =.*' line 'max_execution_time = 240' end replace_or_add 'Increase time limit - CLI' do path '/etc/php5/cli/php.ini' pattern 'max_execution_time =.*' line 'max_execution_time = 240' end replace_or_add 'Increase memory limit' do path '/etc/php5/apache2/php.ini' pattern 'memory_limit =.*' line 'memory_limit = 256M' end replace_or_add 'Increase upload size limit' do path '/etc/php5/apache2/php.ini' pattern 'upload_max_filesize =.*' line 'upload_max_filesize = 10M' end replace_or_add 'Increase upload size limit - CLI' do path '/etc/php5/cli/php.ini' pattern 'upload_max_filesize =.*' line 'upload_max_filesize = 10M' end replace_or_add 'Increase post_max_size limit' do path '/etc/php5/apache2/php.ini' pattern 'post_max_size =.*' line 'post_max_size = 10M' end replace_or_add 'Increase post_max_size limit - CLI' do path '/etc/php5/cli/php.ini' pattern 'post_max_size =.*' line 'post_max_size = 10M' end ################################ ### Setup Apache Environment ### ################################ # copy ssl key data template '/etc/apache2/ssl/sslKey.key' do source 'sslKey.key' owner 'vagrant' group 'vagrant' end template '/etc/apache2/ssl/sslKey.crt' do source 'sslKey.crt' owner 'vagrant' group 'vagrant' end # create web app with an own virtual host web_app node['typo3_site']['hostname'] do template 'vHost.conf.erb' docroot "#{node['typo3_site']['webroot']}/#{node['typo3_site']['hostname']}/" server_name node['typo3_site']['hostname'] server_aliases node['typo3_site']['server_aliases'] end ####################### ### Provide Sources ### ####################### if node['typo3_site']['repository'] != '' ssh_known_hosts_entry node['typo3_site']['repository_hostname'] do port node['typo3_site']['repository_port'] end git "#{node['typo3_site']['webroot']}/#{node['typo3_site']['hostname']}" do repository node['typo3_site']['repository'] remote 'origin' revision 'HEAD' reference 'master' timeout 100000 user 'vagrant' group 'vagrant' action :checkout ssh_wrapper '/home/vagrant/ssh_wrapper.sh' end end ################### ### Setup TYPO3 ### ################### bash 'Setup TYPO3' do cwd '/home/vagrant/' user 'vagrant' group 'vagrant' timeout 3000000 only_if { node['typo3_site']['download_typo3'] } code <<-EOF if [ ! -d #{node['typo3_site']['webroot']}/typo3_src-#{node['typo3_site']['typo3_version']} ] then wget http://get.typo3.org/#{node['typo3_site']['typo3_version']} \ -O typo3_src-#{node['typo3_site']['typo3_version']}.tgz mkdir -p #{node['typo3_site']['webroot']}/typo3_src-#{node['typo3_site']['typo3_version']} tar -xzf typo3_src-#{node['typo3_site']['typo3_version']}.tgz --strip-components=1 \ -C #{node['typo3_site']['webroot']}/typo3_src-#{node['typo3_site']['typo3_version']}; fi mkdir -p #{node['typo3_site']['webroot']}/#{node['typo3_site']['hostname']}; cd #{node['typo3_site']['webroot']}/#{node['typo3_site']['hostname']} rm -f typo3_src ln -s ../typo3_src-#{node['typo3_site']['typo3_version']} typo3_src touch typo3conf/ENABLE_INSTALL_TOOL if [ ! -f typo3 ] then ln -s typo3_src/typo3 typo3 fi if [ ! -f index.php ] then ln -s typo3_src/index.php index.php fi EOF action :run end ########################################### ### Provide site specific configuration ### ########################################### directory "#{node['typo3_site']['webroot']}/#{node['typo3_site']['hostname']}/typo3conf/" do owner 'vagrant' mode '0755' action :create end template "#{node['typo3_site']['webroot']}/#{node['typo3_site']['hostname']}/typo3conf/#{node['typo3_site']['site_configuration']}" do source 'SiteConfiguration.erb' owner 'vagrant' mode '0660' end ######################### ### Synchronize Files ### ######################### node['typo3_site']['sync_directories'].each do |sync_data| ssh_known_hosts_entry sync_data['hostname'] do port sync_data['port'] end bash 'Synchronize ' + sync_data['local'] do user 'vagrant' group 'vagrant' timeout 3000000 code <<-EOF rsync --delete -auvz --progress -e "ssh -i /home/vagrant/.ssh/id_rsa -p #{sync_data['port']} -o StrictHostKeyChecking=no" \ --no-o --no-g #{sync_data['user']}@#{sync_data['hostname']}:#{sync_data['remote']} \ "#{node['typo3_site']['webroot']}/#{node['typo3_site']['hostname']}/#{sync_data['local']}"; EOF action :run end end #################### ### Create Links ### #################### node['typo3_site']['create_links'].each do |link_data| link link_data['source'] do to link_data['target'] end end ################### ### Setup MySQL ### ################### mysql_service 'default' do initial_root_password 'root' action [:create, :start] end mysql_config 'default' do source 'my.cnf.erb' action :create notifies :restart, 'mysql_service[default]' end mysql_client 'default' do action :create end ######################## ### Create Databases ### ######################## # install the necessary mysql2 gem mysql2_chef_gem 'default' do action :install end # create the databases connection_info = {:host => '127.0.0.1', :username => 'root', :password => 'root'} node['typo3_site']['sync_databases'].each do |database_data| # create database mysql_database database_data['database_name'] do connection connection_info action :create end # create user mysql_database_user database_data['database_user'] do connection connection_info database_name database_data['database_name'] password database_data['database_password'] host '127.0.0.1' privileges [:select, :update, :insert, :create, :alter, :drop, :delete] action :grant end if database_data['dump_hostname'] # add host to ssh known hosts ssh_known_hosts_entry database_data['dump_hostname'] do port database_data['dump_port'] end # download the sql data bash 'Download Dump for ' + database_data['database_name'] do user 'vagrant' group 'vagrant' timeout 3000000 code <<-EOF rsync --delete -auvz --progress -e "ssh -i /home/vagrant/.ssh/id_rsa -p #{database_data['dump_port']} -o StrictHostKeyChecking=no" \ --no-o --no-g #{database_data['dump_user']}@#{database_data['dump_hostname']}:#{database_data['dump_remote']} \ #{database_data['dump_local']}; EOF action :run end # load the dump bash 'Import Dump for ' + database_data['database_name'] do code <<-EOF mysql -h 127.0.0.1 -u root -proot #{database_data['database_name']} < #{database_data['dump_local']} EOF action :run end # # this would be better, but currently buggy in the database cookbook # # https://github.com/opscode-cookbooks/database/issues/128 # mysql_database 'Import Dump for ' + database_data['database_name'] do # connection connection_info # database_name #{database_data['database_name']} # sql { ::File.open(#{database_data['dump_local']}).read } # action :query # end end if database_data['post_install_queries'] database_data['post_install_queries'].each do |query| mysql_database 'Execute Post Install Query' do connection connection_info database_name database_data['database_name'] sql query action :query end end end end ################## ### Setup Solr ### ################## if node['typo3_site']['solr']['init'] include_recipe 'java' include_recipe 'typo3_solr' typo3_solr_app 'solr' do solr node['typo3_site']['solr']['version_solr'] extension node['typo3_site']['solr']['version_extension'] plugin_access node['typo3_site']['solr']['version_plugin_access'] plugin_utils node['typo3_site']['solr']['version_plugin_utils'] plugin_lang node['typo3_site']['solr']['version_plugin_lang'] languages node['typo3_site']['solr']['languages'] end node['typo3_site']['solr']['cores'].each do |core_data| typo3_solr_core core_data['name'] do language core_data['language'] app 'solr' action :add end end execute 'solr-updateConnections' do command "php #{node['typo3_site']['webroot']}/#{node['typo3_site']['hostname']}/typo3/cli_dispatch.phpsh solr updateConnections || true" user 'vagrant' group 'vagrant' action :run end end