AWS - Запуск веб-сервиса - Cherrypy + Python - PullRequest
2 голосов
/ 01 апреля 2011

У меня есть linux box (Ubuntu 10.10 server edition) в ec2. Я написал веб-сервис с использованием вишневого фреймворка. Допустим, это код, который я написал.

import sys
sys.path.insert(0,'cherrypy.zip')
import cherrypy
from cherrypy import expose

class Service:

    @expose
    def index(self):
        return 'Hello World'

cherrypy.quickstart(Service())

Я скопировал этот файл, файл cherrypy.zip в / var / www в моем экземпляре ec2. [Я должен сообщить, что я создал каталог www вручную, так как его там не было]. Тогда я побежал

python webservice.py

и получил сообщение

[01/Apr/2011:13:50:04] ENGINE Bus STARTED

Однако, когда я пытаюсь запустить

(I have masked my public ip)
ec2-1**-2**-1**-**.ap-southeast-1.compute.amazonaws.com/

в моем браузере я не могу установить соединение. Может кто-нибудь сказать мне, где я ошибся? или что мне делать?

EDIT: Хорошо, вот кое-что интересное, что я нашел. Когда я делаю

python webservice.py

Понятно

ENGINE Serving on 127.0.0.1:8080

Это означает, что веб-сервис будет работать только для локальной машины. Как мне настроить службу 0.0.0.0 (то есть обслуживать любой IP-адрес?)

Надеюсь, этой детали достаточно для понимания проблемы, с которой я столкнулся. Помогите, пожалуйста:)

РЕДАКТИРОВАТЬ 2: Ну что ж, нашел решение :-) Нужно добавить это до вызова cherrypy.quickstart ()

cherrypy.config.update({'server.socket_host': '0.0.0.0',
                        'server.socket_port': 80,
                       })

1 Ответ

1 голос
/ 22 апреля 2011

Функция cherrypy.quickstart принимает аргумент конфигурации, который может быть dict, открытым файлом конфигурации или путем к файлу конфигурации.Я предпочитаю использовать путь к файлу конфигурации, потому что это минимизирует жесткое кодирование параметров, которыми вы можете предпочесть управлять из сценария запуска.

Кроме того, поскольку вы управляете сервером, вы можете настроить обратный прокси-сервер для маршрутизации.запросы к приложению CherryPy.Это дает вам немного гибкости.Например, если вы хотите, вы можете запустить несколько экземпляров приложения CherryPy параллельно, каждый из которых настроен на прослушивание на своем порте.

Вот пример файла конфигурации для nginx с указанием перенаправлять запросы наодин экземпляр вашего приложения CherryPy:

server
{
  server_name your.hostname.com;

  location / {
    proxy_pass http://127.0.0.1:8080/;
  }
}

А вот пример файла конфигурации, в котором nginx указывает балансировку нагрузки между двумя экземплярами вашего приложения, которые прослушивают адрес обратной связи на портах 33334 и 33335:

upstream myapps  {
  server 127.0.0.1:33334;
  server 127.0.0.1:33335;
}

server {
  server_name your.hostname.com;

  location / {
    proxy_pass  http://myapps;
  }
}
...