Help us understand the problem. What is going on with this article?

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      |           `-._        _.-'                                           
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away