Как разрешить публичный доступ по url к серверу Ubuntu, установленному в windows 10 в качестве подсистемы, и использовать Ngnix с приложением Python Django & VueJS
Я успешно установил Ubuntu 22.04.6 на Windows 10 в качестве подсистемы. У меня есть приложение, которое работает с Python, Django, VueJS, Postgres с использованием Nodejs. Я использую веб-сервер Ngnix и могу получить сообщение "Welcome to Nginx!".
Мне удалось запустить приложение на локальном ip http://127.0.0.1:8000.
Я застрял на том, чтобы запустить приложение, используя публичный ip для удаленного доступа. У меня нет доменного имени. Я надеюсь использовать свой ПК с Windows 10 в качестве веб-сервера до тех пор, пока приложение не будет полностью протестировано и функционально.
Я выполнил все шаги, как показано в: https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-20-04
Код подключения выглядит следующим образом:
/etc/systemd/system/gunicorn.socket:
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
/etc/systemd/system/gunicorn.service:
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=bitrun
Group=www-data
WorkingDirectory=/home/bitrun/SAFE_ERP
ExecStart=/home/bitrun/SAFE_ERP/env/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
SAFE_ERP.wsgi:application
[Install]
WantedBy=multi-user.target
/etc/nginx/sites-available/SAFE_ERP:
server {
listen 80;
server_name 103.122.201.91;
location = /static/favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/bitrun/SAFE_ERP;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
ufw status:
To Action From
-- ------ ----
80/tcp ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
8000/tcp ALLOW Anywhere
Nginx Full ALLOW Anywhere
8000 ALLOW Anywhere
80/tcp (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
8000/tcp (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
8000 (v6) ALLOW Anywhere (v6)
Переадресация портов:
ID Service Port Internal Port IP Address Protocol
1 80 80 192.168.0.99 All Enabled
2 8080 8080 192.168.0.99 All Enabled
3 443 443 192.168.0.99 All Enabled
4 5432 5432 192.168.0.99 All Enabled
Следующие шаги помогли мне пройти:
Добавьте адрес хоста в settings.py в Django.
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '103.122.xxx.91']
В Ubuntu следующая команда помогла мне найти открытые порты:
sudo netstat -tulpn | grep LISTEN
Возможно, вам придется установить net-tools, как показано ниже:
sudo apt install net-tools
Для продолжения работы вам понадобится IP-адрес Ubuntu:
hostname -I
В моем случае он показал:
172.21.14.174
Используйте NETSH для добавления прокси порта, который слушает порт вашего хоста: https://learn.microsoft.com/en-us/windows/wsl/networking#accessing-linux-networking-apps-from-windows-localhost
В Windows откройте
netsh interface portproxy show all
Для добавления прокси порта с помощью NETSH:
(адресом подключения должен быть ваш IP-адрес в Ubuntu)
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=172.21.14.174
Повторите еще раз для просмотра прокси порта:
netsh interface portproxy show all
Вы должны увидеть что-то вроде этого:
Listen on ipv4: Connect to ipv4:
Address Port Address Port
--------------- ---------- --------------- ----------
0.0.0.0 80 172.21.14.174 80
В моем случае я также переадресовал 8000 для локальной сети.
Помните, что существует взаимосвязь с портом прослушивания в настройках nginx.
server {
listen 80;
listen 8000;
server_name 103.122.xxx.91 safe-xxx.com;
#...
#...
}
Вам также необходимо перенаправить порт 80 в вашем маршрутизаторе:
Наконец, введите свой публичный ip-адрес из любого места, и вы сможете подключиться:
http://103.122.xxx.91/