Amazon Lightsail に Pleroma をインストールしてみた

今回は利用料金が安くなった Amazon Lightsail を使って Pleroma インスタンスを建ててみたいと思います。 ついでに最近利用できるようになった Amazon S3 にメディアを保存する機能も使用します。

自分がやったことを軽くまとめただけなので足りない情報など各自補ってください

TL;DR

  • Amazon Lightsail
    • OS: Ubuntu LTS 16.04.5
  • Amazon S3
    • Static website hosting 有効化すること

Setup

事前に必要なものをインストールしていきます。 ついでにタイムゾーンと言語設定を日本に変更します。

apt update
apt -y dist-upgrade
apt -y autoremove

apt -y install language-pack-ja
update-locale LANG=ja_JP.UTF-8

ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
dpkg-reconfigure --frontend noninteractive tzdata

apt -y install git build-essential openssl ssh sudo

Caddy

今回リバースプロキシには Caddy を使用します。 Caddy は自動的に Let’s Encrypt で HTTPS を使用する HTTP/2 対応のウェブサーバーです。

追記: Caddyはv1です

curl https://getcaddy.com | bash -s personal

chown root:root /usr/local/bin/caddy
chmod 755 /usr/local/bin/caddy
setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

# グループ・ユーザーが存在しない場合のみ実行してください。
# グループ一覧: /etc/group
# ユーザー一覧: /etc/passwd
groupadd --system -g 33 www-data
useradd \
  -g www-data --no-user-group \
  --home-dir /var/www --no-create-home \
  --shell /usr/sbin/nologin \
  --system --uid 33 www-data

# 使用するフォルダを用意します
mkdir -p /etc/caddy
chown -R root:root /etc/caddy
mkdir -p /etc/ssl/caddy
chown -R root:www-data /etc/ssl/caddy
chmod 770 /etc/ssl/caddy

# 設定ファイルを作成します
# domain.tld など実際に使用する環境に合わせて変更してください
cat <<EOL > /etc/caddy/Caddyfile
http:// {
  gzip
  root /var/www/html
}

social.domain.tld {
  gzip

  tls social@domain.tld

  proxy / localhost:4000 {
    websocket
    transparent
  }
}
EOL

# 公開用フォルダを作成します
mkdir -p /var/www/html
cat <<EOL > /var/www/html/index.html
<h1>Hello World!</h1>
EOL
chown -R www-data:www-data /var/www
chmod 555 /var/www

# systemd を設定します
curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service
chown root:root /etc/systemd/system/caddy.service
chmod 644 /etc/systemd/system/caddy.service
systemctl daemon-reload
systemctl start caddy.service
systemctl enable caddy.service

サーバーはこれで用意できるのであとポート設定などは各自調べてください

postgresql

データベースをインストールします。 今回は PostgreSQL 10 を使います。

cat <<EOL > /etc/apt/sources.list.d/pgdg.list
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
EOL

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt update

apt install postgresql-10 postgresql-contrib-10

Elixir/Erlang

Pleroma を実行する Elixir/Erlang をインストールします。

wget -P /tmp/ https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i /tmp/erlang-solutions_1.0_all.deb
apt update

apt -y install elixir erlang-dev erlang-parsetools erlang-xmerl erlang-tools

pleroma

ユーザーを追加しソースコードを git でダウンロードします。

adduser pleroma
usermod -aG sudo pleroma

su pleroma
cd ~
git clone https://git.pleroma.social/pleroma/pleroma
cd pleroma/

依存関係をダウンロードします

mix deps.get

設定ファイルを作成します

# まずは自動生成
mix generate_config
cp config/generated_config.exs config/prod.secret.exs

config/prod.secret.exs を次項のサンプルを例に編集します

vi config/prod.secret.exs

データベースの設定をします

sudo su postgres -c 'psql -f config/setup_db.psql'
MIX_ENV=prod mix ecto.migrate

sample config

見やすいように私は設定の順序を変更してます

use Mix.Config

config :pleroma, Pleroma.Web.Endpoint,
   url: [host: "インスタンスURL", scheme: "https", port: 443],
   secret_key_base: "なんとか"

config :pleroma, Pleroma.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "pleroma",
  password: "なんとか",
  database: "pleroma_dev",
  hostname: "localhost",
  pool_size: 10

config :pleroma, :instance,
  name: "インスタンス名",
  email: "メールアドレス",
  dedupe_media: false,
  limit: 5000,
  registrations_open: true
# limit は文字数制限です
# registrations_open は新規登録するかの設定です

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

# 今回東京リージョンのS3を使います
config :ex_aws, :s3,
  access_key_id: "XXXXXXXXXXXX",
  secret_access_key: "YYYYYYYYYYYYYYYYYYYYY",
  region: "ap-northeast-1",
  scheme: "https://"

config :pleroma, Pleroma.Uploaders.S3,
  bucket: "bucket名",
  public_endpoint: "s3.dualstack.ap-northeast-1.amazonaws.com"

# この部分でアップロード先をS3に変更します
config :pleroma, Pleroma.Upload,
  uploader: Pleroma.Uploaders.S3

# 各機能の有効化します
config :pleroma, :fe,
  show_instance_panel: true,
  scope_options_enabled: true,
  collapse_message_with_subject: true
config :pleroma, :suggestions,
  enabled: true

設定についてはまた今度まとめたいと思います

systemd

systemd を設定します

cp /home/pleroma/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service

/etc/systemd/system/pleroma.serviceEnvironment と書いてる下に Environment="MIX_ENV=prod" を追記します

run systemctl enable --now pleroma.service

補足説明

今回コピペするとすべて用意できるように cat コマンドを使ってファイルを作成してます。

cat <<EOL > 書き込む対象のファイル
ファイルの内容
EOL # 書き込み終了
٩( 'ω' )و がんばるぞい!
Built with Hugo