środowisko deweloperskie z Vagrant

W tym wpisie pokaże wam, jak przygotować własny obraz Ubuntu 24.04 dla Vagranta, a następnie pokaże jak przygotować środowisko developerskie.
Pobranie repozytorium z vagrantem
git clone https://gitlab.com/pl.rachuna-net/tools/vagrant.gitKrop po kroku
Section titled “Krop po kroku”-
Przygotowanie maszyny wirutlanej na Virtualbox
Section titled “Przygotowanie maszyny wirutlanej na Virtualbox” -
Instalacja ubuntu 24.04
Section titled “Instalacja ubuntu 24.04” -
Wstępny hardening według uznania
Section titled “Wstępny hardening według uznania”echo "vagrant ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/vagrant sudo apt-get update sudo apt-get dist-upgrade -y sudo apt install -y openssh-server curl wget sudo sudo apt install -y build-essential dkms linux-headers-$(uname -r) mkdir -p /home/vagrant/.ssh curl -fsSL https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub -o /home/vagrant/.ssh/authorized_keys chown -R vagrant:vagrant /home/vagrant/.ssh chmod 700 /home/vagrant/.ssh chmod 600 /home/vagrant/.ssh/authorized_keys sudo apt-get autoremove -y sudo apt-get clean sudo rm -rf /var/lib/apt/lists/* sudo timedatectl set-timezone UTC sudo locale-gen en_US.UTF-8 sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab -
Przygotowanie do stworzenia
Section titled “Przygotowanie do stworzenia .box - czyli usuwanie zbędnych plików”.box- czyli usuwanie zbędnych plikówsudo systemctl enable --now ssh sudo apt autoremove -y sudo apt clean history -c sudo truncate -s 0 /etc/machine-id sudo rm -f /var/lib/dbus/machine-id sudo shutdown -h now -
Spakowanie VM do BOX-a
Section titled “Spakowanie VM do BOX-a”vagrant package \ --base "ubuntu-24.04" \ --output ".box/ubuntu-24.04-1.0.0.box" -
Dodanie BOX do twojego lokalnego Vagrant
Section titled “Dodanie BOX do twojego lokalnego Vagrant”vagrant box add ubuntu-24.04-1.0.0 .box/ubuntu-24.04-1.0.0.boxLista pobranych lokalnie boxes
vagrant box list -
Przygotowanie vagrantfile
Section titled “Przygotowanie vagrantfile”hostname = ENV['VAGRANT_HOSTNAME'] || 'dev-station' vm_memory = ENV['VAGRANT_VM_MEMORY'] || 4096 num_cpus = ENV['VAGRANT_NUM_CPUS'] || 2 vm_base_image = ENV['VAGRANT_VM_BASE_IMAGE'] || 'ubuntu-24.04-1.0.0' Vagrant.configure("2") do |config| config.vm.box = vm_base_image config.vm.hostname = hostname config.vm.provider "virtualbox" do |vb| vb.name = hostname vb.cpus = num_cpus vb.memory = vm_memory vb.gui = false end config.ssh.forward_agent = true config.ssh.forward_x11 = true config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh" config.vm.synced_folder ".", "/vagrant", type: "virtualbox" # pliki do synchronizacji z home config.vm.synced_folder "/userfiles", "/vagrant/userfiles", type: "virtualbox" if File.file?("./bootstrap.sh") config.vm.provision "shell", path: "./bootstrap.sh", privileged: true, run: "always" end end -
Przygotowanie skryptu
Section titled “Przygotowanie skryptu bootstrap.sh”bootstrap.sh#!/bin/env bash set -euo pipefail VAGRANT_DIRETORY="/vagrant" MARKER="/var/lib/vagrant-bootstrap.done" SCRIPTS_LIST="$VAGRANT_DIRETORY/scripts_to_run" if [[ -f "${MARKER}" ]]; then echo "[bootstrap] already done (${MARKER} exists) - skipping" exit 0 fi echo -e "\033[1;33m===>\033[0m 🚀 Run bootstrap script" echo -e "\033[1;33m===>\033[0m 📁 Copy userfiles to $HOME" cp -fr $VAGRANT_DIRETORY/userfiles/. ~/ if [ ! -f "$SCRIPTS_LIST" ]; then echo "❌ Scripts list file '$SCRIPTS_LIST' not found!" exit 1 fi while IFS= read -r script; do if [ -f "$VAGRANT_DIRETORY/$script" ]; then echo -e "\033[1;33m===>\033[0m 🚀 Running script: $VAGRANT_DIRETORY/$script" chmod +x "$VAGRANT_DIRETORY/$script" bash "$VAGRANT_DIRETORY/$script" else echo "❌ Script '$script' not found in '$VAGRANT_DIRET/$script'!" fi done < "$SCRIPTS_LIST" -
Uruchomienie maszyny developerskiej
Section titled “Uruchomienie maszyny developerskiej”vagrant upalbo
chmod +x start_vm.bash ./start_vm.bashstart_vm.bat -
Publikacja
Section titled “Publikacja .box jako w gitlab jako Gitlab Package registry”.boxjako w gitlab jakoGitlab Package registryexport GITLAB_URL="https://gitlab.com" export GITLAB_TOKEN="" export PROJECT_ID="77501746" export PACKAGE_NAME="ubuntu-24.04" export PACKAGE_VERSION="1.0.0" export FILE_NAME="${PACKAGE_NAME}$-${PACKAGE_VERSION}.box" curl --fail --location -H "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ --upload-file ".box/${FILE_NAME}" \ "${GITLAB_URL}/api/v4/projects/${PROJECT_ID}/packages/generic/${PACKAGE_NAME}/${PACKAGE_VERSION}/${FILE_NAME}"
Użycie obrazu z gitlab package registry
Section titled “Użycie obrazu z gitlab package registry”export GITLAB_URL="https://gitlab.com"
export GITLAB_TOKEN=""
export PROJECT_ID="77501746"
export PACKAGE_NAME="ubuntu-24.04"
export PACKAGE_VERSION="1.0.0"
export FILE_NAME="${PACKAGE_NAME}$-${PACKAGE_VERSION}.box"
curl -L -H "PRIVATE-TOKEN: ${TOKEN}" \
"${GITLAB_URL}/api/v4/projects/${PROJECT_ID}/packages/generic/${PACKAGE_NAME}/${PACKAGE_VERSION}/${FILE_NAME}"
-o .box/$FILE_NAME
vagrant box add ubuntu-24.04-1.0.0 .box/ubuntu-24.04-1.0.0.box
vagrant upDostęp do maszyny wirtualnej
Section titled “Dostęp do maszyny wirtualnej”- SSH jest dostępne na porcie
2222na hoście, przekierowanym do portu22w VM. - Włączone jest przekazywanie agenta SSH oraz X11.
- Połączenie można nawiązać poleceniem:
ssh -p 2222 vagrant@localhost
Edytuj plik
~/.ssh/config, dodając wpis:Host dev-station HostName 127.0.0.1 Port 2222 User vagrant IdentityFile /repo/pl.rachuna-net/devtools/vagrant/.vagrant/machines/default/virtualbox/private_key ForwardX11 yesDzięki temu możesz łatwo łączyć się z maszyną wirtualną za pomocą polecenia:
ssh dev-station
Ręczne uruchomienie bootstrap.bash
Section titled “Ręczne uruchomienie bootstrap.bash”vagrant@dev-station:/vagrant$ cd /vagrant/
vagrant@dev-station:/vagrant$ ./bootstrap.bash
===> 🚀 Run bootstrap script
===> 📁 Copy userfiles to /home/vagrant
===> 🚀 Running script: /vagrant/provisioning/upgrade-ubuntu.bash
===> Upgrade system packages and distribution
===> 🚀 Running script: /vagrant/provisioning/install-packages.bash
===> Install packages