groundpolisインスタンス構築手順メモ (2022/05/01)(Misskey用注釈2023/06)

raspberry pi 400でインストールをやり直した結果、だいたい手順が分かったかもしれません。
自分のメモのためにシステムの初期化から一通り?書いてます。どなたかの参考になれば幸いです。

元ネタ:公式

○ 環境

ハードウエア raspberry pi 400 + microSD(32G以上推奨)※1
システム ubuntu server 64bit 22.04 LTS(Raspberry pi ImagerからmicroSDに焼いたもの)
Groundpolis Version 14.18.2


前準備(このあたりは、私的なメモとして入れてるだけなので、各自の環境や好みに合わせて)
○ 権限とか(私はrootのパスワードを設定してsudoはあまり使わない)
(今は無きcent osを使っていた人だから・・。)

$sudo passwd root
:

#adduser groundpolis

以下、行の頭に#がある行は、#より後がroot権限で打っているコマンド
$がある行は、$より後ろがユーザ(groundpolis)権限で打っているコマンドです
sudoでやる人は#の行は"sudo "を付けて、#より後の部分を打ってください

○ ipアドレスの固定(別サーバーの逆プロキシーだからうちでは必須)

#cd /etc/netplan
#mv 50-cloud-init.yaml 50-cloud-init.yaml.disabled
#cp 50-cloud-init.yaml.disabled 99-netcfg.yaml
#vi 99-netcfg.yaml
-----------
network:
ethernets:
eth0:
dhcp4: false
dhcp6: false
addresses: [192.168.xx.xx/24]
nameservers:
addresses: [192.168.xx.xx]
search: []
routes:
- to: default
via: 192.168.xx.xx
optional: true
version: 2
-----------

#netplan apply


○ /tempをramdiskに
#vi /etc/fstab
以下を追加
-----------
tmpfs /tmp tmpfs defaults,size=256m,noatime,mode=1777 0 0
-----------



 このあたりからがgroudpolis関連

0) 基本ツール

#apt update
#apt upgrade
#apt install build-essential

1) node

#apt install npm
#npm install n -g
#n 14.18.2
#ln -sf /usr/local/bin/node /usr/bin/node
#node -v
v14.18.2

他のバージョンでも良いのでしょうけど、良くわからないので動いてるバージョンを指定。※2

今のmisskeyだと18.16.x以上
# n lts
とか
# n latest

2) PostgreSQL

#wget https://salsa.debian.org/postgresql/postgresql-common/raw/master/pgdg/apt.postgresql.org.sh
#sh apt.postgresql.org.sh -i -v 13
#systemctl status postgresql
   :    Active: active since ・・・
(確認したら :q で抜ける)

今のmisskeyだと15以上が必要
入れ方は……


認証をmd5では無く平文パスワードにしないとうまく行きませんでした。なので・・
#vi /etc/postgresql/13/main/pg_hba.conf

-host all all 127.0.0.1/32 md5
+host all all 127.0.0.1/32 password

#systemctl restart postgresql

ローカルからの接続のみなら平文パスワードでも問題無い・・でしょう。
それでも、このページの一番下の方にあるファイアーウォールの設定はしっかりやってください。
↑すみません。不要でした。md5で認証しています。

3) Redis

#apt install redis-server
#systemctl start redis-server
#systemctl enable redis-server
#systemctl status redis-server
   :    Active: active (running) since・・
(確認したら :q で抜ける)

今のmisskeyだと6.2以上
#add-apt-repository ppa:redislabs/redis
#apt update
#apt install redis

4) Git
#apt install git
#git --version

5) Yarn
Misskey公式では使って無いから不要
#curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
#echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
#apt-get update && apt-get install yarn
#yarn -v
1.22.18

6) ElasticSearch
 設定してません。
 メモリとかを大量に食うらしいので、raspberry pi環境では難しい?!

7) ffmpeg
#apt install ffmpeg
#ffmpeg -version
   :
libpostproc 55. 9.100 / 55. 9.100

8) groundpolisインストール
Misskeyの場合、これ以下は公式「Misskey構築の手引き」に従ってください。

以下、ユーザgroundpolisで

$git clone -b master https://github.com/Groundpolis/Groundpolis.git
$cd Groundpolis

そのままだとエラーになるので、package.jsonの中を1行修正※3
$vi package.json

 で以下の修正
- "photoswipe": "git://github.com/dimsemenov/photoswipe#v5-beta",
+ "photoswipe": "https://github.com/dimsemenov/photoswipe#v5.1.8-beta.0",

$yarn install

9) db作成

