Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@YuzuRyo61

Misskey入れてみる備忘録(+α)【~v10】

⚠ 注意!

この記事はMisskey v10(nighthike)向けの記事です。

v11以降の記事やっと書きました(汗): https://qiita.com/YuzuRyo61/items/aecdc6ddf2de40679c89


syuiloさんが開発している分散型SNS、Misskeyを入れるための備忘録兼ガイド。
公式にも載ってるけど、うち流の導入方法です。ご参考程度までに。

※環境はUbuntu Server 18.04 LTSです。前にCentOS使ってたけどもうほぼ忘れた((

Step 0. 既存パッケージのアップグレード

最初にこれやっとかないとね。インストールホヤホヤのときはaptのリポジトリミラー変更を忘れずに。

sudo apt update
sudo apt upgrade -y

アップグレードが終わったら一回再起動するのが望ましいよ。

Step 1. 必要パッケージのインストール

MisskeyにはNode.js、MongoDBが必須、Redisも実質必要です。Elasticsearchはスペックに余裕があれば。
ただしElasticsearchの導入はこの記事では割愛。他を当たってくださいませ。
リバースプロキシとしてnginxを使います。

Node.js

最新バージョンのNode.jsだったら多分安定すると思うよ。NodeSourceでリポジトリを追加っ

curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
sudo apt-get install -y nodejs

https://github.com/nodesource/distributions#installation-instructions

MongoDB

4世代でも問題なっしん。このままmongodb公式リポジトリからインストールしましょう。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo apt-get update
sudo apt-get install mongodb-org

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

Redis

これはこのままUbuntuのリポジトリから引っ張っておk。

sudo apt install redis-server

nginx

nginx公式のリポジトリから。特にこだわりはないので安定版を入れます。

sudo apt install curl gnupg2 ca-certificates lsb-release
echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo apt-key fingerprint ABF5BD827BD9BF62 #これは確認用。
sudo apt update
sudo apt install nginx

http://nginx.org/en/linux_packages.html#Ubuntu

その他

これらの他に必要なものとか。

sudo apt install build-essential git

仕上げ

一通り入れ終わったらサービス起動しておきます。

sudo systemctl start nginx mongod redis-server
sudo systemctl enable nginx mongod redis-server

Step 2. 運用ユーザーの作成

ここは公式通りに。

sudo adduser --disabled-password --disabled-login misskey
sudo su - misskey

Step 3. リポジトリクローン

misskeyのユーザーに切り替わったら次のコマンドを入力し、リポジトリをクローンして最新リリースにチェックアウトするよ。

git clone -b master https://github.com/syuilo/misskey
cd misskey
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

Step 4. nodeパッケージをインストール

~/misskey
npm install

そして気長に待つっ

Step 5. データベースの設定

mongo

でmongoDBのコンソールに入るよ。入った直後なんか出てるけどあまりキニシナーイ。

んで、以下のコマンドを1行づつ。pwdとかuserとかデータベース名は適宜変えておk。

use misskey
db.users.save({dummy: "dummy"})
db.createUser({ user: "misskey", pwd: "aiChanIsMisskeyCharacter!", roles: [ { role: "readWrite", db: "misskey" } ] })

終わったらexitで抜けまーす。

Step 6. 設定ファイル

以下のコマンドを打って編集するよ

~/misskey
cp .config/example.yml .config/default.yml
nano .config/default.yml

url

運用するアドレスを入力。自分の持ってるドメインでね。

Example
url: https://yuzulia.xyz/

port

nginx経由でmisskeyにアクセスする、portは3000あたりで。

Example
port: 3000

mongodb

MongoDBの設定。さっき作ったユーザーとデータベース名をいれればおk

Example
mongodb:
  host: localhost
  port: 27017
  db: misskey
  user: misskey
  pass: aiChanIsMisskeyCharacter!

redis

redisの設定。何も弄ってないのでpassはなしで問題ないはず

Example
redis:
  host: localhost
  port: 6379
  pass: null

設定が終わったら保存してエディタを終わらせます。

Step 7. Build Time!

ついにビルドです。他のステップの中で一番負荷がかかる作業ですのでご注意を。

~/misskey
NODE_ENV=production npm run build

お茶でものんで気長に待ちましょう。スペックによりますが。

Step 8. 起動チェック

Misskeyの動作チェックをします。

~/misskey
npm start 

うまく起動すればアドレスが表示されます。問題なさそうであればCtrl-Cで一回止めます。そしてsudoが使えるユーザーに戻しておきます。

Step 9. nginxのリバースプロキシ設定

misskeyに接続するためのnginx設定をします。今回はmisskey公式リポジトリの設定を引用。変更箇所があるので適宜変えてくださいね。

/etc/nginx/conf.d/misskey.conf
# Sample nginx configuration for Misskey
#
# 1. Replace example.tld to your domain
# 2. Copy to /etc/nginx/sites-available/ and then symlink from /etc/nginx/sites-enabled/
#    or copy to /etc/nginx/conf.d/

# For WebSocket
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;

server {
    listen 80;
    listen [::]:80;
    server_name example.tld;

    # For SSL domain validation
    root /var/www/html;
    location /.well-known/acme-challenge/ { allow all; }
    location /.well-known/pki-validation/ { allow all; }
    location / { return 301 https://$server_name$request_uri; }
}

server {
    listen 443 http2;
    listen [::]:443 http2;
    server_name example.tld;
    ssl on;
    ssl_session_cache shared:ssl_session_cache:10m;

    # To use Let's Encrypt certificate
    ssl_certificate     /etc/letsencrypt/live/example.tld/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem;

    # To use Debian/Ubuntu's self-signed certificate (For testing or before issuing a certificate)
    #ssl_certificate     /etc/ssl/certs/ssl-cert-snakeoil.pem;
    #ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;

    # SSL protocol settings
    ssl_protocols TLSv1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA;
    ssl_prefer_server_ciphers on;

    # Change to your upload limit
    client_max_body_size 80m;

    # Proxy to Node
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_http_version 1.1;
        proxy_redirect off;

        # For WebSocket
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        # Cache settings
        proxy_cache cache1;
        proxy_cache_lock on;
        proxy_cache_use_stale updating;
        add_header X-Cache $upstream_cache_status;
    }
}

設定したらnginx -tで設定チェックして問題なければnginxをリロードします。

Step 10. systemdに登録

Misskeyが自動起動するようにsystemdに登録します。

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

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

[Install]
WantedBy=multi-user.target

sudo systemctl daemon-reloadを忘れずにっ

Step 11. 起動

sudo systemctl start misskey
sudo systemctl enable misskey

Step 12. アカウント登録・インスタンス設定

ウェブにアクセスしてアカウントを登録します。そうすると管理者権限が付与されているはずです。
あとは管理画面で適宜設定してください。

Step 13. 仕上げ

mongoコンソールにアクセスし、以下のコマンドを入れます。Misskeyのデータベース名を入れてくださいね。

use misskey
db.users.find({dummy: "dummy"})

db.users.find で先ほど設定したダミーを探します。あったら以下のコマンドを入力して削除しておきます。

db.users.remove({dummy: "dummy"})
exit

ちなみにこれをしていないと管理画面のユーザーリストの最後尾にundefinedという謎のユーザーが残ったままになるので、それを削除するためのものです。

これで終わりです🎉

アップグレードするには?

Misskeyは不定期でリリースが入ります。その際は以下のコマンドを打てば最新版にアップグレードできます。

misskey@~/misskey
git fetch
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
npm install
NODE_ENV=production npm run build

アップグレードが終わったらsudo systemctl restart misskeyでmisskeyを再起動します。

+α : 藍ちゃんを入れてみよう

オマケとしてMisskey公式キャラクター、うちの子藍ちゃんを導入してみましょう。

Step 0. MeCab導入(任意)

キーワードを覚える機能を使う場合は導入します。

予めファイルをダウンロードしておきます。

MeCab本体

tar zxfv mecab-X.X.tar.gz
cd mecab-X.X
./configure
make
make check
sudo make install

http://taku910.github.io/mecab/#download

MeCab用辞書(IPA)

tar zxfv mecab-ipadic-2.7.0-XXXX.tar.gz
mecab-ipadic-2.7.0-XXXX
./configure
make
sudo make install

インストールが終わったらwhich mecabでコマンドのフルパスを控えておきます。

Step 1. アカウント作成

アカウントを作成します。ユーザーIDは特に問いませんが、@aiが望ましいです。

Step 2. リポジトリクローン

リポジトリをクローンします。

misskey@~
git clone https://github.com/syuilo/ai

Step 3. 設定

設定を行います。適宜変更してくださいね。

config.json
{
    "host": "https://example.com",
    "i": "!********",
    "keywordEnabled": true,
    "reversiEnabled": true,
    "serverMonitoring": true,
    "mecab": "/usr/local/bin/mecab"
}

iはAPIキーを入力するのですが、これは先程作成したアカウントの設定からAPIにあるTokenをコピーすることにします。
本来ならば望ましくありませんが・・・

Step 4. ビルド・起動チェック

以下のコマンドで依存パッケージのダウンロードとビルドを行います。

~/ai
npm install
npm run build

ビルドが終わったら起動チェックをします。

~/ai
npm start

Misskeyのトークから「ping」って送り「PONG!」が返ってくれれば成功です!Ctrl-Cで一回止めます。

Step 5. 仕上げ

これもSystemdに登録します。

/etc/systemd/system/aimisskey.service
[Unit]
Description=Misskey ai-chan daemon

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

[Install]
WantedBy=multi-user.target

sudo systemctl daemon-reloadからのsudo systemctl start aimisskeyして、sudo systemctl enable aimisskeyとすればおkです。

これで藍ちゃんの導入は完了です🎉

最後に

Misskeyの機能は様々です。APIも実装されていますからアプリを作ることだってできますし、リバーシで遊んだりすることだってできちゃいます。自分好みのインスタンスを作っていってくださいね。
GLHF!

2019/04/15 追記

ついにMisskey v11がリリースされました🎉
この記事書き換える予定です。新しく記事を作り直しますっ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?