Kallithea Setup Docs
Mads Kiilerich
mads at kiilerich.com
Mon Dec 12 23:18:02 UTC 2022
Hi David
To get more precise communication and avoid further confusion, please
edit and repost the message after clarifying:
* when saying "uwsgi", make it clear if referring to the uWSGI software
in general, or the uwsgi protocol
* only say "uwsgi server" when referring to the uWSGI software in
general, not necessarily serving the uwsgi protocol
* say something like "uwsgi protocol server" if the point is the
protocol and not the software
* (the current Kallithea uWSGI "support" is best described as "uwsgi
http server")
/Mads
On 12/12/2022 19:00, David Griffin wrote:
> Hi Mads,
>
> I think there may be some misconceptions about uwsgi. uwsgi appears to
> be designed as something more akin to a runtime for uwsgi
> applications, which then interacts with a compatible webserver. If you
> were hosting multiple uwsgi applications, then it would normally be
> preferable to have each one be hosted on its own uwsgi server. The
> webserver then redirects to each of the uwsgi application servers as
> required. Therefore I don't agree that Kallithea could not supply a
> useful uwsgi server configuration file, because the configuration file
> only has to describe how to run Kallithea. If someone wants to run
> multiple uwsgi applications, they should most likely be running
> multiple uwsgi servers (even if those servers are just running on
> different sockets of the same machine) - if they don't, they're giving
> up a lot uwsgi's scalable design choices. Similarly, given uwsgi's
> nature as something like a runtime, I'd argue that running a uwsgi
> server is quite a lot simpler than some of the instructions you have
> on your setup page because Kallithea can offload all the interfacing
> to the actual webserver to uwsgi, regardless of exactly what that
> server is.
>
> Therefore, taking into account what you've said, as well as my own
> research into the topic, I think my specific proposed change would be
> to change the "preferred" method to run Kallithea behind another
> webserver to be via uwsgi. This has a bunch of positives for
> maintaining Kallithea:
>
> 1) It follows best practice for deploying uwsgi apps. Your docs have
> an example of running behind nginx with http forwarding, which is not
> an ideal way of running a uwsgi app.
> 2) It offloads the integration with web servers to the uwsgi project,
> meaning that if something changes upstream, Kallithea doesn't need to
> update its instructions / way of doing thigns. For example, for
> Apache, mod_uwsgi has fallen out of favour and mod_proxy_uwsgi seems
> to be preferred, or at least according to the uwsgi docs. (Note: this
> also means that Apache no longer has special instructions for running
> uwsgi applications)
> 3) Similar to the previous point, this would expand support to other
> web servers without needing any extra effort in Kallithea.
> 4) Also similarly to 3, this would simplify the documentation -
> Kallithea would only need to document setting up the uwsgi app, and
> then point users to the uwsgi docs for integrating the uwsgi app with
> their preferred webserver. This would substantially reduce the size of
> the setup instructions, being able to remove all sections on specific
> servers (i.e. Apache, nginx), and thus reduce the maintenance burden.
> 5) This would address the potential confusion between uwsgi as an HTTP
> server and uwsgi as a uwsgi server by adding a simple note to the HTTP
> instructions that if the user wants to run behind an HTTP server, they
> should follow the uwsgi server instructions instead.
> 6) Potential to remove untested/unused templates from the codebase, as
> there would be a preferred method to replace them.
>
> Doing this would require mostly changes to the documentation, I think.
> The only potential change to the code might be the addition of a uwsgi
> server setup template for config-create, which might require a little
> bit of work, as well as the potential removal of any untested /
> unnecessary templates. If this (or some variant after feedback) seems
> like a good idea, I'd be happy to spend some time on it.
>
> One aside: manage-script-name seemed to be necessary in my setup. Some
> of the environ variables that Kallithea depends on (If memory serves,
> PATH_INFO) were not being set at all, which obviously broke things.
> However, while setting manage-script-name fixed the issue, I'm not
> entirely sure if the issue was caused by lighttpd not following the
> uwsgi spec correctly - this is something I should perhaps test when I
> can. As far as uwsgi-socket goes, it seems to be just a synonym for
> socket.
>
> All the best,
> - David
>
> On Mon, 12 Dec 2022 at 15:12, Mads Kiilerich <mads at kiilerich.com> wrote:
>
> Hi David
>
> The Kallithea docs aim to help getting a very basic setup with the
> essentials. Something that perhaps can be used directly, but mainly
> serve as a starting point for further setup which is outside the
> scope
> of Kallithea. It is important to keep the configuration examples
> focused
> without introducing unnecessary concepts, or even worse: mixing up
> different concepts. We must assume that those who want to use
> advanced
> features (of uWSGI or other very configurable servers like Apache or
> Ngingx) will know how to use these or find the information elsewhere.
>
> The uWSGI template *is* for setting up an uWSGI server. And yes, that
> uWSGI server is serving the HTTP protocol directly, not the uwsgi
> protocol. That seems like a fine setup for Kallithea, per
> https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html#can-i-use-uwsgi-s-http-capabilities-in-production
>
> . I assume you are asking for clarification that the template is
> serving
> the HTTP protocol and not the uwsgi protocol?
>
> The first lines of the generated uWSGI section mention HTTP basics
> and
> configure http-socket . uWSGI is mentioned in the documentation, both
> overview and setup, but only very clearly in the context of web/http
> server. That all seems quite clear to me. Mentioning the uwsgi
> protocol
> doesn't seem helpful when the goal is to help people focus on the
> essentials to get something working, and enumerating things that are
> outside scope is out of scope.
>
> We do for convenience put an [uwsgi] section inside the Kallithea
> .ini
> where the uwsgi binary with one of the --ini-paste options can
> pick it
> up. The section name is mandated by uWSGI. In a bigger setup that use
> the uwsgi protocol, there will probably be several layers of servers
> with different configuration, and you will not be using the Kallithea
> .ini file.
>
> The --ini-paste-logged option might be a bit of an odd uWSGI feature
> that doesn't scale to bigger setups. There could *perhaps* be a
> point in
> giving an example or hinting towards more complex setups with a
> separate
> uwsgi.ini file without relying heavily on the paste configuration.
>
> I have no doubt that uWSGI can do great things, also with the uwsgi
> protocol. As far as I can see, that can be as simple and trivial as
> using "socket" instead of "http-socket". (I can not find any
> uwsgi-socket option, and manage-script-name only seems relevant when
> using mount points.) But when using uwsgi protocol you need another
> server in front that can serve it as http. That seems like a more
> complex setup, where I doubt even less that one size fits all. I'm
> sure
> there are many guides and documentation that can help with that.
> Or is
> there something particularly relevant for Kallithea setups?
>
> It is indeed possible to "mount" several WSGI applications inside
> most
> HTTP/WSGI servers (or directly in paste), but that is a more complex
> (for example because manage-script-name becomes relevant). New users
> shouldn't have to read and understand that just to get started.
> But that
> seems unrelated to the uwsgi protocol.
>
> We already have some (old and possibly outdated) mentioning of setups
> with apache and ngingx etc around
> https://kallithea.readthedocs.io/en/default/setup.html#proxy-setups
> and
> random setup files in
> https://kallithea-scm.org/repos/kallithea/files/stable/init.d .
> Something more elaborate for uWSGI with some examples and qualified
> recommendations could fit in there.
>
> With this context in mind, can you clarify what changes you would
> propose?
>
> /Mads
>
>
> On 27/11/2022 19:25, David Griffin wrote:
> > Hello all,
> >
> > I just set up Kallithea and there's one area of the docs that could
> > use clarification: emphasizing that setting up Kallithea with the
> > uwsgi template sets it up to use uwsgi as an HTTP server, and not a
> > uwsgi server. The name "uwsgi" is not particularly clear about
> this,
> > because the uwsgi server application can operate multiple
> protocols -
> > perhaps it would be better to name it as "uwsgi-http" to make it
> clear
> > which protocol the configuration is for.
> >
> > Incidentally, Kallithea appears to work great running under
> uwsgi as a
> > uwsgi server (with the additional configuration option of
> > manage-script-name = true, and setting uwsgi-socket instead of
> > http-socket). This might be a better option for running behind
> nginx /
> > lighttpd than the proxy_pass method you've got on your docs
> currently.
> > I can write this up if it's useful.
> >
> > All the best,
> > - David
> >
> > _______________________________________________
> > kallithea-general mailing list
> > kallithea-general at sfconservancy.org
> > https://lists.sfconservancy.org/mailman/listinfo/kallithea-general
>
>
> _______________________________________________
> kallithea-general mailing list
> kallithea-general at sfconservancy.org
> https://lists.sfconservancy.org/mailman/listinfo/kallithea-general
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sfconservancy.org/pipermail/kallithea-general/attachments/20221213/58dbe8b5/attachment-0001.html>
More information about the kallithea-general
mailing list