about summary refs log tree commit diff
path: root/Vagrantfile
diff options
context:
space:
mode:
authorEffy Elden <git@effy.is>2017-01-07 23:22:24 +1100
committerEffy Elden <git@effy.is>2017-01-07 23:22:24 +1100
commitf1289ca3c0b0a785b47d569e919a345b08136d28 (patch)
tree671f02e1f4285836f0be1e8970d5f13f3d96d8b5 /Vagrantfile
parent989c3f40022bc65d69915be597acda3c4d58de60 (diff)
Add Vagrant development environment support
Diffstat (limited to 'Vagrantfile')
-rw-r--r--Vagrantfile86
1 files changed, 86 insertions, 0 deletions
diff --git a/Vagrantfile b/Vagrantfile
new file mode 100644
index 000000000..dabfd70c8
--- /dev/null
+++ b/Vagrantfile
@@ -0,0 +1,86 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+$script = <<SCRIPT
+cd /vagrant # This is where the host folder/repo is mounted
+
+# Add repo for Ruby 2.3 binaries
+sudo apt-add-repository ppa:brightbox/ruby-ng
+
+# Add repo for NodeJS
+curl -sL https://deb.nodesource.com/setup_4.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
+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
+
+# Add packages to build and run Mastodon
+sudo apt-get install \
+  git-core \
+  ruby-build \
+  libpq-dev \
+  libxml2-dev \
+  libxslt1-dev \
+  imagemagick \
+  nodejs \
+  ruby2.3 \
+  ruby2.3-dev \
+  ruby-switch \
+  redis-server \
+  redis-tools \
+  postgresql \
+  postgresql-contrib \
+  -y
+
+# Set Ruby 2.3 as 'ruby'
+sudo ruby-switch --set ruby2.3
+
+# Configure database
+sudo -u postgres createuser -U postgres vagrant -s
+sudo -u postgres createdb -U postgres mastodon_development
+
+# Install gems and node modules
+sudo gem install bundler
+bundle install
+yarn install
+
+# Build Mastodon
+bundle exec rails db:setup
+bundle exec rails assets:precompile
+
+SCRIPT
+
+VAGRANTFILE_API_VERSION = "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+
+  config.vm.box = "ubuntu/trusty64"
+
+  config.vm.provider :virtualbox do |vb|
+    vb.name = "mastodon"
+    vb.customize ["modifyvm", :id, "--memory", "1024"]
+  end
+
+  config.vm.hostname = "mastodon.dev"
+
+  # This uses the vagrant-hostsupdater plugin, and lets you
+  # access the development site at http://mastodon.dev.
+  # To install:
+  #   $ vagrant plugin install hostsupdater
+  if defined?(VagrantPlugins::HostsUpdater)
+    config.vm.network :private_network, ip: "192.168.42.42"
+    config.hostsupdater.remove_on_suspend = false
+  else
+    # Otherwise, you can access the site at http://localhost:3000
+    config.vm.network :forwarded_port, guest: 80, host: 3000
+  end
+
+  # Full provisioning script, only runs on first 'vagrant up' or with 'vagrant provision'
+  config.vm.provision :shell, inline: $script, privileged: false
+
+  # Start up script, runs on every 'vagrant up'
+  config.vm.provision :shell, inline: "cd /vagrant && rails s -d -b 0.0.0.0", run: 'always', privileged: false
+
+end