https://github.com/tootsuite/mastodon

Mastodonのインスタンスを立ててみた - めも.net
基本はこれを参考に。

t2.mediumで20GB、セキュリティグループは80と443を開けた。

変えたのは、

  • Gitのcloneはsshじゃなくhttpsでやった
  • SECRETはそれぞれ別にした(READMEにDo this once for each of those keysって書いてあったので)

Dockerが実行できない?

$ docker-compose run --rm web rake secret
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

$ 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:07:42 2017
 OS/Arch:      linux/amd64
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.28/version: dial unix /var/run/docker.sock: connect: permission denied

service docker restartしても駄目で、SSHログインし直したら行けた。

S3

↓のようなインラインポリシーを持ったユーザーを作成

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt12345",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::バケット名",
                "arn:aws:s3:::バケット名/*"
            ]
        }
    ]
}

設定はSSLで運用しているmastodonとS3の連携のハマりどころ - Qiitaを参考に。

SES

SMTP_SERVER=email-smtp.us-east-1.amazonaws.com
SMTP_PORT=587
SMTP_LOGIN=****
SMTP_PASSWORD=****
SMTP_FROM_ADDRESS=notifications@ドメイン

LOGINPASSWORDCreate My SMTP Credentialsから作ったもの。(API経由で送るんじゃないのでSMTP専用のが必要)

PostgreSQL、Redisの永続化

docker-compose.ymlをアンコメント。

参考:今何かと話題のマストドン(mastodon)鯖を自分用に無料で立てる方法 - jtwp470’s blog

永続化設定の前にupしちゃうと…

$ docker-compose up -d 
Recreating mastodon_db_1
Recreating mastodon_redis_1
WARNING: Service "redis" is using volume "/data" from the previous container. Host mapping "/path/to/mastodon/redis" has no effect. Remove the existing containers (with `docker-compose rm redis`) to use the host volume mapping.
WARNING: Service "db" is using volume "/var/lib/postgresql/data" from the previous container. Host mapping "/path/to/mastodon/postgres" has no effect. Remove the existing containers (with `docker-compose rm db`) to use the host volume mapping.
Creating mastodon_web_1
Creating mastodon_sidekiq_1
Creating mastodon_streaming_1
$ docker-compose stop redis
$ docker-compose rm redis
$ docker-compose stop db
$ docker-compose rm db

データ作成する前だったので普通にやりなおした。

リダイレクト先が見つかりませんでした

リモートフォローができず。

ログを見ると、webfingerが404。
https://github.com/tootsuite/mastodon/blob/aa9079838648e9656a1bf8d10151713686e1c0dd/app/lib/webfinger_resource.rb#L64
ここでfalseになってそう。
LOCAL_DOMAINのタイポに気づく…。

デバッグ

とりあえず、

  • ログレベル買える
  • -dせずにup

すれば行けた。

証明書の自動更新とかやらないとな。

Let's Encrypt

地味に初めましてだった。

# 初回の取得
# この時点ではnginxがデフォルトの場所で起動してたのでいけた。
$ ./letsencrypt-auto certonly --webroot -w /var/www/html/ -d ドメイン

# 更新
# もはや/var/www/htmlでは動いてないのでこける
$ ./letsencrypt-auto renew --force-renewal --dry-run 

# コレなら行けた
$ /path/to/letsencrypt/certbot-auto certonly --webroot -w /path/to/mastodon/public -d ドメイン --renew-by-default --dry-run && service nginx reload

# その後はコレも通るようになった
$ ./letsencrypt-auto renew --force-renewal --dry-run 
0 0 1 * * /path/to/letsencrypt/certbot-auto certonly --webroot -w /path/to/mastodon/public -d ドメイン --renew-by-default && service nginx reload

ひとまずこれでCronに設定。