https://nixeneko.infoにPleromaのおひとり様インスタンスを立ててみた。
Mastodon等やっている方は、よければ@nixeneko@nixeneko.infoをリモートフォローしてください。
(※20181227追記: この記事は古くなってるので、多分今はそのまま使えません。)
概要
Pleromaという、GNU SocialやMastodon互換のマイクロブログSNSソフトウェアがある。機能としてはTwitterに近い。
これは自分でサーバを用意して動かす(インスタンスを立てる)こともでき、インスタンスが異なっても互いにフォローできる*1ので、自分専用のインスタンスとして使っても問題ない。
Twitterという一企業のサービスに依存しないのも良いなあと思って、VPSを借りて立ててみた。
以降は2018/3/6に作業したログという感じなので、まとまっていないし、現在では変わっている部分もあるかもしれない。
実際に立ててみたい場合には、Pleroma公式Wikiのインストールガイドや次のページなどを参照するとよいと思う。
下準備
作業ログ(2018/3/6)
初期設定
上のページを参考にサーバの初期設定を行った。
rootでSSHでログインして(公開鍵を設定してない場合はConoHaのコンソールから作業することになると思う)、ソフトウェアを更新する。
apt update apt upgrade
と更新したら、設定がリポジトリでインストールしたデフォルトから変更されてるよって言われて置き換えるか聞かれたが、/etc/cloud/cloud.cfgはそのまま残した(これは初回起動時に実行されるものらしいので、たぶんどっちでもよい)。
作業ユーザの追加
rootユーザで
adduser workuser
gpasswd -a workuser sudo
とし、作業ユーザを追加しsudoできるようにした。
su workuser
rootから作業ユーザに切り替える。
sudo: unable to resolve host回避
その後、sudoする度に“sudo: unable to resolve host (ホスト名)”と表示されるので、/etc/hostsに
127.0.1.1 (ホスト名)
を追記したら表示されなくなった。
参考: sudo: unable to resolve host が表示されたら - Qiita
作業ユーザへのSSH公開鍵の設定
cd ~ mkdir .ssh chmod 700 .ssh cd .ssh touch authorized_keys chmod 600 authorized_keys nano authorized_keys
authorized_keysにローカルで作成した公開鍵をペーストし保存した。
sshdの設定
sudo nano /etc/ssh/sshd_config
/etc/ssh/sshd_configを開き、ルートログイン禁止とsshのポートの変更を行った。
ルートログイン禁止:
PermitRootLogin no
SSHポートの変更:
Port 10022
以上のように書き換え(sudo sshd -tで構文チェックができる)、sshdを再起動。
sudo service sshd restart
rootユーザに対して追加されていた公開鍵を消す
sudo su root
rm ~/.ssh/ authorized_keys
設定が済んだら作業用ユーザでログインし直す(ポートも変更したものに合わせる)
Pleromaのインストール
公式のWikiに載ってるのに従ってやっていく。
PostgreSQL 9.6のインストール
9.6以上のバージョンが標準リポジトリにないので、PostgreSQLの公式ページに従ってインストールする。
sudo nano /etc/apt/sources.list.d/pgdg.list
以下を書いて保存する。
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
その後、次のコマンドを実行してインストールする。
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt update sudo apt install postgresql-9.6 postgresql-contrib-9.6
Elixir 1.5+
参照: Installing Elixir - Elixir
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
他に必要なものをインストール
他の必要なパッケージをインストールする。
sudo apt install erlang-dev erlang-parsetools erlang-xmerl git build-essential nginx
ユーザ作成
sudo adduser pleroma
sudo usermod -aG sudo pleroma
su pleroma
ソースコードを持ってきて必要なプログラムをインストールしたり設定をする
cd ~ git clone https://git.pleroma.social/pleroma/pleroma cd pleroma mix deps.get
Hexをインストールするか聞かれたらyを入力。
設定ファイルを作成
mix generate_config
rebar3をインストールするか聞かれるのでy。
他にも、ドメイン名、インスタンス名、adminのEメールアドレスを入力する。
mediaproxyを有効にするか聞かれ、nとした。
作成された設定ファイルをリネームする。
mv config/generated_config.exs config/prod.secret.exs
データベースの作成・マイグレーション
sudo su postgres -c 'psql -f config/setup_db.psql' MIX_ENV=prod mix ecto.migrate
起動テスト
MIX_ENV=prod mix phx.server
これで起動するが確かめたらCtrl-Cで停止する。
SSL証明書取得
Let's EncryptでSSL証明書を取得する。(ここらへんよくわかってない)
sudo add-apt-repository ppa:certbot/certbot sudo apt update sudo apt install python-certbot-nginx sudo certbot certonly -d (ドメイン名)
すると色々聞かれるので入力すると、 /etc/letsencrypt/live/(ドメイン名)/ 以下に証明書が生成された。
(Pleromaのサイトによると証明書の取得についてより先にnginxの設定がきているので、その順番でやっていたが、certbot --nginxというふうに証明書を取得しようとしたところ、nginxの設定で指定されている証明書がないよ、とエラーが出て動かせなかった。最初は--standaloneで証明書取得を行った方が楽かもしれない)
nginxの設定
設定ファイルをコピーし、設定を変更する。
sudo cp /home/pleroma/pleroma/installation/pleroma.nginx /etc/nginx/sites-enabled/pleroma.nginx sudo nano /etc/nginx/sites-enabled/pleroma.nginx
サーバのドメインを指定し、cert pathsも取得した証明書にあわせて修正する。
sudo systemctl restart nginx.service
サービスの設定
sudo cp /home/pleroma/pleroma/installation/pleroma.service /lib/systemd/system/pleroma.service sudo nano /lib/systemd/system/pleroma.service
/lib/systemd/system/pleroma.serviceを開き、[Service]のところに
Environment="MIX_ENV=prod"
を書き加える。
sudo systemctl start pleroma.service
サービスを起動する。
自分用のアカウントを作る
設定したドメインにアクセスし、自分で使うためのPleromaのユーザを作成する。
登録の停止
nano ~/pleroma/config/prod.secret.exs
を編集し
limit: 400, registrations_open: false
に変更して登録を停止した。またついでに投稿辺りの文字数の上限を何となく400文字とした。
設定の反映・自動起動設定
再起動してPleromaの設定を反映
sudo systemctl restart pleroma.service
Pleromaのサービスを自動起動するように設定
sudo systemctl enable pleroma.service
iptablesの設定
firewall有効化
sudo ufw enable
Ubuntuのファイアウォールはデフォルトでufwなのであるが、iptablesの方が設定ファイルの流用がしやすいのでiptables使って設定ファイルを編集した。ufwコマンドで設定する方が筋がいいかもしれない。
このサイトの記述を元に設定を書いたテキストファイル(~/iptables)を作成する。sshのポートをsshd_configで設定したものに合わせて変える。(最終的に、http, https, sshの接続を許可した)
設定を反映し、永続化させる。
sudo iptables-restore < ~/iptables
sudo apt install iptables-persistent
ここで、iptablesの設定の反映は次のコマンドでできるっぽい。
sudo /etc/init.d/iptables-persistent save
let'sencryptの自動更新
/usr/bin/certbot renew --post-hook "service httpd restart"
を動かしてみてちゃんと動くか確認する。(証明書取得してすぐだと更新されないが、Cert not yet due for renewalと出れば問題ない)
cronに更新用のコマンドを設定する。
sudo nano /etc/cron.d/letsencrypt
で開き、内容は次のようにする。これは毎週火曜日16時33分に発動する設定になっている。
33 16 * * 2 root /usr/bin/certbot renew --post-hook "service httpd restart"
参考: Let's Encryptを使ってSSL証明書を自動更新する(AWS/Amazon Linux/Apache) - Qiita
こまごまとした設定
Instance specific panelの表示
nano ~/pleroma/priv/static/static/config.json
で
"showInstanceSpecificPanel": true
のようにtrueに変更する。
Instance specific panelの内容の設定は~/pleroma/priv/static/instance/panel.htmlを弄るとできる。
nano ~/pleroma/priv/static/instance/panel.html
として開いて、適当に書き換える。
インスタンスのサムネイル画像の差し替え
また、 ~/pleroma/priv/static/instance/thumbnail.jpeg を置き換えると、 Pleroma Instances などで表示されるアイコンが、デフォルトの暗灰色にπλήρωμαの文字の画像から変更できる。
ロゴの変更
ロゴ、つまりブラウザでPleromaを開いたとき上部真ん中に表示される画像が標準で ~/pleroma/priv/static/static/logo.png となっているので、これを入れ替えるとPleromaフロントエンドの真ん中上部に表示される画像を変更できる。
なお、ロゴ画像ファイルの位置は ~/pleroma/priv/static/static/config.json で指定されている。
チャットの削除
チャットはお一人様インスタンスでは意味がないので消す。 ~/pleroma/config/prod.secret.exs を開き、
nano ~/pleroma/config/prod.secret.exs
次の内容を最後に書き加える。
config :pleroma, :chat, enabled: false
設定が終わったらPleromaを再起動する。
sudo systemctl restart pleroma.service
Pleroma最新版への更新(2018/3/17)
2018/3/8あたりでPleromaにActivityPubによるfederationが追加された。私がインストールしたのは3/6なので更新したが、やや面倒だった。更新でなくて一から入れ直すのであれば必要ない手順だと思う。
Pleromaの更新
このページに書かれているように、Pleromaのサービスを止め、最新版のコードにし、マイグレーションを行った。
sudo systemctl stop pleroma.service cd ~/pleroma/ git pull MIX_ENV=prod mix ecto.migrate
Nginxの設定を変える
に従って、
sudo nano /etc/nginx/sites-enabled/pleroma.nginx
と /etc/nginx/sites-enabled/pleroma.nginx に次のように書き加える。
proxy_set_header Host $http_host;
ActivityPub対応
に従って
MIX_ENV=prod mix deps.clean --build mime
を実行し、NginxとPleromaを再起動する。
sudo systemctl restart nginx.service sudo systemctl restart pleroma.service