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

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

お休み中で時間がそこそこあるので、いま話題の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
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
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.productionPAPERCLIP_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からインポートしたけど、ちょっとイケていない感じがありますね。。。とくに、コードの部分が。。。