MastodonをRaspberryPiで立ち上げようとしたお話(失敗)

2017年05月01日

どうもこんにちは。ごっちです。

お休み中で時間がそこそこあるので、いま話題の Mastodon を RaspberryPi で立ち上げようとしてみたお話。

用意したものはこちら

RaspberryPi のインストール方法は割愛します。

っで今回参考にしたサイトがこちら。

Raspberry Pi に mastodon インスタンスを立ち上げてみる(成功)

すでに成功者がいらっしゃるので行けるだろうと思ってました。

ここに書いてある通りに進めてみます。。

Mastodon 前のセットアップ

Docker をインストールしましょう!

$ curl -sSL https://get.docker.com/ | sh
+ sudo -E sh -c sleep 3; apt-get update
.....
+ sudo -E sh -c docker version
Client:
Version:      17.04.0-ce
API version:  1.28
Go version:   go1.7.5
Git commit:   4845c56
Built:        Mon Apr  3 18:22:23 2017
OS/Arch:      linux/arm
Server:
Version:      17.04.0-ce
API version:  1.28 (minimum version 1.12)
Go version:   go1.7.5
Git commit:   4845c56
Built:        Mon Apr  3 18:22:23 2017
OS/Arch:      linux/arm
Experimental: false

If you would like to use Docker as a non-root user, you should now consider

adding your user to the "docker" group with something like:
sudo usermod -aG docker pi

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run

containers which can be used to obtain root privileges on the
docker host.
Refer to [https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface](https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface)
for more information.
$ sudo systemctl start docker
$ sudo usermod -aG docker pi

なんやかんやでうまくやってくれました。

次に、 Docker-Compose をインストール!

$ curl -L https://github.com/docker/compose/releases/download/1.7.1/run.sh > docker-compose
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100   582    0   582    0     0    867      0 --:--:-- --:--:-- --:--:--   867
100  1400  100  1400    0     0    948      0  0:00:01  0:00:01 --:--:--  113k
$ sudo mv docker-compose /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo vi /usr/local/bin/docker-compose
===== IMAGE行を以下に書き換え =====
IMAGE="t0rx/rpi-docker-compose:latest"
===== IMAGE行を以上に書き換え =====
$ docker-compose --version
Unable to find image 't0rx/rpi-docker-compose:latest' locally
latest: Pulling from t0rx/rpi-docker-compose
...

RaspberryPi に Mastodon を入れる!!

clone してきます

