たくさんの自由帳
Androidのお話
たくさんの自由帳
投稿日 : | 0 日前
文字数(だいたい) : 11435
目次
Misskey お一人様を作ってみたい!!!
さんこうにしました
更新 2023/08/13
ひつようなもの
構成図?
一部のサーバーと繋がらない話
立てる
Misskey をフォークする
AWS のアカウントを用意する
AWS Lightsail で VPS を借りる
パブリック IP アドレスを固定化する
HTTPS 通信で使うポートを開ける
鍵ファイルを使ってSSHでログインする
VPS の設定
スワップ(仮想メモリ)の設定をする
パッケージの更新をする
Misskey 構築
Misskey 用ユーザーを作る
必要なパッケージを入れる
追記 2023/08/13 MongoDB が Ubuntu 22.04 でインストールできない
ソースコードをダウンロード(git clone)してくる
nginx の設定
コンフィグファイルをコピー
Misskey 起動
Misskey ユーザーに切り替えます
サーバーお試し起動
自動起動の設定
コンフィグを書く
DNS の設定
サブドメインのAレコードに VPS の IP アドレスを指定します
反映されるのを待つ
SSL の設定(https でアクセスできるようにする)
Certbot / Let
自動更新ができるか確認
Misskey 開ける?
オブジェクトストレージの設定
AWS の S3 を使います
バケットポリシー を書く
API でアクセスするため、キーを IAM で払い出してもらう
IAM ユーザーの作成
アクセスキーを払い出してもらう
オブジェクトストレージの設定をコンフィグに記述する
メディアのURLをリバースプロキシする(nginx を経由するようにする)
nginx のコンフィグをいじる
動作確認
お疲れ様でした!!!
おすすめ設定?
Misskey サーバーの 停止 開始 再起動
本体更新方法
データベースのバックアップ
Misskey をカスタマイズしたい(VPS ではなく、手元の Windows で Misskey を構築したい)
2023/08/06 追記 Cloudflare を利用して Misskey サーバーを保護する?
どうもこんばんわ。
ニコニコ動画版はこちらです
https://www.nicovideo.jp/watch/sm42546302
いや、別にお一人様じゃなくても、ローカルタイムラインが無いインスタンスにアカウントを作れば良いのですが(LTL は流れについて行けない...
)・・・
いや、、なんか、、、あの、、、、AWS
とか使ってみたかったんですよ・・・(多分値段が高く付くのでもっとちゃんと考えるべきです)
thx!!!!!!!!!!
以下を変更しないと、一部のサーバー(インスタンス)との通信に失敗します
(リクエスト結果が403
になり通信できません)
20.04
ではなく 22.04
を選ぶ
MongoDB
の導入に失敗します。追記しました。Misskey v10
でも動くはず今回はv13ではなくv10を建てます。(めいすきー)
古いので最新版を建てたい人からしたらあんまり参考にならないと思う(https
化くらい?同じなの)
国産 VPS
とか他の方が使っているVPS
を選ぶべきかもしれません・・・もしくはEC2
?diary.negitoro.dev
Cloudflare
が使えません(後述)Tera Term
などVPS
に付いてくるブラウザベースのSSH クライアント
でも出来なくはないと思う・・・Cloudflare
が使えないせいなのか、はたまたAWS の Lightsail(VPS)
のせいなのかよく分からないのですが、
一部のMisskeyサーバーと接続できません(知ってる限り2つくらいあります)
おそらく相手側のサーバーがCloudflare
で保護されていて、なんか私側のIP アドレス
がブラックリスト入りしているっぽいんですよね?
こちらもCloudflare
で保護すれば良いのかなと思いましたが、.dev
ドメインが対応していないんですよね。Google Domains
終了するし頼みますよ・・・!
というわけでVPS
を変える以外で解決策が無いです。皆さんは他のVPS
を使ったほうが良いかもしれません・・・
動画作ってたら何やったか忘れたのでざっくり行きます
資料です: https://github.com/mei23/memo/blob/master/misskey/Setup-Meisskey-Quick.md
これはカスタマイズしない場合はスキップで良いはず。
私はフロントエンドくらいはいじりたいなと思ったのでフォークすることにしました
用意してください。
作業用のIAMユーザー
を作ったり、2段階認証にするなり、最低限のこともやっておいたほうが良いかも。
Linux
でUbuntu 20.04
で行きます
すでに固定化した状態ですが・・・
ここから固定化が出来ます。
アタッチしている場合は追加費用はかからないそう
https
はTCP
の443
番を使うので、受け入れられるようにします。
Misskey
はhttps
でないと接続できないです
ここから鍵ファイルをダウンロード出来ます。
まずTera Term
でIPアドレスを入れて...
Lightsail
に表示されているユーザー名と、先ほどダウンロードした鍵ファイルのパスをそれぞれ入れます。
テキストエディタにvim
を使いますが(それしか分からん)、他のエディタが好きな場合はその都度読み替えてください。
物理メモリが多い場合は多分いらないかも?
今回みたいに物理メモリが1GB
しかない場合は後でやるwebpack
周りでこけちゃいます
一行ずつ打ち込んでいってください。
次にvim
で以下のファイルを編集します。
改行して以下の行を足します。
i
を押して編集モード、Esc
で戻れます。:wq
で保存です。
最後に、以下のコマンドを叩いてスワップ領域が増えていれば成功です。
こんなふうな出力があるはず
Ubuntu ( Debian 系 )
は多分apt
なので、以下のコマンドを叩いて更新します。
Misskey
構築に関係なく、Linux
マシンを貰ったらまずやらないといけないと思います。
upgrade
の方は、本当に実行するかどうか聞かれるので、Y
を押してエンターします。
Do you want to continue? [Y/n]
←これ
もし、更新中にピンク色の怖い画面(多分 want to do about modified configuration file sshd_config?
的なメッセージ?)がでたら、矢印キーでKeep
の方を選んでエンターすれば良いと思います。
特に言うことはないかな
Node.js
(MisskeyはバックエンドJavaScriptで出来ている)
MongoDB
(データベース)
その他、ソースコードを落としてくるgit
などを入れます
どうやら必要なlibssl
が22.04
から同梱されなくなったみたい...
取りあえず入れることで回避することにします。
https://stackoverflow.com/questions/73656873
まず Misskey ユーザーに切り替えて、
ソースコードをダウンロードします。今回は自分のリポジトリのをダウンロードします
(takusan_23-diary
とhttps://github.com/takusan23/misskey
は各自変えてね)
クローンしたフォルダへ移動します
コンフィグファイルをコピーして、自分の環境用に直します
そしたら、url
を直して、mongodb
のuser
/pass
、redis
のpass
をコメントアウトします。
以下は例です。これ以降の部分はいじりません。(後でいじりますが)
編集が終わったら保存してターミナルに戻ってきてください。
ビルドをします。
スペックが低いので、しばらく時間がかかります
無事成功したら、戻ります
Misskey ユーザーの場合は戻ってください(exit
)
whoami
を叩くと今誰なのかわかります。
私もわかんないんですけど、多分シンボリックリンクを使うのが正解らしい・・・
またvim
が開くので、example.tld
になっている部分を自分のドメインに直します。多分二箇所ぐらいだと思う
server_name example.tld
をserver_name diary.negitoro.dev
にする感じです(自分のドメインね!)
できたら保存してターミナルに戻ってきてください。
nginx
をリロードします
次に、Misskey サーバー
が起動できるか試してみます。
多分アスキーアートみたいなのが出るはず。
起動できたら(listen 3000 ~
)止めます
Ctrl + C
同時押しでターミナルに戻ってこられるはず。
そしたらまたユーザーを戻してください
Windows
のスタートアップみたいな
と言ってもこれは全部コピーできるやつです。
最後のコマンドを叩くと、さっきみたいなアスキーアート(欠けてるかも)が出ているはず。
出て無くてもログが出ていれば成功なはず。
INFO * [core boot] Welcome to Meisskey!
とか
INFO * [core boot] Meisskey v10.xxxxxxx
とか?出ていれば OK なはず
IPアドレスとサブドメインを紐付けます
IPv6
の設定が必要なのかは不明(後述するLet's Encrypt / Certbot
はIPv4
だけでいいはず)
Google Domains
ならDNS
の項目で、新しいレコードを追加します。
IPv4
なのでAレコード
で、使いたいサブドメインと、VPS
のIPv4
アドレスを指定します。
こんな感じです。
nslookup
とかして、サブドメインからIPアドレス
を引けるようになるまで待ちます
なお、Misskey
はhttps
でないと接続できないらしく、まだURLを入力しても開けないはず。
Cloudflare
使える場合はもっといい方法があるはず
ここから、Nginx
とUbuntu 20
を選びます。
もし内容がおかしかったら↑が正しいです
まずはsnap
というパッケージマネージャを入れます。
いれたら、一応既に入っているかもしれないのでcertbot
を消します。
snap
経由で入れないといけないので、apt
とかで既に入っていれば消しちゃいます。
certbot --version
でエラーが帰ってくれば成功(bin
にcertbot
なんて存在しねえよ!的な)
次はsnap
経由でcertbot
を入れます。
そしたらついにhttps
でアクセスできるようにnginx
を構成します。
コンフィグファイルを書き換えるのですが、多分Misskey
に影響ない状態で書き換えてくれます。
このコマンドを叩いた後に以下のことが聞かれます
SSL
証明書の更新が出来なかったら通知が来る?
https
でアクセスできなくなってしまうのでメールで教えてくれるそうhttps
にしたいドメインの最終確認(nginx
のコンフィグファイルからドメインを探してくれるそう)キーボードぽちぽちしてたらhttps
化作業終わった。神だろこれ
どうやら自動的に自動更新のcron ?
が設定されているらしく、自前でcron
をスケジュールしておく必要も無いらしい。
ただ、成功するかはわからないので、お試し更新機能を使い本当に更新できるか試します。
--dry-run
しないと更新されてしまう(そもそも有効期限が十分残っていると更新できない)
成功するとこんな感じになるはず。
https://ドメイン
で開けるはず。
ちゃんとhttps
で、鍵マークも付いています!!!!
一番乗りでアカウントを作ると管理者ユーザーとしてマークされ(コンフィグで変更可能?)、管理画面に入れます。
Misskey
の投稿のメディアは、後からURLを変更できないため、やるなら建てた今しかない!
デフォルトではVPS
のストレージに書き込まれますが、VPS
のストレージは高いのと拡張が面倒なのでオブジェクトストレージを使うのが良いはず(容量増やし放題だけどお金もかかるよ)。
ただ、これちょっと高い(なんか転送量とリクエスト回数に課金されるややこしい)ので、S3 互換サービス
を使うのも考えたほうが良さそう。
今回は今後のことを考え、S3 互換サービス
に移行できるような設計にもしてみます。
というわけでS3
のバケットを作ります。
名前とかはよしなに...
下にスクロールして、パブリックアクセスの項目で外からアクセスできるようにします。
まだバケットポリシーを書いていないのでアクセスは出来ないと思いますが...
これで作成します。
作ったバケットを開いて、アクセス許可
に進み、バケットポリシー
を編集します
S3
にAPI
で操作するには、IAM
で認可情報を作って貰う必要があります。
IAM
の画面を開いて、適当にユーザーを作ります、
次の画面で出てくる権限のところでは、AmazonS3FullAccess
をつけておけば良さそう
作ったIAM ユーザー
の詳細を開いて、アクセスキー
の作成をします
Misskey
で必要なのは一番下のその他
の項目のやつです。
2つ出てくると思います。
v13 では Web UI からオブジェクトストレージの設定ができます
まずMisskey
を止めて
Misskey
ユーザーに切り替えて、コンフィグを更新します。
そしたら、ファイルシステムに書き込む設定をコメントアウト(#
でコメントアウトできる)して、
ちょっと下にあるオブジェクトストレージ用の設定を書きます。
もし、リバースプロキシしない場合(S3
の公開URLをそのまま使う場合)は、baseUrl
はhttps://s3.ap-northeast-1.amazonaws.com/バケット名
になるはずです。
リバースプロキシが必要かどうかはS3
以外を使う予定があるかどうかで決まります。詳しくは ↓ で。
CloudFront
を経由するとか、後述するnginx
を経由する設計の場合はbaseUrl
が変わるはず
後はターミナルを閉じて、おまじない程度にビルドしておきました(必要かどうかは不明)
Misskey
起動させます
先述の通りS3
以外のオブジェクトストレージに引っ越しできるように、メディアのURLではS3
の外部公開用URL
を使わないようにします。
代わりに、メディアのURLを用意して(https://ドメイン/objectstorage/xxxxx
)、/objectstorage
に来たリクエストはすべてnginx
を使いS3
のURLに向き先を変えるようにします(リバースプロキシ)
本当(というか他のサーバーだと)はオブジェクトストレージ用のドメイン、files.ドメイン
みたいなサブドメインを用意して、S3 + CloudFront
とかで公開して、CNAME
でCloudFront
を指すようにするのが良いかもしれないです。
(何言ってるか分からんと思うけど・・・)
コンフィグファイルを編集します。
そしたら、/objectstorage
に来たリクエストはS3
のURLへリバースプロキシするようにします。
URL は都度買えてください。
よく知らないけど、location /
の上に書いておけばよいのかな?
nginx server { } 443
の方です
そしたら保存してターミナルに戻って、nginx
へ適用します。
実際にMisskey
のドライブにファイルを投げて、S3
に上がっていれば成功です。
URL が /objectstorage
で始まっていればうまく行ってます!!!
多分これで構築は良いはず。
あとは適当にメモを残しておきます。
管理画面から出来ます
sudo systemctl start misskey
sudo systemctl stop misskey
sudo systemctl restart misskey
フォークしたので本家に追従するにはまずgit rebase
とかやって更新を取り込む必要がある
こっちに書いた
https://github.com/takusan23/misskey#変更を本番に入れる本番更新手順
データベースを吹っ飛ばすと同じドメインでサーバーを建てられないらしい?ので、定期的にやる必要があります
まずはMisskey
を止めます
次に、Misskey
で利用しているMongoDB
のバックアップを取ります。
今回はホームディレクトリにバックアップしたデータを保存するようにしました。dump
フォルダが出来ます。
(ホームディレクトリは ~
←チルダ で移動できます)
**次に、PowerShell を開き(SSH クライアントとは別に)**以下のコマンドを叩いて手元の Windows マシンへバックアップデータを転送します。
scp
コマンドです。
例です
これで、ユーザー名のフォルダのところにあるはず(C:\Users\takusan23
みたいな)
後はこれをzip
とかにして安全なところに保存しておきます( Google Drive とか? AWS S3 Glacier とか? )
書いた。v10
なのでv13
だと直さないと使えない
https://github.com/takusan23/misskey#手元の開発環境構築
Certbot
でHTTPS
通信できるようにしましたが、Misskey
的にはCloudflare
でSSL (HTTPS)
するのが良いらしい。
あらかじめ、Cloudflare
にドメインを移管しておく必要があります。(いやCloudflare DNS
を使えるようしておく必要があります)
まずはCloudflare ダッシュボード
からWebサイト
を選び、稼働しているドメインを選びます。
そしてSSL/TLS
を押して、概要
の暗号化モード
をフル
にします。不具合の原因になるみたい。
次に、DNS
>レコード
と進み、Misskey
のIPアドレス
のレコードがプロキシ済み
かどうか確認します。
プロキシ済み
じゃない場合はしてください。雲のアイコンがオレンジ色になれば良いはず。
これで、Misskey サーバー
との通信の前にCloudflare
が入るようになります。
さっきのSSL/TLS
の設定はこの間に入るCloudflare
の設定のために必要でした。
次にVPS
へログインします。
まずはMisskey
を止めて、お好みでバックアップを取ってください。
次にnginx
のコンフィグを開いて、Let's Encrypt
ではなく、自己署名証明書
をセットします。
保存して、Misskey
を起動し、ブラウザで開けるか確認します。
成功していれば、リクエストのレスポンスヘッダーにCloudflare
関連の値が入るようになっているはずです。
そしたらもう、今使っているLet's Encrypt
の証明書は不要になるので、消してしまいます。
Y
で
Y
で
Deleted all files relating to certificate ドメイン名.
が表示されれば完了です。