vm/chef/cookbooks/redmine/recipes/default.rb (183 lines of code) (raw):
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
ENV['DEBIAN_FRONTEND'] = 'noninteractive'
include_recipe 'apache2'
include_recipe 'apache2::mod-passenger'
include_recipe 'apache2::security-config'
include_recipe 'mysql::version-8.0-embedded'
include_recipe 'rvm'
include_recipe 'redmine::ospo'
apt_update 'update' do
action :update
end
package 'Install Packages' do
package_name node['redmine']['packages']
action :install
end
user node['redmine']['user'] do
action :create
shell '/sbin/nologin'
manage_home true
end
bash 'Grant sudo to redmine user' do
user 'root'
cwd '/tmp'
environment({
'user' => node['redmine']['user'],
})
code <<-EOH
usermod -aG sudo $user
EOH
end
directory '/opt/redmine' do
owner node['redmine']['user']
group node['redmine']['user']
mode '0755'
recursive true
action :create
end
bash 'Download Redmine' do
user 'root'
cwd '/tmp'
code <<-EOH
curl -ks -o /tmp/redmine.tar.gz "https://www.redmine.org/releases/redmine-#{node['redmine']['version']}.tar.gz"
EOH
end
bash 'Extract Redmine' do
user 'root'
cwd '/tmp'
environment({
'user' => node['redmine']['user'],
})
code <<-EOH
tar --extract \
--file redmine.tar.gz \
--directory /opt/redmine \
--strip-components 1 \
&& chown -R $user:$user /opt/redmine \
&& rm -f redmine.tar.gz
EOH
end
bash 'Configure MySQL database' do
user 'root'
code <<-EOH
# Create database
mysql -u root -e "create database $defdb character set utf8mb4;";
# Create user with temp credentials
mysql -u root -e "create user $defuser@localhost identified by 'temp';";
# Grant all privileges to redmine user
mysql -u root -e "grant all privileges on $defdb.* to $defuser@localhost;";
EOH
environment({
'defdb' => node['redmine']['db']['name'],
'defuser' => node['redmine']['db']['user'],
})
end
# Copy Redmine's database connection configuration template
cookbook_file '/opt/redmine/config/database.yml' do
source 'database.yml'
owner node['redmine']['user']
group node['redmine']['user']
mode 0640
action :create
end
template 'Set Redmine Apache configuration' do
path '/etc/apache2/sites-available/redmine.conf'
source 'apache-redmine.conf.erb'
owner 'root'
group 'root'
mode '0664'
end
template 'Set default Ruby version' do
path '/opt/redmine/.ruby-version'
source 'ruby-version.erb'
owner 'root'
group 'root'
mode '0664'
end
bash 'Install Ruby version required for Redmine' do
cwd '/opt/redmine'
user 'root'
environment({
'rubyVersion' => node['redmine']['ruby']['version'],
})
code <<-EOH
source /usr/local/rvm/scripts/rvm
rvm install $rubyVersion
EOH
end
bash 'Redmine Bundle Install' do
cwd '/opt/redmine'
user 'redmine'
environment({
'rubyVersion' => node['redmine']['ruby']['version'],
})
code <<-EOH
source /usr/local/rvm/scripts/rvm
rvm use $rubyVersion --default
bundle install --path vendor/bundle
EOH
end
bash 'Pre-config Redmine' do
cwd '/opt/redmine'
user 'redmine'
environment({
'rubyVersion' => node['redmine']['ruby']['version'],
})
code <<-EOH
source /usr/local/rvm/scripts/rvm
rvm use $rubyVersion --default
echo "gem 'blankslate'" >> Gemfile
echo "gem 'passenger'" >> Gemfile
echo "gem 'base64', '0.1.1'" >> Gemfile
bundle install
EOH
end
bash 'Configure Redmine' do
user node['redmine']['user']
cwd '/opt/redmine'
environment({
'rubyVersion' => node['redmine']['ruby']['version'],
})
code <<-EOH
source /usr/local/rvm/scripts/rvm
rvm use $rubyVersion --default
# Define default properties
export RAILS_ENV="production"
export REDMINE_LANG="en"
# Generate token for cookie signing
bundle exec rake generate_secret_token
# Create database
bundle exec rake db:migrate
# Seed initial data
bundle exec rake redmine:load_default_data
EOH
end
# Configure Redmine site in Apache and enable it with Apache's passenger module
bash 'Configure Apache Website' do
user 'root'
environment({
'user' => node['redmine']['user'],
})
code <<-EOH
# Run Apache as redmine user
sed -i "s/www-data/$user/g" /etc/apache2/envvars
# Disable default website
a2dissite 000-default.conf
# Enable Redmine website
a2ensite redmine.conf
EOH
end
bash 'Configure permissions' do
user 'root'
cwd '/opt/redmine'
environment({
'user' => node['redmine']['user'],
})
code <<-EOH
ln -s /opt/redmine /var/www/html \
&& chmod -R 775 ./* \
&& chown -R $user:$user ./* \
&& chown -R nobody:nogroup files log tmp public/plugin_assets \
&& chmod -R 775 files log tmp public/plugin_assets
EOH
end
# Reload Apache in order to apply the configurations
service 'reload_apache2' do
service_name 'apache2'
action [ :reload ]
end
# Remove all AGPL licensed packages installed automatically by Redmine.
package node['redmine']['agpl_packages'] do
action :remove
retries 10
retry_delay 60
end
# Copy post-deploy configuration script (to override and configure instance's specific passwords):
c2d_startup_script 'redmine' do
source 'redmine-startup'
action :cookbook_file
end