Как сделать общедоступным 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
-готовый сервер).