Pomoże ktoś lajkonikowi z tunelem SSH?

Setup mam taki:
VPS z nginxem, mam roota
Mój lokalny komputer gdzie mam proste api we flasku napisane.

MUSZĘ api hostować na swoim komputerze bo wykonuje obliczenia na GPU i zwraca jakiś tam idiotyczny wynik a chcę żeby to było dostępne przez kilka godzin dziennie z internetu. Hosting z GPU za drogi dlatego chcę to robić ze swojego laptopa.

No i teraz tak:
na lokalnej maszynie włączam apkę we flasku, lokalnie działa ok na porcie 7860.

W drugim oknie terminala wpisuję:
ssh -R 0.0.0.0localhost:7860 [login]@[IP VPS]
połączenie ok, dostaję terminal na vps

na vps w nginx mam tak:
location / {
    proxy_pass http://127.0.0.1:9003;  
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header X-Original-URI $request_uri;
   proxy_read_timeout 300s;
   proxy_connect_timeout 75s;
}

No i kurwa nie działa.
curl mojadomena.pl -> Error 502 invalid response
z terminala na vps:
curl 127.0.0.1:9003 -> curl: (52) Empty reply from server

Co robię źle? Męczę od rana chata gpt i nie umie mi pomóc.
Jest jakiś inny sposób na wystawienie swojej apki na chwilę do internetu?

#serwer #it #hejtopytanie #informatyka
lipa13

@entropy_ Bezpośrednio z problemem nie pomogę bo od zawsze te magie sieciowe przyprawiają mnie o dreszcze. Ze swojej strony do takich rzeczy polecam ngrok - rejestrujesz się za free, konfigurujesz w kilku klikach, instalujesz agenta u siebie na kompie, odpalasz i działa - w trzy minuty masz wystawiony swój port na świat. Do zastosowań domowych działa doskonale.

dfe

zrestartuj nginx po nawiązaniu połączenia ssh może

sprawdź ten curl " http://127.0.0.1:9003" z ssh vpsa


edit: widzę, że zrobiłeś curl, więc problem może być po stronie Twojego komputera, albo iptables na vpsie

edit2 spróbuj uruchomić flask na adresie 0.0.0.0

entropy_

@dfe @lipa13

ten ngrook działa ok. Chyba najprostsze rozwiązanie xD

Nie zależy mi nawet na prywatności bo same cyferki tam lecą.

127.0.0.1 - - [21/Oct/2024 1453] "GET / HTTP/1.1" 200 -

127.0.0.1 - - [21/Oct/2024 1417] "POST / HTTP/1.1" 405 -

jedna linijka i lata xDDD

Dzięki chłopaki

entropy_

@dfe a właśnie flask chyba działa na 0.0.0.0

WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.

 * Running on all addresses (0.0.0.0)

 * Running on http://127.0.0.1:7860

 * Running on http://192.168.3.3:7860

ataxbras

@entropy_ Nie jestem pewien, bo to zależy od ogólnego zestawienia, ale jak forwardujesz ze swojej maszyny na remote to będzie -L (local).

Jeśli jednak nie to, to może spróbuj rtunnel?

entropy_

@ataxbras -L jest jeszcze gorzej curl na vps:

curl: (7) Failed to connect to 127.0.0.1 port 9003: Connection refused

ataxbras

@entropy_ Daj -vvv do ssh, może pokaże się jakiś problem.

entropy_

@ataxbras @koszotorobur @dfe @lipa13 Kurwa, chłopaki jakim ja jestem debilem XD

Zrobiłem! Zamiast:

ssh -R 0.0.0.0localhost:7860 [login]@[IP VPS]

Powinno być:

ssh -R 0.0.0.0127.0.0.1:7860 [login]@[IP VPS]

Ngrook też jest fajny ale ma limity które przekroczyłem w 60 sekund xDDD

Dziękuję wszystkim za pomoc :*

dfe

@entropy_ ipv6 weszlo mocno, nie pomyslalem o tym

koszotorobur

@entropy_ - dawno temu przestałem bawić się w tunelowanie z własnej maszyny więc w tym nie pomogę.

Ale jakbym sam miał taki problem to stworzyłbym jedną funkcję Lambda z backendem DynamoDB na moim koncie AWS (do normalnego użytku Lambda i DynamoDB są za darmo w ramach Always Free Tier) i POSTem bym uaktualniał wartości a GETem bym je pobierał.

Do tego Lambda ma od pewnego czasu wbudowany REST API endpoint i nie trzeba używać API Gateway: https://aws.amazon.com/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/

