{"description":"This Ubuntu 20.04 LTS virtual machine is preconfigured with support for a variety of full stack web development\r\nframeworks, including Laravel, Symfony, CakePHP, CodeIgnitor, Angular, Ember, Express, Vue, React, Java Spring, Ruby on Rails, Django and ASP.Net.","short_description":"This Ubuntu 20.04 LTS virtual machine is preconfigured with support for a variety of full stack web development\r\nframeworks, including Laravel, Symfony, CakePHP, CodeIgnitor, Angular, Ember, Express, Vue, React, Java Spring, Ruby on Rails, Django and ASP.Net.","name":"aracpac/ubuntu20","versions":[{"version":"1.4.1","status":"active","description_html":"
This Ubuntu 20.04.3 LTS virtual machine is preconfigured with support for a variety of full stack web development\nframeworks, including:
\n\nDownload a\nturbocharged Vagrantfile\nmade specifically for this box.
\n\nThe quickstart assumes you've:
\n\nvagrant up
from a command shell within that directoryvagrant ssh
to connect to the guest machine/var/www
inside the guest machine and removed any existing files in the directoryNow find the name of the framework you want to work with in the following list. Under the name of the framework are the\nshell commands you'll need to run to initialize a new project and to start seeing your work on your host machine's web\nbrowser (just navigate to the URL adjacent the framework name after you've run all the commands). The first time you\naccess the box via an HTTPS url, you will get a browser-specific error like MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT
or\nNET::ERR_CERT_AUTHORITY_INVALID
— this is expected due to the self-signed certificate generated in the virtual\nmachine. Follow the prompts in your browser to trust the certificate and proceed.
✅ LAMP ( https://dev.local/ )
\n\n# everything is preconfigured and you can start modifying `/var/www/index.php` immediately\n
\n\n✅ Symfony ( https://dev.local/ )
\n\nsymfony new . --full\n# install apache support (be sure to answer 'y' when prompted to run the recipe)\ncomposer require symfony/apache-pack\n# update the default vhost to match symfony's file structure\nsudo sed -i -e 's/var\\/www.*$/var\\/www\\/public/g' /etc/apache2/sites-enabled/vhosts.conf\n# restart apache2 to reload the vhost\nsudo systemctl restart apache2\n# create a local .env override and add the local machine's database information\ncat .env | sed -e 's/db_user:db_password/vagrant:vagrant/g' > .env.local\n# create the database\nbin/console doctrine:database:create --if-not-exists --no-interaction\n
\n\n✅ Laravel (https://dev.local/ )
\n\ncomposer create-project laravel/laravel .\n# update the default vhost to match Laravel's file structure\nsudo sed -i -e 's/var\\/www.*$/var\\/www\\/public/g' /etc/apache2/sites-enabled/vhosts.conf\n# restart apache2 to reload the vhost\nsudo systemctl restart apache2\n
\n\n✅ CakePHP ( https://dev.local/ )
\n\ncomposer create-project cakephp/app .\n# update the default vhost to match CakePHP's file structure\nsudo sed -i -e 's/var\\/www.*$/var\\/www/g' /etc/apache2/sites-enabled/vhosts.conf\n# restart apache2 to reload the vhost\nsudo systemctl restart apache2\n
\n\n✅ CodeIgniter ( https://dev.local/ )
\n\ncomposer create-project codeigniter4/appstarter .\n# update the default vhost to match CodeIgniter's file structure\nsudo sed -i -e 's/var\\/www.*$/var\\/www\\/public/g' /etc/apache2/sites-enabled/vhosts.conf\n# restart apache2 to reload the vhost\nsudo systemctl restart apache2\n
\n\n✅ Angular ( http://dev.local:4200/ )
\n\nng new web --directory .\nng serve --host 0.0.0.0 --disable-host-check\n
\n\n✅ Ember ( http://dev.local:4200/ )
\n\nember init\nember serve --host 0.0.0.0\n
\n\n✅ Express ( http://dev.local:3000/ )
\n\nexpress --view=twig .\nnpm install\nDEBUG=.:* npm start\n
\n\n✅ Vue ( http://dev.local:8080/ )
\n\nvue create .\n# create a vue.config.js file and disable host checking so we can view our work from the host machine\necho "module.exports = { devServer: { disableHostCheck: true } }" > vue.config.js\nyarn serve --host 0.0.0.0 --public $(hostname)\n
\n\n✅ React ( http://dev.local:5000/ )
\n\ncreate-react-app .\nserve -s public\n
\n\n✅ Java Spring ( http://dev.local:8080/ )
\n\nspring init --dependencies=web ./\nmvn spring-boot:run\n
\n\n✅ Ruby on Rails ( http://dev.local:3000/ )
\n\nrails new .\n# whitelist all IPs in config/environments/development.rb so we can view our work from the host machine\nsed -i "\\$i config.hosts << \\"$(hostname)\\"\\nconfig.web_console.whitelisted_ips = '0.0.0.0/0'" config/environments/development.rb\nrails server -b 0.0.0.0\n
\n\n✅ Django ( http://dev.local:8080 )
\n\ndjango-admin startproject web .\n# whitelist all hosts in web/settings.py so we can view our work from the host machine\nsed -i -e 's/^ALLOWED_HOSTS = \\[\\]$/ALLOWED_HOSTS = ["*"]/g' web/settings.py\npython3 manage.py runserver 0.0.0.0:8080\n
\n\n✅ ASP.Net ( http://dev.local:5000 )
\n\ndotnet new webapp -o .\ndotnet run --urls "http://0.0.0.0:5000" --project .\n
\n\nTraditionally, a major downside of developing in a virtual machine has been synced folders. Because the host machine\n(your desktop) and the guest machine (the virtual machine) are two logically separate operating systems, files on one\nfilesystem are not immediately accessible to the other. This is a challenge if you want to work on your code using your\nfavorite desktop IDE, but the code requires the software and infrastructure of the virtual machine to actually run. The\nmost common solution is using a synced folder, which syncs code from one environment to the other using rsync, NFS,\nsamba, etc.
\n\nUnfortunately, synced folders have some performance penalty, especially on projects that require constance recompilation\n(think most JavaScript frameworks). On the one hand, you could run your code locally on your desktop and mount your\nworking folder to your virtual machine. This is the default vagrant behaviour, and it allows for a speedy IDE experience\nwith code analysis, refactoring, linting, and all the other IDE goodies. Unfortunately, this setup can cause a delay\nbetween the work you're doing and the results you see in the browser.
\n\nAracPac can support the default vagrant behaviour but uses a different approach sometimes called a reverse mount. Here,\nthe Vagrantfile is used to automatically mount the /var/www
directory from the virtual machine to your project\ndirectory on your computer. Though a reverse mount can make some IDE features a little less responsive, there are big\nwins in terms of how quickly your work is displayed in the browser, which makes debugging code and working on features a\nmuch nicer experience.
In addition to using reverse mounts, AracPac comes preinstalled with\nProjector, which is an exciting new project from JetBrains. JetBrains IDEs use\nSwing to draw the GUI. Projector allows Swing GUIs to be rendered over a\nnetwork. The JetBrains IDE is installed and runs server-side, but instead of rendering the GUI on the server, it renders\nit via the Projector application on your desktop. In practice, this feels like you're running the IDE natively and\nmitigates many of the reverse mount penalties. Due to size considerations, only PHPStorm is preinstalled in the virtual\nmachine, but any JetBrains IDE can be installed using the projector CLI inside the virtual machine.
\n\nMailcatcher runs a local mail server and allows you to review mail sent to it from a web browser on your host machine.\nThis can be very useful during development.
\n\nRun Mailcatcher by using a command shell on the guest machine:
\n\nmailcatcher --http-ip 0.0.0.0\n
\n\nMailcatcher will run in the background as a daemon. If you want to route all local mail to port 1025 so Mailcatcher will\ncatch it, just add a line to /etc/postfix/main.cf
:
relayhost = [localhost]:1025\n
\n\nNow use a command shell to send a test message:
\n\necho "Mailcatcher test!" | mail -s "Testing 1, 2 ,3" -r from@email.address to@email.address\n
\n\nFinally, use a web browser on your host machine and review your caught messages at http://dev.local:1080/. messages.
\n\nroot
user with password root
vagrant
user with password vagrant
, passwordless sudo
, and an entry for the vagrant insecure key\nin ~/.ssh/authorized_keys
apache
listening on port 80
and 443
and serving from /var/www
java
8 / 11 / 16 JDKs and JREs (with 11 set as the default)mysql
listening on port 3306
and with root
password root
mongodb
configured to listen on 27017
but disabled by defaultpostgresql
listening on port 5432
and with vagrant
password vagrant
php-xdebug
installed and available on port 9003
but disabled by defaultprojector
installed, with PHPStorm installed as a service (projector_phpstorm
) on port 9999
but\ndisabled by defaultvarnish
configured to listen on 8080
but disabled by defaultnginx
installed but disabled by defaultnfsd
installed and configured with the following\nshare: /var/www *(all_squash,anonuid=1000,anongid=1000,async,crossmnt,insecure,nohide,fsid=9999,rw)
firewalld
installed, enabled, and configured for the stackselinux
configured for all installed packages and servicesdev.crt
and dev.pem
in /etc/ssl
500G
VirtualBox primary disk (useful on larger projects -- most publicly available boxes have 40G
disks)apache
daemon's umask set to 0002
vagrant
user belongs to the apache
group; apache
user belongs to the vagrant
groupacl
atop
bash-completion
byobu
composer
curl
docker-ce
git
golang
htop
iotop
java
maven
memcached
nodejs
ncat
pv
vim
rsync
rustc
sendmail
sqlite
subversion
supervisor
symfony
tree
unzip
vim
wget
zip
This is a Ubuntu 20.04.2 LTS web development box preconfigured with many common tools.
\n\nPhpStorm is installed server-side via JetBrains Projector,\nwhich means much faster indexing with reverse NFS mounts.
\n\nGet a Vagrantfile optimized for this box here.
\n\nroot
user with password root
vagrant
user with password vagrant
, passwordless sudo
, and an entry for the vagrant insecure key in ~/.ssh/authorized_keys
apache
listening on port 80
and 443
and serving from /var/www
mysql
listening on port 3306
and with root
password root
postgresql
listening on port 5432
and with vagrant
password vagrant
php-xdebug
installed and available on port 9003
but disabled by defaultprojector
installed, with PHPStorm installed as a service (projector_phpstorm
) on port 9999
but disabled by defaultvarnish
configured to listen on 8080
but disabled by defaultnginx
installed but disabled by defaultnfsd
installed and configured with the following share: /var/www *(all_squash,anonuid=1000,anongid=1000,async,crossmnt,insecure,nohide,fsid=9999,rw)
firewalld
installed, enabled, and configured for the stackdev.crt
and dev.pem
in /etc/ssl
500G
VirtualBox primary disk (useful on larger projects -- most publicly available boxes have 40G
disks)apache
daemon's umask set to 0002
vagrant
user belongs to the apache
group; apache
user belongs to the vagrant
groupacl
atop
bash-completion
byobu
composer
curl
docker-ce
git
golang
htop
iotop
java
memcached
nodejs
ncat
pv
vim
rsync
rustc
sass
sendmail
supervisor
symfony
tree
unzip
vim
wget
zip
https://github.com/aracpac/aracpac-packer-builds/tree/v1.2.0
\n\nhttps://github.com/aracpac/aracpac-vagrantfiles/blob/v1.2.0/ubuntu20/Vagrantfile
\n\nhttps://github.com/aracpac/aracpac-packer-builds/tree/v1.1.1
\n\nhttps://github.com/aracpac/aracpac-vagrantfiles/blob/v1.1.1/ubuntu20/Vagrantfile
\n\nhttps://github.com/aracpac/aracpac-packer-builds/tree/v1.1.0
\n\nhttps://github.com/aracpac/aracpac-vagrantfiles/blob/v1.1.0/ubuntu20/Vagrantfile
\n\nhttps://github.com/aracpac/aracpac-packer-builds/tree/v1.0
\n\nhttps://github.com/aracpac/aracpac-vagrantfiles/blob/v1.0/ubuntu20/Vagrantfile
\n\nhttps://github.com/aracpac/aracpac-packer-builds/tree/v0.1-beta
\n\nhttps://github.com/aracpac/aracpac-vagrantfiles/blob/v0.1-beta/ubuntu20/Vagrantfile
\n\n