2017-01-07 13:22:24 +01:00
|
|
|
# -*- mode: ruby -*-
|
|
|
|
# vi: set ft=ruby :
|
|
|
|
|
2017-05-04 04:36:36 +02:00
|
|
|
ENV["PORT"] ||= "3000"
|
|
|
|
|
2017-01-07 15:28:49 +01:00
|
|
|
$provision = <<SCRIPT
|
|
|
|
|
2017-01-07 13:22:24 +01:00
|
|
|
cd /vagrant # This is where the host folder/repo is mounted
|
|
|
|
|
2017-01-08 02:38:04 +01:00
|
|
|
# Add the yarn repo + yarn repo keys
|
|
|
|
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
|
|
|
|
sudo apt-add-repository 'deb https://dl.yarnpkg.com/debian/ stable main'
|
|
|
|
|
2017-01-07 13:22:24 +01:00
|
|
|
# Add repo for NodeJS
|
2017-05-03 16:59:51 +02:00
|
|
|
curl -sL https://deb.nodesource.com/setup_6.x | sudo bash -
|
2017-01-07 13:22:24 +01:00
|
|
|
|
2017-05-04 04:36:36 +02:00
|
|
|
# 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"]}
|
2017-01-07 13:22:24 +01:00
|
|
|
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 \
|
2017-01-12 13:20:55 +01:00
|
|
|
g++ \
|
2017-01-07 13:22:24 +01:00
|
|
|
libpq-dev \
|
|
|
|
libxml2-dev \
|
|
|
|
libxslt1-dev \
|
|
|
|
imagemagick \
|
|
|
|
nodejs \
|
|
|
|
redis-server \
|
|
|
|
redis-tools \
|
|
|
|
postgresql \
|
|
|
|
postgresql-contrib \
|
Use CLD3 (#2949)
Compact Language Detector v3 (CLD3) is the successor of CLD2, which was
used in the previous implementation. CLD3 includes improvements since CLD2,
and supports newer compilers. On the other hand, it has additional
requirements and cld3-ruby, the FFI of CLD3 for Ruby, is still new and may
be still inmature.
Though CLD3 is named after CLD2, it is implemented with a neural network
model, different from the old implementation, which is based on a Naïve
Bayesian classifier.
CLD3 supports newer compilers, such as GCC 6. CLD2 is not compatible with
GCC 6 because it assigns negative values to varibales typed unsigned.
(see internal/cld_generated_cjk_uni_prop_80.cc) The support for GCC 6 and
newer compilers are essential today, when some server operating system
such as Ubuntu Server 16.10 has GCC 6 by default.
On the one hand, CLD3 requires C++11 support. Environments with old
compilers such as Ubuntu Server 14.04 needs to update the system or install
a newer compiler.
CLD3 needs protocol buffers as a new dependency. However,it is not
considered problematic because major server operating systems, CentOS and
Ubuntu Server provide them.
The FFI cld3-ruby was written by me (Akihiko Odaki) for use in Mastodon.
It is still new and may be inmature, but confirmed to pass existing tests.
2017-05-09 19:58:03 +02:00
|
|
|
protobuf-compiler \
|
2017-01-08 02:38:04 +01:00
|
|
|
yarn \
|
Use CLD3 (#2949)
Compact Language Detector v3 (CLD3) is the successor of CLD2, which was
used in the previous implementation. CLD3 includes improvements since CLD2,
and supports newer compilers. On the other hand, it has additional
requirements and cld3-ruby, the FFI of CLD3 for Ruby, is still new and may
be still inmature.
Though CLD3 is named after CLD2, it is implemented with a neural network
model, different from the old implementation, which is based on a Naïve
Bayesian classifier.
CLD3 supports newer compilers, such as GCC 6. CLD2 is not compatible with
GCC 6 because it assigns negative values to varibales typed unsigned.
(see internal/cld_generated_cjk_uni_prop_80.cc) The support for GCC 6 and
newer compilers are essential today, when some server operating system
such as Ubuntu Server 16.10 has GCC 6 by default.
On the one hand, CLD3 requires C++11 support. Environments with old
compilers such as Ubuntu Server 14.04 needs to update the system or install
a newer compiler.
CLD3 needs protocol buffers as a new dependency. However,it is not
considered problematic because major server operating systems, CentOS and
Ubuntu Server provide them.
The FFI cld3-ruby was written by me (Akihiko Odaki) for use in Mastodon.
It is still new and may be inmature, but confirmed to pass existing tests.
2017-05-09 19:58:03 +02:00
|
|
|
libprotobuf-dev \
|
2017-01-12 13:20:55 +01:00
|
|
|
libreadline-dev \
|
2017-01-07 13:22:24 +01:00
|
|
|
-y
|
|
|
|
|
2017-04-23 14:21:20 +02:00
|
|
|
# Install rvm
|
2017-04-21 20:07:47 +02:00
|
|
|
read RUBY_VERSION < .ruby-version
|
2017-04-23 14:21:20 +02:00
|
|
|
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
|
|
|
|
curl -sSL https://get.rvm.io | bash -s stable --ruby=$RUBY_VERSION
|
|
|
|
source /home/vagrant/.rvm/scripts/rvm
|
2017-04-11 15:06:07 +02:00
|
|
|
|
2017-06-22 18:35:27 +02:00
|
|
|
# Install Ruby
|
|
|
|
rvm install ruby-$RUBY_VERSION
|
|
|
|
|
2017-01-07 13:22:24 +01:00
|
|
|
# Configure database
|
|
|
|
sudo -u postgres createuser -U postgres vagrant -s
|
|
|
|
sudo -u postgres createdb -U postgres mastodon_development
|
|
|
|
|
|
|
|
# Install gems and node modules
|
2017-05-04 04:39:50 +02:00
|
|
|
gem install bundler foreman
|
2017-01-07 13:22:24 +01:00
|
|
|
bundle install
|
|
|
|
yarn install
|
|
|
|
|
|
|
|
# Build Mastodon
|
2017-04-23 14:21:09 +02:00
|
|
|
export $(cat ".env.vagrant" | xargs)
|
2017-01-07 13:22:24 +01:00
|
|
|
bundle exec rails db:setup
|
2017-05-04 04:39:50 +02:00
|
|
|
|
|
|
|
# Configure automatic loading of environment variable
|
|
|
|
echo 'export $(cat "/vagrant/.env.vagrant" | xargs)' >> ~/.bash_profile
|
2017-01-07 13:22:24 +01:00
|
|
|
|
|
|
|
SCRIPT
|
|
|
|
|
2017-01-07 15:28:49 +01:00
|
|
|
$start = <<SCRIPT
|
|
|
|
|
2017-05-04 04:39:50 +02:00
|
|
|
echo 'To start server'
|
|
|
|
echo ' $ vagrant ssh -c "cd /vagrant && foreman start"'
|
2017-01-07 15:28:49 +01:00
|
|
|
|
|
|
|
SCRIPT
|
|
|
|
|
2017-01-07 13:22:24 +01:00
|
|
|
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"
|
2017-05-04 04:39:50 +02:00
|
|
|
vb.customize ["modifyvm", :id, "--memory", "2048"]
|
2017-04-06 22:34:59 +02:00
|
|
|
|
|
|
|
# Disable VirtualBox DNS proxy to skip long-delay IPv6 resolutions.
|
|
|
|
# https://github.com/mitchellh/vagrant/issues/1172
|
|
|
|
vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
|
|
|
|
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
|
|
|
|
|
|
|
|
# Use "virtio" network interfaces for better performance.
|
|
|
|
vb.customize ["modifyvm", :id, "--nictype1", "virtio"]
|
|
|
|
vb.customize ["modifyvm", :id, "--nictype2", "virtio"]
|
|
|
|
|
2017-01-07 13:22:24 +01:00
|
|
|
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:
|
2017-04-06 22:34:59 +02:00
|
|
|
# $ vagrant plugin install vagrant-hostsupdater
|
2017-01-07 13:22:24 +01:00
|
|
|
if defined?(VagrantPlugins::HostsUpdater)
|
2017-04-06 22:34:59 +02:00
|
|
|
config.vm.network :private_network, ip: "192.168.42.42", nictype: "virtio"
|
2017-01-07 13:22:24 +01:00
|
|
|
config.hostsupdater.remove_on_suspend = false
|
|
|
|
end
|
|
|
|
|
2017-04-17 10:40:14 +02:00
|
|
|
if config.vm.networks.any? { |type, options| type == :private_network }
|
|
|
|
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp']
|
|
|
|
else
|
|
|
|
config.vm.synced_folder ".", "/vagrant"
|
|
|
|
end
|
2017-04-05 20:53:39 +02:00
|
|
|
|
2017-05-04 04:39:50 +02:00
|
|
|
# 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
|
2017-01-07 15:28:49 +01:00
|
|
|
|
2017-01-07 13:22:24 +01:00
|
|
|
# Full provisioning script, only runs on first 'vagrant up' or with 'vagrant provision'
|
2017-01-07 15:28:49 +01:00
|
|
|
config.vm.provision :shell, inline: $provision, privileged: false
|
2017-01-07 13:22:24 +01:00
|
|
|
|
|
|
|
# Start up script, runs on every 'vagrant up'
|
2017-01-07 15:28:49 +01:00
|
|
|
config.vm.provision :shell, inline: $start, run: 'always', privileged: false
|
2017-01-07 13:22:24 +01:00
|
|
|
|
|
|
|
end
|