Windows10の仮想環境下でMastodonインスタンス設置

#はじめに
普段管理しているインスタンスとは別に、masterの動作を確認するインスタンスがローカル環境で欲しくなり、やってみた。

基本的にはWindows環境下で仮想OSをブートさせて、さらにその上にDockerをインストールしてMastodonインスタンスを構築させてる。
そのため、普通にDocker for Windows 使うより面倒な手順になっている。

その代わり、仮想環境でインスタンスを構築するので他なPCへ移植が容易というメリットもある。

あと、基本的に覚書程度に書いた記事なので詳細が知りたい人はコメントいただければと思います。

```
使用環境：
OS:Windows 10 Pro 32bit
CPU:Intel Core i3 M330
メモリ:4GB

仮想環境:VM ware 6.0
仮想OS：lubuntu 17.04 32bit
仮想メモリ：1.5GB
仮想ハードディスク：20GB
```

# １．まず、lubuntuのイメージをダウンロード

こちらより[DL](http://lubuntu.me/downloads/)できる。
ダウンロードに時間がかかるので、この間に VM ware をインストールしておくと楽かも。


# ２．VM ware のインストール
こちらより[DL](https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_player/6_0)できる。

うちの環境の場合は、32bit だったので、この古いバージョンを使っています。64bit の人は最新のものを使っておけばよいかと。

#３．VM ware に lubuntu 17.04 をインストール

インストールした VM ware を起動。以下、ざっくりとした流れ

1. 「新規仮想マシンの作成」を押して、仮想マシンを構築する。
2. 「インストーラ ディスクイメージ ファイル」を選択して、先ほどダウンロードしたISOイメージを選択。
3. 「ゲストOS」は「Linux」、「バージョン」は「Ubuntu」を選択する。
4. あとはそのまま「次へ」を押すだけ（メモリやディスク容量を変更したい場合は別）

ここまでやった後は、作成した仮想マシンの電源を入れてOSのインストールを行うだけ。

# ４．Mastodon インスタンスの構築

## ①docker関連のインストール他

まず、下記のコマンドを実行して更新をかける。

```
sudo apt update
sudo apt upgrade
```

次に、以下のコマンドで必要なものをインストールする

```
sudo apt install daemon
sudo apt install -y build-essential
sudo apt install git
sudo apt install docker.io
sudo apt install docker-compose
sudo apt install -y libssl-dev libreadline-dev 
```

最後に以下のコマンドで docker アカウントを作成。

```
sudo adduser --ingroup docker docker
```

## ②rbenv にて Ruby 2.4.2 のインストール

こちらの記事を参考にさせていただいた。
[rbenv+ruby-buildを利用してUbuntuにRubyをインストールする](https://qiita.com/itayan/items/e146289f430dffc71360)

まず、以下のコマンドで docker アカウントに切り替え。

```
su - docker
```

その後、rbenv を clone

```
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
```

お次に、ruby-build を clone

```
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

で、.bashrc に追記して、シェルを再起動させる

```
echo 'export PATH="~/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
```

これで rbenv が使えるようになったので Ruby 2.4.2 をインストール。

```
rbenv install 2.4.2 
```

インストール完了後、以下のコマンドで使用する Ruby のバージョンを指定

```
rbenv global 2.4.2
```

## ③Mastodonインスタンス設置

基本的にこちらの記事の通りに進める。
[Mastodonインスタンスをローカルに立てる簡単な手順(Docker環境、SSLなし)](http://l-w-i.net/t/mastodon/init_local_001.txt)

docker アカウントにて作業する。そのため、アカウントを切り替えていない場合は

```
su - docker
```

を実行。

まずは、Mastodonのソースを取ってくる

```
git clone https://github.com/tootsuite/mastodon.git
```

で、ディレクトリを移動して、最新のバージョンにすり合わせる。

```
cd mastodon
git checkout v2.0.0
```

お次は、Docker用の設定ファイルを編集

```
vi docker-compose.yml
```

この時、`db` の項目を下記のように変更する

```
db:
   restart: always
   image: postgres:plpine
```

編集後以下のコマンドを実行

```
cp .env.production.sample .env.production
```

で、

```
docker-compose pull
docker-compose build
```

を実行して待つ。

ビルドが終了したら、以下のコマンドでシークレットキーを作成（×３）

```
docker-compose run --rm web rake secret
```

本番環境用の設定を以下のコマンドで編集

```
vi .env.production
```

作成したシークレットキーを張り付けたりする。詳しくはこちらの記事を参照されたし
[Mastodonインスタンスをローカルに立てる簡単な手順(Docker環境、SSLなし)](http://l-w-i.net/t/mastodon/init_local_001.txt)

で最後にデータベースの初期化とアセットのプリコンパイルを実行

```
 docker-compose run --rm web rails db:migrate
 docker-compose run --rm web rails assets:precompile
```

プリコンパイルが終わったのち、

```
docker-compose up -d
```

で、Mastodonインスタンスが起動する。
なお、現在手元の環境でもう一度構築してるんだけど、荒ぶるゾウさんが表示されているのでなんぞ間違えているかもしれない（分かり次第追記します）

追記：
どうもmasterを参照したままだったのでうまいこと行かなかった模様。
```
git checkout v2.0.0
```
を途中に挟むことでインスタンスが構築されました。

# ５．まとめ

基本的に仮想環境で動かしているので、そんなに実行スピードはよくなかった。
まあ、今後のバージョンアップの際には練習用として役立つんじゃないかと思う。

あと、postgresql の変更が今回のキモなので注意。
これが変更されてないとうまいことインスタンスが構築されなかった。

# 参考記事

[vmware player > ホストが32bitOSの場合 > Player 6 Plusが最後のバージョン](https://qiita.com/7of9/items/a0c3615e51fed18d5b1b)
[rbenv+ruby-buildを利用してUbuntuにRubyをインストールする](https://qiita.com/itayan/items/e146289f430dffc71360)
[Mastodonインスタンスをローカルに立てる簡単な手順(Docker環境、SSLなし)](http://l-w-i.net/t/mastodon/init_local_001.txt)