たくさんの自由帳
Androidのお話
たくさんの自由帳
投稿日 : | 0 日前
文字数(だいたい) : 11499
目次
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 サーバーを保護する?
どうもこんばんわ。
ニコニコ動画版はこちらです
いや、別にお一人様じゃなくても、ローカルタイムラインが無いインスタンスにアカウントを作れば良いのですが(LTL は流れについて行けない...)・・・
いや、、なんか、、、あの、、、、AWSとか使ってみたかったんですよ・・・(多分値段が高く付くのでもっとちゃんと考えるべきです)
thx!!!!!!!!!!
memo/misskey/Setup-Meisskey-Quick.md at master · mei23/memo
Memo. Contribute to mei23/memo development by creating an account on GitHub.
https://github.com/mei23/memo/blob/master/misskey/Setup-Meisskey-Quick.md

Misskeyのサーバを設置する(v11系) - noellabo's tech blog
Misskeyは、自分でサーバを用意して設置することで、自分の好きなように運営することができます。 当記事では、Misskey v11以降の設置方法について、具体例を交えて紹介します。 用意するモノ Misskeyを実行するサーバ ドメイン メールサーバー オブジェクトストレージ 作業用PC これらもあった方が良いです Fediverse上のSNSアカウントいくつか Misskeyを設置・運用している友人・知人 Misskeyを実行するサーバ 常時インターネットに接続されているサーバが必要です。 Node.js、PostgreSQL、Redisなどが実行できる、メモリが2GB以上ある環境を用意…
https://blog.noellabo.jp/entry/2019/08/14/8i3RHuZ1wJNDinIn
以下を変更しないと、一部のサーバー(インスタンス)との通信に失敗します
(リクエスト結果が403になり通信できません)
20.04 ではなく 22.04 を選ぶ
MongoDBの導入に失敗します。追記しました。Misskey v10でも動くはず今回はv13ではなくv10を建てます。(めいすきー)
古いので最新版を建てたい人からしたらあんまり参考にならないと思う(https化くらい?同じなの)
国産 VPSとか他の方が使っているVPSを選ぶべきかもしれません・・・もしくはEC2?diary.negitoro.devCloudflareが使えません(後述)Tera TermなどVPSに付いてくるブラウザベースのSSH クライアントでも出来なくはないと思う・・・Cloudflareが使えないせいなのか、はたまたAWS の Lightsail(VPS)のせいなのかよく分からないのですが、
一部のMisskeyサーバーと接続できません(知ってる限り2つくらいあります)
おそらく相手側のサーバーがCloudflareで保護されていて、なんか私側のIP アドレスがブラックリスト入りしているっぽいんですよね?
こちらもCloudflareで保護すれば良いのかなと思いましたが、.devドメインが対応していないんですよね。Google Domains終了するし頼みますよ・・・!
というわけでVPSを変える以外で解決策が無いです。皆さんは他のVPSを使ったほうが良いかもしれません・・・
動画作ってたら何やったか忘れたのでざっくり行きます
これはカスタマイズしない場合はスキップで良いはず。
私はフロントエンドくらいはいじりたいなと思ったのでフォークすることにしました
用意してください。
作業用のIAMユーザーを作ったり、2段階認証にするなり、最低限のこともやっておいたほうが良いかも。
LinuxでUbuntu 20.04で行きます
すでに固定化した状態ですが・・・
ここから固定化が出来ます。
アタッチしている場合は追加費用はかからないそう
httpsはTCPの443番を使うので、受け入れられるようにします。Misskeyはhttpsでないと接続できないです
ここから鍵ファイルをダウンロード出来ます。
まずTera TermでIPアドレスを入れて...
Lightsailに表示されているユーザー名と、先ほどダウンロードした鍵ファイルのパスをそれぞれ入れます。
テキストエディタにvimを使いますが(それしか分からん)、他のエディタが好きな場合はその都度読み替えてください。
物理メモリが多い場合は多分いらないかも?
今回みたいに物理メモリが1GBしかない場合は後でやるwebpack周りでこけちゃいます
一行ずつ打ち込んでいってください。
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile次にvimで以下のファイルを編集します。
sudo vim /etc/fstab改行して以下の行を足します。iを押して編集モード、Escで戻れます。:wqで保存です。
/swapfile none swap sw 0 0最後に、以下のコマンドを叩いてスワップ領域が増えていれば成功です。
free -hこんなふうな出力があるはず
total used free shared buff/cache available
Mem: 929Mi 450Mi 71Mi 0.0Ki 408Mi 332Mi
Swap: 2.0Gi 174Mi 1.8GiUbuntu ( Debian 系 )は多分aptなので、以下のコマンドを叩いて更新します。Misskey構築に関係なく、Linuxマシンを貰ったらまずやらないといけないと思います。
sudo apt update
sudo apt upgradeupgradeの方は、本当に実行するかどうか聞かれるので、Yを押してエンターします。
Do you want to continue? [Y/n] ←これ
もし、更新中にピンク色の怖い画面(多分 want to do about modified configuration file sshd_config? 的なメッセージ?)がでたら、矢印キーでKeepの方を選んでエンターすれば良いと思います。
特に言うことはないかな
sudo adduser --disabled-password --disabled-login misskeyNode.js(MisskeyはバックエンドJavaScriptで出来ている)
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm i -g pnpmMongoDB(データベース)
sudo apt-get install gnupg
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt-get update
sudo apt-get install -y mongodb-orgsudo systemctl start mongod
sudo systemctl enable mongodその他、ソースコードを落としてくるgitなどを入れます
sudo apt -y install redis git build-essential nginx ssl-cert letsencrypt ffmpegどうやら必要なlibsslが22.04から同梱されなくなったみたい...
取りあえず入れることで回避することにします。
sudo wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.debまず Misskey ユーザーに切り替えて、
sudo su - misskeyソースコードをダウンロードします。今回は自分のリポジトリのをダウンロードします
(takusan_23-diaryとhttps://github.com/takusan23/misskeyは各自変えてね)
git clone -b takusan_23-diary https://github.com/takusan23/misskeyクローンしたフォルダへ移動します
cd ~/misskeyコンフィグファイルをコピーして、自分の環境用に直します
cp .config/example.yml .config/default.yml
vim .config/default.ymlそしたら、urlを直して、mongodbのuser/pass、redisのpassをコメントアウトします。
以下は例です。これ以降の部分はいじりません。(後でいじりますが)
# Final accessible URL seen by a user.
url: https://diary.negitoro.dev/
# Listen port
port: 3000
# Listen address (default is probably any)
# addr: '127.0.0.0'
mongodb:
host: localhost
port: 27017
db: misskey
#user: example-misskey-user
#pass: example-misskey-pass
#options:
# poolSize: 10
# Redis
redis:
host: localhost
port: 6379
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
#pass: example-pass
#prefix: example-prefix
#db: 0編集が終わったら保存してターミナルに戻ってきてください。
ビルドをします。
スペックが低いので、しばらく時間がかかります
NODE_ENV=production pnpm i
NODE_ENV=production pnpm build無事成功したら、戻ります
exitMisskey ユーザーの場合は戻ってください(exit)whoamiを叩くと今誰なのかわかります。
私もわかんないんですけど、多分シンボリックリンクを使うのが正解らしい・・・
sudo cp ~misskey/misskey/docs/examples/misskey.nginx /etc/nginx/sites-enabled/
sudo vim /etc/nginx/sites-enabled/misskey.nginxまたvimが開くので、example.tldになっている部分を自分のドメインに直します。多分二箇所ぐらいだと思う
server_name example.tldをserver_name diary.negitoro.devにする感じです(自分のドメインね!)
できたら保存してターミナルに戻ってきてください。nginxをリロードします
sudo service nginx reloadsudo su - misskey次に、Misskey サーバーが起動できるか試してみます。
cd ~/misskey
pnpm start多分アスキーアートみたいなのが出るはず。
起動できたら(listen 3000 ~)止めますCtrl + C同時押しでターミナルに戻ってこられるはず。
そしたらまたユーザーを戻してください
exitWindowsのスタートアップみたいな
と言ってもこれは全部コピーできるやつです。
sudo cp ~misskey/misskey/docs/examples/misskey.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable misskey
sudo systemctl start misskey
sudo systemctl status misskey最後のコマンドを叩くと、さっきみたいなアスキーアート(欠けてるかも)が出ているはず。
出て無くてもログが出ていれば成功なはず。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というパッケージマネージャを入れます。
sudo snap install core; sudo snap refresh coreいれたら、一応既に入っているかもしれないのでcertbotを消します。snap経由で入れないといけないので、aptとかで既に入っていれば消しちゃいます。
sudo apt remove certbot
certbot --versioncertbot --versionでエラーが帰ってくれば成功(binにcertbotなんて存在しねえよ!的な)
次はsnap経由でcertbotを入れます。
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbotそしたらついにhttpsでアクセスできるようにnginxを構成します。
コンフィグファイルを書き換えるのですが、多分Misskeyに影響ない状態で書き換えてくれます。
sudo certbot --nginxこのコマンドを叩いた後に以下のことが聞かれます
SSL証明書の更新が出来なかったら通知が来る?
httpsでアクセスできなくなってしまうのでメールで教えてくれるそうhttpsにしたいドメインの最終確認(nginxのコンフィグファイルからドメインを探してくれるそう)キーボードぽちぽちしてたらhttps化作業終わった。神だろこれ
どうやら自動的に自動更新のcron ?が設定されているらしく、自前でcronをスケジュールしておく必要も無いらしい。
ただ、成功するかはわからないので、お試し更新機能を使い本当に更新できるか試します。
sudo certbot renew --dry-run--dry-runしないと更新されてしまう(そもそも有効期限が十分残っていると更新できない)
成功するとこんな感じになるはず。
https://ドメインで開けるはず。
ちゃんとhttpsで、鍵マークも付いています!!!!
一番乗りでアカウントを作ると管理者ユーザーとしてマークされ(コンフィグで変更可能?)、管理画面に入れます。
Misskeyの投稿のメディアは、後からURLを変更できないため、やるなら建てた今しかない!
デフォルトではVPSのストレージに書き込まれますが、VPSのストレージは高いのと拡張が面倒なのでオブジェクトストレージを使うのが良いはず(容量増やし放題だけどお金もかかるよ)。
ただ、これちょっと高い(なんか転送量とリクエスト回数に課金されるややこしい)ので、S3 互換サービスを使うのも考えたほうが良さそう。
今回は今後のことを考え、S3 互換サービスに移行できるような設計にもしてみます。
というわけでS3のバケットを作ります。
名前とかはよしなに...
下にスクロールして、パブリックアクセスの項目で外からアクセスできるようにします。
まだバケットポリシーを書いていないのでアクセスは出来ないと思いますが...
これで作成します。
作ったバケットを開いて、アクセス許可に進み、バケットポリシーを編集します
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::作ったバケットの名前/*"
]
}
]
}S3にAPIで操作するには、IAMで認可情報を作って貰う必要があります。
IAMの画面を開いて、適当にユーザーを作ります、
次の画面で出てくる権限のところでは、AmazonS3FullAccessをつけておけば良さそう
作ったIAM ユーザーの詳細を開いて、アクセスキーの作成をします
Misskeyで必要なのは一番下のその他の項目のやつです。
2つ出てくると思います。
v13 では Web UI からオブジェクトストレージの設定ができます
まずMisskeyを止めて
sudo systemctl stop misskeyMisskeyユーザーに切り替えて、コンフィグを更新します。
sudo su - misskey
cd ~/misskey
vim .config/default.ymlそしたら、ファイルシステムに書き込む設定をコメントアウト(#でコメントアウトできる)して、
ちょっと下にあるオブジェクトストレージ用の設定を書きます。
### drive ###
#drive:
# storage: 'fs' # ここをコメントアウトする
# OR
#drive:
# storage: 'db'
# OR
drive:
storage: 'minio' # ここは買えなくて良いはず
bucket: 'xxxxxxxx' # バケット名です
prefix: 'files' # フォルダを作るなら
baseUrl: 'https://diary.negitoro.dev/objectstorage' # nginx のリバースプロキシする URL
config:
endPoint: '' # S3 の場合は空文字。S3 互換サービスなら入れる
region: 'ap-northeast-1' # バケットのリージョン
useSSL: true
accessKey: 'xxxx' # IAM ユーザーのアクセスキーのアクセスキー
secretKey: 'xxxx' # IAM ユーザーのアクセスキーのシークレットキー
useProxy: true
setPublicRead: false
s3ForcePathStyle: trueもし、リバースプロキシしない場合(S3の公開URLをそのまま使う場合)は、baseUrlはhttps://s3.ap-northeast-1.amazonaws.com/バケット名になるはずです。
リバースプロキシが必要かどうかはS3以外を使う予定があるかどうかで決まります。詳しくは ↓ で。
CloudFrontを経由するとか、後述するnginxを経由する設計の場合はbaseUrlが変わるはず
後はターミナルを閉じて、おまじない程度にビルドしておきました(必要かどうかは不明)
NODE_ENV=production pnpm build
exitMisskey起動させます
sudo systemctl start misskey先述の通りS3以外のオブジェクトストレージに引っ越しできるように、メディアのURLではS3の外部公開用URLを使わないようにします。
代わりに、メディアのURLを用意して(https://ドメイン/objectstorage/xxxxx)、/objectstorageに来たリクエストはすべてnginxを使いS3のURLに向き先を変えるようにします(リバースプロキシ)
クライアント ( PC / スマホ 等 )
↓ リクエスト
nginx が待ち受ける
↓
もし URL が /objectstorage だったら ---> [S3 の外部公開用URLへアクセス]
それ以外 / だったら ---> [Misskey サーバー]本当(というか他のサーバーだと)はオブジェクトストレージ用のドメイン、files.ドメインみたいなサブドメインを用意して、S3 + CloudFrontとかで公開して、CNAMEでCloudFrontを指すようにするのが良いかもしれないです。
(何言ってるか分からんと思うけど・・・)
コンフィグファイルを編集します。
sudo vim sudo cat /etc/nginx/sites-enabled/misskey.nginxそしたら、/objectstorageに来たリクエストはS3のURLへリバースプロキシするようにします。
URL は都度買えてください。
よく知らないけど、location /の上に書いておけばよいのかな?
nginx server { } 443 の方です
# Media file storage is AWS S3.
# Use nginx proxy in AWS S3 to Internet transfer.
# thats because, Cant edit media file url.
location /objectstorage {
proxy_pass https://s3.ap-northeast-1.amazonaws.com/バケット名;
}
# Proxy to Node
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;そしたら保存してターミナルに戻って、nginxへ適用します。
sudo systemctl restart nginx実際にMisskeyのドライブにファイルを投げて、S3に上がっていれば成功です。
URL が /objectstorageで始まっていればうまく行ってます!!!
多分これで構築は良いはず。
あとは適当にメモを残しておきます。
管理画面から出来ます
sudo systemctl start misskeysudo systemctl stop misskeysudo systemctl restart misskeyフォークしたので本家に追従するにはまずgit rebaseとかやって更新を取り込む必要がある
こっちに書いた
データベースを吹っ飛ばすと同じドメインでサーバーを建てられないらしい?ので、定期的にやる必要があります
まずはMisskeyを止めます
sudo systemctl stop misskey次に、Misskeyで利用しているMongoDBのバックアップを取ります。
今回はホームディレクトリにバックアップしたデータを保存するようにしました。dumpフォルダが出来ます。
(ホームディレクトリは ~←チルダ で移動できます)
cd ~
mongodump -o "./dump"**次に、PowerShell を開き(SSH クライアントとは別に)**以下のコマンドを叩いて手元の Windows マシンへバックアップデータを転送します。scpコマンドです。
scp -i {鍵のパス} -r {リモートのユーザー名}@{IPアドレス}:{フォルダのパス} {ローカルのWindowsマシンの保存先パス}例です
scp -i C:\Users\takusan23\key.pem -r ubuntu@000.000.000.000:~/dump C:\Users\takusan23\misskey_backup\これで、ユーザー名のフォルダのところにあるはず(C:\Users\takusan23 みたいな)
後はこれをzipとかにして安全なところに保存しておきます( Google Drive とか? AWS S3 Glacier とか? )
書いた。v10なのでv13だと直さないと使えない
CertbotでHTTPS通信できるようにしましたが、Misskey的にはCloudflareでSSL (HTTPS)するのが良いらしい。
あらかじめ、Cloudflareにドメインを移管しておく必要があります。(いやCloudflare DNSを使えるようしておく必要があります)
まずはCloudflare ダッシュボードからWebサイトを選び、稼働しているドメインを選びます。
そしてSSL/TLSを押して、概要の暗号化モードをフルにします。不具合の原因になるみたい。
次に、DNS>レコードと進み、MisskeyのIPアドレスのレコードがプロキシ済みかどうか確認します。プロキシ済みじゃない場合はしてください。雲のアイコンがオレンジ色になれば良いはず。
これで、Misskey サーバーとの通信の前にCloudflareが入るようになります。
[ブラウザ (PC / スマホ) ] <---> [Cloudflare] <---> [Misskey サーバー (VPS)]さっきのSSL/TLSの設定はこの間に入るCloudflareの設定のために必要でした。
次にVPSへログインします。
まずはMisskeyを止めて、お好みでバックアップを取ってください。
sudo systemctl stop misskey次にnginxのコンフィグを開いて、Let's Encryptではなく、自己署名証明書をセットします。
sudo vim /etc/nginx/sites-enabled/misskey.nginxserver {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name diary.negitoro.dev;
ssl_session_cache shared:ssl_session_cache:10m;
# Self-Certificate
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
# Disbaled Certbot ( thats because, use Cloudflare )
# To use Debian/Ubuntu's self-signed certificate (For testing or before issuing a certificate)
# ssl_certificate /etc/letsencrypt/live/diary.negitoro.dev/fullchain.pem; # managed by Certbot
# ssl_certificate_key /etc/letsencrypt/live/diary.negitoro.dev/privkey.pem; # managed by Certbot保存して、Misskeyを起動し、ブラウザで開けるか確認します。
sudo systemctl start misskey成功していれば、リクエストのレスポンスヘッダーにCloudflare関連の値が入るようになっているはずです。
そしたらもう、今使っているLet's Encryptの証明書は不要になるので、消してしまいます。
sudo certbot revoke --cert-path /etc/letsencrypt/live/ドメイン名/cert.pemWould you like to delete the certificate(s) you just revoked, along with all
earlier and later versions of the certificate?Yで
WARNING: Before continuing, ensure that the listed certificates are not being
used by any installed server software (e.g. Apache, nginx, mail servers).
Deleting a certificate that is still being used will cause the server software
to stop working. See https://certbot.org/deleting-certs for information on
deleting certificates safely.
Are you sure you want to delete the above certificate(s)?Yで
Deleted all files relating to certificate ドメイン名.が表示されれば完了です。