我的服务器上有多个django应用程序,它们在自己的虚拟主机中运行,绑定到不同的端口。 (我这样做是为了隔离每个WSGIProcessGroup)。 现在我想代表每个应用程序到80端口为简单的事情。 对于一个应用程序,我做这样的事情: Listen 8101 <VirtualHost 127.0.0.1:8101> WSGIProcessGroup app1 WSGIDaemonProcess app1 display-name=%{GROUP} WSGIScriptAlias /app1 "/var/django_apps/app1/app1.wsgi" </VirtualHost> <VirtualHost *:80> ProxyPass /app1 http://localhost:8101/app1 ProxyPassReverse /app1 http://localhost:8101/app1 </VirtualHost> 现在,为了简化启用或禁用某些应用程序,当我有另一个应用程序运行时,我有另一个.conf文件包含这个: Listen 8102 <VirtualHost 127.0.0.1:8102> WSGIProcessGroup app2 WSGIDaemonProcess app2 display-name=%{GROUP} WSGIScriptAlias /app2 "/var/django_apps/app2/app2.wsgi" </VirtualHost> <VirtualHost *:80> ProxyPass /app2 http://localhost:8102/app2 ProxyPassReverse /app2 http://localhost:8102/app2 </VirtualHost> 但是这个第二个<VirtualHost *:80>没有被使用,考虑到apache的configuration语法,这似乎是正常的。 不过 ,我希望这一点的configuration能够在应用程序声明旁边生存,所以我可以在一个文件中拥有属于自己的东西。 我能为此做些什么? 我正在考虑使用include指令,但是我对apacheconfiguration知之甚less,而且我不认为我可以自己find一个解决scheme:) […]
我正在运行Ubuntu 10.04.1 LTS,它预先装好了python2.6,但是我需要用python2.7.2来replace它。 (原因很简单,2.7有很多function从3反向移植) 我已经安装了python2.7.2使用 ./configure make make altinstall altinstall选项将它安装到/usr/local/lib/python2.7,而不用接触系统默认版本,并将解释器放在/usr/local/bin/python2.7 然后,以帮助mod_wsgifindpython2.7我添加到/ etc / apache2 / sites-available / wsgisite WSGIPythonHome /usr/local 我启动apache并运行一个testingwsgi应用程序,但我是由Python 2.6.5而不是Python2.7迎接 后来我将默认的python simlinkreplace为python 2.7 ln -f /usr/local/bin/python2.7 /usr/bin/python 现在在控制台上键入“python”打开python2.7,但不知何故mod_wsgi仍然拿起python2.6 接下来我尝试了, PATH=/usr/local/bin:$PATH export PATH 然后做一个快速重启apache,但又是它的python2.6! 这是我的$ PATH /usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games / etc / apache2 / sites-available / wsgisite的内容 WSGIPythonHome /usr/local <VirtualHost *:80> ServerName wsgitest.local DocumentRoot /home/wwwhost/pydocs/wsgi <Directory […]
我想使用supervisord运行我的Django项目的一些命令,但我不断收到以下错误: supervisor.log: 2012-05-18 17:52:15,784 INFO spawnerr: can't find command 'source' 如果我删除“源”命令,日志显示相同的错误: can't find command 'python' 。 supervisord.conf摘录: [program:django] directory=/home/mf/projects/djangopj/ command=beanstalkd -l 127.0.0.1 -p 11300 command=source /home/mf/virtualenvs/env/bin/activate command=python manage.py command1 command=python manage.py command2 user=mf autostart=true autorestart=true 我试图删除目录,并添加绝对path的命令,但我一直得到相同的错误。 我使用以下命令运行supervisord: supervisord -c supervisord.conf -l supervisor.log
我安装了apache dev头文件: sudo apt-get install apache2-prefork-dev 下载并编译模块,如下所示: http : //tn123.ath.cx/mod_xsendfile/ 将以下行添加到/etc/apache2/mods-available/xsendfile.load中: LoadModule xsendfile_module /usr/lib/apache2/modules/mod_xsendfile.so 添加到我的VirtualHost: <VirtualHost *:80> XSendFile on XSendFilePath /path/to/protected/files/ 通过执行以下模块启用该模块: sudo a2enmod xsendfile 然后我重新启动了Apache。 然后这个代码仍然给我提供一个0字节的空文件: file_path = '/path/to/protected/files/some_file.zip' file_name = 'some_file.zip' response = HttpResponse('', mimetype='application/zip') response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name) response['X-Sendfile'] = smart_str(file_path) return response 并且在Apache错误日志中没有涉及到XSendFile。 我究竟做错了什么?
我正在用DUNG(Django,Unix,Nginx和Gunicorn)环境运行Ubuntu 12.04 Precise,并且我的应用程序(以及各种configuration文件)存储在www-data用户有权访问的/srv内的python虚拟环境中至。 nginx和gunicorn进程都是以www-data运行的。 我的networking应用程序需要安全凭证,我将其存储在environment.sh文件中。 该文件包含各种导出,并在gunicorn进程执行之前使用source文件运行。 我关心的是environment.sh文件的位置,它的权限。 将这个文件存储在www-data有权访问的/srv文件夹中会好吗? 或者它应该被其他地方的根存储和拥有,比如/var/myapp/environment.sh ? 另外,对于www-data用户,如果我的任何web进程(以www-data运行)都受到攻击并且有人可以访问它们,这是否意味着用户可能会读取系统上的任何文件,即使他们不能写? 包括我的安全密钥?
我正在用Postgres数据库开发一个运行django的网站。 我在本地开发,并有3台VPS服务器用于testing,分期和生产。 每个VPS运行自己的Linux / Apache / Python / Postgres堆栈,并拥有自己的数据库。 我已经开始发现,通过使用git进行连续部署,暂存实际上变得多余(从分段到生产需要交换需要重新启动VPS的IP地址)。 我唯一能做的就是有助于进行复杂的数据库迁移,即使这样,在分区和生产过程中的Postgres数据库也不会镜像,那么在迁移之间input的数据就会丢失。 我的问题是我应该在分期和生产之间镜像Postgres吗? (如果是这样,怎么样?)我做对了吗? 我无法find有关Web应用程序部署最佳实践的任何地方的文档。
我们使用Nginx作为使用HTTP Auth的Apache服务器的反向代理。 出于某种原因,我无法将HTTP_AUTHORIZATION头信息传递给Apache,它似乎被Nginx过滤掉了。 因此,没有请求可以authentication。 请注意,基本身份validation是dynamic的,所以我不想在我的nginxconfiguration中对它进行硬编码。 我的nginxconfiguration是: server { listen 80; server_name example.co.uk ; access_log /var/log/nginx/access.cdk-dev.tangentlabs.co.uk.log; gzip on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 120; location / { proxy_pass http://localhost:81/; } location ~* \.(jpg|png|gif|jpeg|js|css|mp3|wav|swf|mov|doc|xls|ppt|docx|pptx|xlsx|swf)$ { if (!-f $request_filename) { break; proxy_pass http://localhost:81; } root /var/www/example; } } 任何人都知道这是为什么发生? 更新 – 事实certificate,这个问题是我原来的问题,我忽略了:mod_wsgi。 这里所讨论的网站是一个Django站点,事实certificate,Apache确实得到了通过的authvariables,但是mod_wsgi将它们过滤掉了。 […]
我有一个Django网站,我试图通过uWSGI服务器。 我已经启动了这样的服务器: uwsgi –emperor . Ctrl+Z bg 1 (有两个.ini文件,分别指向站点的testing版本和生产版本,分别在9001和9002上) 然后我试图让我的网站: curl http://localhost:9002 当我这样做的时候,我收到一条消息,说血pipe是忠诚的,但没有实际的反应。 uwsgi.log然后包含以下内容: [pid: 5071|app: 0|req: 2/2] 127.0.0.1 () {26 vars in 357 bytes} [Tue Jul 23 13:20:21 2013] GET / => generated 0 bytes in 1 msecs (HTTP/1.1 302) 2 headers in 96 bytes (1 switches on core 1) 没有错误logging。 我应该说,这在重新启动之前工作得很好,所以uwsgi.ini文件应该没问题。 任何想法,我应该开始诊断这个?
我想用Django的postgresql,所以做了以下几点: sudo apt-get install libpq-dev python-dev sudo apt-get update workon myenv sudo pip install psycopg2 并正确configuration我的settings.py后,我运行 ./manage.py syncdb 但是抛出一个exception: django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named psycopg2 数据库configuration: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mydb', 'USER': 'postgres', 'PASSWORD': 'password1234', 'HOST': 'localhost', 'PORT': '', } }
只有当gunicorn通过supervisord启动时,我的virtualenv + gunicorn设置有一个奇怪的问题。 我意识到,这可能是我的supervisord很好的问题,我会很感激任何反馈在一个更好的地方寻求帮助… 简而言之:当我从我的用户shell中运行gunicorn时,在我的virtualenv中,一切都在完美地运行。 我能够访问我的Django项目的所有视图。 supervisord在系统启动时启动gunicorn时,一切正常。 但是,如果我必须杀死gunicorn_django进程,或者如果我执行supervisord重新启动,那么一旦gunicorn_django重新启动,每个请求都会用一个奇怪的Traceback回答: (…) File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.egg/django/db/__init__.py", line 77, in connection = connections[DEFAULT_DB_ALIAS] File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.egg/django/db/utils.py", line 92, in __getitem__ backend = load_backend(db['ENGINE']) File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.egg/django/db/utils.py", line 50, in load_backend raise ImproperlyConfigured(error_msg) TemplateSyntaxError: Caught ImproperlyConfigured while rendering: 'django.db.backends.postgresql_psycopg2' isn't an available database backend. Try using django.db.backends.XXX, where XXX is one of: 'dummy', 'mysql', […]