もぐてっく

人は1つ歳を取る度、1ビットづつ大きくなれると信じてた。

docker-composeでpleromaを立ち上げた(まだインターネットにはつないでませんが)

顛末

実家(某ておくれたmastodonインスタンス)が炎上(HDDコネクタ)してサービス停止。 めでたくもぐの、家なき子に。

しばらくは駄文のはけ口をTwitterにリダイレクトしてたんだけど、おそらく今回の障害は復旧にめっちゃ時間がかかりそう。どうすっかな。

そうか!自分でインスタンスを立てればいいんだ。

と言うわけで低リソースで定評のあるActivityPub対応 SNSであるPleromaをインストールすることに。 (mastodonはなんか設定しないといけない項目がわんさかあって挫折)

折角なので最近勉強中のdocker-composeで何とかすることにしました。

(なお、実家は予想に反して8/1復活しました。これからどうすっかなこれ。)

ディレクトリ構成

pleroma/
|-- data
|   |-- nginx
|   |   |-- nginx.conf
|   |   `-- ssl
|   |       |-- server.crt
|   |       |-- server.csr
|   |       `-- server.key
|   |-- pleroma
|   |   |-- config
|   |   |   `-- prod.secret.exs
|   |   `-- uploads
|   `-- postgres
`-- docker-compose.yml

./docker-compose.yml

version: "3"

services:
  web:
    image: pandentia/pleroma:latest

    volumes:
      - ./data/pleroma/config/prod.secret.exs:/pleroma/config/prod.secret.exs
      - ./data/pleroma/uploads:/pleroma/uploads/

  db:
    image: postgres:9.6-alpine

    environment:
      POSTGRES_USER: pleroma
      POSTGRES_PASSWORD: pleroma
      POSTGRES_DB: pleroma

    volumes:
      - ./data/postgres:/var/lib/postgresql/data

  reverse-proxy:
    image: nginx:latest

    ports:
      - 443:443

    volumes:
      - ./data/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./data/nginx/ssl/:/etc/nginx/ssl

./data/pleroma/config/prod.secret.exs

use Mix.Config

config :pleroma,
   configurable_from_database: true

config :pleroma, Pleroma.Web.Endpoint,
   url: [host: "ユーザーから見えるホスト名", scheme: "https", port: 443],
   secret_key_base: "※1",
   http: [ip: {0, 0, 0, 0}, port: 4000]

config :pleroma, :instance,
  name: "<your pleroma fqdn>",
  email: "<your email address>",
  limit: 5000,
  registrations_open: true

config :pleroma, :media_proxy,
  enabled: true,
  redirect_on_failure: true

# Configure your database
config :pleroma, Pleroma.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "pleroma",
  password: "pleroma",
  database: "pleroma",
  hostname: "db",
  pool_size: 10

※1 openssl rand -base64 48 で生成した文字列

./data/nginx/nginx.conf

http {
  server {
    listen 443 ssl;
    server_name 192.168.11.167;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location / {
        proxy_pass http://web:4000/;
        proxy_redirect default;
    }
  }
}

events {
  worker_connections 1024;
}

./data/nginx/ssl

以下のサイトの手順でserver.crtとserver.keyを生成。

qiita.com

この時点で一回起動

docker-compose up

pleromaのコンパイルからスタートするのでなかなか時間がかかりますが、最終的に以下の画面が出るようになれば成功です。

f:id:moguno:20200802173143p:plain

管理者ユーザの作成

docker-compose.ymlのあるディレクトリで以下を実行。

docker-compose exec web sh -c "MIX_ENV=prod mix pleroma.user new <username> <your@emailaddress> --admin"

ログインできるようになれば完成です。