在没有 root 访问权限的共享虚拟主机服务器上使用 wsgi 和 virtualenv 部署 Django 项目
Deploy Django project using wsgi and virtualenv on shared webhosting server without root access
我有一个 Django 项目,我想 运行 在我的共享网站空间 (1und1 Webspace) 运行 上 linux。我没有 root 访问权限,因此无法编辑 apache 的 httpd.conf 或在整个系统范围内安装软件。
到目前为止我做了什么:
- 在本地安装了 squlite,因为它在服务器上不可用
- 在 ~/.localpython
中安装了 Python 3.5.1
- 为我的本地安装了 virtualenv python
- 在 ~/ve_tc_lb
中创建了一个虚拟环境
- 在我的虚拟环境中安装了 Django 和 Pillow
- 从 git 服务器
克隆了我的 django 项目
完成这些步骤后,我可以在我的项目目录中 运行 python manage.py runserver
,它似乎是 运行ning(我可以在我的计算机上使用 lynx 访问登录屏幕本地机器)。
我阅读了很多关于如何配置 fastCGI 环境的帖子,但由于我使用的是 Django 1.9.1,所以我依赖于 wsgi。我看到了很多有关为 wsgi 和 virtualenv 配置 django 的内容,但是所有示例都需要访问 httpd.conf.
共享的网络服务器是apache。
我可以使用示例 hello.py 在我的家中创建一个新目录,当我输入 url 时它正在工作,但它(当然)使用服务器提供的 python 和不是我的本地安装。
当我将指示要使用哪个 python 版本的第一行更改为我的虚拟环境 (#!/path/to/home/ve_tc_lb/bin/python
) 时,它似乎在虚拟环境中使用了正确的版本。由于我使用不同的系统进行开发和部署,我不确定是否是个好主意,例如在我的 djangoproject/wsgi.py
.
添加这样一行
更新2016-06-02
我尝试了一些其他的东西:
- 我了解到我无法访问 apache 错误日志
- 阅读了很多关于 mod_wsgi 和 django 的各种资源,我只是想在这里分享以防将来有人需要它们:
- 我关注了 the wsgi test script installation here - 但 wsgi 文件只是显示在我的浏览器中,而不是被执行。
总而言之,我的提供商 1und1 似乎没有安装 wsgi 扩展(尽管支持人员一周前告诉我它会安装)
2016-06-12 更新:我收到了支持人员的回复(大约一周后:-S)确认他们没有 mod_wsgi 但 wsgiref...
所以我有点卡在这里 - 接下来我应该执行哪些步骤?
我会根据评论和评论定期更新问题。感谢任何帮助。
您必须使用支持 Django 的虚拟主机。看到 https://code.djangoproject.com/wiki/DjangoFriendlyWebHosts. Personally, I've used WebFaction 并对此感到非常满意,他们的支持非常好,客户服务非常敏感。
由于您的 apache 是共享的,我不希望您可以更改 httpd.conf,而是使用您的解决方案。我的建议是:
- 如果您有多个服务器,您将部署您的项目(例如测试、暂存、生产),然后为每个部署目标执行以下步骤。
- 在每个服务器中,创建一个真正的
wsgi.py
文件 ,您永远不会将其放入版本控制系统 。与您对 local_settings.py
文件所做的非常相似。该文件将被命名为 wsgy.py
,因为您很可能无法编辑 apache 设置(因为它是共享的),并且您的 wsgi 文件需要该名称。
文件内容为:
#!/path/to/your/virtualenv/python
from my_true_wsgi import *
每个部署服务器都会有所不同,但很可能会在 shebang 行中找到正确的 python 解释器。
- 您将有一个名为
my_true_wsgi
的文件,以使其与前面代码中的导入匹配。与 wsgi.py
文件不同,该文件将位于版本控制系统中。该文件的内容是任何常规 django 项目中 wsgi.py
的通常内容,只是您没有直接使用该名称。
使用此解决方案,您可以拥有多个不同的 wsgi 文件,而不会在 shebangs 上发生冲突。
我有一个 Django 项目,我想 运行 在我的共享网站空间 (1und1 Webspace) 运行 上 linux。我没有 root 访问权限,因此无法编辑 apache 的 httpd.conf 或在整个系统范围内安装软件。
到目前为止我做了什么:
- 在本地安装了 squlite,因为它在服务器上不可用
- 在 ~/.localpython 中安装了 Python 3.5.1
- 为我的本地安装了 virtualenv python
- 在 ~/ve_tc_lb 中创建了一个虚拟环境
- 在我的虚拟环境中安装了 Django 和 Pillow
- 从 git 服务器 克隆了我的 django 项目
完成这些步骤后,我可以在我的项目目录中 运行 python manage.py runserver
,它似乎是 运行ning(我可以在我的计算机上使用 lynx 访问登录屏幕本地机器)。
我阅读了很多关于如何配置 fastCGI 环境的帖子,但由于我使用的是 Django 1.9.1,所以我依赖于 wsgi。我看到了很多有关为 wsgi 和 virtualenv 配置 django 的内容,但是所有示例都需要访问 httpd.conf.
共享的网络服务器是apache。
我可以使用示例 hello.py 在我的家中创建一个新目录,当我输入 url 时它正在工作,但它(当然)使用服务器提供的 python 和不是我的本地安装。
当我将指示要使用哪个 python 版本的第一行更改为我的虚拟环境 (#!/path/to/home/ve_tc_lb/bin/python
) 时,它似乎在虚拟环境中使用了正确的版本。由于我使用不同的系统进行开发和部署,我不确定是否是个好主意,例如在我的 djangoproject/wsgi.py
.
更新2016-06-02 我尝试了一些其他的东西:
- 我了解到我无法访问 apache 错误日志
- 阅读了很多关于 mod_wsgi 和 django 的各种资源,我只是想在这里分享以防将来有人需要它们:
- 我关注了 the wsgi test script installation here - 但 wsgi 文件只是显示在我的浏览器中,而不是被执行。
总而言之,我的提供商 1und1 似乎没有安装 wsgi 扩展(尽管支持人员一周前告诉我它会安装)
2016-06-12 更新:我收到了支持人员的回复(大约一周后:-S)确认他们没有 mod_wsgi 但 wsgiref...
所以我有点卡在这里 - 接下来我应该执行哪些步骤? 我会根据评论和评论定期更新问题。感谢任何帮助。
您必须使用支持 Django 的虚拟主机。看到 https://code.djangoproject.com/wiki/DjangoFriendlyWebHosts. Personally, I've used WebFaction 并对此感到非常满意,他们的支持非常好,客户服务非常敏感。
由于您的 apache 是共享的,我不希望您可以更改 httpd.conf,而是使用您的解决方案。我的建议是:
- 如果您有多个服务器,您将部署您的项目(例如测试、暂存、生产),然后为每个部署目标执行以下步骤。
- 在每个服务器中,创建一个真正的
wsgi.py
文件 ,您永远不会将其放入版本控制系统 。与您对local_settings.py
文件所做的非常相似。该文件将被命名为wsgy.py
,因为您很可能无法编辑 apache 设置(因为它是共享的),并且您的 wsgi 文件需要该名称。 文件内容为:
#!/path/to/your/virtualenv/python from my_true_wsgi import *
每个部署服务器都会有所不同,但很可能会在 shebang 行中找到正确的 python 解释器。
- 您将有一个名为
my_true_wsgi
的文件,以使其与前面代码中的导入匹配。与wsgi.py
文件不同,该文件将位于版本控制系统中。该文件的内容是任何常规 django 项目中wsgi.py
的通常内容,只是您没有直接使用该名称。
使用此解决方案,您可以拥有多个不同的 wsgi 文件,而不会在 shebangs 上发生冲突。