Как сделать общедоступным Django? Это вообще возможно?

В настоящее время я пробую Django-фреймворк, и я бы поделился / подарил / показал некоторые вещи, которые я сделал своим коллегам / друзьям. Я работаю в Ubuntu под Win7 через VMware. Поэтому мое желание / желание - отправить мой текущий pub-IP с портом (например, http://123.123.123.123:8181/django-app/) моим друзьям, чтобы они могли его протестировать.

Проблема в том, что я использую Dev-сервер django (python /path-to-django-app/manage.py runserver $IP:$PORT).

Как мне сделать общедоступным devserver?

РЕДАКТИРОВАТЬ:

О, я кое-что забыл упомянуть. Как мне грустно, я использую VMware с Ubuntu. У меня есть шеллскрипт, который возвращает мне мой текущий int-IP 192.168.xx.xx и сохраняет его в переменной среды ($CUR_IP). Поэтому каждый раз, когда я хочу запустить devserver, я просто выполняю

python /path-to-django-site/manage.py runserver $CUR_IP:8080

Таким образом, я становлюсь http-адресом (например, http://192.168.40.145:8080/app-name/), который я МОГУ ИСПОЛЬЗОВАТЬ ВНЕ МОЕЙ Виртуальной машины. Я мог бы проверить это на моем хосте (win7). Это на самом деле причина, почему я задал вопрос. Я думал, что есть способ использовать ext-IP и сделать runserver пригодным для использования снаружи

7 ответов

Решение

192.168.*.* является частным адресом локальной сети - после того, как вы сделали правильные заклинания VMWare (или другого менеджера виртуальных машин) и брандмауэра, чтобы сделать его доступным из локальной сети, он все равно не будет доступен извне локальной сети, т. е. из Интернета в целом (это тоже хорошо, потому что такие серверы разработки не предназначены для обеспечения безопасности и масштабируемости).

Чтобы сделать какой-либо порт компьютера с частным IP-адресом локальной сети видимым для Интернета в целом, вам необходим маршрутизатор с возможностью "виртуальных серверов" (многие маршрутизаторы, даже дешевые, предлагают его, но невозможно точно указать, как включить это так как у каждого бренда свой особенный путь). Я бы также порекомендовал dyndns или другой подобный сервис, чтобы связать стабильное DNS-имя с вашим постоянно меняющимся публичным IP-адресом (если, конечно, вы не тратите время на статический IP-адрес у своего провайдера связи, но последний вариант все время стоит дороже).

superuser.com или serverfault.com могут предоставить лучшие ответы и подробности (как только вы дадите каждую небольшую деталь вашей конфигурации в вопросе), поскольку вопрос не имеет ничего общего с разработкой программного обеспечения и всем, что связано с администрированием и настройкой сервера.

python manage.py runserver 0.0.0.0:8181

Это запустит сервер разработки, который должен прослушивать все IP-адреса на порту 8181.

Обратите внимание, что по состоянию на 17 июня 2011 года сервер разработки Django был по умолчанию пронизан (тикет # 1609).

Из документов:

Обратите внимание, что IP-адрес по умолчанию, 127.0.0.1, недоступен с других компьютеров вашей сети. Чтобы сделать ваш сервер разработки видимым для других компьютеров в сети, используйте его собственный IP-адрес (например, 192.168.2.1) или 0.0.0.0.

Предполагая, что у вас установлен ruby, вам просто нужно получить localtunnel:

gem install localtunnel

затем запустите свой сервер разработки Python с:

python manage.py runserver 0.0.0.0:8000

в другой оболочке запустите localtunnel:

localtunnel -k ~/.ssh/id_rsa.pub 8000 

Это выведет URL для доступа к вашему локальному серверу.

Port 8000 is now publicly accessible from http://xxxx.localtunnel.com

Вот и все.

Мне пришлось добавить эту строку в settings.py, чтобы заставить его работать (в противном случае он показывает ошибку при доступе с другого компьютера)

ALLOWED_HOSTS = ['*']

затем запустил сервер с:

python manage.py runserver 0.0.0.0:9595

Уже ответил, но добавив npm альтернативу того же localtunnel

sudo npm install -g localtunnel

lt --port 8000 --subdomain yash

Если вы используете Virtualbox, вам нужно изменить настройки сети в VB с "NAT" на "Bridged Adapter". Затем перезапустите Linux. Теперь, если вы бежите sudo ifconfig Вы можете увидеть свой IP-адрес, как 192.168.*.*, Последний шаг - runserver

python manage.py runserver 192.168.*.*:8000

Ура!

Вам необходимо настроить мостовую сеть в VMWare, а также предоставить доступ к целевому порту в брандмауэре Ubuntu.

В качестве альтернативы вы можете использовать cotunnel. Просто запустите cotunnel в своем ubuntu (в VMware), измените порт туннеля на панели мониторинга cotunnel, какой порт вы используете на локальной стороне. Он дает общедоступный URL-адрес, и вы можете поделиться им со своими друзьями.

Ваш сервер Django может слушать 127.0.0.1 или 0.0.0.0 (я предпочитаю 0.0.0.0), это не имеет значения для cotunnel.

Могу я предложить попробовать что-нибудь вроде pyngrok программно управлять ngrokтуннель для тебя? Полное раскрытие, я его разработчик. Пример Django здесь, но это так же просто, как установитьpyngrok:

pip install pyngrok

и используя его:

from pyngrok import ngrok

http_url = ngrok.connect(8000)

Никаких проблем с портами, межсетевыми экранами или IP-адресами, теперь вы также можете проверять трафик (что полезно, поскольку то, что вы здесь делаете, находится в постоянной разработке, а не на prod-готовый сервер).

Другие вопросы по тегам