Modoboa

来自 ArchWiki

本文或章节需要语言、wiki 语法或风格改进。请参考Help:Style

原因: 需要修改的地方太多,无法一一列举。(在Talk:Modoboa中讨论)

Modoboa 是一个邮件托管和管理平台,包括一个现代且简化的 Web 用户界面,旨在与 PostfixDovecot 协同工作。

有关背景信息,请参阅 List of applications/Internet#Mail servers

当设置此程序时,看起来 aur 仓库是安装依赖项的基本方法,但缺少很多您目前必须手动完成的系统设置。以下是如何将 modoboa 设置为系统服务的详细信息。

注意: 现在安装 Modoboa 时存在一些问题,因此这篇 wiki 文章目前尚未完成,需要修订。

安装

提示: 在撰写本文时,aur 仓库由于 python3.12 而已过时。有一个用户维护的仓库可以安装 modoboaAUR,它将 python 模块安装到 /usr/lib/python3.12/site-packages/modoboa 或您当前运行的任何 python 版本中。但它缺少许多软件包,包括 python-django-rqAUR python-magic python-tldextract python-reportlab python-aiosmtplibAUR 以及与 python-lxml 的版本冲突。在这些问题解决之前,请使用 pip 通过 python 安装

要通过 pip 安装 modoboa,请创建一个 python-virtualenv。如果您想封装程序,您也可以创建一个 modoboa 用户。

找到放置 modoboa 的位置,然后运行

mkdir modoboa
cd /modoboa
virtualenv env
. env/bin/activate.fish

然后在您进入虚拟环境后安装 modoboa

注意: 构建 modoboa 之前需要以下软件包:base-devel python libxml2 libxslt libjpeg-turbo rrdtool libffi openssl pkgconf cairo
pip install modoboa


如果您愿意,您可以阅读文档。此外,这里是指向 github 的链接以供参考:Modoboa-Github

安装 modoboaAUR 后,您将可以使用两个命令行实用程序

  • modoboa-cli
  • modoboa-admin.py

数据库

Modoboa 需要以下数据库之一

请按照您要使用的数据库的安装过程进行操作,并在继续之前进行设置。

使用 PostgreSQL

如果您使用 PostgreSQL,则必须安装 python 依赖项 [1]

pip install psycopg[binary]>=3.1

然后为 modoboa 创建用户和数据库以供使用

sudo -l -u postgres createuser --no-createdb modoboa
sudo -l -u postgres createdb --owner=modoboa modoboa

使用 MySQL 或 MariaDB

对于 MySQLMariaDB,您必须安装 python 依赖项 [2]

pip install mysqlclient

安装完成后,创建一个关联用户

CREATE DATABASE modoboa;
CREATE USER 'modoboa'@'localhost' IDENTIFIED  BY 'my-strong-password-here';
GRANT ALL PRIVILEGES ON modoboa.* TO 'modoboa'@'localhost';


使用 SQLite

除了安装 SQLite 之外,没有其他必需的依赖项。

创建 Modoboa 实例

要开始使用 Modoboa,在 aur 仓库修复之前,请按照上面的说明安装虚拟环境并使用 pip 安装 modoboa。然后您可以继续创建 Django 项目。

构建你的实例

现在部署您的 modoboa。安装完所有内容后,您可以使用命令 modoboa-admin.py deploy instance ... 创建 Django web 服务器的实例。这将在您工作目录的 ./instance 目录中创建一个 Django 项目。

默认情况下,在不引入任何数据库参数的情况下,Modoboa 将通过交互式控制台提示您要使用的数据库。如果您使用 SQLite 方法,它将在您的工作目录中的 ./instance 名称下创建一个数据库。

modoboa-admin.py deploy instance --collectstatic --domain <hostname of your server>

交互式提示将询问您想要哪个数据库,并且在您设置系统时,您可以先使用 sqlite3。

Configuring database connection: default
Database type (mysql, postgres or sqlite3): sqlite3

指定 Sqlite 位置

或者,您可以指定 SQLite 数据库的位置。

modoboa-admin.py deploy instance --collectstatic --domain <hostname of your server> --dburl default:sqlite:////full/path/to/your/database/file.sqlite

其他数据库

如果您要使用其他数据库,请使用语法 <mysql|postgres>://[user:pass@][host:port]/dbname 作为连接字符串。这是一个完整的示例,

modoboa-admin.py deploy instance_name --collectstatic --domain example.com --dburl default:postgres://user:pass@[localhost]/modoboa

有关运行不同数据库的更多信息,请参阅

modoboa-admin.py help deploy

或阅读文档

运行 Django 实例

在运行 modoboa 之前,您需要设置您的 Web 服务器,因为它依赖于您的域名。

一旦您使用 modoboa-admin.py 创建了一个 instance 目录,您就可以 cd 进入该目录,并且会有一个 manage.py 文件,任何使用 Django 的人都应该熟悉它。

要查看 django 项目中的各种服务,您可以在 instance 目录中运行

python manage.py

设置 Nginx

在本例中,我们将使用 Gunicorn 为 modoboa Web 服务器运行 unix 套接字。在 modoboa 的虚拟环境中,请安装 gunicorn 以托管 Web 服务器。您也可以使用 uwsgi

pip install gunicorn

然后我们可以相应地设置 Nginx 配置。以您喜欢的任何方式制作您的配置文件。我有一个 /etc/nginx/available 目录,我在其中放置配置文件,然后将它们系统链接到 /etc/nginx/enables,该目录包含在 /etc/nginx/nginx.conf 中。

我将以下内容放在 /etc/nginx/available/modoboa.conf

upstream modoboa {
     server      unix:/var/run/gunicorn/modoboa.sock fail_timeout=0;

}

server {
     server_name domain.com;
     root <modoboa_instance_path>;

     access_log  /var/log/nginx/modoboa.access.log;
     error_log /var/log/nginx/modoboa.error.log;

     location /sitestatic/ {
             autoindex on;
     }

     location /media/ {
             autoindex on;
     }

     location / {
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header Host $http_host;
             proxy_redirect off;
             proxy_set_header X-Forwarded-Protocol ssl;
             proxy_pass http://modoboa;
     }
}

现在对于 ssl,您需要安装 certbot 和 nginx 插件 certbot-nginx。然后运行

sudo certbot --nginx run

启用 tls。