Tu masz przykład takiej funkcji Lambda z włączonym własnym endpointem URL napisanej w Pythonie i obsługującej GET i POST: https://medium.com/@g.bharthvajan/create-simple-get-post-rest-api-with-aws-lambda-function-url-7fa962197fa8

entropy_

@koszotorobur o z tym aws to dla mnie za skomplikowane xD Musiałbym się z tego pewnie z tydzień doktoryzować

udało mi się to już ngrookiem postawić jak wyżej pisali.

koszotorobur

@entropy_ - wiadomo, że nie można mieć ogarniętego wszystkiego - za dużo jest usług wszelkiej maści a za mało czasu by wszystko ogarnąć

Ja z AWSem pracuję już z dekadę więc dla mnie to jest z kilkadziesiąt minut roboty - zwłaszcza, że mam już podobne funkcje Lambda na własny użytek - więc połowa roboty dla mnie to byłoby kopiuj-wklej

Niemniej polecam ogarnąć w wolnym czasie to rozwiązanie, bo nie tylko jest darmowe, ale nie trzeba nic serwować ze swojego kompa/VPSa/instancji by mieć działający API endpoint do którego ma się ciągły dostęp skądkolwiek.

entropy_

by mieć działający API endpoint do którego ma się ciągły dostęp skądkolwiek.

@koszotorobur problem jest taki, że obliczenia są robione na gpu. Za darmo mi nie dadzą gpu z absurdalnym ramem na kilka godzin dziennie a z własnego laptopa mogę włączyć skrypt_start.bat i zostawić w tle i niech se lata

koszotorobur

@entropy_ - w Twoim przypadku rozwiązanie z funkcją AWS Lambda umożliwiłoby Ci uploadowanie wyników z własnego laptopa do DynamoDB w chmurze Amazonu wywołując ULR funkcji przy użyciu metody POST (co można zrobić narzędziem curl czy z poziomu jakiegokolwiek języka programowania - nawet PowerShella na Windowsie).

DynamoDB przechowywałoby wyniki przez czas jaki byś sobie zdefiniował (minuty, godziny, miesiące, itp). Alternatywnie mógłbyś przechowywać wiele wyników na raz i pobierać je po dacie lub przedziale czasowym - dobre jeśli chciałbyś mieć dostęp do historycznych wyników.

Pobieranie wyników odbywałoby się przez wywołanie tej samej funkcji Lambda tylko, że używając metody GET - dostęp domyślnie jest otwarty dla każdego z internetu ale można go zabezpieczyć.

entropy_

@koszotorobur przekracza to moje pojmowanie xDDD

Zatrzymałem się na informatyce z liceum chyba xD

koszotorobur

@entropy_ - to moja robota - więc ja dostaję kasę by takie rzeczy wiedzieć (a właściwie dostaję kasę bo wiem takie rzeczy ).

Jak kiedyś będziesz coś potrzebował bardziej skomplikowanego to wal śmiało - zawsze staram się pomóc.

entropy_

@koszotorobur dzięki wielkie :*

lipa13

@koszotorobur Bardzo fajny pomysł z wykorzystaniem do takich rzeczy lambdy. Dzięki za podpowiedź!

koszotorobur

@lipa13 - ja mam zawsze działającą malinkę w domu więc na niej mógłbym hostować REST API i wystawić endpoint na świat (mam statyczne IP). Niemniej rozwiązanie z Lambdą mi lepiej odpowiada bo nie muszę forwardować żadnych portów na routerze (i przez to obniżać bezpieczeństwa mojej wewnętrznej domowej sieci) oraz nie muszę się martwić co się stanie jeśli zabraknie prądu. Do tego ciągle rozwijam (lub chociaż utrzymuję) swoje umiejętności AWS i zawsze mam o czym pogadać na rozmowie kwalifikacyjnej jak pytają mnie o moje własne projekty.

roadie

@entropy_ a na co to api? A po co te numerki generujesz? A czemu tylko kilka godzin dziennie?

entropy_

@roadie a chciałem sobie coś zautomatyzować w n8n i mam mniej więcej taki problem

https://xkcd.com/1425/

entropy_

@roadie @koszotorobur A w ogóle to śmieszne, że 10 lat temu coś takiego było niemożliwe a dzisiaj podobny zakres niemożliwości robię sobie na laptopie bez problemu i do tego chuja się na tym znam xDDD

koszotorobur

@entropy_ - czyli technologia idzie do przodu a Ty się rozwijasz - fascynujące

Zaloguj się aby komentować