Как правильно запустить localtunnel v2

Я использую localtunnel v1. Но я обнаружил, что v2 позволяет настраивать субдомен, и мне нужна эта функция.

Я следил за учебником, описанным в README из репозитория, но он путал меня в нескольких частях и, в конце концов, он не работает.

Первый шаг - запустить некоторое веб-приложение: checked, на порту no. 8000.

Затем он говорит что-то о именах хостов:

Localtunnel делает некоторые вещи с именем хоста, поэтому вы хотите настроить два имена хостов. Один для регистрации локального туннеля, один для вашего локального туннеля. Обычно он ожидает подстановочный знак, но мы просто будем указывать имя хоста для этот пример туннеля.

example.localtunnel.local → 127.0.0.1
localtunnel.local → 127.0.0.1

Вы можете сделать это в /etc/hosts или использовать эту причудливую утилиту-призрак.

Я потерялся здесь, но все же я редактировал свой /etc/hosts:

127.0.0.1   localhost
127.0.1.1   my-pc-name
127.0.0.1   example.localtunnel.local
127.0.0.1   localtunnel.local

Следующий шаг...

Теперь вы можете запустить сервер. Он основан на файле конфигурации в config. Вы можете сделать свой собственный, но этот настроен на запустите сервер на порте 9999 и ожидайте имя хоста localtunnel.local

ginkgo config/default.conf.py

Какой? В любом случае... Я создал myconfig.conf.py на основе файлов в localtunnel repo dir /deploy:

port = 9999
hostname = 'localtunnel.local'
service = 'localtunnel.server.TunnelBroker'

Но, когда я запускаю:

lt --broker 127.0.0.1:9999 --name example 8000

Я получил:

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gevent/greenlet.py", line 390, in run
  result = self._run(*self.args, **self.kwargs)
File "/usr/local/lib/python2.7/dist-packages/localtunnel/client.py", line 53, in listen
  msg = self.ws.receive(msg_obj=True)
TypeError: receive() got an unexpected keyword argument 'msg_obj'
<Greenlet at 0xb6e0db1cL: <bound method TunnelClient.listen of <localtunnel.client.TunnelClient object at 0xb6def52c>>> failed with TypeError

И в процессе гинкго:

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gevent/pywsgi.py", line 438, in handle_one_response
  self.run_application()
File "/usr/local/lib/python2.7/dist-packages/ws4py/server/geventserver.py", line 85, in run_application
  self.result = self.application(self.environ, start_response_for_upgrade)
File "/usr/local/lib/python2.7/dist-packages/ws4py/server/wsgi/middleware.py", line 131, in __call__
  environ.copy()))
TypeError: handle_websocket() takes exactly 3 arguments (2 given)
<BrokerFrontend fileno=6 address=0.0.0.0:9999>: Failed to handle request:
  request = GET /t/example HTTP/1.1 from ('127.0.0.1', 35907)
  application = <ws4py.server.wsgi.middleware.WebSocketUpgradeMiddleware object at 0x95bc2ac>

127.0.0.1 - - [2012-05-14 17:18:18] "GET /t/example HTTP/1.1" 101 162 0.000933

И, очевидно, http://example.localtunnel.local:9999 не работает.

Как это исправить? И где мне нужно изменить для изменения конечного субдомена?

Извините за жуткий английский.


Edit

Я следовал за предложением Павла и сделал понижение. Но, хотя изменения и произошли, ошибки все еще происходят. процесс гинкго:

$ ginkgo eco.conf.py  
Starting process with eco.conf.py...  
127.0.0.1 - - [2012-05-22 20:21:11] "GET /t/example HTTP/1.1" 400 116 0.000190

localtunnel процесс:

$ lt --broker 127.0.0.1:9999 --name example 8000
Traceback (most recent call last):
  File "/usr/local/bin/lt", line 9, in <module>
    load_entry_point('localtunnel==0.4.0', 'console_scripts', 'lt')()
  File "/usr/local/lib/python2.7/dist-packages/localtunnel/client.py", line 31, in main
    client.serve_forever()
  File "/usr/local/lib/python2.7/dist-packages/ginkgo/core.py", line 188, in serve_forever
    self.start()
  File "/usr/local/lib/python2.7/dist-packages/ginkgo/core.py", line 124, in start
    ready = not self.do_start()
  File "/usr/local/lib/python2.7/dist-packages/localtunnel/client.py", line 42, in do_start  
    self.ws.connect()
  File "/usr/local/lib/python2.7/dist-packages/ws4py-0.1.5-py2.7.egg/ws4py/client/threadedclient.py", line 72, in connect
    self.process_response_line(response_line)
  File "/usr/local/lib/python2.7/dist-packages/ws4py-0.1.5-py2.7.egg/ws4py/client/__init__.py", line 61, in process_response_line
    raise HandshakeError("Invalid response status: %s %s" % (code, status))
ws4py.exc.HandshakeError: Invalid response status: 400 Bad Handshake

Хотя ginkgo не дает никакой ошибки, localtunnel все еще поднимает ошибки, отличные от предыдущих ошибок. По-видимому, он пытается получить "/t/example" в процессе подключения.

Ответ 1

Похоже, это программное обеспечение ожидает старую версию ws4py. текущая версия (0.2.1) из ws4py соответствует тому, что у вас есть, а 0.1.5 версия ws4py соответствует тому, что пытается использовать localtunnel.

Для решения проблем, которые у вас есть, может быть достаточно понижения до ws4py 0.1.5.

С другой стороны, это не похоже на лучшее в мире программное обеспечение. Вы уверены, что это правильное решение вашей проблемы? Я просмотрел код и все документы, предоставленные в этом репо, и я понял, что он настраивает этот странный tcp-tunnel-over-json-over-websockets (да, websockets, для чего-то с python на обоих сервер и клиентская сторона!), даже не предоставляя какие-либо конкретные функции безопасности или шифрования или надежности, и, похоже, ничего не делает, что другие более распространенные инструменты не могут улучшить. Но, возможно, у меня может быть что-то важное.

Ответ 2

Я думаю, что вы должны следовать инструкциям по настройке сервера localtunnel.com(т.е. если вы хотите запустить собственный сервер локального туннеля в другом домене).

Установка localtunnel v2 для нормального использования должна быть такой же простой, как запуск pip install localtunnel (возможно, с sudo).

После этого просто запустите localtunnel-beta -n <subdomain> 8000

Подробнее см. пост в блоге Джеффа.