Hyperkitty

提供: ArchWiki
2023年10月28日 (土) 13:47時点におけるKgx (トーク | 投稿記録)による版 (→‎Content-Security-Policy Header: 翻訳)
ナビゲーションに移動 検索に移動

Hyperkitty は、Django ベースのアーカイバおよび Mailman のアーカイブインターフェイスです。

インストール

Hyperkitty を使用するには、動作する ウェブサーバー のセットアップが必要です (たとえば、Apache HTTP Server を使用して WSGI に直接転送するか、Nginx を使用してリクエストを転送します) UWSGI などのアプリケーションサーバー)

hyperkitty パッケージを インストール します。

警告: Hyperkitty には TLS 経由でのみアクセスしてください (テスト目的でハイパーキティを実行しているマシンから直接アクセスする場合を除く)。そうしないと、パスワードやユーザー データがネットワークに公開されてしまいます。

設定

Web アプリケーションは、/etc/webapps/hyperkitty/settings_local.py で設定されます (これは、/usr/share/webapps/hyperkitty/settings.py のデフォルト設定に含まれています)

ノート: Hyperkitty は、ユーザーの機密データ (sqlite データベースなど) を /var/lib/hyperkitty/data/ に保存する必要があります。このディレクトリには root とアプリケーション自体だけがアクセスできるためです。

アプリケーションのデフォルトのシークレットを変更します。

/etc/webapps/hyperkitty/settings_local.py
SECRET_KEY = 'something-very-secret'

運用環境で実行する場合は、必ずデバッグを無効にしてください。

/etc/webapps/hyperkitty/settings_local.py
DEBUG = False

有効な電子メール設定を追加します (Django アプリケーションが購読者を確認できるようにします)

/etc/webapps/hyperkitty/settings_local.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25
EMAIL_HOST_USER = username
EMAIL_HOST_PASSWORD = password
ノート: DEFAULT_FROM_MAIL 設定オプションと SERVER_MAIL 設定オプションを使用して、それぞれ内部認証とエラー報告のために送信されるメールの From: ヘッダーを定義できます。

実行中の mailman インスタンスの REST API に接続するには、設定オプションを hyperkitty の構成に追加する必要があります。

/etc/webapps/hyperkitty/settings_local.py
MAILMAN_REST_API_URL = 'http://localhost:8001'
MAILMAN_REST_API_USER = 'rest_admin'
MAILMAN_REST_API_PASS = 'rest_admin_password'

mailman インスタンスとのアーカイブ統合を構成するには、Mailman 側で integration with hyperkitty をセットアップし、次にそれらの接続を受け入れるように hyperkitty を設定します。

/etc/webapps/hyperkitty/settings_local.py
MAILMAN_ARCHIVER_KEY = 'SecretArchiverAPIKey'
MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1')

アプリケーションの有効なホスト名またはドメイン名を定義する必要があります。

/etc/webapps/hyperkitty/settings_local.py
ALLOWED_HOSTS = [
    'localhost',
    'lists.example.com'
]

ホスティング

