|
| 1 | +# -*- mode: ruby -*- |
| 2 | +# vi: set ft=ruby : |
| 3 | + |
| 4 | +# Environment variables |
| 5 | +VAGRANT_BOX = "vbox-docker-ubuntu2404" # Standard Ubuntu 22.04 LTS box |
| 6 | +VAGRANT_BOX_VERSION = "0" |
| 7 | +VM_NAME = "mkdocforge.local" |
| 8 | +VM_IP = "192.168.56.150" |
| 9 | +VM_MEMORY = 4096 # MB |
| 10 | +VM_CPUS = 2 |
| 11 | +VM_CPUEXECUTIONCAP = 100 # CPU execution cap (percentage) |
| 12 | + |
| 13 | +Vagrant.configure("2") do |config| |
| 14 | + # Basic box configuration |
| 15 | + config.vm.box = VAGRANT_BOX |
| 16 | + config.vm.box_version = VAGRANT_BOX_VERSION |
| 17 | + config.vm.hostname = VM_NAME |
| 18 | + config.vm.boot_timeout = 600 |
| 19 | + config.vm.box_check_update = false |
| 20 | + |
| 21 | + # Network configuration |
| 22 | + config.vm.network :private_network, |
| 23 | + ip: VM_IP, |
| 24 | + netmask: "24", |
| 25 | + auto_config: true, |
| 26 | + hostname: true |
| 27 | + |
| 28 | + # Synced folder configuration with performance optimizations |
| 29 | + config.vm.synced_folder ".", "/home/vagrant/mkdocforge", |
| 30 | + type: "rsync", |
| 31 | + disabled: false, |
| 32 | + rsync__chown: true, |
| 33 | + owner: "vagrant", |
| 34 | + group: "vagrant", |
| 35 | + mount_options: ["dmode=775,fmode=777"], |
| 36 | + rsync__args: ["--verbose", "--archive", "--delete", "-z", "--compress-level=9"], |
| 37 | + rsync__exclude: [ |
| 38 | + ".git/", \ |
| 39 | + ".github/", \ |
| 40 | + ".vscode/", \ |
| 41 | + "node_modules/", \ |
| 42 | + ".DS_Store", \ |
| 43 | + ".cache/", \ |
| 44 | + ".qodo/", \ |
| 45 | + ".ruff_cache/", \ |
| 46 | + ".vagrant/", \ |
| 47 | + ".venv/", \ |
| 48 | + "venv/", \ |
| 49 | + "site/", \ |
| 50 | + "mkdocforge.egg-info/", \ |
| 51 | + ] |
| 52 | + |
| 53 | + # HostManager plugin configuration |
| 54 | + if Vagrant.has_plugin?("vagrant-hostmanager") |
| 55 | + config.hostmanager.enabled = true |
| 56 | + config.hostmanager.manage_host = false |
| 57 | + # config.hostmanager.manage_host = true |
| 58 | + config.hostmanager.manage_guest = true |
| 59 | + config.hostmanager.ignore_private_ip = false |
| 60 | + config.hostmanager.include_offline = true |
| 61 | + config.hostmanager.elevate_commands = true |
| 62 | + config.vm.provision :hostmanager |
| 63 | + end |
| 64 | + |
| 65 | + # VirtualBox provider configuration with advanced performance optimizations |
| 66 | + config.vm.provider "virtualbox" do |vb| |
| 67 | + vb.name = VM_NAME |
| 68 | + vb.memory = VM_MEMORY |
| 69 | + vb.cpus = VM_CPUS |
| 70 | + vb.check_guest_additions = false |
| 71 | + |
| 72 | + # CPU optimizations |
| 73 | + vb.customize ["modifyvm", :id, "--cpuexecutioncap", VM_CPUEXECUTIONCAP] |
| 74 | + vb.customize ["modifyvm", :id, "--nestedpaging", "on"] |
| 75 | + vb.customize ["modifyvm", :id, "--largepages", "on"] |
| 76 | + vb.customize ["modifyvm", :id, "--vtxvpid", "on"] |
| 77 | + vb.customize ["modifyvm", :id, "--vtxux", "on"] |
| 78 | + vb.customize ["modifyvm", :id, "--pae", "on"] |
| 79 | + vb.customize ["modifyvm", :id, "--hwvirtex", "on"] |
| 80 | + |
| 81 | + # I/O optimizations |
| 82 | + vb.customize ["modifyvm", :id, "--ioapic", "on"] |
| 83 | + vb.customize ["modifyvm", :id, "--hpet", "on"] |
| 84 | + # vb.customize ["storagectl", :id, "--name", "SATA Controller", "--hostiocache", "on"] |
| 85 | + |
| 86 | + # Memory optimizations |
| 87 | + vb.customize ["modifyvm", :id, "--pagefusion", "on"] |
| 88 | + |
| 89 | + # Network optimizations |
| 90 | + vb.customize ["modifyvm", :id, "--nictype1", "virtio"] |
| 91 | + vb.customize ["modifyvm", :id, "--nictype2", "virtio"] |
| 92 | + vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] |
| 93 | + vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"] |
| 94 | + |
| 95 | + # Other optimizations |
| 96 | + vb.customize ['modifyvm', :id, '--tpm-type', '2.0'] |
| 97 | + vb.customize ['modifyvm', :id, '--chipset', 'ich9'] # Changed from piix3 to ich9 for better performance |
| 98 | + vb.customize ['modifyvm', :id, '--vm-process-priority', 'high'] |
| 99 | + vb.customize ["modifyvm", :id, "--graphicscontroller", "vmsvga"] |
| 100 | + vb.customize ["modifyvm", :id, "--accelerate3d", "off"] |
| 101 | + vb.customize ["modifyvm", :id, "--audio", "none"] |
| 102 | + vb.customize ["modifyvm", :id, "--usb", "off"] |
| 103 | + vb.customize ["modifyvm", :id, "--clipboard-mode", "bidirectional"] |
| 104 | + vb.customize ["modifyvm", :id, "--draganddrop", "hosttoguest"] |
| 105 | + |
| 106 | + # Disk I/O optimizations - specify SSD if applicable |
| 107 | + # vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "0", "--nonrotational", "on", "--discard", "on"] |
| 108 | + end |
| 109 | + |
| 110 | + # Disable automatic VBGuest updates if plugin is installed |
| 111 | + if Vagrant.has_plugin?("vagrant-vbguest") |
| 112 | + config.vbguest.auto_update = false |
| 113 | + end |
| 114 | + |
| 115 | + # TCP offloading and custom NIC settings |
| 116 | + config.vm.provision "shell", path: "scripts/tune_performance.sh", privileged: true |
| 117 | + |
| 118 | + # Optional: Run system update s |
| 119 | + config.vm.provision "shell", path: "scripts/update_system.sh", privileged: true |
| 120 | + |
| 121 | + # Optional: Install common development tools |
| 122 | + config.vm.provision "shell", path: "scripts/install_dev_tools.sh", privileged: true |
| 123 | + |
| 124 | + # Boot time optimization - disable GUI |
| 125 | + config.vm.provider "virtualbox" do |vb| |
| 126 | + vb.gui = false |
| 127 | + end |
| 128 | + |
| 129 | + # Additional port forwarding for web services |
| 130 | + config.vm.network "forwarded_port", guest: 8000, host: 8000 |
| 131 | + |
| 132 | + # Display post-up message with relevant information |
| 133 | + config.vm.post_up_message = <<-MESSAGE |
| 134 | +
|
| 135 | + Access your virtual machine: |
| 136 | + * SSH: vagrant ssh |
| 137 | + * Web: http://#{VM_IP}:8000/ or http://localhost:8000/ |
| 138 | +
|
| 139 | +
|
| 140 | + VM Info: |
| 141 | + * OS: Ubuntu 22.04 LTS |
| 142 | + * Hostname: #{VM_NAME} |
| 143 | + * IP Address: #{VM_IP} |
| 144 | + * Memory: #{VM_MEMORY}MB |
| 145 | + * CPUs: #{VM_CPUS} |
| 146 | +
|
| 147 | + Your files are synced to: /home/vagrant/mkdocforge |
| 148 | + MESSAGE |
| 149 | +end |
0 commit comments