🌮

Tor 上に Misskey インスタンスを立ててみた

2023/12/12に公開

はじめに

Tor でも ActivityPub したいと思ったので、Misskey を Tor 上に立ててみました。現状連合先がいないのでほぼ ActivityPub の意味がないです。

成果物

リンク: http://misskey6c32sh6c4hmq6tzd6k2pafovzfoxd3jpujcfpofymy524o6ad.onion/
レポ: https://github.com/p1atdev/onionskey

Onionskey のスクリーンショット

流れ

  1. .onion ドメインを取る
  2. Misskey を Clone
  3. Misskey の設定をする
  4. Docker の設定をする
  5. 公開

環境

Misskey のバージョンについて

最新版の Misskey に Tor Browser (13.0.6 (Mozilla Firefox 115.5.0esr)) がついていけない [1] ため、少し古いバージョンを使う必要があります。

具体的には v2023.11.0 以前のバージョンにする必要があります。
今回は v13.14.2 を使いました。

いつか Tor Browser が Misskey に追いつけば、最新版を使えるようになると思います。

そんな日を願って――

作業

onion ドメインを取る

取ります。

mkp224o を使います。

https://github.com/cathugger/mkp224o

どうにかして実行ファイルを落としてきて

mkp224o.exe -d domains -n 5 misskey

のようにすると、domains ディレクトリに .onion ドメインのフォルダが作成されます。このあと、このフォルダの中のファイルを使うので、使いたいアドレスが生成されるまでこれを繰り返します。

misskey のように7文字だと、少し時間がかかります。急いでいる人は他の名前にするといいです。

git clone

タグを指定して clone します。

git clone -b 13.14.2 --depth 1 https://github.com/misskey-dev/misskey  

Misskey の設定

通常の Misskey の設定とほぼ同じです。

.config/docker_example.env をコピーして .config/docker.env を作成します。

.config/docker_example.env
# db settings
POSTGRES_PASSWORD=適当なパスワード
POSTGRES_USER=DBユーザー名
POSTGRES_DB=misskey

.config/docker_example.yml をコピーして .config/default.yml を作成します。

.config/docker_example.yml

# 略

#   ┌─────┐
#───┘ URL └─────────────────────────────────────────────────────

# Final accessible URL seen by a user.
url: http://さっき生成した.onionドメイン/

# 略

#   ┌──────────────────────────┐
#───┘ PostgreSQL configuration └────────────────────────────────

db:
# 略

  # Database name
  db: misskey

  # Auth
  user: DBユーザー名
  pass: 適当なパスワード

# 略

# Proxy for HTTP/HTTPS
proxy: http://tor:8118

# 略

proxy で Tor のプロキシを使うようにしていますがいらないかもです。謎です。

追記: プロキシはSOCKS じゃないと意味がないので HTTP トンネルは設定しなくていいです。この記事では SOCKS の対応はしません。

Tor の設定

tor ディレクトリをルートに作成して Tor 関連のファイルを置いていきます。

tor/torrc を作成し

tor/torrc
HiddenServiceDir /etc/tor/hidden_service/
HiddenServicePort 80 web:3000
#HTTPTunnelPort 0.0.0.0:8118

とします。

web:3000 (misskey) を自身の 80 ポートに向けています。HTTPTunnelPort0.0.0.0:8118 にすることで、他のコンテナから HTTP トンネルを利用できるようにします。

次に、tor/hidden_service ディレクトリを作成し、さきほど生成した .onion ドメインのフォルダの中身をコピーします。

tor/hidden_service/hostnametor/hidden_service/hs_ed25519_public_keytor/hidden_service/hs_ed25519_secret_key があることを確認します。

Docker の設定

ルートに Dockerfile.torentrypoint_tor.sh を作成します。

Dockerfile.tor
FROM debian:trixie-slim as tor

# Setting up Tor
RUN apt update
RUN apt install -y tor

COPY entrypoint_tor.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

CMD ["tor"]
entrypoint_tor.sh
#!/bin/sh

chmod 700 /etc/tor/hidden_service

exec "$@"

(この書き方 ChatGPT に教えてもらった)

docker-compose.yml を編集します。

docker-compose.yml
version: "3"

services:
  web:
    ...(略)
  redis:
    ...(略)
  db: 
    ...(略)
  # meilisearch: ほかはお好みで

  tor:
    build:
      context: .
      dockerfile: Dockerfile.tor
    restart: always
    networks:
      - internal_network
      - external_network
    volumes:
      - ./tor:/etc/tor

ここの volumes の設定で、torrc とかドメイン情報もろもろをコンテナに渡しています。

公開

初回の場合は公式の解説の通りにやってください。

それ以降は

docker compose up -d --build

で起動します。(--build いらんかも)

おわり

完了です。お疲れ様でした。

指定したドメインを Tor Browser で開くと Misskey が見れます。

修正履歴

2023/12/19

HTTP トンネルについての記述を修正

脚注
  1. 実際、このバージョンのTor Browser では https://misskey.io/ は正常に使うことができず、「読み込みに失敗しました」と言われる。 ↩︎

GitHubで編集を提案

Discussion