# -*- mode: ruby -*-
# vi: set ft=ruby :
+ENV["PORT"] ||= "3000"
+
$provision = <<SCRIPT
cd /vagrant # This is where the host folder/repo is mounted
sudo apt-add-repository 'deb https://dl.yarnpkg.com/debian/ stable main'
# Add repo for NodeJS
-curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -
+curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -
-# Add firewall rule to redirect 80 to 3000 and save
-sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
+# Add firewall rule to redirect 80 to PORT and save
+sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port #{ENV["PORT"]}
echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
sudo apt-get install iptables-persistent -y
redis-tools \
postgresql \
postgresql-contrib \
+ protobuf-compiler \
yarn \
+ libicu-dev \
+ libidn11-dev \
+ libprotobuf-dev \
libreadline-dev \
+ libpam0g-dev \
-y
-# Install rbenv
-git clone https://github.com/rbenv/rbenv.git ~/.rbenv
-cd ~/.rbenv && src/configure && make -C src
-echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
-echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
-
-git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
+# Install rvm
+read RUBY_VERSION < .ruby-version
-export PATH="$HOME/.rbenv/bin::$PATH"
-eval "$(rbenv init -)"
+gpg_command="gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB"
+$($gpg_command)
+if [ $? -ne 0 ];then
+ echo "GPG command failed, This prevented RVM from installing."
+ echo "Retrying once..." && $($gpg_command)
+ if [ $? -ne 0 ];then
+ echo "GPG failed for the second time, please ensure network connectivity."
+ echo "Exiting..." && exit 1
+ fi
+fi
-echo "Compiling Ruby 2.3.1: warning, this takes a while!!!"
-rbenv install 2.3.1
-rbenv global 2.3.1
+curl -sSL https://raw.githubusercontent.com/rvm/rvm/stable/binscripts/rvm-installer | bash -s stable --ruby=$RUBY_VERSION
+source /home/vagrant/.rvm/scripts/rvm
-cd /vagrant
+# Install Ruby
+rvm reinstall ruby-$RUBY_VERSION --disable-binary
# Configure database
sudo -u postgres createuser -U postgres vagrant -s
sudo -u postgres createdb -U postgres mastodon_development
# Install gems and node modules
-gem install bundler
+gem install bundler foreman
bundle install
yarn install
# Build Mastodon
+export $(cat ".env.vagrant" | xargs)
bundle exec rails db:setup
-bundle exec rails assets:precompile
+
+# Configure automatic loading of environment variable
+echo 'export $(cat "/vagrant/.env.vagrant" | xargs)' >> ~/.bash_profile
SCRIPT
$start = <<SCRIPT
-cd /vagrant
-export $(cat ".env.vagrant" | xargs)
-rails s -d -b 0.0.0.0
+echo 'To start server'
+echo ' $ vagrant ssh -c "cd /vagrant && foreman start"'
SCRIPT
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
- config.vm.box = "ubuntu/trusty64"
+ config.vm.box = "ubuntu/xenial64"
config.vm.provider :virtualbox do |vb|
vb.name = "mastodon"
- vb.customize ["modifyvm", :id, "--memory", "1024"]
+ vb.customize ["modifyvm", :id, "--memory", "2048"]
+ # Increase the number of CPUs. Uncomment and adjust to
+ # increase performance
+ # vb.customize ["modifyvm", :id, "--cpus", "3"]
# Disable VirtualBox DNS proxy to skip long-delay IPv6 resolutions.
# https://github.com/mitchellh/vagrant/issues/1172
end
- config.vm.hostname = "mastodon.dev"
-
# This uses the vagrant-hostsupdater plugin, and lets you
- # access the development site at http://mastodon.dev.
+ # access the development site at http://mastodon.local.
+ # If you change it, also change it in .env.vagrant before provisioning
+ # the vagrant server to update the development build.
+ #
# To install:
# $ vagrant plugin install vagrant-hostsupdater
+ config.vm.hostname = "mastodon.local"
+
if defined?(VagrantPlugins::HostsUpdater)
config.vm.network :private_network, ip: "192.168.42.42", nictype: "virtio"
config.hostsupdater.remove_on_suspend = false
end
- config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp']
+ if config.vm.networks.any? { |type, options| type == :private_network }
+ config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp', 'actimeo=1']
+ else
+ config.vm.synced_folder ".", "/vagrant"
+ end
- # Otherwise, you can access the site at http://localhost:3000
- config.vm.network :forwarded_port, guest: 80, host: 3000
+ # Otherwise, you can access the site at http://localhost:3000 and http://localhost:4000 , http://localhost:8080
+ config.vm.network :forwarded_port, guest: 3000, host: 3000
+ config.vm.network :forwarded_port, guest: 4000, host: 4000
+ config.vm.network :forwarded_port, guest: 8080, host: 8080
# Full provisioning script, only runs on first 'vagrant up' or with 'vagrant provision'
config.vm.provision :shell, inline: $provision, privileged: false