2012-12-03 3 views
0

Dotcloud에 내 장고 앱을 배포했습니다.Nginx 및 사용자 지정 서비스로 정적 파일을 제공합니다. Dotcloud

저는 Gevent와 django-socketio가있는 웹 소켓을 사용하고 있습니다. 그래서 맞춤 서비스를 사용했습니다. 지금 당장은 여전히 ​​작동하도록 'runserver_socketio'를 사용하고 있습니다.

이제 Nginx를 사용하여 정적 파일을 제공하고 싶습니다. 나는 이것을 찾았다 : https://github.com/dotcloud/nginx-on-dotcloud

나는 그것을 사용하려고 노력했다. 여기 내 dotcloud.yml입니다 :

www: 
     type: custom 
     buildscript: nginx/builder 
     processes: 
      app: /home/dotcloud/env/bin/python myproject/manage.py runserver_socketio 0.0.0.0:$PORT_WWW 
      nginx: nginx 
     ports: 
      www: http 
     systempackages: 
      - libevent-dev 
      - python-psycopg2 
      - libpcre3-dev 
    db: 
     type: postgresql 

그리고 내 애플 리케이션의 루트에 'nginx'폴더를 추가했습니다.

  403 Forbidden, nginx/1.0.14 

그리고 Nginx에 봉사 않습니다 : 내 응용 프로그램에 갈 때, 내가 밀어 후, 나는 오류가

  nginx_config_template="/home/dotcloud/current/nginx/nginx.conf.in" 

     if [ -e "$nginx_config_template" ]; then 
       sed > $HOME/nginx/conf/nginx.conf < $nginx_config_template \ 
       -e "s/@[email protected]/${PORT_WWW:-42800}/g" 
     else 
       echo "($nginx_config_template) isn't there!!! Make sure it is in the correct location or else nginx won't be setup correctly." 
     fi 

그러나 :

나는 또한 나의 사후의 끝에 추가 오류 페이지 404.

그래서 이유는 모르겠지만 더 이상 내 앱에 액세스 할 수 없습니다. Nginx로 내 앱을 설정할 수있는 방법에 대한 아이디어가 있습니까?

당신에게 내가 당신의 문제는 당신이 http 포트 (80)를 위해 싸우는 두 개의 서로 다른 프로세스를 가지고있다 생각

+0

nginx 또는 그 앞에 앱을 넣으시겠습니까? - 앱을 nginx 뒤에두면 더 이상 웹 소켓을 사용할 수 없습니다. - 당신이 nginx의 앞에 응용 프로그램을 넣으면, 나는 당신이 nginx에서 아무것도 얻을 수 있을지 모르겠다. 그래서 그 뒤에있는 이유를 이해하려고 노력하고 있습니다! – jpetazzo

+0

nginx 폴더가 dotcloud 앱 또는 django 앱의 루트에 있습니까? 'nginx : nginx'는 nginx 프로세스가 nginx 사용자로 실행될 것이라고 믿게합니다. nginx 사용자가 nginx 폴더의 파일을 읽을 수있는 권한이 있습니까? – Enrico

+0

@jpetazzo 내 정적 파일을 제공하기 위해 nginx를 사용하지 않고 nginx 앞에 내 앱을 넣지 않아도됩니다. Django가 내 정적 파일 제공을 중단 할 것이므로 runserver_socketio로 내 응용 프로그램을 실행하고 있으므로 DEBUG 모드를 False로 설정할 수 없습니다. 그래서 서버를 사용해야합니다. 나는 프로그래밍에 익숙하지 않아서 무엇이 최선의 방법인지 모르겠습니다. 네가 나에게 줄 수있는 충고를 할게. 답변 주셔서 감사합니다. – Marcolac

답변

1

대단히 감사합니다. 한 번에 하나의 프로세스 만 포트 80에서 실행할 수 있습니다. 대부분의 사람들은이 문제를 해결하기 위해 포트 80에서 nginx를 실행 한 다음 다른 포트에서 실행되는 다른 프로세스로 모든 트래픽을 역방향 프록시 처리합니다. 이것은 nginx가 웹 소켓을 지원하지 않기 때문에 당신에게 도움이되지 않습니다. 그래서 당신은 nginx 또는 django app을 80 이외의 다른 포트에서 실행할 필요가 있다는 것을 의미합니다. 이것은 또한 이상적이지 않습니다. 이 시점에서

는 두 가지 다른 옵션
  1. CDN을 사용

    , 아마존 S3에 모든 파일을 넣고, 거기 (또는 CloudFront를)에서 그 역할이있다.

  2. dotCloud의 정적 서비스를 사용합니다.이 서비스는 정적 파일 만 제공하는 별도의 서비스입니다. 여기에 dotcloud.yml의 모습입니다.

dotcloud.yml

www: 
    type: custom 
    processes: 
     app: /home/dotcloud/env/bin/python myproject/manage.py runserver_socketio 0.0.0.0:$PORT_WWW 
    ports: 
     www: http 
    systempackages: 
     - libevent-dev 
     - python-psycopg2 
     - libpcre3-dev 
db: 
    type: postgresql 
static: 
    type: static 
    approot: static_media 

은 기본적으로 새로운 서비스가 정적이라는이 새로운 서비스를 추가 루트에있는 프로젝트라는 static_media의 디렉토리에 정적 파일을 찾고 있습니다 프로젝트의

정적 서비스를 사용하는 경우 정적 서비스에서 URL을 가져와 dagango settings.py에 STATIC_URL을 적절하게 설정해야합니다.

django의 static_files 응용 프로그램을 사용하는 경우이 설정과 관련된 또 다른 문제가 있습니다. Django의 정적 파일 앱은 모든 정적 미디어를 하나의 공통 위치로 복사합니다.정적 서비스는 분리되어 있고 다른 호스트와 다른 서비스에 있기 때문에 정적 서비스에서는 작동하지 않으므로 파일을 수동으로 공통 static_media 디렉토리에 복사해야합니다. dotCloud 정적 서비스에 대한 자세한 내용

은이 문서를 참조하십시오 http://docs.dotcloud.com/0.9/services/static/

내가 옵션 2에 대한 언급 잡았다, 나는 옵션 1을 사용하는 것이 좋습니다 것입니다 때문에 당신은 같은 것을 사용하는 경우 이것은 매우 간단 하 https://github.com/jezdez/django_compressor. 그것은 당신을 위해 s3에 파일을 보낼 수 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 두 번째 해결책을 시도해 보았다. 나는 첫번째 것을 시도 할 것이다. 하지만 static_files 앱을 사용하지 않으면 S3 사용에 이점이 있습니까? – Marcolac

+0

S3 사용의 이점은 CDN (s3과 함께 클라우드 프론트를 사용하는 경우)에서 오는 것이기 때문에 방문자가 콘텐츠를 더 빨리로드하므로 점선으로 정적 서비스가 필요 없으므로 약간의 돈. –

+0

좋습니다. Cloudfront 및 S3로 정적을 처리하는 방법에 대해 살펴 보겠습니다. 그것에 대해 좋은 튜토리얼을 가지고 있다면, 그것은 많이 도움이 될 것입니다. 답변 해 주셔서 다시 한 번 감사드립니다. – Marcolac

관련 문제