$su
#su postgres
$psql
postgres=# CREATE ROLE groundpolis LOGIN CREATEDB PASSWORD 'xxxxx';
postgres=# CREATE DATABASE gpdb OWNER groundpolis;
postgres=# exit

$psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+---------+---------+-----------------------
gpdb | groundpolis | UTF8 | C.UTF-8 | C.UTF-8 |

10) 定義ファイル作成

 公式より引用すると >  .config/example.yml というファイルを default.yml という名前で同フォルダにコピーする。
> コピーしたファイルを開き、示される手順に従って編集する。
$cp .config/example.yml .config/default.yml
$vi .config/default.yml
最低限だと、url: 、port:(#を外すだけ)、あとdb:の名前と認証情報・・かな?
urlは、初期化時にDBに書き込まれるので、後からの変更は面倒になります。
 だいたい↓な感じ。 -----------------
    :
# Final accessible URL seen by a user.
url: https://aaaa.bbb.com/
    :
    :
# To use option 1, uncomment below line.
port: 3000 # A port that your Groundpolis server should listen.
    :
    :
db:
host: localhost
port: 5432

# Database name
db: gpdb

# Auth
user: groundpolis
pass: xxxxxx
    :
    :
-----------------
11) build

$cd ~/Groundpolis
$yarn build-product

12) DB初期化

$yarn run init

13) 起動(テスト)

$NODE_ENV=production yarn start

これで、外から http://192.168.x.x:3000/ みたいなURLを叩くと見れる・・はず。

13) サービスとしての登録

#vi /etc/systemd/system/groundpolis.service

-----------
[Unit]
Description=Groundpolis daemon

[Service]
Type=simple
User=groundpolis
ExecStart=/usr/local/bin/npm start
WorkingDirectory=/home/groundpolis/Groundpolis
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=misskey
Restart=always

[Install]
WantedBy=multi-user.target
-----------

#systemctl daemon-reload
#systemctl start groundpolis
#systemctl enable groundpolis
#systemctl status groundpolis


14) firewall

#ufw default deny
#ufw limit 22
#ufw allow 3000
  default.ymlで定義したportで。
#ufw enable
#systemctl enable ufw
#ufw status



※1:構築テストしたのがraspberry pi 400というだけで、私が、その環境で運用しているわけではありません。rasberry piで運用始めました!

 能力的には(おひとり様~小人数なら)raspberry pi 400で十分そうですが、(microSDとか電源とかの)安定性/信頼性を考えるとraspberry piの運用は苦労しそうです。
 もちろん、raspberry piで運用しているインスタンスもあるみたいですし、苦労してこそ「ドヤ」感があるとも言えますから、チャレンジしたい人は、ぜひどうぞ。
 消費電力はアイドル3W程度なので地球にはやさしいと思いまし、価格も手ごろです。https://gp.miku2go.com/はおひとり様のくせにアイドルで17Wぐらい食ってるので、、、私は地球の敵!?)
※2:nodeのバージョンに依存して上手くインストールできない事がありました。なので運用しているバージョンを明示的に指定しています。最適かどうかは知りません。
※3:最近の環境の変化にgroundpolisの公式が対応しきれていないのだと思います。以前は不要でした。そのうち不要になると思います。
(ふと気が付いて、海老瀬 るちか様が公開している次期バージョンv5のβ版でどうなってるか見てみたのですが、そもそもこのphotoswipeというものの記載が無いような・・。v5では使わない?)
※4:逆プロキシーのhtmlサーバー(apache / nginx)や、そこで使う証明書(Let's Encrypt)の取得・更新とかは、私の場合、別のサーバなので、ここには記載していません。
 まあ、ググればmisskeyやmastodonのインストールで、そのあたりを解説したページが沢山あるでしょうし、それらを参考にしてください。
※5:ここまでで、消費資源はディスク(microSD?)が8GB、起動時のメモリが 440Mbyte程度です。ですが、連合リレーを受けて運用始めるとどんどん増えます。
 groundpolisは初期時点ではmastdonより省資源ですが、運用を始めるとむしろ食います。構築時に使う資源もありますし、おひとり様でもメモリ4G、ディスク32Gはあった方が良いと思います。(mastodonは、おひとり様ならリレーを受けてもメモリ2Gで行けます。)
※6:運用を始めるにあたって、microSDと電源は耐久性のある物にしています。


2023/05追記
追記1:最近のMissKeyだと上に書いた環境では古くて動きません! 確認してインストールしてください。
追記2:1年半の運用後の状況として、microSDは32GByteでもきつい感じになってます。64GByte以上を用意した方が良さそうです!

このページを作った人