-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathVagrantfile
More file actions
88 lines (68 loc) · 3.89 KB
/
Vagrantfile
File metadata and controls
88 lines (68 loc) · 3.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
require 'yaml'
# Path to directory containing the Vagrantfile
vagrant_file_dir = File.expand_path(File.dirname(__FILE__))
# Load settings from file
settings = YAML.load_file("#{vagrant_file_dir}/vagrant.yml") rescue puts("INFO: Could not read vagrant.yml"); Hash.new
# Load settings with default fallback values
vm_memory = (settings['vm']['memory'] rescue puts("INFO: Could not load 'vm.settings' from vagrant.yml. Using default value.")) || "2048"
ports_tomcat = (settings['ports']['tomcat'] rescue puts("INFO: Could not load 'ports.tomcat' from vagrant.yml. Using default value.")) || 8080
ports_debugging = (settings['ports']['debugging'] rescue puts("INFO: Could not load 'ports.debugging' from vagrant.yml. Using default value.")) || 8000
ports_database = (settings['ports']['database'] rescue puts("INFO: Could not load 'ports.database' from vagrant.yml. Using default value."))|| 3306
admin_user = (settings['admin']['username'] rescue puts("INFO: Could not load 'admin.username' from vagrant.yml. Using default value."))|| "admin"
Vagrant.configure("2") do |config|
config.vm.define "dev" do |dev|
dev.vm.box = "debian/bookworm64"
# Booting can take a bit longer
dev.vm.boot_timeout = 600
# Tomcat
dev.vm.network :forwarded_port, guest: 8080, host: ports_tomcat, host_ip: "127.0.0.1"
# Database
dev.vm.network :forwarded_port, guest: 3306, host: ports_database, host_ip: "127.0.0.1"
# Remote debugging
dev.vm.network :forwarded_port, guest: 8000, host: ports_debugging, host_ip: "127.0.0.1"
dev.vm.synced_folder ".", "/vagrant", disabled: true
dev.vm.provider "virtualbox" do |vb|
# Customize the amount of memory on the VM:
vb.memory = vm_memory
end
dev.vm.provision :shell do |s|
sed_expression = 's|</tomcat-users>| <role rolename="manager-script"/>\n <role rolename="manager-gui"/>\n <role rolename="codedefenders-admin"/>\n <user username="'+admin_user+'" roles="codedefenders-admin"/>\n <user username="manager" password="manager" roles="manager-gui,manager-script"/>\n</tomcat-users>|'
tomcat10_overwrite = '[Service]\nEnvironment="CATALINA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000"\nReadWritePaths="/srv/codedefenders"\n'
codedefenders_properties = <<-CONFIG
data.dir=/srv/codedefenders
db.password=codedefenders
auth.admin.role=codedefenders-admin
metrics=true
javamelody=true
CONFIG
s.inline = <<-SHELL
export DEBIAN_FRONTEND=noninteractive
# System update & upgrade
apt update -y
apt upgrade -y
# Install required packages
apt install -y tomcat10 tomcat10-admin mariadb-server maven ant
# Change owner, so tomcat itself can replace it (e.g. with a (re)deploy via maven)
chown -R tomcat:tomcat /var/lib/tomcat10/webapps/
# Bind mariadb-server to all addresses
sed -i -E 's|bind-address.*|bind-address = 0.0.0.0|' /etc/mysql/mariadb.conf.d/50-server.cnf
systemctl restart mariadb
# Create database and database user
mysql -e "CREATE DATABASE codedefenders; CREATE USER 'codedefenders'@'%' IDENTIFIED BY 'codedefenders'; GRANT ALL PRIVILEGES ON codedefenders.* TO 'codedefenders'@'%'; FLUSH PRIVILEGES;"
# Create codedefenders data directory
mkdir -p /srv/codedefenders
chown -R tomcat:tomcat /srv/codedefenders
# Create tomcat users
sed -i -E '#{sed_expression}' /etc/tomcat10/tomcat-users.xml
# Configure tomcat systemd service to allow writing to data directory and enable remote debugging
mkdir -p /etc/systemd/system/tomcat10.service.d/
printf '#{tomcat10_overwrite}' > /etc/systemd/system/tomcat10.service.d/override.conf
# Create codedefenders configuration
printf '#{codedefenders_properties}' > /etc/tomcat10/codedefenders.properties
systemctl daemon-reload
systemctl restart tomcat10
SHELL
end
end
end
puts ""