Misskeyを始めてみて結構楽しい。
楽しいが、LTLが主流のテーマ鯖などで独り言を挙げていくのもあれかな~と思って、個人鯖を立ててみた。
誰かの手助けになればいいと思いつつ、主に自分のための手順のメモだよ。
構成
噂の海外VPSであるVultrを利用する。一人用にしてはちょっとオーバースペック。 独自ドメインは事前に取得済み。
- VPS
- 2vCPU
- 4GB
- 3.00TB
- 80GB
- CDN
- Cloudflare の無料 DNS
※オブジェクトストレージは利用せずにVPSのストレージに置く運用とする。
参考サイト
- Misskey構築の手引き - Misskey Hub
- Ubuntu版Misskeyインストール方法詳説 - Misskey Hub
- Ubuntu版Misskeyインストール方法詳説
- Misskeyのサーバを設置する(v11系)- noellabo's tech blog
- ムームードメインからCloudflareへのDNSの移行
- Managing Custom Emoji
vultrの利用開始
https://www.vultr.com/ でアカウントを作成する。
友達から紹介コードをもらったのでちょっとお得にスタートできた。感謝。
私のコードはこちら。
https://www.vultr.com/?ref=9422333-8H
紹介された人は期間限定の $100 分の無料利用がついてきて、紹介した人は $35 分の無料利用が貰えるらしい。
Cloud ComputeからInstanceをチョイス。
場所はTokyoで、Intel High Performanceの中から希望スペックをチョイスしました。
OSはWSLでも使ってるUbuntu。Auto backupは付けた。
支払いに利用したクレジットカードはVIEWカードだとダメだったのは解せぬ……。
けど、海外サービスなので色々あるのかも?
VPS の設定諸々
まずはネットワーク周りもろもろを設定する。下記のサイトが大変参考になったので感謝です。
Misskeyのサーバを設置する(v11系)- noellabo's tech blog
Vlturから、IPアドレス、Username、Passwordをコピー。
IPv6はインスタンス準備時に既に選択していたのでこのタイミングでは手を付けず。
VPSの作業用ユーザのsshキーを作成して、~/.ssh/ 配下に置いておく。
最初はrootユーザを使ってsshで接続して諸々設定する。
rootでやること
- 作業用ユーザを作成して、sudoを許可する
- 作業用ユーザに切り替えて、先ほど作ったsshキーの公開鍵ファイルを設置
- /etc/ssh/sshd_config を修正して下記を設定
- sshのポート番号を変更(ここではそのままの20とする)
- rootのログインを禁止
- パスワードログインを禁止
- sshd の設定テスト
- 設定テストがOKならば、sshdをrestart
- ファイアウォール設定を実施
ここまでの作業コマンドメモ
$ adduser gumi $ usermod -aG sudo gumi $ sudo -iu gumi $ mkdir .ssh $ chmod 700 .ssh $ cd .ssh $ touch authorized_keys $ chmod 600 authorized_keys $ vi authorized_keys $ sudo vi /etc/ssh/sshd_config $ sudo sshd -t $ sudo systemctl restart sshd $ sudo ufw allow 22/tcp $ sudo ufw enable
ここまでやったら別ターミナルを開いて、作業用ユーザでssh出来るか確認する。
接続OKならばrootでログインしていたターミナルは閉じる。
OSのシステムアップデートをしておく。
$ sudo apt update $ sudo apt upgrade
IPv6アドレスが割り当てられているかどうかを ip a
で確認する。
割り当てられてそうだったのでpingが通るどうかを確認する。
我が家の回線はIPv6対応していなかったのですが、それに気づかずに四苦八苦した……。
結局、スマホの5G回線経由でチェックしたらOKだったのでヨシ!!
住み始めたときはまだまだマイナーだったんだよな、IPv6……。
Cloudflare でドメイン設定
独自ドメインはムームードメインで取っているので、DNSだけCloudflareを利用するような形にする。
こちらのサイトが大変参考になったので感謝。
ドメインをどう設定するかに関しては、引き続き下記サイトの記載を参考。
タイプA(IPv4)のレコード、タイプAAAA(IPv6)のレコードを追加する。
名前はmisskey, misskey-mediaの2つ。前者はアプリケーション、後者はオブジェクトストレージ相当。
※構築後、下記の設定をミスっていてSSL無限リダイレクトしたので要注意!!!! - https://misskey.systems/notes/9bzu54wh0s
構築手順
ここから、VPSに作業用ユーザで接続して構築準備を進めていく。
Misskey 13.10.0 をインストールする。
参考したサイトはこちら。 - Misskey構築の手引き - Ubuntu版Misskeyインストール方法詳説
丁度 v13.10.0 から必要バージョンなどが変わっているので各コンポーネントのインストールには要注意。
リリースノート要チェック。
Node.js 18.x or later is required
PostgreSQL 15.x is required
パッケージマネージャがv13.0.0でyarnからpnpmに変わっているので、古い解説などは読み替えが必要。
上記の公式サイトであるMisskey-Hubの情報で読み替えること。(yarnってなんだ?って躓いたりしました)
基本あれこれ インストール
最低限必要そうなやつは先にいれておく。
$ sudo apt install build-essential
$ sudo apt install postgresql redis-server nginx
$ sudo apt install -y curl
PostgreSQL インストール
PostgreSQL 15.x is required
前の節でとりあえず apt で PostgreSQL はインストールしてある。
PostgreSQL のデータベースとユーザを作成する
$ sudo -u postgres psql could not change directory to "/home/gumi": Permission denied psql (14.7 (Ubuntu 14.7-0ubuntu0.22.04.1)) Type "help" for help. postgres=# CREATE ROLE misskey LOGIN CREATEDB PASSWORD 'パスワード'; DATABASE misskey OWNER misskey;CREATE ROLE postgres=# CREATE DATABASE misskey OWNER misskey; CREATE DATABASE postgres=# \q
aptでインストールしたものがバージョン低いことに気づいたので、更新。
最初からこの方法でインストールOK
$ psql --version psql (PostgreSQL) 14.7 (Ubuntu 14.7-0ubuntu0.22.04.1) $ wget https://salsa.debian.org/postgresql/postgresql-common/raw/master/pgdg/apt.postgresql.org.sh $ chmod 764 ./apt.postgresql.org.sh $ sh apt.postgresql.org.sh -i -v 15 $ psql --version psql (PostgreSQL) 15.2 (Ubuntu 15.2-1.pgdg22.04+1)
node インストール
Node.js 18.x or later is required
$ curl -sL https://deb.nodesource.com/setup_18.x | sudo -E sh - $ sudo apt install -y nodejs $ node -v v18.15.0 $ sudo corepack enable
Redis インストール
apt でインストールしたけど、改めてRedis指定の方法でやってみる。
$ sudo apt install lsb-release $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Codename: jammy $ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg $ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb jammy main $ sudo apt-get update $ sudo apt install -y redis $ redis-server -v Redis server v=7.0.10 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=4ee54d6fe8d124c4
misskey 動作用ユーザ作成
アプリケーション動作用のユーザを作る
gumi@vultr:~$ sudo adduser --disabled-password --disabled-login misskey Adding user `misskey' ... Adding new group `misskey' (1002) ... Adding new user `misskey' (1002) with group `misskey' ... Creating home directory `/home/misskey' ... Copying files from `/etc/skel' ... Changing the user information for misskey Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Y
nginx
http://nginx.org/en/linux_packages.html#Ubuntu
インストールしとく
$ sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring $ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ > | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null $ gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14] 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 uid nginx signing key <signing-key@nginx.com> $ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ > http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ > | sudo tee /etc/apt/sources.list.d/nginx.list deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu jammy nginx $ echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \ > | sudo tee /etc/apt/preferences.d/99nginx Package: * Pin: origin nginx.org Pin: release o=nginx Pin-Priority: 900 $ sudo apt update $ sudo apt install nginx
ffmpeg インストール
必要らしいのでやっとく
sudo apt install ffmpeg
ファイアウォール
設置のためにもファイアウォールの設定しとく
$ sudo ufw status Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) $ sudo ufw allow 80 Rule added Rule added (v6) $ sudo ufw allow 443 Rule added Rule added (v6) $ sudo ufw status Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 80 ALLOW Anywhere 443 ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) 80 (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6) $ systemctl enable ufw $ curl http://localhost <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
証明書関連のあれこれ
$ sudo apt install -y certbot python3-certbot-dns-cloudflare $ sudo mkdir /etc/cloudflare $ sudo vi /etc/cloudflare/cloudflare.ini $ sudo chmod 600 /etc/cloudflare/cloudflare.ini $ sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare/cloudflare.ini --dns-cloudflare-propagation-seconds 60 --server https://acme-v02.api.letsencrypt.org/directory -d otsumami.bar -d *.otsumami.bar
Misskey のインストールと nginx の設定
パッケージマネージャの pnpm
をインストールする。
その後、misskey 動作用ユーザに切り替えてインストールを行う。
まずはGithubからcloneしたりする
$ sudo npm install pnpm $ sudo -iu misskey misskey@vultr:~$ ls -al total 20 drwxr-x--- 2 misskey misskey 4096 Mar 21 12:13 . drwxr-xr-x 5 root root 4096 Mar 20 16:02 .. -rw-r--r-- 1 misskey misskey 220 Mar 20 16:02 .sh_logout -rw-r--r-- 1 misskey misskey 3771 Mar 20 16:02 .shrc -rw-r--r-- 1 misskey misskey 807 Mar 20 16:02 .profile misskey@vultr:~$ git clone -b master https://github.com/misskey-dev/misskey.git misskey@vultr:~$ cd misskey misskey@vultr:~/misskey$ git checkout master misskey@vultr:~/misskey$ git submodule update --init
pnpmで必要なnpmパッケージをインストール。
misskey@vultr:~/misskey$ NODE_ENV=production pnpm install --frozen-lockfile
設定ファイルの作成をする。example.ymlをコピーして作成して編集。
misskey@vultr:~/misskey$ cp .config/example.yml .config/default.yml misskey@vultr:~/misskey$ vi .config/default.yml misskey@vultr:~/misskey$ NODE_ENV=production pnpm run build misskey@vultr:~/misskey$ pnpm run init
nginxの設定をする。設定内容は本家のガイドを見てやった。
https://misskey-hub.net/docs/admin/nginx.html
$ sudo vi /etc/nginx/conf.d/misskey.conf $ sudo ln -s /etc/nginx/conf.d/misskey.conf /etc/nginx/sites-enabled/misskey.conf $ sudo nginx -t $ sudo systemctl restart nginx
大体おしまい
あとは自分のサイトにアクセスしてMisskeyの画面が表示されるか確認。
無限リダイレクトしている人はCloudflareの設定を確認だ。
動いたのを目の当たりにするとやっぱり嬉しいね。
Misskey鯖を運用していくにはこのほかにも色々あるけどひとまずここでおわる。