Multiple uwsgi apps in one project

54 views
Skip to first unread message

marcin....@gmail.com

unread,
May 26, 2017, 6:26:39 AM5/26/17
to Django users
Hi.

I'd like to serve more uwsgi apps for the same project. 
These apps must have just separate urls and must be served on spearate domains. 
I'd like to have separate appservers. 
The rest, i.e. project's environment, should stay same. 

How to achieve that? 
I know I can create a new django projects and import/copy main app's settings. Is there an other way? 

BR,
Marcin

Jani Tiainen

unread,
May 26, 2017, 7:16:49 AM5/26/17
to django...@googlegroups.com

Hi,

Your requirements are a bit contradicting.

While you want to use same app with identical settings twice to different domain, you also want to have different urls?

How these urls should be different compared to that other site?

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/0da53e34-428d-4803-ba8f-dddc83c24443%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

-- 
Jani Tiainen

marcin....@gmail.com

unread,
May 26, 2017, 7:22:50 AM5/26/17
to Django users
I think that my reqs are pretty straightforward.
I'd like to setup project environment with 3 different apps:
  1. main app (public)
  2. admin app (vpn)
  3. local network app for api talking with other services in the datacenter  
The whole thing is about preserving same project environment.
Models, registries, configuration should stay same.
Middlewares, urls, views and anything related to http will be different.

BR,
Marcin

Jani Tiainen

unread,
May 26, 2017, 7:31:46 AM5/26/17
to django...@googlegroups.com

Ok,

There are several ways how to tackle with this (you can do most of that with webserver configs). Just limit access from proper IP's (if your VPN is setup decently it will give your end users certain IP-range(s) which you can use to filter admin-access) same for "local network" app.

But this doesn't really affect uswgi-serving at all it will still do it's work as usual since it's more problem of frontend parts that sits before uwsgi.

Alternatively you could define 3 different sites that do ran limited ranges of URLs and route them through the front end (and apply same restrictions as one site model)

For more options, visit https://groups.google.com/d/optout.

-- 
Jani Tiainen

marcin....@gmail.com

unread,
May 26, 2017, 7:56:25 AM5/26/17
to Django users
Thanks.
Could you explain last point about 3 different sites?

As I said I'd like to have separate middlewares and urls.
Currently I have two Django projects defined, they share app paths and most of settings (middlewares are redefined and urls are separate).  

Marcin

Melvyn Sopacua

unread,
May 28, 2017, 11:04:22 AM5/28/17
to django...@googlegroups.com

On Friday 26 May 2017 04:22:49 marcin....@gmail.com wrote:

> I think that my reqs are pretty straightforward.

> I'd like to setup project environment with 3 different apps:

>

> 1. main app (public)

> 2. admin app (vpn)

> 3. local network app for api talking with other services in the

> datacenter

>

> The whole thing is about preserving same project environment.

> Models, registries, configuration should stay same.

> Middlewares, urls, views and anything related to http will be

> different.

 

Use Mezzanine's approach (modified a bit by me) in settings.py near bottom:

PROJECT_APP_PATH = os.path.dirname(os.path.abspath(__file__))
PROJECT_APP = os.path.basename(PROJECT_APP_PATH)

local_module = os.getenv("LOCAL_SETTINGS_MODULE", "local_settings.py")
f = os.path.join(PROJECT_APP_PATH, local_module)

if os.path.exists(f):
import sys
import imp

module_name
= "{}.{}".format(PROJECT_APP, local_module[0:-3])
module = imp.new_module(module_name)
module.__file__ = f
sys.modules
[module_name] = module
exec(open(f, "rb").read())
else:
print("WARNING: no such local module: {}: File does not exist".format(f))

Now your repo can have public_settings.py, admin_settings.py etc, and use env in uwsgi configuration to select the correct one. The main settings.py contains shared settings. All the rest in the local variants.

--

Melvyn Sopacua

Reply all
Reply to author
Forward
0 new messages