Mastodon - Windows10のVagrantで動かしてみる

Mastodonをやってみます。まずはVagrant上で動作させてみて、その後に、GCP上で本番サーバを稼働させるようにしてみたいと思います。使っているPCはWindows10です。

# Mastodonのドキュメント

[Mastodon](https://github.com/tootsuite/mastodon)
[Vagrant guide](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Vagrant-guide.md)
[Development guide](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Development-guide.md)
[Production guide](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md)

# Vagrantで動かす

## 簡単な方法

上記ドキュメントの[ここ](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Vagrant-guide.md)に書いてあるとおり、下記のようにやると簡単にMastdonがVagrant上で動くはずなんだけど、自分のWindows10の環境でやると色々エラーになるので、一からインストールしてみたのが下記です。

```
$ git clone git@github.com:tootsuite/mastodon.git
$ cd mastodon
$ vagrant up
```

## Vagrant初期化

Ubuntu16.04でとりあえずやってみようと思います。必要なのはRails、redis、nginx、postgre、node.jsだそうなので、入れていきます。まずはVagrantを立ち上げます。

```
$ vagrant plugin install sahara
$ vagrant plugin install vagrant-vbox-snapshot
$ vagrant plugin install vagrant-hostsupdater
$ vagrant init ubuntu/xenial64
$ vim Vagrantfile
```

Vagrantfileは下記のようにした。

```Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 3000, host: 9033, host_ip: "127.0.0.1"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "1024"
  end
end
```

## Vagrant立ち上げ

```
$ vagrant up
$ vagrant sandbox on
$ vagrant ssh
```

## 各種インストール

```
$ sudo apt-get update
$ 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'
$ curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
$ sudo apt-get install -y redis-server redis-tools nginx nodejs yarn postgresql-common postgresql postgresql-contrib libpq-dev zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev 
```

## rbenvを使ってrubyをインストール

```
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ exec $SHELL
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
$ exec $SHELL
$ rbenv install 2.4.1
$ rbenv global 2.4.1
$ gem install bundler
$ rbenv rehash
```

## PostgreSQLの設定

```
$ sudo -u postgres createuser ubuntu -s
$ sudo -u postgres createdb -U postgres mastodon_development
```

## Mastdonをインストール

`~/projects/mastodon`にダウンロードすることにする。

```
$ mkdir ~/projects
$ cd ~/projects
$ git clone https://github.com/tootsuite/mastodon.git
$ cd mastodon
$ bundle
$ yarn install
$ bundle exec rails db:setup
$ bundle exec rails assets:precompile
```

## Mastdonを開発サーバで動かしてみる

```
$ bin/rails s -b 0.0.0.0
```

動きました！

![mastodon.png](https://qiita-image-store.s3.amazonaws.com/0/147049/a58476f0-6a41-020b-ce0f-338e9eecd9dd.png)

次は、Vagrant上のNginxで動かしてみます。
とりあえず一旦シェルから出て、sandbox commitをしておきます。

```
$ vagrant sandbox commit
```

Nginxの設定以降は次の投稿にします。

参考：[Setup Ruby On Rails on Ubuntu 16.04 Xenial Xerus](https://gorails.com/setup/ubuntu/16.04)