use_https not being honored?
by Stephen J. Turnbull
sean.p.kiernan--- via Mailman-users writes:
> Using Mailman core 3.3.5, and Mailman API 3.1, I have use_https:
> yes set in my mailman.cfg so that I can use https for calls to the
> API,
Despite the name, that's not what use_https does. It means to use
"https" when formatting its URL, and AFAICS that's all it does. In
particular it does not configure gunicorn (which provides the REST
server) to use HTTPS as far as I can tell.
> however even in mailman.log, it still says it is using http:
>
> [2022-06-01 09:35:54 -0500] [959009] [INFO] Starting gunicorn 20.1.0
> [2022-06-01 09:35:54 -0500] [959009] [INFO] Listening at: http://hostname:8001 (959009)
>
> GET and POST requests work fine if I use http, but fail when trying
> to use https.
You need to set some or all of the settings here where gunicorn can
find them.
https://docs.gunicorn.org/en/stable/settings.html#ssl
I believe this can be done either in the gunicorn.cfg file or in the
[webservice] section of mailman.cfg. This is separate configuration
information from any configuration of server credentials you provide
for Postorius or HyperKitty.
> I've only recently started using Mailman so if there are additional
> logs or system information I need to help with this?
I'm pretty sure what I wrote above diagnoses the issue correctly, but
for the future "didn't work" doesn't tell us enough. You should
always provide the exact error message, exactly as presented. If you
get a traceback of function calls, you should provide that whole thing
as well. You may redact "sensitive" information (which includes
personal names, usernames, passwords, and the like, but for some folks
also things like IP addresses and domain names). However, try to
ensure that there's a one-to-one relation between redacted items and
the substitutes.
Steve
4 years
Re: Not able to start mailman server
by Mark Sapiro
On 8/5/21 12:53 AM, Kartheek Reddy Bondugula wrote:
> Hi,
>
> I am trying to setup postorius using this website -
>
> https://docs.mailman3.org/projects/mailman/en/release-3.0/src/mailman/docs/W...
That documentation is out of date.
Start at https://docs.mailman3.org/en/latest/
> I am trying to create a mailling list and it web interface for the users in my group
>
> The command 'pip install -e ./'(python3) runs successfully but still i am not able to start the server
Is the result the same as in your post at
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…,
i.e.,
/usr/local/Cellar/python(a)3.9/3.9.5/bin/python3.9: can't open file
'/usr/local/opt/python(a)3.9/bin/master': [Errno 2] No such file or directory
> my mailman info shows -
>
> GNU Mailman 3.3.5b1 (Tom Sawyer)
> Python 3.9.5 (default, May 4 2021, 03:36:27)
> [Clang 12.0.0 (clang-1200.0.32.29)]
> config file: /Users/.../Documents/mailman/var/etc/mailman.cfg
> db url: sqlite:////Users/.../Documents/mailman/var/data/mailman.db
> devmode: DISABLED
> REST root url: http://localhost:8001/3.1/
> REST credentials: restadmin:restpass
We recommend following this guide
https://docs.mailman3.org/en/latest/install/virtualenv.html
What is the content of the
/Users/.../Documents/mailman/var/etc/mailman.cfg file?
The 'pip install -e ./' command should have created a bin/ directory
containing both `mailman` and `master` executable files and this
`mailman` command is the one you should be running. It appears the
`mailman` command you are running is
'/usr/local/opt/python(a)3.9/bin/mailman'. If that is in fact a symlink to
a different bin/mailman file, there should also be a symlink from
'/usr/local/opt/python(a)3.9/bin/master' to the existing bin/master or you
should adjust your path.
What do `which -a mailman` and `which -a master` show?
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
4 years, 10 months
Re: mailman admin (django) interface does not work anymore after deleting website example.com
by Abhilash Raj
On Sun, Mar 10, 2019, at 9:00 AM, Torge Riedel wrote:
> Am 10.03.19 um 16:44 schrieb Mark Sapiro:
> > On 3/10/19 8:18 AM, Torge Riedel wrote:
> >> I deleted the existing "example.com" and added a new one
> >> "lists.mydomain.de".
> >>
> >> Now the admin (django) interface always gives "An error occurred while
> >> processing your request". After one of the first navigation clicks I saw
> >> a message that "site with id 1 is missing".
> >
> > In your Django settings your have
> >
> > SITE_ID = 1
> >
> > which pointed to the example.com domain you deleted.
> >
> > You need to override this in settings_local.py. Probably
> >
> > SITE_ID = 2
> >
> > but if that doesn't work, try '0'
> >
> Ah, thank you Mark. That makes a kind of sense. I changed the database
> directly to fix it. And renamed example.com to lists.mydomain.de. Now
> the error is gone.
>
> I'm wondering why the initial database set up of postorius (?) adds
> "example.com". Is there a way to directly add my domain instead?
> Somewhere in settings_local.py?
Django does that and there doesn't seem to be a way to override that to
something else during initial migration. Or nothing I have found yet.
Only way is to edit "example.com" to something you'd like or add another
domain entry and change SITE_ID to point o that.
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
--
thanks,
Abhilash Raj (maxking)
7 years, 3 months
Re: Internal Server Error: /mailman3/postorius/lists/.../held_messages - humanize: where to put?
by Stephen J. Turnbull
Flo via Mailman-users writes:
> In /usr/share/mailman3-web/settings.py there is:
>
> INSTALLED_APPS = (
> ...
> 'django.contrib.humanize',
> ...
> )
Right, that's why Python is looking for it. Since it's not being
found, I guess there's a version skew between Mailman and
django.contrib. The first thing to do is to make sure all your
packages are up to date. Check if the django package (or maybe
django-contrib if it's a separate package) is pinned to a particular
old version, and consider unpinning and upgrading it. If they are up
to date, and you're skilled with Debian, you may consider adding more
recent package sources (testing or experimental) and install Django
from those sources.
If that's not appealing I would strongly discourage trying to add the
humanize package from Django upstream. That is a real can of worms.
If you wish to continue using the Debian packages, you will need to
get help from the Debian maintainers. I wouldn't be surprised if they
already are planning to do something about this issue.
The alternative would be to uninstall the Debian package and install
the most recent Mailman packages from PyPI in a Python virtual
environment /opt. This probably requires installing the Debian
python3-venv package. This is not terribly difficult, the
instructions at docs.mailman3.org/en/latest are good, and you're
welcome to ask for help on this list. We recommend this because you
will get better support that way.
> And POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost:8001'
> I think this has also something to do with it.
That has nothing to do with it, they are quite unrelated.
--
GNU Mailman consultant (installation, migration, customization)
Sirius Open Source https://www.siriusopensource.com/
Software systems consulting in Europe, North America, and Japan
9 months, 3 weeks
Re: Unable to update templates
by Mark Sapiro
On 5/28/25 19:40, Mark wrote:
>
> I have jumped the gun on thinking that the template as a file was
> working. It's not. It's the same story: the initial file template is
> good, but it's for sure getting cached somewhere, and an updated file is
> ignored. The same as when the template was being drawn from the database.
Are you just updating the file
/opt/mailman/mm/var/templates/lists/testlist.example.com/en/list:user:notice:welcome.txt
with nothing in Postorius and either no entry at all in the
mailman.template table with
name = 'list:user:notice:welcome'
context = 'testlist.example.com'
or if there is such an entry, with
uri =
'file:///opt/mailman/mm/var/templates/lists/testlist.example.com/en/list:use…'
If so, editing the file
/opt/mailman/mm/var/templates/lists/testlist.example.com/en/list:user:notice:welcome.txt
should work.
> Restarting mailman3 and mailmanweb didn't help, neither did rebooting
> the server.
>
> Looking at Gunicorn status, I see a failing connection to 127.0.0.1
> which is the error message I was getting when adding a new subscriber -
> with the custom Welcome template in the database (which is why I moved
> it to file).
>
> 127.0.0.1 and locahost are in the ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS
> of the settings.py file
>
> I'm at a loss with this caching problem. Any other clues happily received.
If as I say above, there is no entry in the mailman.template table for
the name and context or if there is an entry with uri =
'file:///opt/mailman/mm/var/templates/lists/testlist.example.com/en/list:use…',
then gunicorn and mailman-web are not involved at all - mailman core
will get the template from the file directly.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
1 year
Re: [Django] ERROR (EXTERNAL IP): Service Unavailable
by Mark Sapiro
On 2/25/21 9:38 AM, dancab(a)caltech.edu wrote:
> Mark,
>
> Is it only this list that has an issue?
>
> Yes, this is the only list that is having the issue.
>
> Can you visit other pages for this list?
>
> Yes, I'm able to view the members list, list settings, templates, etc.
>
> I've restarted the service and tried to access the held messages for the list once again. Here's what is in the mailman log.
>
>
> ERROR 2021-02-25 17:28:14,197 393 postorius Mailman REST API not available
> Traceback (most recent call last):
> File "/opt/mailmanve/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 706, in urlopen
> chunked=chunked,
> File "/opt/mailmanve/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 445, in _make_request
> six.raise_from(e, None)
> File "<string>", line 3, in raise_from
> File "/opt/mailmanve/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 440, in _make_request
> httplib_response = conn.getresponse()
> File "/usr/lib64/python3.6/http/client.py", line 1346, in getresponse
> response.begin()
> File "/usr/lib64/python3.6/http/client.py", line 307, in begin
> version, status, reason = self._read_status()
> File "/usr/lib64/python3.6/http/client.py", line 276, in _read_status
> raise RemoteDisconnected("Remote end closed connection without"
> http.client.RemoteDisconnected: Remote end closed connection without response
This is from Django's log. What's in Mailman core's mailman.log?
Since everything else is accessing the REST API with no problem, I think
core must be stuck on something and timing out. Is there a time delay
between trying to get the held messages view and the "Mailman REST API
not available. Please start Mailman core." response?
Also is there a non-zero count in the badge on the Held messages tab?
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
5 years, 3 months
Re: Internal Server Errors in mailmanweb.log
by Washington Odhiambo
On Sat, Jan 24, 2026 at 12:11 AM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 1/22/26 00:53, Washington Odhiambo via Mailman-users wrote:
> > On Thu, Dec 25, 2025 at 10:46 AM Washington Odhiambo <odhiambo(a)gmail.com
> >
> > wrote:
> >
> > For some reason, my mailmanweb (I am using Gunicorn) has been misbehaving
> > lately.
> > The last change I ever made to my MM3 installation is when I applied the
> > patch mentioned in this thread.
> > The misbehavior manifests in the Postrorius web UI becoming inaccessible,
> > much as mailmanweb is running.
>
> It looks like all the logged errors result from an attempt to export a
> thread from HyperKitty. Is it this export that precipitates the issue?
I am not trying to export any threads at all. I haven't tried doing it for
whatever reason.
So the fact that there is even an attempt at exporting it is strange.
I first encountered this issue when I got notified of some held messages
that required moderation.
Postorius failed to load. And on checking the status of mailmaweb, I
realized it's running, but using so much RAM.
I restarted it and I was able to access Postorius.
And now this has become an almost daily routine - restarting it.
> I.e, can you access Postorius first thing after a clean start of
> mailman web?
Yes.
What I have realized though is that after restarting it, with time its
memory usage begins to increase significantly fast.
Within no time, it's already using 1GB+ RAM.
As I write this email, this is what I just seen on checking it:
```
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Fri 2026-01-23 16:43:28 EAT; 20h ago
Main PID: 1758633 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 2.0G
CPU: 8h 4min 40.949s
CGroup: /system.slice/mailmanweb.service
├─1758633 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2665379 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2665624 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:10:46 eu.kictanet.or.ke gunicorn[2663345]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:11:19 eu.kictanet.or.ke gunicorn[2663765]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:11:36 eu.kictanet.or.ke gunicorn[2663948]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:11:52 eu.kictanet.or.ke gunicorn[2664060]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:12:27 eu.kictanet.or.ke gunicorn[2664535]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:12:40 eu.kictanet.or.ke gunicorn[2664626]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:12:59 eu.kictanet.or.ke gunicorn[2664813]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:13:33 eu.kictanet.or.ke gunicorn[2665220]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:13:51 eu.kictanet.or.ke gunicorn[2665379]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:14:05 eu.kictanet.or.ke gunicorn[2665624]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash#
```
> If so, is it only when you try to export a thread from HyperKitty that the
> issues start?
>
I am not trying to export any threads at all.
Check this:
root@eu:/home/wash# systemctl restart mailmanweb
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 6s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 158.0M
CPU: 3.358s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 12s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 162.3M
CPU: 6.971s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 15s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 162.4M
CPU: 8.193s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 18s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 210.5M
CPU: 8.629s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 38s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 1.3G
CPU: 24.429s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash#
--
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]
4 months, 3 weeks
Re: Speed up importing mailman2 lists
by Stephen J. Turnbull
Mark Sapiro writes:
> On 2/19/25 06:08, t.maintz(a)fz-juelich.de wrote:
> > We are currently planning to migrate from mailman2 to mailman3 as
> > a container, have around 1500 lists and would like to complete
> > the migration ideally in a few hours.
I've done two massive migrations in the last year. In the first (~20k
lists), the lists were down for maybe two hours, but it took 22 hours
for HyperKitty to populate, mostly in Xapian indexing we realized in
post-mortem analysis. In the second (~1k lists), no perceptible
downtime because they have their own bespoke archiver that has a
list-manager-agnostic API.
The trick to zero delivery downtime is that you can configure your MTA
to route to Mailman 3 if the list exists there, if not route to
Mailman 2 if the list exists there, and if not continue to any lower
priority routes. It worked as designed (mops sweat off brow ;-). We
did take Postorius and the Mailman 2 management CGIs and email command
addresses offline for the duration (3 hours in the first case, 30
mminutes in the second). This is sraightforward if Mailman 2 and
Mailman 3 are running on the same host. Life is more complex if
you're spinning up Mailman 3 in a separate node but it should be
possible.
I think if you're migrating to HyperKitty you can speed up the
migration by shutting off indexing, and doing that later at the cost
of confusing people who expect the lists to be indexed. I'm not sure
if it's possible to migrate the archives concurrently with accepting
new posts, or maybe to migrate archives in advance and backfill any
posts that arrive during the list migration. And there's no reason
why you can't leave the legacy Mailman 2 archives up for browsing
as a backup for as long as needed.
Steve
1 year, 4 months
Re: ModuleNotFoundError: No module named 'mailman_web'
by gordon@dickens.com
This is the entire error sent via email every minute or so:
Traceback (most recent call last):
File "/opt/mailman/venv/bin/mailman-web", line 5, in <module>
from mailman_web.manage import main
ModuleNotFoundError: No module named 'mailman_web'
When I try to login to mailman then I get thse following error:
Service Unavailable: /mailman3/lists/
Report at /mailman3/lists/
Service Unavailable: /mailman3/lists/
Request Method: GET
Request URL: http://host2.mailhub4u.com/mailman3/lists/
Django Version: 3.0.14
Python Executable: /opt/mailman/venv/bin/uwsgi
Python Version: 3.9.2
Python Path: ['.', '', '/etc/mailman3', '/usr/lib/python39.zip', '/usr/lib/python3.9', '/usr/lib/python3.9/lib-dynload', '/opt/mailman/venv/lib/python3.9/site-packages']
Server time: Tue, 31 Oct 2023 21:08:56 +0000
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Request information:
USER: gordon
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken = 'BgEa4GddvSCScj8Bm9aSJz2V2vuvQin3boRLAM4ZqjL8Aq1I0l989xbv6nI2LbuS'
PHPSESSID = 'a36fftlm8j0khrlciu3uut8n5a'
testing = '1'
sid = '8a3f6ce1fe7c07389eea7d68f5346563'
sessiontest = '1'
Horde = '48dflipuqm8oi32on7dadjffl8'
horde_secret_key = '4jhq7cri14q2vdkvs3r6r2auqk'
sessionid = 'gsrrjekrl6huw5myr37lop21cyltpmst'
META:
CSRF_COOKIE = 'BgEa4GddvSCScj8Bm9aSJz2V2vuvQin3boRLAM4ZqjL8Aq1I0l989xbv6nI2LbuS'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.5'
HTTP_AUTHORIZATION = 'Basic cm9vdDokQ3JAYmJ5LVAzbGljYW4k'
HTTP_CONNECTION = 'Keep-Alive'
HTTP_COOKIE = 'csrftoken=BgEa4GddvSCScj8Bm9aSJz2V2vuvQin3boRLAM4ZqjL8Aq1I0l989xbv6nI2LbuS; PHPSESSID=a36fftlm8j0khrlciu3uut8n5a; testing=1; sid=8a3f6ce1fe7c07389eea7d68f5346563; sessiontest=1; Horde=48dflipuqm8oi32on7dadjffl8; horde_secret_key=4jhq7cri14q2vdkvs3r6r2auqk; sessionid=gsrrjekrl6huw5myr37lop21cyltpmst'
HTTP_HOST = '127.0.0.1:8000'
HTTP_REFERER = 'https://host2.mailhub4u.com/mailman3/lists/'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'same-origin'
HTTP_SEC_FETCH_USER = '?1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0'
HTTP_X_FORWARDED_FOR = '173.165.166.34'
HTTP_X_FORWARDED_HOST = 'host2.mailhub4u.com'
HTTP_X_FORWARDED_SERVER = 'host2.mailhub4u.com'
PATH_INFO = '/mailman3/lists/'
QUERY_STRING = ''
REMOTE_ADDR = '127.0.0.1'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/mailman3/lists/'
SCRIPT_NAME = ''
SERVER_NAME = 'slc.mailhub4u.com'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.1'
uwsgi.core = 0
uwsgi.node = b'slc.mailhub4u.com'
uwsgi.version = b'2.0.20'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f509a270810>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'gordon(a)mailhub4u.com'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web')
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f509d83d0d0>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME': 'mailman3web', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '', 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8mb4'}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius(a)host2.mailhub4u.com'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'host2.mailhub4u.com'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': 'fulltext_index'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '209.95.44.128', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm': 'default'}
ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)host2.mailhub4u.com'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
2 years, 7 months
Re: Change base mailman URL path
by Mark Sapiro
On 4/6/23 20:07, chad.hays86(a)gmail.com wrote:
> Hi, I recently completed the a Mailman3 install using these[1] instructions. I'm able to access the web interface, the Django admin app, etc off the root domain URL. For example: https://mydomain.org/mailman3, https://mydomain.org/admin, https://mydomain.org/archives
>
> What's the most straightforward way to put all of these URL paths behind a different context? For example: https://mydomain.org/lists/mailman3, https://mydomain.org/lists/admin, https://mydomain.org/lists/archives
>
> I'm running Apache2 as my web server and am using mod_proxy to proxy requests to uwsgi.
There are two pieces to this:
For the Django side, copy
/opt/mailman/venv/lib/python3.x/site-packages/mailman_web/urls.py to
/etc/mailman3/urls.py where python3.x is the python version in your venv
and edit that file as in
```
30,34c30,34
< path('mailman3/', include('postorius.urls')),
< path('archives/', include('hyperkitty.urls')),
< path('', include('django_mailman3.urls')),
< path('accounts/', include('allauth.urls')),
< path('admin/', admin.site.urls),
---
> path('lists/mailman3/', include('postorius.urls')),
> path('lists/archives/', include('hyperkitty.urls')),
> path('lists/', include('django_mailman3.urls')),
> path('lists/accounts/', include('allauth.urls')),
> path('lists/admin/', admin.site.urls),
```
and add the following to /etc/mailman3/settings.py
ROOT_URLCONF = 'urls'
Then for the apache side, it depends what you have for your ProxyPass
directives are. If you have several like
```
ProxyPass "/mailman3" "http://127.0.0.1:8000/mailman3"
ProxyPass "/archives" "http://127.0.0.1:8000/archives"
...
```
change those to
```
ProxyPass "/lists/mailman3" "http://127.0.0.1:8000/lists/mailman3"
ProxyPass "/lists/archives" "http://127.0.0.1:8000/lists/archives"
```
If you have just one like
```
ProxyPass "/" "http://127.0.0.1:8000/"
```
change it to
```
ProxyPass "/lists" "http://127.0.0.1:8000/lists"
```
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
3 years, 2 months