LoginSignup
4

More than 3 years have passed since last update.

posted at

Pleromaインストールバトル ~GCP無料枠編~

PleromaはActivityPubで連合する分散SNSサーバーです。サーバーはElixirで実装されていて、軽量であることを特徴としています。GCP Always Free で使える、Google Compute Engine の無料枠を使って、Pleroma サーバーを設置してみました。

GCE インスタンスの準備

GCPの無料枠でインスタンスを準備します。今回は、すでに設置していた未使用のGCPインスタンスをサーバーに使うことにしました。

  • インスタンスタイプ: f1-micro
  • リージョン: us-west1
  • イメージ: Debian 10 (debian-10-buster-v20190813)
  • ブートディスク容量: 10GB

無料枠では30GB以内の永続ストレージが使えるので、別途データディスクを追加すると良さそうですが、今回は行いませんでした。

ドメイン名の準備

公開するWebサービスを作るには、ドメイン名が必要です。

私はドメイン名 ryusei.dev を持っていたので、このドメイン名の下で pleroma.ryusei.dev というFQDNを持つサーバーを公開することにしました。

ドメイン名 ryusei.dev を管理する権威DNSサーバーの設定を書き換えて pleroma.ryusei.dev からGCEインスタンスのIPアドレスを引けるようにします。わたしはZEIT DNSを使っていたので、次のようなコマンドで設定しました。

now dns add ryusei.dev pleroma A 35.185.xxx.xxx

Pleroma のインストール

インストールはInstalling on Debian Based Distributionsに沿ってやっていきます。日本語訳のPleromaの入れ方もありますが、手順が少し違っています。私は英語版の手順に沿って進めていきました。

依存パッケージのインストール

依存パッケージをインストールしていきます。wget はインストールされていないので、かわりに curl を使いました。

sudo apt update
sudo apt full-upgrade
sudo apt install git build-essential
curl -o /tmp/erlang-solutions_1.0_all.deb https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
sudo dpkg -i /tmp/erlang-solutions_1.0_all.deb
sudo apt update
sudo apt install elixir erlang-dev erlang-parsetools erlang-xmerl erlang-tools erlang-ssh

ユーザー作成

Pleroma サーバーを動かすユーザー pleroma を作成します。

sudo useradd -r -s /bin/false -m -d /var/lib/pleroma -U pleroma

Pleroma リポジトリのクローン

正規の手順では、以下のように /opt/pleromastable ブランチをクローンしてきます。

sudo mkdir -p /opt/pleroma
sudo chown -R pleroma:pleroma /opt/pleroma
sudo -Hu pleroma git clone -b stable https://git.pleroma.social/pleroma/pleroma /opt/pleroma

しかし、f1-microインスタンスでこのまま作業を進めると、メモリ不足でPleromaビルド時にエラーになってしまいました。そこで、ビルドまではローカル環境上で作業を進めてしまい、ビルド済みのファイルをサーバーに転送する方針にしました。ローカルで同様の環境を準備し、ここまでと同じように、依存パッケージをインストール、ユーザー作成、リポジトリのクローンを行います。私はWSL上のUbuntuで作業を行いました。

Pleroma のビルド

mix deps.get コマンドでElixirの依存パッケージを取得し、mix pleroma.instance genでビルドと設定ファイルの生成を行います。途中でHexrebar3のインストール確認があるので、両方yesと回答します。(このビルドをf1-microインスタンス上で行おうとすると、メモリ不足になります。)あとは、設定ファイルに関する質問があるので、適宜答えていきます。通知用のメールアドレスとか聞かれますが、これも適当に設定しました。後で直します。

cd /opt/pleroma
sudo -Hu pleroma mix deps.get
sudo -Hu pleroma mix pleroma.instance gen

設定ファイルが生成されたら、ファイルを移動し編集します。

cd /opt/pleroma
mv config/generated_config.exs config/prod.secret.exs
vim config/prod.secret.exs

registrations_open オプションをfalseに設定して、他の人の登録ができないようにしておきます。

  registrations_open: false

ここまでやったら /opt/pleroma 以下をtarballに固めて、f1-microインスタンスにコピーします。

PostgreSQL のセットアップ

PostgreSQLをインストール・セットアップします。

sudo apt install postgresql postgresql-contrib
cd /opt/pleroma
sudo -Hu postgres psql -f config/setup_db.psql
sudo -Hu pleroma MIX_ENV=prod mix ecto.migrate

certbot のセットアップ

初回はstandaloneメソッドで証明書を取得します。

sudo apt install certbot
sudo mkdir -p /var/lib/letsencrypt/ # このディレクトリはあとでwebrootメソッド使用時にに使う
sudo certbot certonly --email mandel59@gmail.com -d pleroma.ryusei.dev --standalone

Nginx のセットアップ

Nginxをインストールし、設定ファイルをコピー・編集します。

sudo apt install nginx
sudo cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-available/pleroma.nginx
sudo vim /etc/nginx/sites-available/pleroma.nginx

certbotがHTTP-01メソッドで認証を受けられるように /etc/nginx/sites-available/pleroma.nginxlocation ~ /\.well-known/acme-challenge 以下をアンコメントします。

server {
    server_name    pleroma.ryusei.dev;

    listen         80;
    listen         [::]:80;

    # Uncomment this if you need to use the 'webroot' method with certbot. Make sure
    # that the directory exists and that it is accessible by the webserver. If you followed
    # the guide, you already ran 'mkdir -p /var/lib/letsencrypt' to create the folder.
    # You may need to load this file with the ssl server block commented out, run certbot
    # to get the certificate, and then uncomment it.
    #
    location ~ /\.well-known/acme-challenge {
        root /var/lib/letsencrypt/;
    }
    location / {
      return         301 https://$server_name$request_uri;
    }
}

設定を有効化します。

sudo ln -s /etc/nginx/sites-available/pleroma.nginx /etc/nginx/sites-enabled/pleroma.nginx
sudo systemctl reload nginx

証明書をwebrootメソッドで取得しなおします。(取得しなおさないで、/etc/letsencrypt/renewal/pleroma.ryusei.dev.conf を直接編集してもよいですが、確認のためにも、取得しなおしたほうがいいと思います。)

sudo certbot certonly --email mandel59@gmail.com -d pleroma.ryusei.dev --webroot -w /var/lib/letsencrypt/

rootのcrontabに毎日renewを掛ける設定を書いておき、証明書の期限切れに備えます。

0 0 * * * certbot renew -q --no-self-upgrade --deploy-hook 'systemctl reload nginx'

Pleroma のサービス化

設定ファイルをコピーし、Pleromaをsystemdサービスにします。いちどサービス化してしまえば、他のサービスと同様にsystemctlコマンドでサービスを管理できるようになります。

sudo cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service

Pleromaを有効化・起動します。

sudo systemctl enable --now pleroma.service

Pleroma ユーザー作成

Pleromaが起動した状態で、ユーザーを作成します。

sudo -Hu pleroma MIX_ENV=prod mix pleroma.user new mandel59 mandel59@gmail.com --admin

これで Pleroma のインストールは完了です。

カスタマイズ

docs/config/static_dir.md の記述に従い、priv/static/ 以下のファイルを書き換えて、カスタマイズします。マージコンフリクトが気になる人は instance/static/ に置いてもいいそうですが、どうなんでしょうか? 別ディレクトリに設定を置くのは、動的にマージしているのと同じようなものだし、コンフリクトは手動で解決したほうがいいようにも思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4