27 Ağustos 2012 Pazartesi

Dojo (CoffeeScript) projesini Nginx ve Tornado Server ile sunmak

Önceki yazıda basit bir panele bir açılır düğme yerleştirmiştim. Artık projeyi Nginx+Tornado Server sunucusundan çalıştırıyorum.



Sunucu olarak sanal makinemde her zaman bulunan Debian'ı kullandım, Nginx ve Tornado'yu nasıl kurduğumu hatırlamıyorum, epey zaman olmuş, Nginx depodan olabilir ama Tornado'yu sitesinden indirmiş olabilirim, zaten Python ile geliştirilmiş, kurulumu oldukça kolay.

Nginx ayarları neredeyse standart, sadece upstream'a dikkat, Tornado için 8000 numaralı kapıyı (port) seçtim. Alttaki include tanımı ile ~conf.d/ altında sunucu ayarlarını ayırıyoruz.

/etc/nginx/nginx.conf
user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    # multi_accept on;
    use epoll;
}

http {
    include       /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log;

    upstream frontends{
             server 127.0.0.1:8000;
    }

    proxy_read_timeout 200;

                 
    sendfile        on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_min_length 1000;
    gzip_proxied any;
    gzip_types text/plain text/html text/css text/xml
               application/x-javascript application/xml
               application/atom+xml text/javascript;

    proxy_next_upstream error;
   
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


/static Dizininde medya dosyaları, dojo kütüphanesi ve uygulama .js dosyaları gibi sabit içerikler bulunacak.

/etc/nginx/conf.d/server.conf
server {
        listen 80;

        # Allow file uploads
        client_max_body_size 50M;

        location ^~ /static/ {
            root /var/www;
            #if ($query_string) {
            #    expires max;
            #}
        }
        location = /favicon.ico {
            rewrite (.*) /static/favicon.ico;
        }
        location = /robots.txt {
            rewrite (.*) /static/robots.txt;
        }

        location / {
             root /var/www;
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off; 
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://frontends;
        }
    }


Tornado sunucumuz ise bu küçük betik ile çalışıyor, tek yaptığı / çağrıları için bir MainHandler nesnesi oluşturup, get çağrısı ise index.html dosyasını okuyup cevap olarak göndermek. Bunu konsoldan elle python app.py komutu ile çalıştırıyorum, 8000 numaralı kapıyı dinliyor.

/var/www/app.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("index.html")


application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(8000)
    tornado.ioloop.IOLoop.instance().start()


Uygulamayı /static/app/ altına kaydediyorum, gerçekte /var/www/static/app yoluna karşılık geliyor.

/var/www/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ornek:Merhaba Dojo!</title>
<!-- Dojo'yu yukle -->
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.8.0/dijit/themes/claro/claro.css">
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.8.0/dojo/dojo.js" data-dojo-config="async: true, isDebug: true"></script>
</head>
<body class="claro" style="margin:0;">
<!-- Uygulamayi calistir -->
<script src="/static/app/main.js"></script>
</body>
</html>


Uygulama dosyalarını sonraki yazıda veriyorum.

Hiç yorum yok:

Yorum Gönder