🛠️LJJ運用記録
!ljj
help-circle
rss

(管理者ユーザで)投稿やコメントの画面のmoreメニューを開くと「サイトへのアクセス禁止」とあるのがBanPerson APIらしい。ユーザ画面にはないので、投稿を先に削除してしまうとBANするのにAPIを直接使うしかなくなる。

PictrsのURLについて
- Issue [Implement image hosting directly inside Lemmy #371](https://github.com/LemmyNet/lemmy/issues/371) - Commit [Proxy pictrs requests through Lemmy (fixes #371) (#77) ](https://github.com/LemmyNet/lemmy/commit/c34fffc2c48b82e7c7aa2f139850c2917fc36438#diff-6c47edf9ec4b8f15908ba85b4b05bee879e056177299ca5777a97510270158bf) - 上記Issueとcommitにより、Lemmy経由でpictrsのデータをサーブするようになった。 - config/defaults.hjson に `pictrs_url: "http://pictrs:8080"`の設定が増えた。Lemmy本体はこのURL経由でpictrsと通信する。 ``` # address where pictrs is available pictrs_url: "http://pictrs:8080" # address where iframely is available iframely_url: "http://iframely" ``` - デフォルト設定だとlemmyコンテナからpictrs:8080やiframely:80にアクセスする。 - 外部からpictrsにアクセスすることはもはやないので、docker-compose.ymlに書かれたpictrsコンテナのポートマッピングは必要なくなった、らしい。

Lemmy 0.9.9
https://lemmy.juggler.jp/ と https://lemmy2.juggler.jp/ を Lemmy 0.9.9 にアップデートしました。
3

Hexoの記事とLemmyのコメント欄を連動させた
----- Hexoの記事とLemmyのコメント欄を連動させた。 例 https://earphones.juggler.jp/2021/Moondrop-SSP/ - blog記事に拡張タグをつけてclean-deployを2回行うと、自動的にLemmyサイトに投稿を作成する。 - blog記事の「コメントを投稿する」リンクからlemmyの投稿に飛んでコメントできる。 - コメントはblog記事に表示される。 おおむねHexo側のカスタマイズで実現している。Lemmy側は何も変更しておらずAPIを普通に呼びだしてるだけだ。 ---- ### Lemmyにした理由 - マイクロブログと違い、後から投稿を編集できる。ブログからLemmy側へ自動転載した後、手動で記事を調節できる。 - リンクアグリゲータなので、URLでの記事検索がやりやすい。自動転載する前に既存記事を検索することで、重複ポストを防止できる。 - 近い将来にActivityPub対応予定がある。 ----- ### 1: 拡張タグの実装 記事データの最後に `{% lemmyComment %}` を書いておく。記事ごとにタグを書くのは面倒くさいが、現状Hexoのサイト生成処理でasyncできるのは拡張タグだけだ。HTTPリクエストなどを行う必要上、他の手はない。 hexoの作業フォルダの下に`scripts/lemmyCommentTag.js` を用意する。hexoは初期化時にそれを読むので拡張タグを実装できる。 拡張タグの登録。 ``` hexo.extend.tag.register('lemmyComment', function(args){ const self = decycle(this); for( const key of ["date", "updated", "raw","tags","content","categories","site"] ){ self[key]=`(${typeof self[key]})`; } if(verbose) console.log(`self=${ JSON.stringify(self, null, 2)}`) return lemmyCommentImpl(self,args); }, {async: true}); ``` - [ファイル全体](https://gist.github.com/tateisu/e358d4574dcf3b5f4f98b499a474d8a4) 呼び出された関数の`this`オブジェクトに記事の情報が色々入っている。`args` には拡張タグの引数が渡される。サイト設定 `_config.yml` の内容は `hexo.config` で参照できる。 async function `lemmyCommentImpl()` の内容を大雑把に書くと: - assets folder に lemmyComment.png があるか確認する。記事だと誤認識されないように拡張子をpngに偽装しているが、中身はjsonだ。 - json中に`postId`(lemmyサイトの投稿ID)がなければ検索したりログインして投稿したりして`postId`を用意する。用意したら lemmyComment.png に保存しておく。 - 関数の返り値は拡張タグの展開結果のHTML断片で、今回は空のdiv要素と関数呼び出しを行うscript要素だ。 ----- ### 2: lemmyサイトからデータを取得するプロクシAPI lemmy側を改造せずにオリジン間リソース共有(CORS)の制約を突破するため、単純な中継APIを用意する。 (A)ブログのサーバにnodejsで簡単なHTTPサーバを書く。 postIdを指定すると GET https://lemmy.juggler.jp/api/v2/post?id=xxx してその内容を返す。 (B)ブログのサーバのnginxを設定して /api/ へのアクセスを上記HTTPサーバに中継する。 ----- ### 3: ブラウザ側スクリプト hexo の`theme/{themeName}/layout/_partial/head.ejs`の下の方に以下の内容を追記する。 ``` <script src="/markdownToHtml.js"></script> <script src="/hexo-comment-lemmy.js"></script> <link rel="stylesheet" href="/hexo-comment-lemmy.css"> ``` hexoのsourceフォルダに以下のファイルを追加する。 - source/hexo-comment-lemmy.css - source/hexo-comment-lemmy.js - source/markdownToHtml.js `markdownToHtml.js` は npmのmarkedモジュールをbrowserifyで適当にブラウザ用スクリプトに変換したもの。 `hexo-comment-lemmy.css` はコメント表示部分のスタイルを適当に。 `hexo-comment-lemmy.js` に定義した関数は拡張タグの変換結果から呼び出される。 (2)で用意したプロクシAPIを非同期に呼び出して、応答に含まれるコメントデータをDIV要素に追加する。 ---- ### 4: 動作状況 まだちゃんと動作確認していない。 ---- ### 5: その他 もし自動投稿が不要なら拡張タグは必要ない。記事のfront matterにlemmyPostIdを定義して、theme中のejsでそれを見てDOM要素を追加すれば済む。

コミュニティのモデレーション
このサーバでは政治的な話題を取り扱わないので、海外からわざわざ登録したユーザがフォローしたリモートの政治的なコミュニティを「強制削除」しました。 コミュニティがローカルでもリモートでも、削除を行ったサーバのDBではcommunityテーブルのremovedフラグが真になります。deletedフラグはオフのままです。 ``` # select name,removed,deleted from community where removed = true or deleted = true; name | removed | deleted -----------+---------+--------- main | t | f nsfw_on | t | f lemmy | t | f nsfw_off | t | f communism | t | f juchegang | t | f (6 rows) ```


現時点ではリモートのNSFWなコミュや投稿の可視性に問題があるようだ…。 とりあえずissueを投げた。

連合機能の動作確認状況
### lemmy.mlは連合テストに使えない 連合機能の動作確認には相手サーバが必要。 - 連合可能 / allowed_instances 制限なし - ユーザ登録可能/ 制限なし lemmy.mlの連合はallowed_instancesが制限されていて、リモートからは見れても新規データのpushはしてもらえないのでした。 ### ユーザのフォロー - そういう機能は元々ないっぽい。 - 「フォローしてほしいならコミュニティを作れ」というサービスらしい。 ### リモートのコミュニティを検索 - サイトヘッダ部の検索欄に https://lemmy.cardina1.red/c/distsns などを指定して検索する ### リモートのコミュニティの登録(フォロー) - 登録したタイミングで古い投稿をいくつかfetchするらしい。全部ではない。 - うまく連合していれば、投稿が追加/変更された時に自動的にリモートに伝達される ### リモートのコミュニティに投稿を投げる - できてた。 - うまく連合していれば、投稿が追加/変更された時に自動的にリモートに伝達される ### リモートのコミュニティの投稿へのコメント - できてた。 - うまく連合していれば、コメントが追加/変更された時に自動的にリモートに伝達される ### リモートの投稿へのアクション - スター(保存):できてた。自アカウントの投稿リストの「保存済」から見れる。リモートの対象投稿のページには詳細は表示されない。 - クロスポスト:できてた。無断転載に見えるやつだった。

連合できました! / ローカルのコミュニティの整理
なんやかんやあって https://lem.ph3j.com/ や https://lemmy.cardina1.red/ と連合できました。 分散SNSらしくなってきた! ついでに、なるべく他と被らないようにローカルのコミュニティを削除/追加しました。 Lemmy 自体の話はローカルには2コミュニティもあれば十分でしょう。 - [!ljj@lemmy.juggler.jp](https://lemmy.juggler.jp/c/ljj) - [!sandbox@lemmy.juggler.jp](https://lemmy.juggler.jp/c/sandbox)

レミーの公式URLなど
Lemmy ソースコード https://github.com/LemmyNet/lemmy Lemmyのドキュメント https://join.lemmy.ml/docs/en/index.html Lemmyの設定ファイルのデフォルト値。 https://github.com/LemmyNet/lemmy/blob/main/config/defaults.hjson federation.tls_enabled ってなくなったのかな エラーメッセージにサーバ側のIPアドレスが出る https://github.com/LemmyNet/lemmy/issues/1318 nginx.confのテンプレ更新で直ったらしい

管理者になって管理画面からアイコンを設定してみたけど、ページヘッダ部分だけ変わってfaviconは変わらんな…? nginxで変更してみる。 https://lemmy.juggler.jp/static/assets/icons/favicon.svg https://lemmy.juggler.jp/static/assets/icons/apple-touch-icon.png ``` root /usr/share/nginx/html/lemmy; location /static/assets/icons/apple-touch-icon.png { rewrite ^ /apple-touch-icon.png break; } location /static/assets/icons/favicon.svg { rewrite ^ /favicon.svg break; } ```
1

🛠️LJJ運用記録
!ljj

    lemmy.juggler.jpの運用記録

    • 0 users online
    • 1 user / day
    • 1 user / week
    • 1 user / month
    • 1 user / 6 months
    • 8 subscribers
    • 15 Posts
    • 6 Comments
    • Modlog