Hyperkitty

来自 ArchWiki

Hyperkitty 是一个基于 DjangoMailman 归档器和归档界面。

安装

要使用 Hyperkitty,需要一个可用的 web 服务器 设置(例如,使用 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_MAILSERVER_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 端设置 与 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'
]

托管

此条目或章节需要扩充。

原因: 使用 Apache HTTP Server 进行设置的示例。(在 Talk: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 单元。

对于本地测试设置,在 http://localhost/hyperkitty/ 上提供 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 用户身份运行以下命令(例如,使用 sudosu)。

首次安装后,请确保生成数据库

[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

启用启动 hyperkitty-qcluster.service systemd 服务,以进行 Web 应用程序上所需的异步操作。

使用默认数据填充数据库(首次设置时)

[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

登录到 Django 应用程序的管理界面 http://localhost/hyperkitty/admin,以便能够添加更多 站点(除了默认的 example.com)或添加其他 邮件域名

注意: 添加新 站点 后,请确保将 /etc/webapps/hyperkitty/settings_local.py 中的 SITE_ID 变量设置为相应的 ID!

技巧与诀窍

导入 mailman2 存档

Hyperkitty 可以从 mailman < 3.0 导入存档。

注意:hyperkitty 用户身份运行以下命令(例如,使用 sudosu)。
[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 格式),通常位于 /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 定义 Content-Security-Policy 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'";
[..]

禁用 Gravatar 支持

可以在配置中禁用内置的 Gravatar 支持

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

此选项在 Hyperkitty 1.3.4 中引入。在早期版本中,请改用此方法

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

将邮件附件保存到磁盘

默认情况下,Hyperkitty 将邮件附件存储在其数据库中。但是,可以将其配置为将附件保存到磁盘

/etc/webapps/hyperkitty/settings_local.py
HYPERKITTY_ATTACHMENT_FOLDER = /var/lib/hyperkitty/data/attachments
注意: 该位置需要可被 hyperkitty 用户访问和写入。

模板自定义

使用 DjangoTEMPLATES-DIRS 功能,可以覆盖以下模板以更改应用程序的外观

  • hyperkitty/headers.html:内容将出现在 </head> 标记之前
  • hyperkitty/top.html:内容将出现在 <body> 标记之前
  • hyperkitty/bottom.html:内容将出现在 </body> 标记之前

Xapian 搜索后端

Hyperkitty 可以使用基于 Xapian 的搜索后端。安装 python-xapian-haystack 软件包并配置后端

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

确保之后为所有列表创建搜索索引。以 hyperkitty 用户身份运行以下命令(例如,使用 sudosu

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

故障排除

服务器不支持 SMTP AUTH 扩展

如果在首次使用管理员用户登录时抛出 SMTNotSupportedError 错误(记录在 /var/log/hyperkitty/hyperkitty.log 中),请确保验证 /etc/webapps/hyperkitty/settings_local.py 中的 EMAIL_* 设置。

默认情况下,例如 EMAIL_USE_TLS 设置为 False,这可能会触发通过 SMTP 登录失败。

参见