$ cd /var/lib/
$ sudo git clone [https://github.com/gilir/rpi-mastdon.git](https://github.com/gilir/rpi-mastdon.git)
Cloning into 'rpi-mastdon'...
...
$ cd rpi-mastodon

初期設定します。

$ sudo cp .env.production.sample .env.production
$ vi .env.production # いい感じに設定ファイルを編集する

試しに起動してみる

けども、いろいろエラーが表示されるので、その指示に従う

$ sudo docker-compose up -d
ERROR: Network proxy-network declared as external, but could not be found. Please create the network manually using `docker network create proxy-network` and try again.
$ sudo docker network create proxy-network
44358820859d1dea3c62175f66c6d6d5c2f8b0a300de8fc41ae11114721298f6
$ sudo docker-compose up -d
ERROR: Volume mastodon_public_assets declared as external, but could not be found. Please create the volume manually using `docker volume create --name=mastodon_public_assets` and try again.
$ sudo docker volume create --name=mastodon_public_assets
mastodon_public_assets
$ sudo docker-compose up -d
ERROR: Volume mastodon_postgres declared as external, but could not be found. Please create the volume manually using `docker volume create --name=mastodon_postgres` and try again.
$ sudo docker volume create --name=mastodon_postgres
mastodon_postgres
$ sudo docker-compose up -d
ERROR: Volume mastodon_public_system declared as external, but could not be found. Please create the volume manually using `docker volume create --name=mastodon_public_system` and try again.
$ sudo docker volume create --name=mastodon_public_system
mastodon_public_system
$ sudo docker-compose up -d
ERROR: Volume mastodon_redis declared as external, but could not be found. Please create the volume manually using `docker volume create --name=mastodon_redis` and try again.
$ sudo docker volume create --name=mastodon_redis
mastodon_radis
$ sudo docker-compose up -d
Pulling redis (armhf/redis:latest)...
latest: Pulling from armhf/redis
...
# もろもろインストールしたりするので、かなり時間がかかるのでゼルダでもやりながら気長に待つ
$

secrets を用意する

.env.production の PAPERCLIP_SECRET SECRET_KEY_BASE OTP_SECRET が設定されていないので生成する。

$ sudo docker-compose run --rm web rake secret
なんか長い文字列1
$ sudo docker-compose run --rm web rake secret
なんか長い文字列2
$ sudo docker-compose run --rm web rake secret
なんか長い文字列3
$ sudo vim .env.production
# PAPERCLIP_SECRET=なんか長い文字列1
# SECRET_KEY_BASE=なんか長い文字列2
# OTP_SECRET=なんか長い文字列3

一回起動しみる

$ sudo docker-compose up -d
Starting rpimastodon_redis_1
Starting rpimastodon_db_1
Recreating rpimastodon_web_1
Recreating rpimastodon_streaming_1
Recreating rpimastodon_sidekiq_1

無事に動いたような気がする!!!

ただ、メモリ不足になりそうだったので、Swap を増やしておく。。

SWAP 領域を用意する

$ sudo docker-compose stop
$ swapon -s
Filename                                Type            Size    Used    Priority
/var/swap                               file            102396  0       -1
$ sudo systemctl stop dphys-swapfile
$ sudo vi /etc/dphys-swapfile
=====
CONF_SWAPSIZE=1024
=====
$ sudo systemctl start dphys-swapfile
(しばらく時間かかる)
$ swapon -s
Filename                                Type            Size    Used    Priority
/var/swap                               file            1048572 0       -1
$ sudo docker-compose up -d

確保できたぞ!!

DB 情報を更新する

いつもの Rails コマンドを実行する

$ sudo docker-compose run --rm web rails db:migrate
Migrating to CreateAccounts (20160220174730)
== 20160220174730 CreateAccounts: migrating ===================================
-- create_table(:accounts, {})
-> 0.4249s
-- add_index(:accounts, [:username, :domain], {:unique=>true})
-> 0.1557s
== 20160220174730 CreateAccounts: migrated (0.6253s) ==========================
...
Migrating to AddLanguageToStatuses (20170414132105)
== 20170414132105 AddLanguageToStatuses: migrating ============================
-- add_column(:statuses, :language, :string, {:null=>false, :default=>"en"})
-> 0.6564s
== 20170414132105 AddLanguageToStatuses: migrated (0.6777s) ===================

なかなか時間がかかったけども、なんとか実行終わり。

Precompile する

$ sudo docker-compose run --rm web rails assets:precompile
I, [2017-04-26T13:02:16.365479 #1]  INFO -- : Writing /mastodon/public/assets/application_public-ff92fbfb31a9056b294415acf2190bf7a5ab47eb875ad7863ec82171915654bc.js
...
I, [2017-04-26T13:06:02.868396 #1]  INFO -- : Writing /mastodon/public/assets/void-767af9b741bc6b218b558bea8a5f430d3275a09756188e1e2eb1845a04bdb828.png
# 時間がかかる上に、なんかここで固まる

おい!そこで固まるんかい!

しょうがないから、いちど電源を落として、起動させて同じコマンドを実行するも、すぐに固まるという。。

ここで 試合終了

このあとやること

nginx をインストールして、おれおれ証明書を発行して、起動させるだけです。ここまでたどり着かなかった。。。

敗因

純粋に RaspberryPi 1 Model B のスペックがいけないような気がするんですよね。

Model B is the higher-spec variant of Raspberry Pi 1 (superseded by Raspberry Pi 2 Model B), with 512 MB of RAM, two USB ports and a 100mb Ethernet port.

メモリ 512MB で Docker を動かすのがいけなかったのかなと思っております。

3, 4 日がんばりましたが、起動しませんでした。ありがとうございました。

References

Originally published at gist.github.com.

追記

Gist からインポートしたけど、ちょっとイケていない感じがありますね。。。とくに、コードの部分が。。。

ProfilePicture

Yuta Goto

フリーランスのソフトウェアエンジニアです。現在はReact.jsを使用したWebフロントエンドの開発やRuby on Railsを使用したサーバサイドの開発を行っています。