Как разрешить публичный доступ по 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 в DOS:

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/
Вернуться на верх