Nitterを自宅サーバーで運用する:プライバシー重視のTwitter代替フロントエンド構築ガイド

Nitterは、Twitterの公式APIをバックエンドとして使いながら、追跡・広告・アルゴリズム推薦を一切排除した軽量オープンソースフロントエンドです。本ガイドでは、Ubuntu環境を前提に、Nim言語によるビルドからsystemdサービス化までの一貫した私有デプロイ手順を解説します。

前提条件と依存パッケージのインストール

以下のコマンドで必要なツールとライブラリをまとめて導入できます:

sudo apt update
sudo apt install -y \
  nim \
  libpcre3-dev \
  libsass-dev \
  redis-server \
  git \
  curl

専用ユーザーとプロジェクトの準備

セキュリティ上の観点から、Nitter専用の非特権ユーザーを作成します:

sudo useradd -r -m -s /bin/bash nitter
sudo -u nitter git clone https://gitcode.com/gh_mirrors/ni/nitter /home/nitter/nitter-app
sudo -u nitter chmod 755 /home/nitter/nitter-app

ビルドと静的アセット生成

プロジェクトディレクトリ内で、以下のステップで実行可能バイナリとCSSを生成します:

cd /home/nitter/nitter-app
sudo -u nitter nimble build -d:release --mm:orc
sudo -u nitter nimble scss
sudo -u nitter nimble md

--mm:orc はNim 2.0以降推奨のガベージコレクタオプションであり、-d:danger の代わりに安定性を優先します。

設定ファイルのカスタマイズ

サンプル設定をコピーし、編集します:

sudo -u nitter cp nitter.example.conf nitter.conf

主な編集項目例(nitter.conf):

hostname = "nitter.example.net"
port = 8080
https = false
redisHost = "127.0.0.1"
redisPort = 6379
hmacKey = "a4b8e2f9c7d10a65..."  # openssl rand -hex 32 で生成推奨
cacheTTL = 300  # 秒単位のデフォルトキャッシュ有効期限

セッション管理のセットアップ

Twitter API v2の制限により、認証済みセッションが必要です。toolsディレクトリ内のPythonスクリプトを用いて、sessions.jsonl を生成します:

cd tools
pip3 install requests
python3 generate_session.py --output ../sessions.jsonl

生成されたファイルはプロジェクトルートに配置し、所有者をnitterに変更します。

Dockerを利用しない場合のサービス登録

/etc/systemd/system/nitter.service に以下を記述:

[Unit]
Description=Nitter Web Service
After=redis-server.service

[Service]
Type=simple
User=nitter
Group=nitter
WorkingDirectory=/home/nitter/nitter-app
ExecStart=/home/nitter/nitter-app/nitter
Restart=on-failure
RestartSec=10
Environment="PATH=/usr/bin:/bin"

[Install]
WantedBy=multi-user.target

サービスを有効化・起動:

sudo systemctl daemon-reload
sudo systemctl enable nitter
sudo systemctl start nitter

Nginxによるリバースプロキシ設定(HTTPS対応)

/etc/nginx/sites-available/nitter.conf:

server {
    listen 443 ssl http2;
    server_name nitter.example.net;

    ssl_certificate /etc/letsencrypt/live/nitter.example.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nitter.example.net/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    server_name nitter.example.net;
    return 301 https://$server_name$request_uri;
}

有効化後、sudo nginx -t && sudo systemctl reload nginx を実行。

パフォーマンス最適化のためのRedis調整

/etc/redis/redis.conf で以下の値を推奨設定:

maxmemory 256mb
maxmemory-policy allkeys-lru
timeout 300

その後、sudo systemctl restart redis-server で再起動。

テーマと表示制御

Nitterは?theme=dracula?nojs=1などのクエリパラメータで即時切り替えが可能です。また、defaultTheme設定で初期テーマを指定できます。カスタムCSSはpublic/css/themes/下に追加可能です。

キャッシュ戦略の微調整

nitter.conf内の時間関連パラメータ:

  • listMinutes = 5 — タイムライン表示のキャッシュ保持時間(分)
  • profileMinutes = 15 — プロフィールページのキャッシュ期間
  • rssMinutes = 10 — RSSフィード生成間隔
  • httpTimeout = 15 — 外部APIへのリクエストタイムアウト(秒)

運用監視の基本設定

ログ出力は標準出力をsystemd journalに流すため、以下でリアルタイム確認可能です:

sudo journalctl -u nitter -f

必要に応じて、/var/log/nitter/配下にファイル出力するようExecStartを修正することもできます。

タグ: nitter twitter-alternative Ubuntu redis nginx

6月4日 19:04 投稿