この記事またはセクションは加筆を必要としています。
理由: Example for a setup using Apache HTTP Server. (議論: トーク:Hyperkitty#)
ノート:
  • Hyperkitty は独自のユーザーおよびグループ (すなわち hyperkitty) として実行する必要があります。/etc/webapps/hyperkitty//var/lib/hyperkitty//run/hyperkitty/ をそれぞれ設定、静的キャッシュ、(潜在的な) ソケットに使用します。
  • 静的ファイルはデフォルトではトップレベルの static/ ディレクトリから提供され、同じ (サブ) ドメイン上の postorius と衝突するため、/etc/webapps/hyperkitty/settings_local.py 内の STATIC_URL 変数をユニークなもの (例えば'/hyperkitty_static/') に設定することを推奨します。

Nginx と uWSGI

Hyperkitty には、/etc/uwsgi/hyperkitty.ini に動作する uWSGI 設定ファイルが付属しています。

nginxuwsgi-plugin-pythonインストール し、uWSGI 用のアプリケーションごとのソケットを作成し (UWSGI#uWSGIソケットのアクセシビリティ を参照)、uwsgi-secure@hyperkitty.socket ユニットを activate します。

ローカルのテストセットアップでは、Hyperkitty を http://localhost/hyperkitty/、以下の Nginx を設定に追加してください:

/etc/nginx/hyperkitty.conf
server {
  listen 80;
  server_name localhost;
  charset utf-8;
  client_max_body_size 75M;
  root /usr/share/webapps/hyperkitty;
  access_log /var/log/nginx/access.hyperkitty.log;
  error_log /var/log/nginx/error.hyperkitty.log;

  location /hyperkitty_static {
    alias /var/lib/hyperkitty/static;
  }

  location ~^/(hyperkitty|user-profile)/(.*)$ {
    include /etc/nginx/uwsgi_params;
    uwsgi_pass unix:/run/hyperkitty/hyperkitty.sock;
  }
}

セットアップ

ノート: hyperkitty ユーザーとして次のコマンドを実行します (例: sudo または su を使用)

最初のインストール後、必ずデータベースを生成してください。

[hyperkitty]$ django-admin migrate --pythonpath /usr/share/webapps/hyperkitty/ --settings settings

その後、アプリケーションの静的データを収集する必要があります。

[hyperkitty]$ django-admin collectstatic --pythonpath /usr/share/webapps/hyperkitty/ --settings settings

データを圧縮するには、次のコマンドを実行します。

[hyperkitty]$ django-admin compress --pythonpath /usr/share/webapps/hyperkitty/ --settings settings

Web アプリケーションで必要な非同期操作のための hyperkitty-qcluster.service systemd サービスを 有効化 および 起動 します。

データベースにデフォルトデータを入力します (初めてセットアップする場合)

[hyperkitty]$ django-admin loaddata --pythonpath /usr/share/webapps/hyperkitty/ --settings settings first_start

Django アプリケーションのスーパーユーザーアカウントを作成します。

[hyperkitty]$ django-admin createsuperuser --pythonpath /usr/share/webapps/hyperkitty --settings settings

http://localhost/hyperkitty/admin にある Django アプリケーションの管理インターフェイスにログインして、デフォルトの example.com 以外に Sites を追加できるようにするか、さらに Mail ドメイン を追加します。

ノート: 新しい site を追加した後、/etc/webapps/hyperkitty/settings_local.pySITE_ID 変数をそれぞれの ID に設定してください。

ヒントとテクニック

mailman2 アーカイブのインポート

Hyperkitty は、mailman 3.0 より前のバージョンからアーカイブをインポートできます。

ノート: 次のコマンドを hyperkitty ユーザーとして実行します (例: sudo または su を使用)
[hyperkitty]$ django-admin hyperkitty_import --pythonpath /usr/share/webapps/hyperkitty --settings settings -l ADDRESS mbox_file [mbox_file ...]

ここで、ADDRESS は完全修飾リスト名 (例: list@example.com) で、引数 mbox_file は既存のアーカイブを表します。(mbox 形式) でインポートします (通常は {{ic|/var/lib/mailman/archives/private/LIST_NAME.mbox/LIST_NAME.mbox} にあります) })

その後、全文検索インデックスを手動で更新します。

[hyperkitty]$ django-admin update_index_one_list --pythonpath /usr/share/webapps/hyperkitty --settings settings ADDRESS
ノート: 全文検索インデックスは、分単位で実行される cron ジョブによって自動的に作成されます。

Content-Security-Policy ヘッダー

HyperKitty の [1] HTTP 応答ヘッダーを定義できます。これにより、指定された場所からのコンテンツとリソースのみが許可されます。

nginx を使用する場合は、HyperKitty がセットアップされている server ディレクティブに以下を追加します。

/etc/nginx/hyperkitty.conf
[..]
add_header Content-Security-Policy "default-src 'self'; connect-src 'self'; img-src 'self' https://secure.gravatar.com; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'";
[..]

Disabling Gravatar support

The builtin Gravatar support can be disabled in the configuration:

/etc/webapps/hyperkitty/settings_local.py
HYPERKITTY_ENABLE_GRAVATAR = False

This option was introduced in Hyperkitty 1.3.4. In earlier versions, use this instead:

/etc/webapps/hyperkitty/settings_local.py
GRAVATAR_SECURE_URL = ''

Saving mail attachments to disk

By default Hyperkitty stores mail attachments in its database. However, it can be configured to save the attachments to disk instead:

/etc/webapps/hyperkitty/settings_local.py
HYPERKITTY_ATTACHMENT_FOLDER = /var/lib/hyperkitty/data/attachments
ノート: The location needs to be accessible and writable by the hyperkitty user.

Template customization

Using Django's TEMPLATES-DIRS capabilities, it is possible to override the following templates to change the looks of the application:

  • hyperkitty/headers.html: the content will appear before the </head> tag
  • hyperkitty/top.html: the content will appear before the <body> tag
  • hyperkitty/bottom.html: the content will appear before the </body> tag

Xapian search backend

Hyperkitty can make use of a Xapian based search backend. Install the python-xapian-haystack package and configure the backend:

/etc/webapps/hyperkitty/settings_local.py
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'xapian_backend.XapianEngine',
        'PATH': "/var/lib/hyperkitty/data/xapian_index",
    },
}

Make sure to create the search index for all lists afterwards. Run the following command as the hyperkitty user (e.g. using sudo or su):

[hyperkitty]$ django-admin update_index --pythonpath /usr/share/webapps/hyperkitty --settings settings

Troubleshooting

SMTP AUTH extension not supported by server

If upon first login with the admin user a SMTNotSupportedError is thrown (logged to /var/log/hyperkitty/hyperkitty.log), make sure to verify the EMAIL_* settings in /etc/webapps/hyperkitty/settings_local.py.

By default e.g. EMAIL_USE_TLS is set to False which might trigger a failed login via SMTP.

See also