Setup Mojolicious using Vagrant

Posted by Ashutosh on February 16, 2021

In this article, we cover how to set up the Mojolicious development environment using the Vagrant.

We also cover:

  • Installation of VirtualBox
  • Installation of Vagrant
  • Create Vagrantfile
  • Execute vagrant

Vagrant Introduction

A Vagrant is a tool focused on giving a uniform development environment across different operating systems.
It manages virtual machine environments and lowers the development environment setup time.
It also helps in getting rid of the "works on my machine" phrase commonly used by software developers.


Before installing Vagrant, we need to install VirtualBox on our operating systems.

If you are using MacOS,

brew update && brew upgrade
brew install virtualbox # Virtualbox installation
brew install vagrant # Vagrant Installation

On Debian/Ubuntu OS,

sudo apt update
sudo apt install virtualbox
sudo apt install vagrant


yum install virtualbox
yum install vagrant

To verify that the installation, run the following command that will print the Vagrant version:

vagrant --version
Vagrant 2.2.14

Getting Started

Setting up the vagrant is fairly easy. We need to create a new directory to setup the root of the application.

mkdir vagrant_mojo
cd vagrant_mojo

Setup the Vagrantfile

vagrant init

Above command creates Vagrantfile in the current diretory i.e. vagrant_mojo

A Vagrantfile has been placed in this directory. You are now
ready to vagrant up your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on for more information on using Vagrant.

Clear all the content of the 'Vagrantfile'

Vagrant.configure("2") do |config| = "generic/ubuntu2004"
config.disksize.size = '25GB' "forwarded_port", guest: 80, host: 8080 "forwarded_port", guest: 443, host: 8443
# Can access 3000 port from parent OS "forwarded_port", guest: 3000, host: 3000 # mysql "forwarded_port", guest: 3306, host: 30306 # If you are using postgres uncheck this
# "forwarded_port", guest: 5432, host: 54320 # For SSH
config.ssh.forward_agent = true # Current folder is synced with the Vagrant VM /vagrant_data directory
config.vm.synced_folder "./", "/vagrant_data" config.vm.provider "virtualbox" do |vb|
vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
vb.memory = "5192"
end # IMPORTANT: Vagrant run this shell script during the configuration.
config.vm.provision:shell, path: ""

Create a new file and update the following content


install_mojolicious() {
echo "Installing Mojolicious"
sudo curl -L | perl - -M -n Mojolicious
} install_mysql() {
echo "Installing MariaDB on vagrant machine"
sudo apt update
sudo apt install mariadb-server -y
} install_perl_module() {
echo "Installing the Perl Module"
sudo cpan install DateTime -y
sudo cpan install DBIx::Class -y
sudo cpan install Crypt::PBKDF2 -y
sudo cpan install Mouse -y
sudo cpan install Email::Valid -y
sudo cpan install Mojolicious::Plugin::Authentication -y
sudo cpan install Mojolicious::Plugin::StaticCache -y
} setup_mojolicious() {
# Setting up the Mojolicious APP
cd /vagrant_data
mojo generate app vagrant_mojo
} main() {

Save and exit the file. And run the following command.

vagrant up

This will take a little time to finish it up. Once the installation is done.
Mojo app is already created under the "/vagrant_data".

vagrant ssh
cd /vagrant_data/vagrant_mojo
morbo script/vagrant_mojo

It will start the webserver at Go to you browser of the operating system and type http://localhost:3000.

Now, you can do any changes from your main OS under the synced directory.
It will change the app by default in ubuntu OS (VirtualBox). It also preserves the environment from regular OS updates.