Gandi Python 实例:如何使用 git 和 wsgi 运行 多个网站
Gandi Python instance : How to run several web sites with git and wsgi
我想在 Gandi Python 实例(简单托管)上 运行 几个 Django 网站。
根据我在他们的 wiki (here and here) 上的了解,我只有一个虚拟主机和一个 git 存储库可用于所有域。
当被问及时,Gandi 的支持人员告诉我要使用 git 部署我的站点,我可以为每个站点使用分支并使用命令 $ ssh {login}@git.{datacenter_location}.gpaas.net 'deploy default.git [ {a_branch} ]'
。
我真的不认为这是使用分支机构的正确方法......
有没有更好的办法 ?如果没有,我必须在我的本地站点之上创建一个回购协议并为每个站点创建一个分支?
编辑: 也感谢 Sayse 的评论,我知道如果我只有一个回购协议,我不能对多个站点使用 git。现在是 wsgi 部分:
然后根据域在我的虚拟主机的根目录中放入 wsgi.py 以根目录到正确的站点?也许是这样的? :
import sys
import socket
import os.path
from django.core.wsgi import get_wsgi_application
current host = socket.gethostname()
if current_host == "www.site_1.com":
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),'site_1/site_1')))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_1.settings")
elif current_host == "www.site_2.com":
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),'site_2/site_2')))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_2.settings")
application = get_wsgi_application()
我是 python 站点部署的新手,在此先感谢您的帮助!
根据他们的 Python 文档:
"Python instances support only one application per instance"
因此您将只有一个分支包含您要托管的所有网站。然后,正如您在上面的代码中尝试做的那样,根据主机请求 header.
在 wsgi.py 中路由流量
这对您尝试做的事情有一个主要的不利影响,即,如果您需要更新一个网站,您将不得不重新部署基于所有网站的整个代码。每个站点都有单独的实例可能会更好。
socket.gethostname() <- 这是错误的用法。这将获取服务器的主机名 Python is 运行 on。您需要从请求中获取 HTTP HOST header。
https://docs.djangoproject.com/en/1.11/ref/request-response/
我想在 Gandi Python 实例(简单托管)上 运行 几个 Django 网站。 根据我在他们的 wiki (here and here) 上的了解,我只有一个虚拟主机和一个 git 存储库可用于所有域。
当被问及时,Gandi 的支持人员告诉我要使用 git 部署我的站点,我可以为每个站点使用分支并使用命令 $ ssh {login}@git.{datacenter_location}.gpaas.net 'deploy default.git [ {a_branch} ]'
。
我真的不认为这是使用分支机构的正确方法......
有没有更好的办法 ?如果没有,我必须在我的本地站点之上创建一个回购协议并为每个站点创建一个分支?
编辑: 也感谢 Sayse 的评论,我知道如果我只有一个回购协议,我不能对多个站点使用 git。现在是 wsgi 部分:
然后根据域在我的虚拟主机的根目录中放入 wsgi.py 以根目录到正确的站点?也许是这样的? :
import sys
import socket
import os.path
from django.core.wsgi import get_wsgi_application
current host = socket.gethostname()
if current_host == "www.site_1.com":
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),'site_1/site_1')))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_1.settings")
elif current_host == "www.site_2.com":
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),'site_2/site_2')))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_2.settings")
application = get_wsgi_application()
我是 python 站点部署的新手,在此先感谢您的帮助!
根据他们的 Python 文档:
"Python instances support only one application per instance"
因此您将只有一个分支包含您要托管的所有网站。然后,正如您在上面的代码中尝试做的那样,根据主机请求 header.
在 wsgi.py 中路由流量这对您尝试做的事情有一个主要的不利影响,即,如果您需要更新一个网站,您将不得不重新部署基于所有网站的整个代码。每个站点都有单独的实例可能会更好。
socket.gethostname() <- 这是错误的用法。这将获取服务器的主机名 Python is 运行 on。您需要从请求中获取 HTTP HOST header。
https://docs.djangoproject.com/en/1.11/ref/request-response/