Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • chef-cookbooks/typo3_site
  • obi12341/typo3_site
2 results
Show changes
Commits on Source (144)
Showing
with 963 additions and 228 deletions
.idea
source 'https://supermarket.chef.io'
metadata
cookbook 'typo3_solr', git: "https://github.com/opendo/chef-typo3_solr.git"
# Don't use this cookbook anymore, because we added everything into the normal_site cookbook
https://gitlab.sgalinski.de/chef-cookbooks/normal_site
default['typo3_site']['ip_address'] = '192.168.156.140'
default['typo3_site']['ip_address'] = false
default['typo3_site']['hostname'] = false
default['typo3_site']['webroot'] = '/var/www'
default['typo3_site']['site_configuration'] = 'SiteConfiguration.php'
default['typo3_site']['server_aliases'] = 'www.site.dev'
default['typo3_site']['hostname'] = 'site.dev'
default['typo3_site']['web_directory'] = 'web'
default['typo3_site']['repository'] = ''
default['typo3_site']['repository_hostname'] = 'git.domain'
default['typo3_site']['repository_hostname'] = ''
default['typo3_site']['repository_port'] = 22
default['typo3_site']['deploy_dump'] = '~/site/dump.sql'
default['typo3_site']['download_typo3'] = false
default['typo3_site']['typo3_version'] = '10.4'
if node['platform_version'] == '20.04'
default['typo3_site']['mysql_version'] = '8.0'
elsif node['platform_version'] == '16.04'
default['typo3_site']['mysql_version'] = '5.7'
else
default['typo3_site']['mysql_version'] = '5.6'
end
# Default Solr Configuration
default['typo3_site']['solr']['init'] = false
default['typo3_site']['solr']['version_solr'] = '7.6.0'
default['typo3_site']['solr']['version_extension'] = '9.0.0'
default['typo3_site']['solr']['version_tika_server'] = '1.24'
default['typo3_site']['solr']['config_directory'] = 'ext_solr_9_0_0'
default['typo3_site']['solr']['cores'] = [
{
:name => 'core-en_US',
:language => 'english'
},
{
:name => 'core-de_DE',
:language => 'german'
},
]
# Example:
#[
......@@ -15,14 +42,16 @@ default['typo3_site']['deploy_dump'] = '~/site/dump.sql'
# :hostname => 'deploy.site.com',
# :port => 22,
# :remote => '~/site/fileadmin/',
# :local => 'fileadmin'
# :local => 'fileadmin',
# :sync => true
# },
# {
# :user => 'vagrant',
# :hostname => 'deploy.site.com',
# :port => 22,
# :remote => '~/site/uploads/',
# :local => 'uploads'
# :local => 'uploads',
# :sync => true
# }
#]
default['typo3_site']['sync_directories'] = []
......@@ -44,4 +73,13 @@ default['typo3_site']['sync_directories'] = []
# ]
# }
#]
default['typo3_site']['sync_databases'] = []
\ No newline at end of file
default['typo3_site']['sync_databases'] = []
# Example:
# [
# {
# :source => '/var/www/mySite/fileadmin',
# :target => '/var/www/fileadmin',
# }
# ]
default['typo3_site']['create_links'] = []
......@@ -3,14 +3,14 @@ maintainer 'sgalinski Internet Services'
maintainer_email 'stefan@sgalinski.de'
license 'Apache 2.0'
description 'Site'
long_description 'Sets up a website'
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version '1.0.0'
recipe 'typo3_site::default', 'Main recipe'
issues_url 'https://gitlab.sgalinski.de/chef-cookbooks/typo3_site/issues'
source_url 'https://gitlab.sgalinski.de/chef-cookbooks/typo3_site'
depends 'apache2', '~> 3.0.0'
depends 'database', '~> 4.0.0'
depends 'graphicsmagick'
depends 'hostsfile'
depends 'mysql', '~> 6.0.0'
depends 'mysql2_chef_gem', '~> 1.0.0'
depends 'line'
\ No newline at end of file
depends 'java'
depends 'line'
depends 'typo3_solr'
depends 'ubuntu_base'
\ No newline at end of file
......@@ -22,16 +22,18 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
base_hostname = node['typo3_site']['hostname'] || node['ubuntu_base']['hostname']
##########################
### Add hostname entry ###
##########################
hostsfile_entry node['typo3_site']['ip_address'] do
hostname node['typo3_site']['hostname']
hostsfile_entry node['ubuntu_base']['ip_address'] do
hostname base_hostname
action :append
end
hostsfile_entry node['typo3_site']['ip_address'] do
hostsfile_entry node['ubuntu_base']['ip_address'] do
hostname node['typo3_site']['server_aliases']
action :append
end
......@@ -40,111 +42,362 @@ end
### Install additional packages ###
###################################
include_recipe 'graphicsmagick'
include_recipe 'apache2'
include_recipe 'apache2::mod_php5'
include_recipe 'apache2::mod_ssl'
if node['platform_version'] == '20.04'
apt_repository('php') do
uri 'http://ppa.launchpad.net/ondrej/php/ubuntu'
deb_src true
trusted true
keyserver 'keyserver.ubuntu.com'
key 'E5267A6C'
distribution 'focal'
components [:main]
arch 'amd64'
action :add
end
%w(php5-curl php5-intl php5-gd php5-mcrypt php5-mysql php5-imagick).each do |name|
package name do
action :install
elsif node['platform_version'] == '16.04'
apt_repository('apache2') do
uri 'http://ppa.launchpad.net/ondrej/apache2/ubuntu'
deb_src true
trusted true
keyserver 'keyserver.ubuntu.com'
key 'E5267A6C'
distribution 'xenial'
components [:main]
arch 'amd64'
action :add
end
apt_repository('php7.1') do
uri 'http://ppa.launchpad.net/ondrej/php/ubuntu'
deb_src true
trusted true
keyserver 'keyserver.ubuntu.com'
key 'E5267A6C'
distribution 'xenial'
components [:main]
arch 'amd64'
action :add
end
end
execute 'apt -y update'
package 'graphicsmagick'
package 'apache2'
if node['ubuntu_base']['php_version'] == '7.0'
%w(php7.0-fpm php7.0-cli php7.0-curl php7.0-intl php7.0-gd php7.0-mcrypt php7.0-mysql php7.0-xml php7.0-json php7.0-mbstring php7.0-soap php7.0-zip php7.0-imagick).each do |name|
package name do
action :install
end
end
elsif node['ubuntu_base']['php_version'] == '7.1'
%w(php7.1-fpm php7.1-cli php7.1-curl php7.1-intl php7.1-gd php7.1-mcrypt php7.1-mysql php7.1-xml php7.1-json php7.1-mbstring php7.1-soap php7.1-zip php7.1-imagick).each do |name|
package name do
action :install
end
end
elsif node['ubuntu_base']['php_version'] == '7.2'
%w(php7.2-fpm php7.2-cli php7.2-curl php7.2-intl php7.2-gd php7.2-mysql php7.2-xml php7.2-json php7.2-mbstring php7.2-soap php7.2-zip php7.2-imagick).each do |name|
package name do
action :install
end
end
elsif node['ubuntu_base']['php_version'] == '7.3'
%w(php7.3-fpm php7.3-cli php7.3-curl php7.3-intl php7.3-gd php7.3-mysql php7.3-xml php7.3-json php7.3-mbstring php7.3-soap php7.3-zip php7.3-imagick).each do |name|
package name do
action :install
end
end
elsif node['ubuntu_base']['php_version'] == '7.4'
%w(php7.4-fpm php7.4-cli php7.4-curl php7.4-intl php7.4-gd php7.4-mysql php7.4-xml php7.4-json php7.4-mbstring php7.4-soap php7.4-zip php7.4-imagick).each do |name|
package name do
action :install
end
end
elsif node['ubuntu_base']['php_version'] == '8.1'
%w(php8.1-fpm php8.1-cli php8.1-curl php8.1-intl php8.1-gd php8.1-mysql php8.1-xml php8.1-mbstring php8.1-soap php8.1-zip php8.1-imagick).each do |name|
package name do
action :install
end
end
else
# no mcrypt anymore
%w(php8.2-fpm php8.2-cli php8.2-curl php8.2-intl php8.2-gd php8.2-mysql php8.2-xml php8.2-mbstring php8.2-soap php8.2-zip php8.2-imagick).each do |name|
package name do
action :install
end
end
end
# enable Apache modules
%w{expires deflate rewrite headers http2 ssl proxy_fcgi mpm_event}.each do |module_name|
execute 'a2enmod ' + module_name
end
####################################
### Modify PHP FPM Configuration ###
####################################
template "/etc/php/#{node['ubuntu_base']['php_version']}/fpm/pool.d/www.conf" do
source 'www.conf.erb'
owner 'root'
group 'root'
variables(
{
:php_version => node['ubuntu_base']['php_version']
}
)
end
service "php#{node['ubuntu_base']['php_version']}-fpm" do
action :restart
end
################################
### Modify Php Configuration ###
### Modify PHP Configuration ###
################################
replace_or_add 'Increase time limit' do
path '/etc/php5/apache2/php.ini'
pattern 'max_execution_time = 30'
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/fpm/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 = 30'
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/cli/php.ini'
pattern 'max_execution_time =.*'
line 'max_execution_time = 240'
end
replace_or_add 'Increase memory limit' do
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/fpm/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 = 2M'
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/fpm/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 = 2M'
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/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 = 2M'
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/fpm/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 = 2M'
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/cli/php.ini'
pattern 'post_max_size =.*'
line 'post_max_size = 10M'
end
replace_or_add 'Set date.timezone' do
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/fpm/php.ini'
pattern 'date.timezone =.*'
line 'date.timezone = Europe/Berlin'
end
replace_or_add 'Set date.timezone - CLI' do
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/cli/php.ini'
pattern 'date.timezone =.*'
line 'date.timezone = Europe/Berlin'
end
replace_or_add 'Set max_input_vars' do
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/fpm/php.ini'
pattern '.*max_input_vars =.*'
line 'max_input_vars = 1500'
end
replace_or_add 'Set max_input_vars - CLI' do
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/cli/php.ini'
pattern '.*max_input_vars =.*'
line 'max_input_vars = 1500'
end
execute 'mkdir -p /etc/apache2/ssl'
replace_or_add 'Set curl ca certificate' do
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/fpm/php.ini'
pattern '.*curl.cainfo =.*'
line 'curl.cainfo = /etc/apache2/ssl/rootCA.pem'
end
replace_or_add 'Set curl ca certificate - CLI' do
path '/etc/php/' + node['ubuntu_base']['php_version'] + '/cli/php.ini'
pattern '.*curl.cainfo =.*'
line 'curl.cainfo = /etc/apache2/ssl/rootCA.pem'
end
################################
### Setup Apache Environment ###
################################
# copy ssl key data
template '/etc/apache2/ssl/sslKey.key' do
source 'sslKey.key'
owner 'vagrant'
group 'vagrant'
# create ssl certificate
# Instructions are from here: https://stackoverflow.com/questions/7580508/getting-chrome-to-accept-self-signed-localhost-certificate/43666288#43666288
template '/etc/apache2/ssl/v3.ext' do
source 'v3.ext'
end
template '/etc/apache2/ssl/sslKey.crt' do
source 'sslKey.crt'
owner 'vagrant'
group 'vagrant'
template '/etc/apache2/ssl/create_certificate_for_domain.sh' do
source 'create_certificate_for_domain.sh'
end
# not needed (globally used, but maybe someone else needs this)
# template 'create_root_cert_and_key.sh' do
# source 'create_root_cert_and_key.sh'
# end
template '/etc/apache2/ssl/rootCA.key' do
source 'rootCA.key'
end
template '/etc/apache2/ssl/rootCA.pem' do
source 'rootCA.pem'
end
# concatenate the additional optional domains in order to avoid missing index exceptions
additional_domains = ''
if node.include?('webgrind') && node['webgrind'].include?('hostname') && node['webgrind']['hostname']
additional_domains = additional_domains + ' ' + node['webgrind']['hostname']
else
additional_domains = additional_domains + ' webgrind.' + base_hostname
end
if node.include?('mailhog') && node['mailhog'].include?('hostname') && node['mailhog']['hostname']
additional_domains = additional_domains + ' ' + node['mailhog']['hostname']
else
additional_domains = additional_domains + ' mailhog.' + base_hostname
end
bash 'Create Certificate' do
cwd '/etc/apache2/ssl/'
code <<-EOF
chmod 755 create_certificate_for_domain.sh
./create_certificate_for_domain.sh #{base_hostname} #{node['typo3_site']['server_aliases']}#{additional_domains}
EOF
action :run
end
# create vHost directory
directory "#{node['typo3_site']['webroot']}/#{base_hostname}" do
mode '0755'
action :create
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']
template '/etc/apache2/sites-available/' + base_hostname + '.conf' do
source 'vHost.conf.erb'
mode '0644'
owner 'root'
group 'root'
variables(
{
:docroot => "#{node['typo3_site']['webroot']}/#{base_hostname}/#{node['typo3_site']['web_directory']}/",
:server_name => base_hostname,
:server_aliases => node['typo3_site']['server_aliases'],
:php_version => node['ubuntu_base']['php_version']
}
)
end
execute "a2ensite #{base_hostname}.conf"
# Switch to vagrant as Apache main user
replace_or_add 'Change the apache group to the users main group' do
path '/etc/apache2/envvars'
pattern 'export APACHE_RUN_GROUP=.*'
line "export APACHE_RUN_GROUP=vagrant"
end
replace_or_add 'Change the apache group to the users main group' do
path '/etc/apache2/envvars'
pattern 'export APACHE_RUN_USER=.*'
line "export APACHE_RUN_USER=vagrant"
end
service 'apache2' do
action :restart
end
#######################
### Provide Sources ###
#######################
ssh_known_hosts_entry node['typo3_site']['repository_hostname'] do
port node['typo3_site']['repository_port']
file '/home/vagrant/ssh_wrapper.sh' do
owner 'vagrant'
group 'vagrant'
mode '0755'
content "#!/bin/sh\nexec /usr/bin/ssh -o \"StrictHostKeyChecking=no\" \"$@\""
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'
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']}/#{base_hostname}" do
remote 'origin'
repository node['typo3_site']['repository']
checkout_branch 'master'
enable_checkout false
revision 'master'
timeout 100000
action :checkout
ssh_wrapper '/home/vagrant/ssh_wrapper.sh'
end
end
###########################################
### Provide site specific configuration ###
###########################################
###################
### Setup TYPO3 ###
###################
template "#{node['typo3_site']['webroot']}/#{node['typo3_site']['hostname']}/typo3conf/#{node['typo3_site']['site_configuration']}" do
source 'SiteConfiguration.erb'
owner 'vagrant'
bash 'Setup TYPO3' do
cwd '/home/vagrant/'
user 'vagrant'
group 'vagrant'
mode '0660'
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']}/#{base_hostname}/#{node['typo3_site']['web_directory']}
cd #{node['typo3_site']['webroot']}/#{base_hostname}/#{node['typo3_site']['web_directory']}
rm -f typo3_src
ln -s ../typo3_src-#{node['typo3_site']['typo3_version']} typo3_src
touch typo3conf/ENABLE_INSTALL_TOOL
if [ ! -e typo3 ]
then
ln -s typo3_src/typo3 typo3
fi
if [ ! -e index.php ]
then
ln -s typo3_src/index.php index.php
fi
EOF
action :run
end
#########################
......@@ -152,112 +405,190 @@ end
#########################
node['typo3_site']['sync_directories'].each do |sync_data|
ssh_known_hosts_entry sync_data['hostname'] do
port sync_data['port']
if sync_data['hostname']
ssh_known_hosts_entry sync_data['hostname'] do
port sync_data['port']
end
end
bash 'Synchronize ' + sync_data['local'] do
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
only_if {
sync_data['sync'] or not ::File.exists?("#{node['typo3_site']['webroot']}/#{base_hostname}/#{node['typo3_site']['web_directory']}/#{sync_data['local']}")
}
if sync_data['hostname']
code <<-EOF
rsync --delete -auvz --progress -e "ssh -p #{sync_data['port']} -o StrictHostKeyChecking=no" \
--no-o --no-g #{sync_data['user']}@#{sync_data['hostname']}:#{sync_data['remote']} \
"#{node['typo3_site']['webroot']}/#{base_hostname}/#{node['typo3_site']['web_directory']}/#{sync_data['local']}";
EOF
else
code <<-EOF
rsync --delete -auvz --progress --no-o --no-g #{sync_data['remote']} \
"#{node['typo3_site']['webroot']}/#{base_hostname}/#{node['typo3_site']['web_directory']}/#{sync_data['local']}";
EOF
end
action :run
end
end
####################
### Create Links ###
####################
node['typo3_site']['create_links'].each do |link_data|
execute 'remove link target' do
command "rm -f #{link_data['target']}"
action :run
end
link link_data['source'] do
to link_data['target']
end
end
###########################################
### Provide site specific configuration ###
###########################################
directory "#{node['typo3_site']['webroot']}/#{base_hostname}/#{node['typo3_site']['web_directory']}/typo3conf/" do
mode '0755'
action :create
end
template "#{node['typo3_site']['webroot']}/#{base_hostname}/#{node['typo3_site']['web_directory']}/typo3conf/#{node['typo3_site']['site_configuration']}" do
source 'SiteConfiguration.php.erb'
mode '0660'
end
template "#{node['typo3_site']['webroot']}/#{base_hostname}/.env.local" do
source 'env.local.erb'
mode '0660'
end
template "#{node['typo3_site']['webroot']}/#{base_hostname}/#{node['typo3_site']['web_directory']}/typo3conf/AdditionalConfiguration.php" do
source 'AdditionalConfiguration.php'
mode '0660'
action :create_if_missing
end
###################
### Setup MySQL ###
###################
mysql_service 'default' do
initial_root_password 'root'
action [:create, :start]
end
package 'mysql-server-' + node['typo3_site']['mysql_version']
mysql_config 'default' do
source 'my.cnf.erb'
action :create
notifies :restart, 'mysql_service[default]'
template '/etc/mysql/mysql.cnf' do
source "my-#{node['typo3_site']['mysql_version']}.cnf.erb"
owner 'root'
group 'root'
end
mysql_client 'default' do
action :create
service 'mysql' do
action :restart
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
bash 'Create database and user' do
code <<-EOF
mysql -u root -proot -e "create database if not exists \\\`#{database_data['database_name']}\\\`;"
mysql -u root -proot -e "DROP USER '#{database_data['database_user']}'@'127.0.0.1';"
mysql -u root -proot -e "create user '#{database_data['database_user']}'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '#{database_data['database_password']}';"
mysql -u root -proot -e "grant usage on \\\`#{database_data['database_name']}\\\`.* to '#{database_data['database_user']}'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '#{database_data['database_password']}';"
mysql -u root -proot -e "grant all privileges on \\\`#{database_data['database_name']}\\\`.* to '#{database_data['database_user']}'@'127.0.0.1';"
mysql -u root -proot -e "grant process on *.* to '#{database_data['database_user']}'@'127.0.0.1';"
mysql -u root -proot -e "flush privileges;"
EOF
timeout 10000
action :run
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
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 -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
end
# add host to ssh known hosts
ssh_known_hosts_entry database_data['dump_hostname'] do
port database_data['dump_port']
if database_data['dump_local'] and database_data['database_name']
# load the dump
bash 'Import Dump for ' + database_data['database_name'] do
code <<-EOF
mysql -u root -proot #{database_data['database_name']} < #{database_data['dump_local']}
EOF
timeout 10000
action :run
end
if database_data['post_install_queries']
database_data['post_install_queries'].each do |query|
bash 'Execute Query: ' + query do
code <<-EOF
mysql -u root -proot #{database_data['database_name']} -e "#{query}"
EOF
timeout 10000
action :run
end
end
end
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
if database_data['dump_hostname'] and database_data['dump_local']
bash 'Remove downloaded ' + database_data['dump_local'] do
code <<-EOF
rm -f #{database_data['dump_local']}
EOF
action :run
end
end
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
##################
### Setup Solr ###
##################
if node['typo3_site']['solr']['init']
openjdk_install '11'
include_recipe 'typo3_solr'
typo3_solr_app 'solr' do
solr node['typo3_site']['solr']['version_solr']
extension node['typo3_site']['solr']['version_extension']
tika_server node['typo3_site']['solr']['version_tika_server']
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
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
node['typo3_site']['solr']['cores'].each do |core_data|
typo3_solr_core core_data['name'] do
language core_data['language']
config_directory node['typo3_site']['solr']['config_directory']
action :add
end
end
end
\ No newline at end of file
execute 'solr-updateConnections' do
command "php #{node['typo3_site']['webroot']}/#{base_hostname}/#{node['typo3_site']['web_directory']}/typo3/cli_dispatch.phpsh extbase solr:updateconnections || true"
user 'vagrant'
group 'vagrant'
action :run
end
end
<?php
require_once('SiteConfiguration.php');
\ No newline at end of file
<?php
$GLOBALS['TYPO3_CONF_VARS']['DB']['database'] = 'typo3';
$GLOBALS['TYPO3_CONF_VARS']['DB']['username'] = 'typo3';
$GLOBALS['TYPO3_CONF_VARS']['DB']['password'] = 'typo3';
$GLOBALS['TYPO3_CONF_VARS']['DB']['host'] = '127.0.0.1';
// SSL settings for the backend login
//
// Notes:
// - The value 2 is used in the live system only. It will redirect any normal http access to an https one.
// - The value 0 is used in the testing and devel systems, because we doesn't have ssl support here!!
$GLOBALS['TYPO3_CONF_VARS']['BE']['lockSSL'] = 0;
// Change install tool password to joh316
$GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword'] = '$P$CCuX8EzzYaSOHJS5o32X9Uk3Vg79ji1';
// show failed sql queries and php errors
$GLOBALS['TYPO3_CONF_VARS']['SYS']['enableDeprecationLog'] = 0;
// change the systemLog location
$GLOBALS['TYPO3_CONF_VARS']['SYS']['systemLog'] = 'file,/var/www/typo3.log,3';
// show failed sql queries and php errors
if (!$GLOBALS['TYPO3_DISABLE_DEBUG']) {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['enable_DLOG'] = 0;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask'] = '*';
$GLOBALS['TYPO3_CONF_VARS']['SYS']['sqlDebug'] = 1;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['displayErrors'] = 1;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['enableDeprecationLog'] = 0;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['errorHandlerErrors'] = 'E_ALL ^ E_NOTICE';
$GLOBALS['TYPO3_CONF_VARS']['SYS']['clearCacheSystem'] = TRUE;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['systemLogLevel'] = 0;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['exceptionalErrors'] = 28674;
}
?>
<?php
if (!isset($GLOBALS['TYPO3_CONF_VARS']['DB']['Connections'])) {
$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections'] = [];
}
$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'] = [
'charset' => 'utf8mb4',
'dbname' => 'typo3',
'driver' => 'mysqli',
'host' => '127.0.0.1',
'password' => 'typo3',
'port' => 3306,
'user' => 'typo3',
'initCommands' => 'SET SESSION sql_mode=\'\'',
'persistentConnection' => FALSE,
'tableoptions' => [
'charset' => 'utf8mb4',
'collate' => 'utf8mb4_unicode_ci',
],
];
// SSL settings for the backend login
//
// Relevant Values:
// - 2 - Enforce SSL
// - 0 - Allow any
$GLOBALS['TYPO3_CONF_VARS']['BE']['lockSSL'] = 2;
// Change install tool password to joh316
$GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword'] = '$P$CCuX8EzzYaSOHJS5o32X9Uk3Vg79ji1';
// enable logs in general
//$GLOBALS['TYPO3_CONF_VARS']['enableLogs'] = TRUE;
// customize the solr log if required
//$GLOBALS['TYPO3_CONF_VARS']['LOG']['ApacheSolrForTypo3']['Solr']['writerConfiguration'] = [
// // or DEBUG | INFO
// \TYPO3\CMS\Core\Log\LogLevel::INFO => [
// 'TYPO3\\CMS\\Core\\Log\\Writer\\FileWriter' => [
// 'logFile' => 'typo3temp/var/logs/solr.log'
// ]
// ],
//];
// Vagrant specific stuff (if your user has another main group id than 1000, especially required on MacOSX)
$GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup'] = 'vagrant';
// Disable MFA and IPmaskList
$GLOBALS['TYPO3_CONF_VARS']['BE']['requireMfa'] = 0;
$GLOBALS['TYPO3_CONF_VARS']['BE']['IPmaskList'] = '';
// Mail configuration for vagrant machines
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport'] = 'smtp';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_sendmail_command'] = '';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_encrypt'] = false;
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_password'] = '';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_server'] = 'localhost:1025';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_username'] = '';
// Paid extensions development license keys
$paidExtensionKeys = [
'sg_account',
'sg_comments',
'sg_mail',
'sg_news',
'sg_newsletter',
'sg_routes'
];
foreach($paidExtensionKeys as $extensionKey) {
if (isset($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extensionKey])) {
$GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extensionKey]['key'] = 'XXXXXX-XXXXXX-XXXXXX-XXXXXX';
}
}
#!/usr/bin/env bash
if [ -z "$1" ]
then
echo "Please supply a subdomain to create a certificate for";
echo "e.g. www.mysite.com"
exit;
fi
if [ ! -f rootCA.pem ]; then
echo 'Please run "create_root_cert_and_key.sh" first, and try again!'
exit;
fi
if [ ! -f v3.ext ]; then
echo 'Please download the "v3.ext" file and try again!'
exit;
fi
# Add root certificate, so the website can be called from within the vagrant machine (needed for crawler cron jobs)
cp rootCA.pem /usr/local/share/ca-certificates/rootCA.crt
update-ca-certificates
# Create a new private key if one doesnt exist, or use the existing one if it does
if [ -f device.key ]; then
KEY_OPT="-key"
else
KEY_OPT="-keyout"
fi
DOMAIN=$1
COMMON_NAME=${2:-*.$1}
SUBJECT="/C=CA/ST=None/L=NB/O=None/CN=${COMMON_NAME}"
NUM_OF_DAYS=300
cp v3.ext /tmp/__v3.ext
DOMAIN_COUNTER=1
for domain_in_list in "$@"
do
echo "DNS.${DOMAIN_COUNTER} = ${domain_in_list}" >> /tmp/__v3.ext
((DOMAIN_COUNTER++))
done
openssl req -new -newkey rsa:2048 -sha256 -nodes ${KEY_OPT} device.key -subj "${SUBJECT}" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days ${NUM_OF_DAYS} -sha256 -extfile /tmp/__v3.ext
# move output files to final filenames
mv device.csr "${DOMAIN}.csr"
cp device.crt "${DOMAIN}.crt"
# remove temp file
rm -f device.crt;
echo
echo "###########################################################################"
echo Done!
echo "###########################################################################"
echo "To use these files on your server, simply copy both ${DOMAIN}.csr and"
echo "device.key to your webserver, and use like so (if Apache, for example)"
echo
echo " SSLCertificateFile /path_to_your_files/${DOMAIN}.crt"
echo " SSLCertificateKeyFile /path_to_your_files/device.key"
#!/usr/bin/env bash
# Hint regarding the .srl file (Serial File)
# The first time you use your CA to sign a certificate you can use the -CAcreateserial option. This option will create a file (ca.srl) containing a serial number. You are probably going to create more certificate, and the next time you will have to do that use the -CAserial option (and no more -CAcreateserial) followed with the name of the file containing your serial number. This file will be incremented each time you sign a new certificate. This serial number will be readable using a browser (once the certificate is imported to a pkcs12 format). And we can have an idea of the number of certificate created by a CA.
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
TYPO3_CONTEXT=Development/Local
SOLR_HOST=solr:password@localhost
SOLR_PORT=8983
\ No newline at end of file
# Chef generated my.cnf for instance mysql-default
[client]
default-character-set = utf8
port = 3306
socket = /run/mysql-default/mysqld.sock
[mysql]
default-character-set = utf8
[mysqld]
user = mysql
pid-file = /run/mysql-default/mysqld.pid
socket = /run/mysql-default/mysqld.sock
port = 3306
datadir = /var/lib/mysql-default
tmpdir = /tmp
log-error = /var/log/mysql-default/error.log
!includedir /etc/mysql-default/conf.d
[mysqld_safe]
socket = /run/mysql-default/mysqld.sock
[mysqld]
key_buffer_size = 32M
max_allowed_packet = 16M
max_connections = 214
thread_cache_size = 200
query_cache_limit = 4M
query_cache_size = 128M
query_cache_type = 1
tmp_table_size = 128M
max_heap_table_size = 128M
table_definition_cache = 800
join_buffer_size = 4M
table_open_cache = 200
open_files_limit = 512
#myisam-recover = BACKUP
myisam_sort_buffer_size = 32M
myisam_recover_options = BACKUP
innodb_buffer_pool_size = 512M
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 0
innodb_read_io_threads = 64
innodb_write_io_threads = 64
log_warnings = 2
slave_net_timeout = 60
collation_server = utf8_unicode_ci
character_set_server = utf8
long_query_time = 3
slow_query_log = 1
slow_query_log_file = /var/log/mysql-default/log-slow-queries.log
[mysqldump]
quick
quote-names
max_allowed_packet = 128M
[isamchk]
key_buffer = 32M
[mysql]
default-character-set=utf8
[mysqld]
key_buffer_size = 32M
max_allowed_packet = 16M
max_connections = 214
thread_cache_size = 200
query_cache_limit = 4M
query_cache_size = 128M
query_cache_type = 1
tmp_table_size = 128M
max_heap_table_size = 128M
table_definition_cache = 800
join_buffer_size = 4M
table_open_cache = 200
open_files_limit = 512
#myisam-recover = BACKUP
myisam_sort_buffer_size = 32M
myisam_recover_options = BACKUP
innodb_buffer_pool_size = 512M
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 0
innodb_read_io_threads = 64
innodb_write_io_threads = 64
log_warnings = 2
slave_net_timeout = 60
collation_server = utf8_unicode_ci
character_set_server = utf8
long_query_time = 3
slow_query_log = 1
slow_query_log_file = /var/log/mysql-default/log-slow-queries.log
[mysqldump]
quick
quote-names
max_allowed_packet = 128M
[isamchk]
key_buffer = 32M
[mysql]
default-character-set=utf8
[mysqld]
key_buffer_size = 32M
max_allowed_packet = 16M
max_connections = 214
thread_cache_size = 200
query_cache_limit = 4M
query_cache_size = 128M
query_cache_type = 1
tmp_table_size = 128M
max_heap_table_size = 128M
table_definition_cache = 800
join_buffer_size = 4M
table_open_cache = 200
open_files_limit = 512
#myisam-recover = BACKUP
myisam_sort_buffer_size = 32M
myisam_recover_options = BACKUP
innodb_buffer_pool_size = 512M
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 0
innodb_read_io_threads = 64
innodb_write_io_threads = 64
log_warnings = 2
slave_net_timeout = 60
collation_server = utf8_unicode_ci
character_set_server = utf8
long_query_time = 3
slow_query_log = 1
slow_query_log_file = /var/log/mysql-default/log-slow-queries.log
show_compatibility_56 = on
[mysqldump]
quick
quote-names
max_allowed_packet = 128M
[isamchk]
key_buffer = 32M
[mysql]
default-character-set = utf8
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
key_buffer_size = 32M
max_allowed_packet = 16M
max_connections = 214
thread_cache_size = 200
tmp_table_size = 128M
max_heap_table_size = 128M
table_definition_cache = 800
join_buffer_size = 4M
table_open_cache = 200
open_files_limit = 512
#myisam-recover = BACKUP
myisam_sort_buffer_size = 32M
myisam_recover_options = BACKUP
innodb_buffer_pool_size = 512M
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 0
innodb_read_io_threads = 64
innodb_write_io_threads = 64
slave_net_timeout = 60
collation_server = utf8mb4_unicode_ci
character_set_server = utf8mb4
long_query_time = 3
slow_query_log = 1
slow_query_log_file = /var/log/mysql-default/log-slow-queries.log
[mysqldump]
quick
quote-names
max_allowed_packet = 128M
[isamchk]
key_buffer = 32M
[mysql]
default-character-set = utf8
[mysqld]
# * Fine Tuning
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover = BACKUP
#max_connections = 100
#table_cache = 64
#thread_concurrency = 10
# * Query Cache Configuration
query_cache_limit = 1M
query_cache_size = 16M
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[isamchk]
key_buffer = 16M
\ No newline at end of file
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAzTjFXaZAt8gASJpw8EkIsqtRbIR+1RO/p5NcOsZuFCoa8nho
0llUN6SSttdf2jyJJR8QUSOF/3VUjkx9LIzhmd2ksa1X4TZPSYef6Gyb4WsaodRH
OzahErqyVLz2CAt0M6JUaNGOGjrDpJA/HSb6rvu0LaqCul/QSiH0le3/pkRDmugQ
nQFAzdm3Rqr1azrMnrfynPgqXlxRMBihrappgkpi4rQBNqKzQD4zm/Zm+q6zydOL
X9mQ3PW13kxTNHJf0Rw8t49b3IIzGwLJhcVm/2Fm5CXAsxnQXkgU9Ll6k/1zt9i7
dtLypdGLkbewAOU9doppL4qsP8Rr/2aYmNACZQIDAQABAoIBAHqxrF4XHa5C5tiB
bXBbWdXoUx/7/xBJZFY95fBF3l4z5jR9BL5uJcm2nPivv2DsvFnzPoAkKuLWNR12
YYgXGnIxb1vC9T1yiOi/Kz18YZ3duOhzz7p5KMfX0vKSns2ke267aJfaYYkRBRMI
IpO9UDb5yXlb7hibXB5WOrLAvg2awuYgYYrOWXFK/IHTLDUpIm/U+n4uTcfqGwu/
9jyr+1p4rvldbxO/2T0HI4b/MJGfYJ9wVIAo3D5WbQatC0Isuy2CqskV4p07FG1Y
ditOqwwLjGjKNOrL2xs9JPjp9D9LRLJDfk7AKhRP4zi4+ZHeUVdvU3dcMgjeYgEo
M1iF0EECgYEA/wEA3FLcHSDvDI/Xn0W/WiRLmp/UX8I+et2MHsha9UdfdYhIqVHs
fjPr8FIJt+7cnVAfTbWIoX2L97qpBoHfXeacKeH4NE9LCNhHLCRgPTCtVxMZAsX6
71KCskEJ27uuq1tpESK5HoDtz7LdzahTC7in0eAim8tNVogrvpKsH70CgYEAzgX8
ovzGVcOz/rEhXFaNzyu5H+WPs2oBJfswGZiNU8FQWHOs83NzulClu48Bm3P+MCWs
8yPEYZ/r7C5QN/cIk9lldCXHlWaGgvH1Y10NJzqBC1vEdLeUQznYLMKQQ77DtU/n
SsQs5sMEK3XrhePNlwpc/GF0XU81MXVwNwTJY8kCgYA4Gq1ozCY3lm5h0if7l+ng
2El2DKI6K0950tKoVyaD/p8HCeQKtMaWga/wYOxYdoo9Zkps23rjJO8tovjbQKm3
TCyhnmDwiV2V5ZfLI3m1HMeWd9Ix5QMvsnSk6WBU4vcsJmF4bq5SAsXPw6e/PsB+
vLLXnzueEV3DoxQUyspp9QKBgFH2rcjGGb3bKwvjumr7AFXwhij7ck0lmilbIoq8
V1V/7hASjTcZsmvoU9cnkLMg1XqgMotUqndQYVLIJh/txtrTPXqU4S8957vGuSJ7
zZTSwK4dJy5sLq8EH03HZg+doEzM6i6jl12DLnB/7GCK/arec5nwx5OrxHTVzPwG
inyJAoGBAN3kUkjsp4o46WhuPyI0M6Y63i1LEXU8KJV3eT764q08PwdYfpRDNLwc
D33X7bK8ZNreB4RW52n8FhHPC7PjXa+B6CWUee+JDin0Yr3GTbP6VgSEyO6MsPH4
+onke33Z1TVoc3APwYfdb7FU7mWSB4/BBc1uyWPxjKxcMN5FeKMq
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIECTCCAvGgAwIBAgIUPiuzWyOvtPS1RxWkYSsGDLssROcwDQYJKoZIhvcNAQEL
BQAwgZMxCzAJBgNVBAYTAkRFMRAwDgYDVQQIDAdCYXZhcmlhMQ8wDQYDVQQHDAZN
dW5pY2gxEjAQBgNVBAoMCVNHQUxJTlNLSTENMAsGA1UECwwEVEVDSDEZMBcGA1UE
AwwQd3d3LnNnYWxpbnNraS5kZTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBzZ2Fs
aW5za2kuZGUwHhcNMjAxMDI5MTg1MDM4WhcNMjMwODE5MTg1MDM4WjCBkzELMAkG
A1UEBhMCREUxEDAOBgNVBAgMB0JhdmFyaWExDzANBgNVBAcMBk11bmljaDESMBAG
A1UECgwJU0dBTElOU0tJMQ0wCwYDVQQLDARURUNIMRkwFwYDVQQDDBB3d3cuc2dh
bGluc2tpLmRlMSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QHNnYWxpbnNraS5kZTCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM04xV2mQLfIAEiacPBJCLKr
UWyEftUTv6eTXDrGbhQqGvJ4aNJZVDekkrbXX9o8iSUfEFEjhf91VI5MfSyM4Znd
pLGtV+E2T0mHn+hsm+FrGqHURzs2oRK6slS89ggLdDOiVGjRjho6w6SQPx0m+q77
tC2qgrpf0Eoh9JXt/6ZEQ5roEJ0BQM3Zt0aq9Ws6zJ638pz4Kl5cUTAYoa2qaYJK
YuK0ATais0A+M5v2Zvqus8nTi1/ZkNz1td5MUzRyX9EcPLePW9yCMxsCyYXFZv9h
ZuQlwLMZ0F5IFPS5epP9c7fYu3bS8qXRi5G3sADlPXaKaS+KrD/Ea/9mmJjQAmUC
AwEAAaNTMFEwHQYDVR0OBBYEFImRUkTdLzgdjCwLazLv4TWCz/tIMB8GA1UdIwQY
MBaAFImRUkTdLzgdjCwLazLv4TWCz/tIMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
hvcNAQELBQADggEBAJoDttFRvuzu5VPADL//uBy7w2hQxbflw+8yyEVTooIr9hg5
pMbSooKuHfVMw+ciQAwfr7/nwO7oQJW53fa3VwYwdLMObNCYe94HjWK5Bl8HlwDV
64swh8dO+0bJDao321bZicBHmnZEmVAn3b/CNlAmpXd5CD6RoRSwuZL3BaYLMBKP
jlI2TPjNwNeQOQ9i/speA1RXoySk6e5f8NeRINcgR6c8Tf6XsJPIP7dTEeuP5Ctm
QdMcUPpQZBmJ5GmnZ0dgGhPBw+uoaGmUiLcX4Adonj6qsNbwvC0uccehTBHfdn1d
8ckBvW89/CVNWii7qVKGbHqEZ8rzIRuiglTkAtc=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDwzCCAqugAwIBAgIJAI0fP6WiydHSMA0GCSqGSIb3DQEBCwUAMHgxCzAJBgNV
BAYTAkRFMRAwDgYDVQQIDAdCYXZhcmlhMQ8wDQYDVQQHDAZNdW5pY2gxEDAOBgNV
BAoMB0ZyZW50bGUxEDAOBgNVBAMMB0ZyZW50bGUxIjAgBgkqhkiG9w0BCQEWE2Zy
ZW50bGVAZXhhbXBsZS5vcmcwHhcNMTQxMTE4MTkwNjAxWhcNMTUxMTE4MTkwNjAx
WjB4MQswCQYDVQQGEwJERTEQMA4GA1UECAwHQmF2YXJpYTEPMA0GA1UEBwwGTXVu
aWNoMRAwDgYDVQQKDAdGcmVudGxlMRAwDgYDVQQDDAdGcmVudGxlMSIwIAYJKoZI
hvcNAQkBFhNmcmVudGxlQGV4YW1wbGUub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAor936HJ6p5j/FJab3UZCaJtOoQ19V+PSEtPNqopd32idrsWM
R8oKjmuDN++tI0DXab5a7eJrsJ+LmyYl5Ly0uY5tW/fbP1ONs5FSsheithy7fCN0
EFwkor02HIkJWBFksqDUf594mKoEgX0Epba8e41MT7MHuZU4Kl4cPt2ple7OXYxo
QJTgLBGDIm7Xn4vw4GPzYvtARizjgflBqPkUDn3VYMi3Jwdcawve1yY90mhrZ4Rv
3N9AXOzQF8WOEqg9JyaEUzHYy5T7D7XA4U2od3tBo1gAwzCDHQ8yc2aXU5nA5IBf
i8A6N+kMF61shT3gSN/tuziMc1ymdfjc9yvXCwIDAQABo1AwTjAdBgNVHQ4EFgQU
kvS96/BBMpa/er9Por6Coi6X9uUwHwYDVR0jBBgwFoAUkvS96/BBMpa/er9Por6C
oi6X9uUwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEASmTZ5iB6CMJN
GEsawTqExkT7DbrmbkWobt02gz1KCrAU6aJBQ42TIW9DWcG37fyJyil699+K0HEg
wm7bSZh5C/IPM6jgBvWuK6CVYItmbcHG1dTiYfqQRplUT1x/beekKpVDlpcqUvmT
JbHFkxGuNAfcifhOZK3apv1N9birPBOOSZtFXvC1SP8tSrg5M4SF1pjFOlWPhXri
uOVsvUkWu9FOZnserG7DbyzjNni6G9LNmnw0D0MFJjIrp5fw3JQmdqen19USsKTb
vr6cquLNsKnw44WQagP+LZ6y2/4/ZRWAHcgQwWbmOqhD0FkNsJAhwESmJzf8yU8n
lkM+0SMS8w==
-----END CERTIFICATE-----