Hyperkitty
Hyperkitty 是一个基于 Django 的 Mailman 归档器和归档界面。
安装
要使用 Hyperkitty,需要一个可用的 web 服务器 设置(例如,使用 Apache HTTP Server 转发到 WSGI,或使用 Nginx 将请求转发到应用服务器,如 UWSGI)。
安装 hyperkitty 软件包。
配置
Web 应用程序在 /etc/webapps/hyperkitty/settings_local.py
中配置(默认配置 /usr/share/webapps/hyperkitty/settings.py
包含此文件)。
/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 端设置 与 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' ]
托管
- 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 配置文件。
安装 nginx 和 uwsgi-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]$ 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]$ 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
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
用户访问和写入。模板自定义
使用 Django 的 TEMPLATES-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
用户身份运行以下命令(例如,使用 sudo 或 su)
[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 登录失败。
参见
- Hyperkitty 文档 - 上游文档
- Mailman 套件文档 - 整个 Mailman 套件(Mailman、Hyperkitty 和 Postorius)的(高级)上游文档