Cleanest Fastest server setup for Django [closed]

2024/11/19 19:37:49

I'm about to deploy a mediumsized site powered by Django. I have a dedicated Ubuntu Server.

I'm really confused over which serversoftware to use. So i thought to myself: why not ask stackoverflow.

What i'm looking for is:

  • Easy to set up
  • Fast and easy on resources
  • Can serve mediafiles
  • Able to serve multiple djangosites on same server
  • I would rather not install PHP or anything else that sucks resources, and for which I have no use for.

I have heard of mod_wsgi and mod_python on Apache, nginx and lighty. Which are the pros and cons of these and have i missed someone?

@Barry: Somehow i feel like Apache is to bloated for me. What about the alternatives?

@BrianLy: Ok I'll check out mod_wsgi some more. But why do i need Apache if i serve static files with lighty? I have also managed to serve the django app itself with lighty. Is that bad in anyway? Sorry for beeing so stupid :-)

UPDATE: What about lighty and nginx - which are the uses-cases when these are the perfect choice?

Answer

Since I was looking for some more in-depth answers, I decided to research the issue myself in depth. Please let me know if I've misunderstood anything.

Some general recommendation are to use a separate webserver for handling media. By separate, I mean a webserver which is not running Django. This server can be for instance:

  • Lighttpd (Lighty)
  • Nginx (EngineX)
  • Or some other light-weight server

Then, for Django, you can go down different paths. You can either:

  • Serve Django via Apache and:

    • mod_python

      This is the stable and recommended/well documented way. Cons: uses a lot of memory.

    • mod_wsgi

      From what I understand, mod_wsgi is a newer alternative. It appears to be faster and easier on resources.

    • mod_fastcgi

      When using FastCGI you are delegating the serving of Django to another process. Since mod_python includes a python interpreter in every request it uses a lot of memory. This is a way to bypass that problem. Also there is some security concerns.

      What you do is that you start your Django FastCGI server in a separate process and then configures apache via rewrites to call this process when needed.

Or you can:

  • Serve Django without using Apache but with another server that supports FastCGI natively:

    (The documentation mentions that you can do this if you don't have any Apache specific needs. I guess the reason must be to save memory.)

    • Lighttpd

    This is the server that runs Youtube. It seems fast and easy to use, however i've seen reports on memoryleaks.

    • nginx

    I've seen benchmarks claiming that this server is even faster than lighttpd. It's mostly documented in Russian though.

Another thing, due to limitations in Python your server should be running in forked mode, not threaded.

So this is my current research, but I want more opinions and experiences.

https://en.xdnf.cn/q/26407.html

Related Q&A

Quicker to os.walk or glob?

Im messing around with file lookups in python on a large hard disk. Ive been looking at os.walk and glob. I usually use os.walk as I find it much neater and seems to be quicker (for usual size direct…

Getting PyCharm to recognize python on the windows linux subsystem (bash on windows)

While running Linux versions of python, pip etc. "natively" on windows is amazing, Id like to do so using a proper IDE. Since SSHD compatibility has not been implemented yet, Im trying get Py…

Whats the difference between nan, NaN and NAN

In numpy there are nan, NaN and NAN. Whats the sense of having all three, do they differ or any of these can be used interchangeably?

Python requests: URL base in Session

When using a Session, it seems you need to provide the full URL each time, e.g.session = requests.Session() session.get(http://myserver/getstuff) session.get(http://myserver/getstuff2)This gets a littl…

size of NumPy array

Is there an equivalent to the MATLAB size() command in Numpy? In MATLAB, >>> a = zeros(2,5)0 0 0 0 00 0 0 0 0 >>> size(a)2 5In Python, >>> a = zeros((2,5)) >>> a ar…

Feature Importance Chart in neural network using Keras in Python

I am using python(3.6) anaconda (64 bit) spyder (3.1.2). I already set a neural network model using keras (2.0.6) for a regression problem(one response, 10 variables). I was wondering how can I generat…

numpy.max or max ? Which one is faster?

In python, which one is faster ? numpy.max(), numpy.min()ormax(), min()My list/array length varies from 2 to 600. Which one should I use to save some run time ?

Nested Json to pandas DataFrame with specific format

I need to format the contents of a Json file in a certain format in a pandas DataFrame so that I can run pandassql to transform the data and run it through a scoring model. file = C:\scoring_model\json…

Iterating over dictionary items(), values(), keys() in Python 3

If I understand correctly, in Python 2, iter(d.keys()) was the same as d.iterkeys(). But now, d.keys() is a view, which is in between the list and the iterator. Whats the difference between a view and …

Is there a method that tells my program to quit?

For the "q" (quit) option in my program menu, I have the following code:elif choice == "q":print()That worked all right until I put it in an infinite loop, which kept printing blank…