AWSのEC2で最小限の努力でmastodonを構築する

More than 1 year has passed since last update.


  • mastodonをとりあえず動かした時のメモ

  • 今回はAWSというよりミドルより上寄りの話なのでEC2内というかubuntuの話しかしません


mastodonとは


前提条件


  • AWSのアカウント

  • SESの制限解除をしておくと楽


    • アカウント承認用のメールサーバーは含まれてないので外部か自分でpostfix上げるなり何なりする必要がある

    • SESの横着した使い方はまた今度




流れ


  • EC2を上げる(ubuntuを想定)

  • gitでもzipファイルの転送でもなんでもいいのでソースをインスタンスに乗せる

  • dockerとdocker-composeをいれる

  • postfix でも SES でもなんでもいいのでSMTPのサーバーを上げる

  • 設定ファイルを書く

  • docker-compose up

  • 以上


理想


  • 贅沢にいこう

    risou.jpg


現実(このページの範囲)


  • とりあえず動かそう

    新規キャンバス.jpg


手順


  • 殆どgithubに書いてある https://github.com/tootsuite/mastodon

  • EC2インスタンスをあげる
    ec2.jpg

  • t2.nanoとかt2.microだとメモリと容量が足りない疑惑があるので、スワップの設定をした方がいいかも



スワップファイルを作るんじゃ.sh

sudo fallocate -l 4G /swapfile

sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab


最新版にするんじゃ.sh

sudo apt-get update

sudo apt-get upgrade


必要なパッケージを入れるんじゃ.sh

sudo apt-get install -y python3-pip unzip docker.io

sudo pip3 install docker-compose #pipでdocker-composeを入れないとyml読み込むときにエラーを吐く


mastodonのパッケージを適当な場所にバラすんじゃ.sh

unzip mastodon-master.zip

cd mastodon-master


  • とりあえず動かす為に必要なファイルは


    • env.production




もともとソースに入ってるsampleファイルをコピーして作成


env.productionを作るんじゃ.sh

cp .env.production.sample .env.production



env.production

# Service dependencies この項目はDockerを使うなら触らない

REDIS_HOST=redis
REDIS_PORT=6379
DB_HOST=db
DB_USER=postgres
DB_NAME=postgres
DB_PASS=
DB_PORT=5432

# Federation くせもの
LOCAL_DOMAIN=<自分のドメイン.com>
LOCAL_HTTPS=false #とりあえずfalseで

# Application secrets 後述
# Generate each with the `rake secret` task (`docker-compose run --rm web rake secret` if you use docker compose)
PAPERCLIP_SECRET=
SECRET_KEY_BASE=
OTP_SECRET=

# Optionally change default language
# DEFAULT_LOCALE=de
DEFAULT_LOCALE=ja

# E-mail configuration
# Note: Mailgun and SparkPost (https://sparkpo.st/smtp) each have good free tiers
SMTP_SERVER=<任意のメールサーバー SESなら email-smtp.us-east-1.amazonaws.com とか>
SMTP_PORT=587
SMTP_LOGIN=<ログインID>
SMTP_PASSWORD=<パス>
SMTP_FROM_ADDRESS=<送信元アドレス@自分のドメインとか.com>
#SMTP_DELIVERY_METHOD=smtp # delivery method can also be sendmail
#SMTP_AUTH_METHOD=plain
#SMTP_OPENSSL_VERIFY_MODE=peer
#SMTP_ENABLE_STARTTLS_AUTO=true

##### S3 とかの設定はまたこんど



  • PAPERCLIP_SECRET=

  • SECRET_KEY_BASE=

  • OTP_SECRET=

    は後で書くのでとりあえずビルドする


sudo docker-compose build

自分みたいにセコく使ってる t2.nano だとメモリが足りなくてビルドができないので最初のswapの設定とかをしましょうね

t2.nanoだと5分くらいかかるので待ちましょう

お金持ちは時間を金で買ってください

ちなみにこの手順だと sudo しないとdockerをちゃんと読んでくれません

さっきの3つの項目の鍵を生成する

sudo docker-compose run --rm web rake secret

を三回やって、さっきの設定ファイルに


env.production

PAPERCLIP_SECRET=592859d9exsuggoinagaimojiretudayo8d792a37c1cb14b2c1124nagainagai08afba854bf702aa90aa6da21595c53534ec5f2748f8c06f14227842004314a91

SECRET_KEY_BASE=d792a37c1cb14b2c1sakkitohachigausuggoinagaimojiretudayo8124nagainagai08afba854bf702aa90aa6da21595c53534ec5f2748f8004314a91c06f14227842
OTP_SECRET=14b2c1124koremosakkitochigausuggoinagaimojiretudayo8d792a37c1cbnagainagai08afba854bf702aa90aa6da21595c5306f14227842004314a91534ec5f2748f8c

みたいな感じに書きます

あとはDBとかの初期設定ですね


初期設定じゃ.sh

sudo docker-compose run --rm web rails db:migrate

sudo docker-compose run --rm web rails assets:precompile


起動

sudo docker-compose up

でログとかを見れる状態で

sudo docker-compose up -d

でデーモンでうごいてくれます

あとは

http://localhost:3000/

とか

http://<自ドメイン>:3000/

にアクセスすれば見れます

(セキュリティグループの 3000 ポートはあけておくこと)


管理者の登録

ユーザーを管理者にするときは

sudo docker-compose run --rm web rails mastodon:make_admin USERNAME=<ユーザー名>

って感じで登録してやってください

http://<さっきつくったmastodonのURL>/admin/settings

で管理者用の設定ができます(ページ名とか説明とか)


なんか動かないときは


  • もう一回これをやる


初期設定じゃ.sh

sudo docker-compose run --rm web rails db:migrate

sudo docker-compose run --rm web rails assets:precompile


その他


  • 3000にリダイレクトするのが面倒なのでELBを前に置くと楽

  • ハマりどころとしては、


    • https -> ELB -> http -> EC2 とした場合、ユーザー承認メールが https://のリンクになってくれない事ですかね



全然関係ないけどこういうの好き

redis_1      |                 _._                                                  

redis_1 | _.-``__ ''-._
redis_1 | _.-`` `. `_. ''-._ Redis 3.2.8 (00000000/0) 64 bit
redis_1 | .-`` .-```. ```\/ _.,_ ''-._
redis_1 | ( ' , .-` | `, ) Running in standalone mode
redis_1 | |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
redis_1 | | `-._ `._ / _.-' | PID: 1
redis_1 | `-._ `-._ `-./ _.-' _.-'
redis_1 | |`-._`-._ `-.__.-' _.-'_.-'|
redis_1 | | `-._`-._ _.-'_.-' | http://redis.io
redis_1 | `-._ `-._`-.__.-'_.-' _.-'
redis_1 | |`-._`-._ `-.__.-' _.-'_.-'|
redis_1 | | `-._`-._ _.-'_.-' |
redis_1 | `-._ `-._`-.__.-'_.-' _.-'
redis_1 | `-._ `-.__.-' _.-'
redis_1 | `-._ _.-'