PleromaをGoogle Cloud Platformで建ててみた

#はじめに

普段は[Creatodon](https://gamelinks007.net)というMastodon インスタンスの管理人をしています。

趣味的な好奇心と、Google Cloud Platform の無料分がかなり余っている状況だったので、Pleromaのサーバを建ててみた。

本記事では、Pleroma を Google Cloud Platform 上で建てるまでの手順を解説します。

#必要なもの

- Google Cloud Platform のアカウント(GoogleのアカウントがあればOK)
- お名前.com のアカウント
- クレジットカード(GCPやお名前.comでドメイン購入に必要)
- 取得したドメイン

# サーバ構築手順

基本的には、ておりあ氏の[この記事](https://theoria24.github.io/install-pleroma-to-ubuntu/)をもとにすすめていく。

## VMインスタンスの作成
まず、GCPのコンソールでProjectを作成する。次に、Computer Engine でVMインスタンスを作成。

OSは Ubuntu 16.04 LTS を使用します。

それと、HTTPとHTTPSのトラフィック許可にチェックを入れておいてください。

最後に「作成」をクリックすることでVMインスタンスが作成されます。

## DNSなどの設定。

下記の記事の「Cloud DNSの設定」を参照して設定しました。

[GCE（Google Compute Engine）で独自ドメインを設定する](https://www.compiere-distribution-lab.net/idempiere-lab/install-advance/google-cloud-dns/)

此方の記事通りにすればDNSの設定はOKです。

## Pleromaの構築

作成したVMインスタンスをSSHで開いてやり、Pleromaの環境を構築していきます。

まず、下記のコマンドを実行してアップデートをかけておきます。

```
sudo apt update && sudo apt dist-upgrade
```

次に、postgres-9.6以外の必要なものをインストールします

```
sudo apt install git build-essential openssl ssh sudo letsencrypt 
```

インストール完了後、以下のコマンドを実行して postgres-9.6 をインストールします。

```
sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install postgresql-9.6
```

これで、postgres-9.6 がインストールされます。

ここまで作業を進めてきた辺りでSSL証明を取得します(DNS周りのエラーが表示されたら飛ばしてください。あとでまた実行するとOKです)

```
letsencrypt certonly --standalone -d example.com(任意の独自ドメイン)
```

次に、Elixir/Erlang をインストールします。

```
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt update
sudo apt install elixir erlang-dev erlang-parsetools erlang-xmerl
```

インストール完了後、Pleromaユーザーの追加&sudoの有効化を行います。

```
sudo adduser pleroma
sudo usermod -aG sudo pleroma
```

ユーザーを切り替えて、Pleromaのソースコードをcloneします。

```
su - pleroma
git clone https://git.pleroma.social/pleroma/pleroma.git
```

pleromaへ移動し、必要な依存関係を取得します。

```
cd pleroma
mix deps.get
```

次に、設定ファイルを作成

```
mix generate_config
```

ドメインなどを聞かれますので随時入力してください。

その後、以下のコマンドを実行していきます。

```
mv config/{generated_config.exs,prod.secret.exs}
sudo su postgres -c 'psql -f config/setup_db.psql'
MIX_ENV=prod mix ecto.migrate
```

これで Pleromaユーザーでの作業は完了です。
exit して rootユーザーへ戻ります。

```
exit
```

rootに戻ったら、nginxをインストールします

```
sudo apt install nginx
```

次に、Pleromaのソースコード内にあるテンプレートを使って、nginxの設定を記述します
単に、example.tldを取得したドメインに変更するだけです。

```
sudo cp /home/pleroma/pleroma/installation/pleroma.nginx /etc/nginx/sites-enabled/pleroma.nginx
sudo vi /etc/nginx/sites-enabled/pleroma.nginx
```

変更が終わったら、nginxを再起動します。

```
sudo systemctl restart nginx.service
```

最後に、Pleromaのサービス化を行います。

こちらもテンプレートを編集し、使用します。

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

コピー後、以下のコマンドで編集します。

```
vi /etc/systemd/system/pleroma.service
```

Environment="HOME=/home/pleroma"　と書いてある箇所を

```
Environment="MIX_ENV=prod"
```

このように変更します。

後は、以下のコマンドを実行すれば、OKです。

```
sudo systemctl enable --now pleroma.service
sudo systemctl start pleroma.service
```

#終わりに

今現在、GCPの一番スペックの低いVMインスタンスで運用していますが中々に快適です。
他なMastodonやPleromaともやり取りができるので、ちょっと腕試しにお一人様インスタンスを立てたいという方にはPleromaはオススメかもしれませんね

#追記

PleromaをGCP上でほぼ一発で構築できるShell書いた

https://github.com/S-H-GAMELINKS/Pleroma.Start.Script.for.GoogleCloudPlatform

#参考記事など

[ubuntuにpleromaを入れてなんとなく動かす](https://theoria24.github.io/install-pleroma-to-ubuntu/)

[Ubuntu16.04にPostgreSQLをインストール](https://qiita.com/eighty8/items/82063beab09ab9e41692)

[GCE（Google Compute Engine）で独自ドメインを設定する](https://www.compiere-distribution-lab.net/idempiere-lab/install-advance/google-cloud-dns/)