 
            I'm trying to install the web UI for mailman3. I am getting the following failure. Can someone help? TIA.
(venv) mailman :~$ pip install mailman-web mailman-hyperkitty Collecting mailman-web Downloading mailman_web-0.0.9-py3-none-any.whl.metadata (3.2 kB) Collecting mailman-hyperkitty Downloading mailman-hyperkitty-1.2.1.tar.gz (22 kB) Preparing metadata (setup.py) ... done Collecting django<4.3,>=4.0 (from mailman-web) Downloading django-4.2.25-py3-none-any.whl.metadata (4.2 kB) Collecting hyperkitty (from mailman-web) Downloading hyperkitty-1.3.12-py3-none-any.whl.metadata (3.6 kB) Collecting postorius (from mailman-web) Downloading postorius-1.3.13-py3-none-any.whl.metadata (2.9 kB) Collecting whoosh (from mailman-web) Downloading Whoosh-2.7.4-py2.py3-none-any.whl.metadata (3.1 kB) Requirement already satisfied: mailman in ./venv/lib/python3.12/site-packages (from mailman-hyperkitty) (3.3.10) Requirement already satisfied: requests in ./venv/lib/python3.12/site-packages (from mailman-hyperkitty) (2.32.5) Requirement already satisfied: zope.interface in ./venv/lib/python3.12/site-packages (from mailman-hyperkitty) (8.0.1) Requirement already satisfied: asgiref<4,>=3.6.0 in ./venv/lib/python3.12/site-packages (from django<4.3,>=4.0->mailman- web) (3.10.0) Requirement already satisfied: sqlparse>=0.3.1 in ./venv/lib/python3.12/site-packages (from django<4.3,>=4.0->mailman-we b) (0.5.3) Collecting django-compressor>=1.3 (from hyperkitty->mailman-web) Downloading django_compressor-4.5.1-py2.py3-none-any.whl.metadata (5.0 kB) Collecting django-extensions>=1.3.7 (from hyperkitty->mailman-web) Downloading django_extensions-4.1-py3-none-any.whl.metadata (6.1 kB) Collecting django-gravatar2>=1.0.6 (from hyperkitty->mailman-web) Downloading django_gravatar2-1.4.5-py2.py3-none-any.whl.metadata (4.3 kB) Collecting django-haystack>=2.8.0 (from hyperkitty->mailman-web) Downloading django_haystack-3.3.0.tar.gz (467 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 467.3/467.3 kB 3.8 MB/s eta 0:00:00 Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Collecting django-q2>=1.0.0 (from hyperkitty->mailman-web) Downloading django_q2-1.8.0-py3-none-any.whl.metadata (9.5 kB) Collecting django_mailman3>=1.3.13 (from hyperkitty->mailman-web) Downloading django_mailman3-1.3.15-py3-none-any.whl.metadata (5.4 kB) Collecting djangorestframework>=3.0.0 (from hyperkitty->mailman-web) Downloading djangorestframework-3.16.1-py3-none-any.whl.metadata (11 kB) Requirement already satisfied: flufl.lock>=4.0 in ./venv/lib/python3.12/site-packages (from hyperkitty->mailman-web) (8. 2.0) Collecting mailmanclient>=3.3.3 (from hyperkitty->mailman-web) Downloading mailmanclient-3.3.5.tar.gz (89 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 89.6/89.6 kB 1.2 MB/s eta 0:00:00 Preparing metadata (setup.py) ... done Collecting mistune>=3.0 (from hyperkitty->mailman-web) Downloading mistune-3.1.4-py3-none-any.whl.metadata (1.8 kB) Collecting networkx>=2.0 (from hyperkitty->mailman-web) Downloading networkx-3.5-py3-none-any.whl.metadata (6.3 kB) Requirement already satisfied: python-dateutil>=2.0 in ./venv/lib/python3.12/site-packages (from hyperkitty->mailman-web ) (2.9.0.post0) Collecting robot-detection>=0.3 (from hyperkitty->mailman-web) Downloading robot-detection-0.4.tar.gz (6.4 kB) Preparing metadata (setup.py) ... done Requirement already satisfied: aiosmtpd>=1.4.3 in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitty) (1.4.6) Requirement already satisfied: alembic!=1.7.0,>=1.6.2 in ./venv/lib/python3.12/site-packages (from mailman->mailman-hype rkitty) (1.17.0) Requirement already satisfied: atpublic in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitty) (6.0.2 ) Requirement already satisfied: authheaders>=0.16 in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitt y) (0.16.3) Requirement already satisfied: authres>=1.0.1 in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitty) (1.2.0) Requirement already satisfied: click>=8.0.0 in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitty) (8 .3.0) Requirement already satisfied: dnspython>=1.14.0 in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitt y) (2.8.0) Requirement already satisfied: falcon>=3.1.3 in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitty) ( 4.1.0) Requirement already satisfied: flufl.bounce>=4.0 in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitt y) (4.0) Requirement already satisfied: flufl.i18n>=3.2 in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitty) (5.2.0) Requirement already satisfied: gunicorn in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitty) (23.0. 0) Requirement already satisfied: lazr.config in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitty) (3. 1) Requirement already satisfied: passlib in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitty) (1.7.4) Requirement already satisfied: sqlalchemy>=1.4.0 in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitt y) (2.0.44) Requirement already satisfied: zope.component in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitty) (7.0) Requirement already satisfied: zope.configuration in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkit ty) (7.0) Requirement already satisfied: zope.event in ./venv/lib/python3.12/site-packages (from mailman->mailman-hyperkitty) (6.0 ) Collecting readme_renderer[md] (from postorius->mailman-web) Downloading readme_renderer-44.0-py3-none-any.whl.metadata (2.8 kB) Requirement already satisfied: charset_normalizer<4,>=2 in ./venv/lib/python3.12/site-packages (from requests->mailman-h yperkitty) (3.4.4) Requirement already satisfied: idna<4,>=2.5 in ./venv/lib/python3.12/site-packages (from requests->mailman-hyperkitty) ( 3.11) Requirement already satisfied: urllib3<3,>=1.21.1 in ./venv/lib/python3.12/site-packages (from requests->mailman-hyperki tty) (2.5.0) Requirement already satisfied: certifi>=2017.4.17 in ./venv/lib/python3.12/site-packages (from requests->mailman-hyperki tty) (2025.10.5) Requirement already satisfied: attrs in ./venv/lib/python3.12/site-packages (from aiosmtpd>=1.4.3->mailman->mailman-hype rkitty) (25.4.0) Requirement already satisfied: Mako in ./venv/lib/python3.12/site-packages (from alembic!=1.7.0,>=1.6.2->mailman->mailma n-hyperkitty) (1.3.10) Requirement already satisfied: typing-extensions>=4.12 in ./venv/lib/python3.12/site-packages (from alembic!=1.7.0,>=1.6 .2->mailman->mailman-hyperkitty) (4.15.0) Requirement already satisfied: dkimpy>=0.7.1 in ./venv/lib/python3.12/site-packages (from authheaders>=0.16->mailman->ma ilman-hyperkitty) (1.1.8) Requirement already satisfied: publicsuffix2 in ./venv/lib/python3.12/site-packages (from authheaders>=0.16->mailman->ma ilman-hyperkitty) (2.20191221) Collecting django-appconf>=1.0.3 (from django-compressor>=1.3->hyperkitty->mailman-web) Downloading django_appconf-1.1.0-py3-none-any.whl.metadata (5.2 kB) Collecting rcssmin==1.1.2 (from django-compressor>=1.3->hyperkitty->mailman-web) Downloading rcssmin-1.1.2-cp312-cp312-manylinux1_x86_64.whl.metadata (4.5 kB) Collecting rjsmin==1.2.2 (from django-compressor>=1.3->hyperkitty->mailman-web) Downloading rjsmin-1.2.2-cp312-cp312-manylinux1_x86_64.whl.metadata (4.4 kB) Requirement already satisfied: packaging in ./venv/lib/python3.12/site-packages (from django-haystack>=2.8.0->hyperkitty ->mailman-web) (25.0) Collecting django-allauth>=0.63 (from django-allauth[openid,socialaccount]>=0.63->django_mailman3>=1.3.13->hyperkitty->m ailman-web) Downloading django_allauth-65.12.1.tar.gz (2.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 7.1 MB/s eta 0:00:00 Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Collecting django-picklefield<4.0,>=3.1 (from django-q2>=1.0.0->hyperkitty->mailman-web) Downloading django_picklefield-3.3-py3-none-any.whl.metadata (12 kB) Requirement already satisfied: psutil in ./venv/lib/python3.12/site-packages (from flufl.lock>=4.0->hyperkitty->mailman- web) (7.1.0) Requirement already satisfied: six>=1.5 in ./venv/lib/python3.12/site-packages (from python-dateutil>=2.0->hyperkitty->m ailman-web) (1.17.0) Requirement already satisfied: greenlet>=1 in ./venv/lib/python3.12/site-packages (from sqlalchemy>=1.4.0->mailman->mail man-hyperkitty) (3.2.4) Requirement already satisfied: setuptools in ./venv/lib/python3.12/site-packages (from lazr.config->mailman->mailman-hyp erkitty) (80.9.0) Requirement already satisfied: lazr.delegates in ./venv/lib/python3.12/site-packages (from lazr.config->mailman->mailman -hyperkitty) (2.1.1) Collecting nh3>=0.2.14 (from readme_renderer[md]->postorius->mailman-web) Downloading nh3-0.3.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (466 bytes) Collecting docutils>=0.21.2 (from readme_renderer[md]->postorius->mailman-web) Downloading docutils-0.22.2-py3-none-any.whl.metadata (15 kB) Collecting Pygments>=2.5.1 (from readme_renderer[md]->postorius->mailman-web) Downloading pygments-2.19.2-py3-none-any.whl.metadata (2.5 kB) Collecting cmarkgfm>=0.8.0 (from readme_renderer[md]->postorius->mailman-web) Downloading cmarkgfm-2025.10.20.tar.gz (145 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 145.8/145.8 kB 2.2 MB/s eta 0:00:00 Installing build dependencies ... done Getting requirements to build wheel ... error error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> [41 lines of output] Traceback (most recent call last): File "/opt/mailman/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", li ne 353, in <module> main() File "/opt/mailman/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", li ne 335, in main json_out['return_val'] = hook(**hook_input['kwargs']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/mailman/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", li ne 118, in get_requires_for_build_wheel return hook(config_settings) ^^^^^^^^^^^^^^^^^^^^^ File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 331, in g et_requires_for_build_wheel return self._get_build_requires(config_settings, requirements=[]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 301, in _ get_build_requires self.run_setup() File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 317, in r un_setup exec(code, locals()) File "<string>", line 5, in <module> File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/setuptools/__init__.py", line 115, in set up return distutils.core.setup(**attrs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 148, in setup _setup_distribution = dist = klass(attrs) ^^^^^^^^^^^^ File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 321, in __init_ _ _Distribution.__init__(self, dist_attrs) File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 309, in __init__ self.finalize_options() File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 784, in finaliz e_options ep(self) File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 804, in _finali ze_setup_keywords ep.load()(self, ep.name, value) File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/cffi/setuptools_ext.py", line 229, in cff i_modules add_cffi_module(dist, cffi_module) File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/cffi/setuptools_ext.py", line 50, in add_ cffi_module execfile(build_file_name, mod_vars) File "/tmp/pip-build-env-uf_5f2aq/overlay/lib/python3.12/site-packages/cffi/setuptools_ext.py", line 26, in exec file exec(code, glob, glob) File "src/cmarkgfm/build_cmark.py", line 21, in <module> with open(CMARK_DEF_H_PATH, encoding='utf-8') as fh: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pip-install-y364_cvm/cmarkgfm_9fcba25730114ac4a08d1e 7733112a45/src/cmarkgfm/cmark.cffi.h' [end of output]
note: This error originates from a subprocess, and is likely not a problem with pip. error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
 
            On 10/20/25 10:32, Dennis Putnam via Mailman-users wrote:
I'm trying to install the web UI for mailman3. I am getting the following failure. Can someone help? TIA.
(venv) mailman :~$ pip install mailman-web mailman-hyperkitty ... FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pip-install-y364_cvm/cmarkgfm_9fcba25730114ac4a08d1e 7733112a45/src/cmarkgfm/cmark.cffi.h' [end of output]
note: This error originates from a subprocess, and is likely not a problem with pip. error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
I think I've seen a similar error, but I don't recall what I did to work around it. In this case cmarkgfm is a dependency of readme_renderer which in turn is a dependency of postorius. In your venv try
pip install cmarkgfm
first and then
pip install mailman-web mailman-hyperkitty
That may avoid this.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            On Montag, 20. Oktober 2025 19:56:39 CEST Mark Sapiro wrote:
On 10/20/25 10:32, Dennis Putnam via Mailman-users wrote:
I'm trying to install the web UI for mailman3. I am getting the following failure. Can someone help? TIA.
(venv) mailman :~$ pip install mailman-web mailman-hyperkitty
...
FileNotFoundError: [Errno 2] No such file or directory:'/tmp/pip-install-y364_cvm/cmarkgfm_9fcba25730114ac4a08d1e 7733112a45/src/cmarkgfm/cmark.cffi.h'
[end of output]note: This error originates from a subprocess, and is likely not a
problem with pip. error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
I think I've seen a similar error, but I don't recall what I did to work around it. In this case cmarkgfm is a dependency of readme_renderer which in turn is a dependency of postorius. In your venv try
pip install cmarkgfm
first and then
pip install mailman-web mailman-hyperkitty
That may avoid this.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
It seems to me cmarkgfm is broken today. I tried to update it in my working environment and get the same error:
(venv) mailman@lists:~> pip install -U cmarkgfm Requirement already satisfied: cmarkgfm in ./venv/lib64/python3.11/site- packages (2024.11.20) Collecting cmarkgfm Using cached cmarkgfm-2025.10.20.tar.gz (145 kB) Installing build dependencies ... done Getting requirements to build wheel ... error error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> [41 lines of output] Traceback (most recent call last): File "/opt/mailman/venv/lib64/python3.11/site-packages/pip/_vendor/ pyproject_hooks/_in_process/_in_process.py", line 389, in <module> main() File "/opt/mailman/venv/lib64/python3.11/site-packages/pip/_vendor/ pyproject_hooks/_in_process/_in_process.py", line 373, in main json_out["return_val"] = hook(**hook_input["kwargs"]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/mailman/venv/lib64/python3.11/site-packages/pip/_vendor/ pyproject_hooks/_in_process/_in_process.py", line 143, in get_requires_for_build_wheel return hook(config_settings) ^^^^^^^^^^^^^^^^^^^^^ File "/tmp/pip-build-env-mdd_0nfr/overlay/lib/python3.11/site- packages/setuptools/build_meta.py", line 331, in get_requires_for_build_wheel return self._get_build_requires(config_settings, requirements=[]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/tmp/pip-build-env-mdd_0nfr/overlay/lib/python3.11/site- packages/setuptools/build_meta.py", line 301, in _get_build_requires self.run_setup() File "/tmp/pip-build-env-mdd_0nfr/overlay/lib/python3.11/site- packages/setuptools/build_meta.py", line 317, in run_setup exec(code, locals()) File "<string>", line 5, in <module> File "/tmp/pip-build-env-mdd_0nfr/overlay/lib/python3.11/site- packages/setuptools/__init__.py", line 115, in setup return distutils.core.setup(**attrs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/tmp/pip-build-env-mdd_0nfr/overlay/lib/python3.11/site- packages/setuptools/_distutils/core.py", line 148, in setup _setup_distribution = dist = klass(attrs) ^^^^^^^^^^^^ File "/tmp/pip-build-env-mdd_0nfr/overlay/lib/python3.11/site- packages/setuptools/dist.py", line 321, in __init__ _Distribution.__init__(self, dist_attrs) File "/tmp/pip-build-env-mdd_0nfr/overlay/lib/python3.11/site- packages/setuptools/_distutils/dist.py", line 309, in __init__ self.finalize_options() File "/tmp/pip-build-env-mdd_0nfr/overlay/lib/python3.11/site- packages/setuptools/dist.py", line 784, in finalize_options ep(self) File "/tmp/pip-build-env-mdd_0nfr/overlay/lib/python3.11/site- packages/setuptools/dist.py", line 804, in _finalize_setup_keywords ep.load()(self, ep.name, value) File "/tmp/pip-build-env-mdd_0nfr/overlay/lib64/python3.11/site- packages/cffi/setuptools_ext.py", line 229, in cffi_modules add_cffi_module(dist, cffi_module) File "/tmp/pip-build-env-mdd_0nfr/overlay/lib64/python3.11/site- packages/cffi/setuptools_ext.py", line 50, in add_cffi_module execfile(build_file_name, mod_vars) File "/tmp/pip-build-env-mdd_0nfr/overlay/lib64/python3.11/site- packages/cffi/setuptools_ext.py", line 26, in execfile exec(code, glob, glob) File "src/cmarkgfm/build_cmark.py", line 21, in <module> with open(CMARK_DEF_H_PATH, encoding='utf-8') as fh: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pip- install-8e12fhsc/cmarkgfm_dbeb0911a2014cbe9bb4b5b09ee7602f/src/cmarkgfm/ cmark.cffi.h' [end of output]
note: This error originates from a subprocess, and is likely not a problem with pip. error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
-- Mit freundlichen Gruessen, Andreas Vetter
 
            Andreas Vetter writes:
It seems to me cmarkgfm is broken today. I tried to update it in my working environment and get the same error:
(venv) mailman@lists:~> pip install -U cmarkgfm Requirement already satisfied: cmarkgfm in ./venv/lib64/python3.11/site- packages (2024.11.20) Collecting cmarkgfm Using cached cmarkgfm-2025.10.20.tar.gz (145 kB) Installing build dependencies ... done Getting requirements to build wheel ... error error: subprocess-exited-with-error
Thanks for the report, Andreas. That's very helpful. I'm assuming your "cached cmarkgfm-2025.10.20.tar.gz" was installed into a working Mailman system (specifically mailman-web). No confirmation needed, only if I'm mistaken.
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
 
            This is a real struggle, at least on Ubuntu. After figuring out the how and where for setting.py here are some things that I had to do that were undocumented, at least for MySQL.
<venv> pip install pymysql
In settings I had to add:
import pymysql pymysql.install_as_MySQLdb()
I had to change (expected)"
'ENGINE': 'django.db.backends.mysql', 'PORT': '3306',
Now I'm struggling with uwsgi.ini. the default file uses mailman for user and group but the directories were created using www-data for group and user. I got that part fixed but now when I try to start mailmanweb, I get this error:
!!! UNABLE to load uWSGI plugin: ./python3_plugin.so: cannot open shared object file: No such file or directory
I suspect I need to specify the path in the ini file but I cannot find where those plugins are.
 
            On 10/22/25 11:35, dap1--- via Mailman-users wrote:
Now I'm struggling with uwsgi.ini. the default file uses mailman for user and group but the directories were created using www-data for group and user. I got that part fixed but now when I try to start mailmanweb, I get this error:
!!! UNABLE to load uWSGI plugin: ./python3_plugin.so: cannot open shared object file: No such file or directory
https://askubuntu.com/questions/286699/uwsgi-with-python3-how-to-get-the-plu... may help.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            dap1--- via Mailman-users writes:
Now I'm struggling with uwsgi.ini.
If you need uwsgi, you need it, but gunicorn works fine even on sites with 20,000 lists and millions of posts per month if you don't.
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
 
            Mark: That didn't help.
Steve: I don't know if I NEED uwsgi but that was the next item in the install documentation. I assume I need something for the web UI. I'll look at the documentation for gunicorn.
Thanks to you both.
 
            OK, so gnuicorn is easier to install and set up. However, it has its own glitch not in the docs. I'm getting the following error trying to start web:
gunicorn[42860]: !!! !!! WARNING: configuration file should have a valid Python extension. gunicorn[42860]: !!! gunicorn[42860]: Error: Error: '/opt/mailman/mm/var/logs/error.log' isn't writable [PermissionErr>
The docs say to use conf but I think the error implies it should be py. In addition I'm guessing I have to change the log and access file names to something like gunicorn.error.log.
 
            On 10/23/25 11:57, dap1--- via Mailman-users wrote:
OK, so gnuicorn is easier to install and set up. However, it has its own glitch not in the docs. I'm getting the following error trying to start web:
gunicorn[42860]: !!! !!! WARNING: configuration file should have a valid Python extension.
This is just a warning and can be ignored.
gunicorn[42860]: !!! gunicorn[42860]: Error: Error: '/opt/mailman/mm/var/logs/error.log' isn't writable [PermissionErr>
The docs say to use conf but I think the error implies it should be py. In addition I'm guessing I have to change the log and access file names to something like gunicorn.error.log.
The access.log and error.log names are correct. They should be owned by
mailman and your /etc/systemd/system/mailmanweb.service should include
User=mailman
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            dap1--- via Mailman-users writes:
Steve: I don't know if I NEED uwsgi but that was the next item in the install documentation.
We probably should change that to gunicorn. Most users are going to install uwsgi from distro packages, and that's likely to cause problems with ownership and filesystem structure.
The point of the virtual environment install is to make the Mailman suite as self-contained and independent of the OS as we can reasonably do, since they all do things a little bit differently.
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
 
            I made all the suggested changes and now am down to the next layer of the onion when starting mailmanweb:
gunicorn[53945]: Traceback (most recent call last): gunicorn[53945]: File "/opt/mailman/venv/bin/gunicorn", line 5, in <module> gunicorn[53945]: from gunicorn.app.wsgiapp import run gunicorn[53945]: ModuleNotFoundError: No module named 'gunicorn.app'; 'gunicorn' is not a package
I hope all this gets added to the docs for the next poor sole that has to do this on Ubuntu. :-)
 
            dap1--- via Mailman-users writes:
I made all the suggested changes and now am down to the next layer of the onion when starting mailmanweb:
You should have gunicorn installed in your Mailman virtual environment. Here's what that looks like for me (your "/opt/mailman3" may vary, your "/.v" almost certainly does, the part from /lib on down should be the same except maybe for the minor version of python3):
$ ls /opt/mailman3/.v/lib/python3.13/site-packages/gunicorn/ __init__.py app debug.py http reloader.py util.py __main__.py arbiter.py errors.py instrument sock.py workers __pycache__ config.py glogging.py pidfile.py systemd.py $
gunicorn[53945]: ModuleNotFoundError: No module named 'gunicorn.app'; 'gunicorn' is not a package
This error message appears to be saying that the file __init__.py is missing (that's how Python defines a folder to be a package). It's also possible that the gunicorn package is installed somewhere other than Mailman's virtual environment, and so missing entirely from Mailman's virtual environment.
I hope all this gets added to the docs for the next poor sole that has to do this on Ubuntu. :-)
I'm not really sure what to add, except to recommend gunicorn instead of uwsgi. uwsgi is a FAQ because it's usually installed as a system package, and so has different ideas where things go in the file system from Mailman. uwsgi is not a Python app so can't be installed automatically in the virtual environment. uwsgi issues come up several times a year.
gunicorn has traditionally been unproblematic because it's a requirement of Mailman core anyway. When we figure out why your installation doesn't seem to have gunicorn, maybe there will be something to say.
Steve
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
 
            On 10/24/2025 12:40 PM, Stephen J. Turnbull wrote:
dap1--- via Mailman-users writes:
I made all the suggested changes and now am down to the next layer of the onion when starting mailmanweb:
You should have gunicorn installed in your Mailman virtual environment. Here's what that looks like for me (your "/opt/mailman3" may vary, your "/.v" almost certainly does, the part from /lib on down should be the same except maybe for the minor version of python3):
$ ls /opt/mailman3/.v/lib/python3.13/site-packages/gunicorn/ __init__.py app debug.py http reloader.py util.py __main__.py arbiter.py errors.py instrument sock.py workers __pycache__ config.py glogging.py pidfile.py systemd.py $ *I don't have /opt/mailman3, it is /opt/mailman:
$ ls /opt/mailman/venv/lib/python3.12/site-packages/gunicorn app debug.py http __main__.py reloader.py util.py arbiter.py errors.py __init__.py pidfile.py sock.py workers config.py glogging.py instrument __pycache__ systemd.py
Do I need to specify a path somewhere?
gunicorn[53945]: ModuleNotFoundError: No module named 'gunicorn.app'; 'gunicorn' is not a package
This error message appears to be saying that the file __init__.py is missing (that's how Python defines a folder to be a package). It's also possible that the gunicorn package is installed somewhere other than Mailman's virtual environment, and so missing entirely from Mailman's virtual environment.
I hope all this gets added to the docs for the next poor sole that has to do this on Ubuntu. :-)
I'm not really sure what to add, except to recommend gunicorn instead of uwsgi. uwsgi is a FAQ because it's usually installed as a system package, and so has different ideas where things go in the file system from Mailman. uwsgi is not a Python app so can't be installed automatically in the virtual environment. uwsgi issues come up several times a year.
*I think the main thing is the MySQL stuff in settings.py:
<venv> pip install pymysql
Add lines:
import pymysql pymysql.install_as_MySQLdb()
At least so far.*
gunicorn has traditionally been unproblematic because it's a requirement of Mailman core anyway. When we figure out why your installation doesn't seem to have gunicorn, maybe there will be something to say.
Steve
Mailman's content filtering has removed the following MIME parts from this message.
Replaced multipart/alternative part with first alternative.
 
            On 10/24/25 10:19, Dennis Putnam via Mailman-users wrote:
Do I need to specify a path somewhere?
Sort of.
What is the shebang line in /opt/mailman/mm/venv/bin/gunicorn? It should be
#!/opt/mailman/mm/venv/bin/python
I.e., it should point to the Python in your venv.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            Dennis Putnam via Mailman-users writes:
$ ls /opt/mailman/venv/lib/python3.12/site-packages/gunicorn app� � � � �debug.py� � �http� � � � �__main__.py� reloader.py util.py arbiter.py� errors.py� � __init__.py� pidfile.py� �sock.py workers config.py� �glogging.py� instrument� �__pycache__� systemd.py
That looks OK. Are all the files readable by the mailman user?
Is it possible that mailman-web was installed somewhere other than that virtual environment?
Do I need to specify a path somewhere?
Not if you follow this procedure (note: assumes venv already exists and Mailman core was installed into the venv):
- cd /opt/mailman
- sudo su mailman # or somehow be the mailman user
- . venv/bin/activate
- python -m pip install mailmanweb # maybe that's mailman-web
The point of activating the venv is that the installation process will ensure that the Python installation in the venv is referenced by all packages installed in the venv.
You should ensure that all of the executable paths in the systemd mailman (or mailman3) and mailman-web unit files are absolute paths pointing into the venv.
*I think the main thing is the MySQL stuff in settings.py:
<venv> pip install pymysql
Add lines:
import pymysql pymysql.install_as_MySQLdb()
At least so far.*
Thank you! That's useful.
Steve
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
 
            On 10/25/2025 2:54 AM, Stephen J. Turnbull wrote:
Dennis Putnam via Mailman-users writes:
$ ls /opt/mailman/venv/lib/python3.12/site-packages/gunicorn app debug.py http __main__.py reloader.py util.py arbiter.py errors.py __init__.py pidfile.py sock.py workers config.py glogging.py instrument __pycache__ systemd.py
That looks OK. Are all the files readable by the mailman user? *Yes*
Is it possible that mailman-web was installed somewhere other than that virtual environment? *Not that I can find.*
Do I need to specify a path somewhere?
Not if you follow this procedure (note: assumes venv already exists and Mailman core was installed into the venv):
- cd /opt/mailman
- sudo su mailman # or somehow be the mailman user
- . venv/bin/activate
- python -m pip install mailmanweb # maybe that's mailman-web *Yes, it is mailman-web. In any case everything is satisfied.*
The point of activating the venv is that the installation process will ensure that the Python installation in the venv is referenced by all packages installed in the venv.
You should ensure that all of the executable paths in the systemd mailman (or mailman3) and mailman-web unit files are absolute paths pointing into the venv. *This looks right to me but nothing points to /opt/mailman/venv/lib. Should there be a lib_dir parameter set in mailman.cfg?
[Unit] Description=GNU Mailing List Manager After=syslog.target network.target
[Service] Type=forking PIDFile=/opt/mailman/mm/var/master.pid User=mailman Group=mailman Environment="MAILMAN_CONFIG_FILE=/etc/mailman3/mailman.cfg" ExecStart=/opt/mailman/venv/bin/mailman start ExecReload=/opt/mailman/venv/bin/mailman restart ExecStop=/opt/mailman/venv/bin/mailman stop Restart=on-failure RestartSec=15
[Install] WantedBy=multi-user.target*
*I think the main thing is the MySQL stuff in settings.py:
<venv> pip install pymysql
Add lines:
import pymysql pymysql.install_as_MySQLdb()
At least so far.*
Thank you! That's useful.
Steve
Mailman's content filtering has removed the following MIME parts from this message.
Replaced multipart/alternative part with first alternative.
 
            Dennis Putnam via Mailman-users writes:
On 10/25/2025 2:54 AM, Stephen J. Turnbull wrote:
That looks OK. Are all the files readable by the mailman user? *Yes*
Good.
Is it possible that mailman-web was installed somewhere other than that virtual environment? *Not that I can find.*
I thought it was very unlikely but ... stuff happens sometimes.
You should ensure that all of the executable paths in the systemd mailman (or mailman3) and mailman-web unit files are absolute paths pointing into the venv. *This looks right to me but nothing points to /opt/mailman/venv/lib. Should there be a lib_dir parameter set in mailman.cfg?
No. That's handled by the virtual environment.
Environment="MAILMAN_CONFIG_FILE=/etc/mailman3/mailman.cfg" ExecStart=/opt/mailman/venv/bin/mailman start ExecReload=/opt/mailman/venv/bin/mailman restart ExecStop=/opt/mailman/venv/bin/mailman stop
Those are the critical paths and all are consistent with how you have described your installation.
I really don't see anything here that explains the most recent problems. Maybe Mark does.
Steve
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
 
            On 10/25/25 08:06, Dennis Putnam via Mailman-users wrote:
On 10/25/2025 2:54 AM, Stephen J. Turnbull wrote:
You should ensure that all of the executable paths in the systemd mailman (or mailman3) and mailman-web unit files are absolute paths pointing into the venv.
*This looks right to me but nothing points to /opt/mailman/venv/lib. Should there be a lib_dir parameter set in mailman.cfg?
[Unit] Description=GNU Mailing List Manager After=syslog.target network.target
[Service] Type=forking PIDFile=/opt/mailman/mm/var/master.pid User=mailman Group=mailman Environment="MAILMAN_CONFIG_FILE=/etc/mailman3/mailman.cfg" ExecStart=/opt/mailman/venv/bin/mailman start ExecReload=/opt/mailman/venv/bin/mailman restart ExecStop=/opt/mailman/venv/bin/mailman stop Restart=on-failure RestartSec=15
[Install] WantedBy=multi-user.target*
And what about mailmanweb.service? And did you check the shebang line in /opt/mailman/mm/venv/bin/gunicorn - see https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message/...
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            Sadly it is correct:
#!/opt/mailman/venv/bin/python3
$ ls -l /opt/mailman/venv/bin/python3 lrwxrwxrwx 1 mailman mailman 16 Oct 18 16:32 /opt/mailman/venv/bin/python3 -> /usr/bin/python3
 
            On 10/26/25 08:31, dap1--- via Mailman-users wrote:
Sadly it is correct:
#!/opt/mailman/venv/bin/python3
$ ls -l /opt/mailman/venv/bin/python3 lrwxrwxrwx 1 mailman mailman 16 Oct 18 16:32 /opt/mailman/venv/bin/python3 -> /usr/bin/python3
Again, what is the content of /etc/systemd/system/mailmanweb.service?
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            Sorry, I thought I posted that:
[Unit] Description=GNU Mailman Web UI After=syslog.target network.target mailman3.service
[Service] Environment="PYTHONPATH=/etc/mailman3/" User=mailman Group=mailman ExecStart=/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.py mailman_web.wsgi:application KillSignal=SIGINT
[Install] WantedBy=multi-user.target
Now that I look at it shouldn't PYTHONPATH=/opt/mailman/venv?
 
            Tried that path and that seems to have fixed it.
● mailmanweb.service - GNU Mailman Web UI Loaded: loaded (/etc/systemd/system/mailmanweb.service; disabled; preset: enabled) Active: active (running) since Mon 2025-10-27 14:18:42 EDT; 25min ago Main PID: 107897 (gunicorn) Tasks: 4 (limit: 8814) Memory: 163.4M (peak: 163.9M) CPU: 4.060s CGroup: /system.slice/mailmanweb.service ├─107897 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/gunicorn -c /etc/mailman3> ├─107898 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/gunicorn -c /etc/mailman3> ├─107899 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/gunicorn -c /etc/mailman3> └─107900 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/gunicorn -c /etc/mailman3>
Oct 27 14:18:42 dap002 systemd[1]: Started mailmanweb.service - GNU Mailman Web UI. Oct 27 14:18:43 dap002 gunicorn[107900]: Updated PYTHONPATH to : /opt/mailman3/venv:/etc/mailman3 Oct 27 14:18:43 dap002 gunicorn[107899]: Updated PYTHONPATH to : /opt/mailman3/venv:/etc/mailman3 Oct 27 14:18:43 dap002 gunicorn[107898]: Updated PYTHONPATH to : /opt/mailman3/venv:/etc/mailman3
Now when I try to access it (http://localhost/mailman) I get a 404 error.
 
            On 10/27/25 11:55, dap1--- via Mailman-users wrote:
Now when I try to access it (http://localhost/mailman) I get a 404 error.
The correct url is http://localhost/mailman3
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            dap1--- via Mailman-users writes:
Now that I look at it shouldn't PYTHONPATH=/opt/mailman/venv?
You shouldn't need a PYTHONPATH setting at all, unless you have local packages installed in nonstandard places. I don't have one, anyway, not in any of the Mailman 3 installations I'm managing at the moment.
If setting PYTHONPATH to include the venv directory changes Mailman behavior, I wonder if your virtual environment is misconfigured somehow. There are no Python libraries (*.py) or packages (a directory containing a __init__.py file) in that directory normally, so it is a no-op. Unfortunately I don't know enough about the internals to be of help with diagnosing it.
IIRC, the Python library search path is managed by (1) the virtual environment and (2) the directory containing the configuration file in use is first on the path (either the current working directory is changed to that, or it's explicitly added to the path). That file is specified explicitly with either with a command line option or an environment variable in the systemd unit file. (There's also a search path for mailman.cfg if there is no explicit setting, but its directory is always added to the path.)
It's a little bit tricky but in practice it works fine.
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
 
            On 10/28/25 08:39, dap1--- via Mailman-users wrote:
Mark: That is what I used. Sorry, I missed the 3 key.
What's in your web server config to proxy Mailman requests?
Whats in your venv's site-packages/mailman_web/urls.py?
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            I created a file named /etc/mailman/sites-available/mailman.conf:
Alias /static "/opt/mailman/web/static" <Directory "/opt/mailman/web/static"> Require all granted </Directory>
<IfModule mod_headers.c> RequestHeader unset X-Forwarded-Proto <If "%{HTTPS} =~ /on/"> RequestHeader set X-Forwarded-Proto "https" </If> </IfModule>
<IfModule mod_proxy.c> ProxyPreserveHost On ProxyPass "/mailman3" "http://127.0.0.1:8000/mailman3" ProxyPass "/archives" "http://127.0.0.1:8000/archives" ProxyPass "/accounts" "http://127.0.0.1:8000/accounts" ProxyPass "/admin" "http://127.0.0.1:8000/admin" ProxyPass "/user-profile" "http://127.0.0.1:8000/user-profile" </IfModule>
I don't have a directory site-packages. Where/when should that have been created?
 
            It should be in sites-enabled/ or conf-enabled/.
-- Best regards, Odhiambo WASHINGTON, Nairobi,KE +254 7 3200 0004/+254 7 2274 3223 In an Internet failure case, the #1 suspect is a constant: DNS. "Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-) [How to ask smart questions: http://www.catb.org/~esr/faqs/smart-questions.html]
On Tue, Oct 28, 2025, 20:28 dap1--- via Mailman-users < mailman-users@mailman3.org> wrote:
Another typo: /etc/apache2/sites-available/mailman.conf
Mailman-users mailing list -- mailman-users@mailman3.org To unsubscribe send an email to mailman-users-leave@mailman3.org https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/ Archived at: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message/...
This message sent to odhiambo@gmail.com
 
            On October 28, 2025 10:33:50 AM PDT, Odhiambo Washington via Mailman-users <mailman-users@mailman3.org> wrote:
It should be in sites-enabled/ or conf-enabled/.
Actually sites-enabled/mailman.conf should be a symlink to sites available/mailmen.conf.
-- Mark Sapiro <mark@msapiro.net> Sent from my Not_an_iThing with standards compliant, open source software.
 
            On October 28, 2025 10:55:21 AM PDT, Mark Sapiro <mark@msapiro.net> wrote:
Actually sites-enabled/mailman.conf should be a symlink to sites available/mailmen.conf.
Obviously that should be mailman, not mailman.
Also, the symlink can be created by a2ensite.
-- Mark Sapiro <mark@msapiro.net> Sent from my Not_an_iThing with standards compliant, open source software.
 
            On Tue, Oct 28, 2025 at 8:55 PM Mark Sapiro <mark@msapiro.net> wrote:
On October 28, 2025 10:33:50 AM PDT, Odhiambo Washington via Mailman-users <mailman-users@mailman3.org> wrote:
It should be in sites-enabled/ or conf-enabled/.
Actually sites-enabled/mailman.conf should be a symlink to sites available/mailmen.conf.
True. But putting a file inside sites-enabled/ or conf-enabled/ still achieves the same result. Apache's a2ensite/a2enmod will create the symlinks in the *-enabled/ subdirs, but putting files in there, with the right extensions still does it.
-- Best regards, Odhiambo WASHINGTON, Nairobi,KE +254 7 3200 0004/+254 7 2274 3223 In an Internet failure case, the #1 suspect is a constant: DNS. "Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-) [How to ask smart questions: http://www.catb.org/~esr/faqs/smart-questions.html]
 
            On 10/28/25 14:41, dap1--- via Mailman-users wrote:
That should be added to the docs. In any case adding that symlink didn't help.
What's in Apache's error.log?
The doc assumes you will be adding to an existing *.conf for the site.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            I moved the parameters into 000-default.conf which already exists. That didn't help either. The only other existing file is default-ssl.conf which doesn't seem like the appropriate place to me. Nothing interesting showed up in the error log:
[Wed Oct 29 12:55:02.605034 2025] [mpm_event:notice] [pid 132252:tid 132296053331840] AH00492: caught SIGWINCH, shu tting down gracefully [Wed Oct 29 12:55:02.691348 2025] [mpm_event:notice] [pid 149006:tid 140404998248320] AH00489: Apache/2.4.58 (Ubunt u) configured -- resuming normal operations [Wed Oct 29 12:55:02.691598 2025] [core:notice] [pid 149006:tid 140404998248320] AH00094: Command line: '/usr/sbin/ apache2'
 
            On 10/29/25 10:02, dap1--- via Mailman-users wrote:
I moved the parameters into 000-default.conf which already exists. That didn't help either. The only other existing file is default-ssl.conf which doesn't seem like the appropriate place to me. Nothing interesting showed up in the error log:
It may not be named error.log. look at all the relevant *error.log files
in /var/log/apache2. You are looking for lines matching the pattern
not (exist:|found).
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            The only files are access.log and error.log. Access.log contains as expected:
2600:1700:5cac:4600:5398:3572:2b43:6b41 - - [30/Oct/2025:09:58:57 -0400] "GET /mailman3 HTTP/1.1" 40 4 485 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:144.0) Gecko/20100101 Firefox/144.0"
 
            On 10/30/25 08:26, dap1--- via Mailman-users wrote:
The only files are access.log and error.log. Access.log contains as expected:
2600:1700:5cac:4600:5398:3572:2b43:6b41 - - [30/Oct/2025:09:58:57 -0400] "GET /mailman3 HTTP/1.1" 40 4 485 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:144.0) Gecko/20100101 Firefox/144.0"
What about /opt/mailman/mm/var/logs/error.log?
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            On 10/28/25 14:28, Odhiambo Washington via Mailman-users wrote:
True. But putting a file inside sites-enabled/ or conf-enabled/ still achieves the same result. Apache's a2ensite/a2enmod will create the symlinks in the *-enabled/ subdirs, but putting files in there, with the right extensions still does it.
Yes it works, but it also breaks a2(en|dis)(site|mod|conf) functionality for that site/mod/conf.
Configurations should always be in a *-available/ directory with symlinks in the corresponding *-enabled/ directory so that the tools work as advertised.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
 
            After some testing I found that while apache is listening on port 80, it is not listening on port 443. Not sure why at this point. Should mailmanweb be available via port 80?
 
            When I set up virtual host for 443, what should I set document root to? I currently have /var/www/html.
 
            On Thu, Oct 30, 2025 at 8:18 PM dap1--- via Mailman-users < mailman-users@mailman3.org> wrote:
When I set up virtual host for 443, what should I set document root to? I currently have /var/www/html.
MM3's DocumentRoot would equate to /path/to/mailman/web/static. But it is not required to be defined. You can see that at the bottom of this page: https://docs.mailman3.org/en/latest/install/virtualenv.html
-- Best regards, Odhiambo WASHINGTON, Nairobi,KE +254 7 3200 0004/+254 7 2274 3223 In an Internet failure case, the #1 suspect is a constant: DNS. "Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-) [How to ask smart questions: http://www.catb.org/~esr/faqs/smart-questions.html]
 
            On 10/30/25 10:18, dap1--- via Mailman-users wrote:
When I set up virtual host for 443, what should I set document root to? I currently have /var/www/html.
/var/www/html is OK. It only matters for requests that don't match ProxyPass directives.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
participants (6)
- 
                 Andreas Vetter Andreas Vetter
- 
                 dap1@bellsouth.net dap1@bellsouth.net
- 
                 Dennis Putnam Dennis Putnam
- 
                 Mark Sapiro Mark Sapiro
- 
                 Odhiambo Washington Odhiambo Washington
- 
                 Stephen J. Turnbull Stephen J. Turnbull