技術書典14で発行した『はじめてのNostr』サポートページです。
techbookfest.org
本に関してなにか追加の事項があった場合、ここに記載します。
もしなにか間違いや注意したほうがいい点がありましたら、本誌に記載の連絡先や、この記事のコメント欄、各種SNSなどで教えていただけると助かります。
ライセンスについて
紙書籍にライセンス表記を入れる時間的余裕がなかったので、ライセンス表記がないですが、ライセンスは電子版に準じて、CC BY-SA扱いでお願いします。
技術書典14で発行した『はじめてのNostr』サポートページです。
techbookfest.org
本に関してなにか追加の事項があった場合、ここに記載します。
もしなにか間違いや注意したほうがいい点がありましたら、本誌に記載の連絡先や、この記事のコメント欄、各種SNSなどで教えていただけると助かります。
紙書籍にライセンス表記を入れる時間的余裕がなかったので、ライセンス表記がないですが、ライセンスは電子版に準じて、CC BY-SA扱いでお願いします。
Admin-fe使ったことなかったけど使う必要が生じたのでメモ
Pleroma自体の設定を変更することは考えてなくて、ユーザーや投稿のモデレーションができればよかったので、フルで使えてるのかはわからない。
Pleroma 2.5.0(ソースからインストール)
自分をadminに設定してなかったので設定する。
ユーザーの名前(nickname)をfoobar
とする。
cd /opt/pleroma sudo service pleroma stop sudo -Hu pleroma MIX_ENV=prod mix pleroma.user set foobar --admin
config/prod.secret.exs
を編集する:
sudo -Hu pleroma nano config/prod.secret.exs
ここで、
config :pleroma, configurable_from_database: true
に変更(false
→true
にする)。
設定をデータベースへマイグレーション
sudo -Hu pleroma mix pleroma.config migrate_to_db
ここで
Migration is not allowed until all deprecation warnings have been resolved.
というメッセージが出たので、マイグレーションが動いてるかどうかがはっきりしない。
まあ動いてるからいいか…
起動
sudo service pleroma start
adminユーザでpleroma-FEにログインすると、右上にadmin-FEへのリンクされたアイコンが表示される。
URLでいくと、instanceのドメイン/pleroma/admin/
にアクセスするといいっぽい。
(2023-04-11追記) boobee.blueも招待制に移行したそうです(元投稿)。
2023年3月初め、BlueskyというSNSアプリが招待制で公開された。
招待制のため、招待コードをゲットしないと使うことができない。
しかし、Blueskyのソースコードは、それを構成するAT Protocolという仕組みとともに公開されているので、有志が立てたサーバーを使って実際の動作を確認することができる*1。
日本のKingYoSunさんが立てたBlueskyサーバがboobee.blueである。
今回はこちらを利用してBlueskyを体験してみることにする。
(2023-04-11追記)
boobee.blueが建てられた当初は招待コードなしで登録できたが、ユーザーが急増しているため、2023年4月11日からは招待制に移行した。ユーザーごとに1週間に1つ招待コードが発行されるとのこと。
(追記終)
iOSの人は公式アプリがあるが、iOSがなくても公式Webアプリが利用できる(今のところ)。今回はこの公式Webアプリを使ったやり方を書いていく。
https://boobee.blue
を入力して、[Next]をクリック。ハンドルというのは、IDみたいなもので、Twitterのユーザー名(screen_name)に相当する。後で変更もできる*2。
_atproto
サブドメインについてTXT
タイプにdid=did:plc:
で始まる値をコピペして入力し、設定する。[Search]タブに行くと同じサーバーの人間がずらずらでてくるので、適当にフォローするといいかもしれない。
Migration guide — Mattermost documentation
このページのMigrate from Slackの手順にしたがってSlackのエクスポート形式からMattermostのbulk export形式に変換し、mmctlを使ってアップロード・インポートを行おうとした。
Slackログの変換やMmctlは、Mattermostのサーバーとは別のPCで実行しているが、ローカルネットワークで接続されている。
mmctl job show <job-id>
で見ると次のような文面が含まれていた。
error:We could not count the users. — importMultiplePostLines: Unable to save the Post., failed to save Post: pq: invalid byte sequence for encoding "UTF8": 0x00
どうやらPostgreSQLに記録しようとした文字列に0x00
という不正なバイトが含まれていたらしい。
よくわからなかったのでjsonlファイルを半分半分にして2分探索していったところ、\u0000
という文字列が(何度も)含まれる発言が1つあった。なので、その中の\u0000
をすべて削除したところ、インポートはうまくいった。
結局、大元のSlackのエクスポートファイルにも\u0000
存在していたので、謎ではあるが、mmetlやMattermostは悪くなさそうという結論になった。
2分探索で原因を探るために大量のインポート用のzipファイルをMattermostにアップロードしてしまったので、これを消したい。
Dockerでインストールした場合、mmctl import upload
でアップロードしたファイルは(コンテナ外から見て)volumes/app/mattermost/data/import
にあるので、普通に消せばいい気がする。
Slack代替としてのMattermostをローカルにインストールしてみよう、と思ってやってみたのでメモ。外部からアクセス可能にするにも、直接公開するのでなくCloudflare Tunnelを使えば、自宅サーバを直接外部に見せなくて良いのでマシかなと思ってやってみた。
すでにインストールされてたのでやらなかったが、
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
でいいらしい。
バージョンは
$ docker --version Docker version 20.10.12, build 20.10.12-0ubuntu4 $ docker-compose --version docker-compose version 1.29.2, build unknown
とのこと。
docker run --name mattermost-preview -d --publish 8065:8065 mattermost/mattermost-preview
で、http://localhost:8065
などにアクセスして動作を確認する。
docker stop mattermost-preview docker rm mattermost-preview
クローンしてきて、.env
ファイルを変更する。
git clone https://github.com/mattermost/docker cd docker cp env.example .env nano .env
.env
ファイルの変更点は、
mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes} sudo chown -R 2000:2000 ./volumes/app/mattermost
sudo docker-compose -f docker-compose.yml -f docker-compose.without-nginx.yml up -d
終了はsudo docker-compose -f docker-compose.yml -f docker-compose.without-nginx.yml down
ここではNginxなしでやっているが、200人以上が使うなどの場合はNginx使った方がパフォーマンス的にいいらしい。実際のところどうなのかわからないが…。
mm.example.com
が使いたい場合にはexample.com
を追加する必要があるっぽい。DNS情報が更新されるまで待つ。
cd ~ wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb sudo dpkg -i cloudflared-linux-amd64.deb
cloudflared tunnel create mm-example
mm-example
の部分は適当に識別しやすいようにつける。
ここで表示されるトンネルIDとJSON pathを控える。JSON pathは~/.cloudflared/
と思われる。
nano ~/.cloudflared/config.yml
内容を以下のようにする。<Tunnel-UUID>
は先程のtunnel create
で表示されたものを設定する。
tunnel: <Tunnel-UUID> # トンネルID credentials-file: /home/nixeneko/.cloudflared/<Tunnel-UUID>.json #JSONのパス ingress: - hostname: mm.example.com service: http://localhost:8065 - service: http_status:404
cloudflared tunnel route dns mm-example mm.example.com
cloudflared tunnel --config ~/.cloudflared/config.yml run mm-example
sudo cloudflared --config ~/.cloudflared/config.yml service install systemctl start cloudflared
不要時はcloudflared tunnel --config ~/.cloudflared/config.yml delete mm-example
とかして、トンネル一覧cloudflared tunnel list
から消えてることを確認するといいらしい。
アクセスがもっさりしてる。トンネルを通じてよけいな通信経路が延びてるのだから仕方ないが。
これで安定動作させられるのかは不明である。
実用上はこの後設定をしないといけないと思われる。SMTPの設定や、モバイル通知の設定、などなど。Slackからログをインポートしたりもできるらしい。
Nostrのドメイン認証としてNIP-05認証がある。
無料でやる場合はGitHub Pagesが便利だが、Gitに慣れてないとワークフローが分かりづらいと思う。
というわけでCloudflare Pagesでやってみた。
nostr.json
を次のような内容で作成する。ただし、自分のアカウントに合わせて変更する必要がある。
{ "names": { "nixeneko": "9a00ce174a1dcad4cc4925a475a7b89eedbf0e2aa2d03ad904fc64cdaef946fc" } }
ここで、"names"
の中の左側は使いたい名前(英数字と-
_
.
が使える)にし、右側はHEX表記の自分のアカウントの公開鍵を入力する(Irisなら設定の[アカウント]から「公開鍵」の[Copy hex]で取得できる。あるいはnpub
形式をhttps://damus.io/key/で変換できる。)
nostr.json
を次のようなフォルダ構造に入れる(一番上のフォルダの名前は何でもいい)
cloudflarepagestest/ + .well-known/ + nostr.json
「プロジェクトを作成する方法を選択する」と表示されるので、[アセットをアップロード]をクリック。
「プロジェクトをアップロードしてサイトをデプロイする」と表示されるので、プロジェクト名を入力する(他人に使われてなければこれがそのままドメイン名になる)。その後、[プロジェクトの作成]をクリックする。
「プロジェクト アセットをアップロードする」と表示されるので、ここに最初に用意したフォルダ(cloudflarepagestest
)をドラッグ&ドロップする。
[サイトをデプロイ]をクリック。
うまくいけば「成功しました」と出る
表示されたドメインをコピーして、[nostr.json
に書いた名前@コピーしたドメイン]の形式(ここではnixeneko@mynostrtest20230221.pages.dev
)をNostrクライアントのプロフィール設定のドメイン認証欄に貼り付けて、設定を保存する。
(Irisの場合)
できた。