2013-02-07 29 views
10

tôi đã phát triển một dịch vụ web trong cơn lốc xoáy trong vài tháng qua, trong môi trường thử nghiệm của tôi để chạy dịch vụ tôi sử dụng:Thiết lập một dịch vụ web cơn lốc xoáy trong sản xuất với nginx reverse proxy

python index.py 

chỉ mục. py là ứng dụng xử lý cơn lốc xoáy của tôi lắng nghe trên cổng 8001. Sau đó tôi yêu cầu từ dịch vụ web sử dụng http://localhost:8001. Tôi hiện đang triển khai môi trường thử nghiệm của mình cho môi trường dàn dựng nên phản ánh sản xuất. Làm thế nào để tôi chạy về lốc xoáy trong sản xuất? Tôi đoán tôi cần phải tạo một số loại daemon cho ứng dụng nhưng tôi không biết bắt đầu từ đâu!

Trả lời

28

Có một số công cụ bạn có thể sử dụng.

Thứ nhất, Supervisord

Supervisord là một "hệ thống điều khiển quá trình", bạn cấu hình các quá trình của bạn và để giám sát quản lý chúng, nó sẽ khởi động lại chúng nếu họ thất bại, làm cho việc quản lý chúng dễ dàng hơn và giữ cho chúng chạy ở chế độ nền

Dưới đây là một giám sát viên mẫu cấu hình tập tin

[program:myprogram] 
process_name=MYPROGRAM%(process_num)s 
directory=/var/www/apps/myapp 
command=/var/www/apps/myapp/virtualenv/bin/python index.py --PORT=%(process_num)s 
startsecs=2 
user=youruser 
stdout_logfile=/var/log/myapp/out-%(process_num)s.log 
stderr_logfile=/var/log/myapp/err-%(process_num)s.log 
numprocs=4 
numprocs_start=14000 

Với cấu hình đó, giám sát sẽ bắt đầu 4 (numprocs) trường hợp của index.py trên các cổng 14.001-14.004 (numprocs_start). Chúng tôi vượt qua các --PORT=%(process_num)s để có được mỗi quá trình để bắt đầu trên một cổng khác nhau. Bạn nên thay đổi numprocsnumprocs_start để phù hợp với môi trường/thiết bị của bạn. Nói chung, chúng tôi chạy các quy trình lõi 2xCPU (vì vậy bộ xử lý lõi tứ sẽ có 8 quy trình) nhưng có thể thay đổi rất lớn dựa trên những gì các quy trình của bạn thực hiện và mức độ chặn trong mã của bạn.

Tiếp theo, cấu hình nginx để chuyển tiếp yêu cầu tới trang web

upstream myappbackend { 
      server 127.0.0.1:14001 max_fails=3  fail_timeout=1s; 
      server 127.0.0.1:14002 max_fails=3  fail_timeout=1s; 
      server 127.0.0.1:14003 max_fails=3  fail_timeout=1s; 
      server 127.0.0.1:14004 max_fails=3  fail_timeout=1s; 
    } 

    server { 
      listen           4.5.6.7:80; 
      server_name          example.com; 

      access_log  /var/log/nginx/myapp.log main; 


      location/{ 
        proxy_set_header    Host   $host; 
        proxy_set_header    X-Real-Ip  $remote_addr; 
        proxy_pass      http://myappbackend/; 
      } 
    }  

của bạn Đó là cấu hình nên được sửa đổi phụ thuộc vào ứng dụng của bạn và cách nó hoạt động, đó là một cấu hình rất tối thiểu và sẽ gần như chắc chắn cần phải mở rộng trên nhưng đó là đủ để giúp bạn bắt đầu

+1

Có phải nginx hoặc giám sát xử lý quy trình nào được sử dụng khi URL được truy cập không? Hay tôi cần nhiều phần mềm hơn để quản lý điều này. –

+0

và bạn có thể giải thích lý do tại sao bạn bắt đầu quá trình ở mức 14000 không? –

+2

nginx chuyển yêu cầu đến một trong các phụ trợ. Giám sát viên chỉ quan tâm đến việc quản lý quy trình (trực tiếp/đã chết/khởi động lại). Đối với cổng, bạn có thể chọn bất cứ thứ gì bạn muốn trừ khi nó va chạm với một số ứng dụng khác đang lắng nghe một trong các cổng –

Các vấn đề liên quan