[Tech] misskeyを導入したときの手順

misskeyってなんじゃろか?

SNSを構成できるソフトの一つ。国産とのこと。分散SNSに関してはMastodonなんかが有名だったりするのだけど、それに比べるとmisskeyはかなり機能が豊富で、動作も結構軽快。Githubへのリンクは以下の通りです。

https://github.com/syuilo/misskey

以前構築に挑んでみたけども玉砕した経験があって手を出してなかったのだけど、過日Mastodonインスタンスを消滅させてしまった腹いせに、ついカッとなって構築することにした。(当時はDBにmongoDB使ってたようなのですが、最新版でPostgreSQLに対応するようになったようです)

前提となる環境

以下の環境で構築をしています。

  • OSはCentOS 7-1810 x64ベース
  • 最小インストール構成
  • Nginxは既存環境にあるので、今回のサーバには導入しない
  • misskey及びNode.jsは最新を想定
  • 導入先サーバはvSphere Hypervisor 6.5 Update2上の仮想マシン
  • 8vCPUと12GB RAMを適用。VHDは120GBとした。ホスト側のCPUはXeon E5-2403。
前の記事に書いた気もするけど、簡単な構成図。

取り敢えずの設定

# yum -y update

# systemctl stop firewalld
# systemctl disabled firewalld

# vi /etc/selinux/config
-> SELINUX=disabledへ変更

# shutdown -r now

まずは全体のパッケージアップデート、SELINUXの停止、firewalldの停止を行う。今回の構成としては、フロントに出るサーバは別に用意しており、そこでポート閉塞を行っているのでfirewalldは停止している。

前提パッケージの適用

# yum -y install epel-release
# yum -y install gcc-c++
# yum -y install gcc-devel
# yum -y install automake
# yum -y install make ncurses-devel

取り敢えず上記を追加している。ビルドしていく過程で必要とわかったところも盛り込んでいるけど、ちょっと余計に追加しすぎたのかもしれない。

ffmpeg導入

# rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
# rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
# yum -y install ffmpeg ffmpeg-devel

動画コンテンツを表示できるようにするためにffmpegを導入する。nuxリポジトリが必要っぽいので追加している。

Redisインストール

# yum -y install redis
# systemctl start redis
# systemctl enable redis

PostgreSQLインストール

# yum -y localinstall https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
# yum -y install postgresql10-server

# /usr/pgsql-10/bin/postgresql-10-setup initdb

# systemctl start postgresql-10
# systemctl enable postgresql-10
# vi /var/lib/pgsql/10/data/pg_hba.conf
⇒こちらでは、127.0.0.1のみTrustとかにした。

# systemctl restart postgresql-10

DBの作成

# su - postgres
$ psql
postgres-# CREATE DATABASE misskey;
postgres-# CREATE ROLE dbuser WITH LOGIN PASSWORD '**********';
postgres-# GRANT ALL ON DATABASE misskey TO dbuser;
postgres=# SELECT datname,datacl FROM pg_database;

↓↓↓↓こんな感じになったら多分オッケー↓↓↓↓
  datname  |                          datacl
-----------+----------------------------------------------------------
 postgres  |
 template1 | {=c/postgres,postgres=CTc/postgres}
 template0 | {=c/postgres,postgres=CTc/postgres}
 misskey   | {=Tc/postgres,postgres=CTc/postgres,dbuser=CTc/postgres}

データベースを作成し、dbuserと言うユーザを作成、権限委譲を行った。パスワード設定も行ったが、実態としてはpg_hba.confの設定でlocalhostをtrustと指定しているので、実はあまり意味がないんだよな。

Elasticsearchを導入する

# vi /etc/yum.repos.d/elasticsearch.repo
-----
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
-----
# yum -y install java-1.8.0-openjdk.x86_64
# yum -y install elasticsearch

全文検索エンジンであるElasticsearchと前提となるJDKのインストールをしている。今回6.x系を適用している。

Elasticsearchを設定する

以下2つのファイルを修正する。

# cd /etc/elasticsearch
# vi jvm.options
-----ヒープサイズの変更のみ実施
-Xms4g
-Xmx4g
-----

# vi elasticsearch.yml
-----以下の通り修正
cluster.name: misskey-clus
node.name: aplsv
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
-----

そして起動する。

# systemctl start elasticsearch
# systemctl enable elasticsearch

アプリケーション動作用ユーザ作成

今回ユーザ名は堅苦しく定義した。

# adduser apluser
# passwd apluser

Node.js及びnpmのインストール

LTS版を使用しようとすると、執筆時点の最新パッケージの最低要件を満たさない。そのため、最新の12.5を導入している。

# curl -sL https://rpm.nodesource.com/setup_12.x | bash -
# yum -y install nodejs
# yum -y install npm
# which npm
# npm install -g n

misskeyのダウンロード・依存パッケージの適用

Githubからmisskeyのコードを拾う。単純にnpm install しただけだとその後のビルドでうまくいかず、エラーメッセージから取り敢えず diskusageとsharpを個別追加したらちゃんとビルドできたので、備忘録として追加。

# su - apluser

$ git clone -b master git://github.com/syuilo/misskey.git
$ cd misskey
$ git checkout master
$ npm install
$ npm install diskusage
$ npm install sharp

misskeyの設定実装

misskeyの設定ファイルを修正し、環境に合わせて修正していく。

$ cp .config/example.yml .config/default.yml
$ vi .config/default.yml
-----
url: https://<任意のFQDN>/

db:
  host: localhost
  port: 5432

  db: misskey
  user: dbuser
  pass: ******

  disableCache: true

redis:
  host: localhost
  port: 6379

elasticsearch:
  host: 127.0.0.1
  port: 9200

id: 'aid'
autoAdmin: true

outgoingAddressFamily: ipv4

-----

ビルドの開始

$ NODE_ENV=production npm run build

結構時間がかかるので気長に待ちませう。

データベースの初期化

DBに対して初期テーブルを作成していく。

$ npm run init

フォアグラウンドで起動

$ NODE_ENV=production npm start

この時点では、フォアグラウンドで起動することになる。流れ行くログを眺めつつ、ブラウザで http://<misskeyサーバ>:3000 へアクセスを試み、タイトルページが正常に表示されることを確認する。

コンソールをCtrl+Cすればプロセスはシャットダウンする。

systemdへ登録、再起動など

無事正常動作が確認できたら、systemdへ登録をし、バックグラウンドで動作できるようにする。

# vi /etc/systemd/system/misskey.service
-----
[Unit]
Description=Misskey daemon

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

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

# systemctl daemon-reload; systemctl enable misskey
# systemctl restart misskey

nginxに対する設定投入など、後続手順

後は別途立ててるnginxに対してリバースプロキシ設定を実装し、misskeyサーバの3000/tcpポートに接続を通せば作業は完了となる。

ファーストユーザの作成

ファーストユーザの作成をまずは行う。というか、通常の一般ユーザと同じ手順でユーザを作成すれば、どうやら最初のユーザに限り自動的にadmin権限が付与されるようだ。

その後、misskeyの管理画面からインスタンスなどの設定を変更することで、無事全作業が完了する。後は色んな所のユーザをフォローしまくって連合を広げていけば、ようこそFederationで繋がる世界へ!ってなる。

misskeyのトップ画面

というわけでこんなインスタンスになります。

よかったらきてみんしゃい。

https://community.bluecore.net/

といってもまぁ、今までとあまり変わりなく。のんびりのんびりと。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.