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.0połączenie ok, dostaję terminal na vpslocalhost:7860 [login]@[IP 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
@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.
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
@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 14
53] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [21/Oct/2024 14
17] "POST / HTTP/1.1" 405 -
jedna linijka i lata xDDD
Dzięki chłopaki
@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
@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?
@ataxbras -L jest jeszcze gorzej curl na vps:
curl: (7) Failed to connect to 127.0.0.1 port 9003: Connection refused
@entropy_ Daj -vvv do ssh, może pokaże się jakiś problem.
@ataxbras @koszotorobur @dfe @lipa13 Kurwa, chłopaki jakim ja jestem debilem XD
Zrobiłem! Zamiast:
ssh -R 0.0.0.0
localhost:7860 [login]@[IP VPS]
Powinno być:
ssh -R 0.0.0.0
127.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 :*
@entropy_ ipv6 weszlo mocno, nie pomyslalem o tym
@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
@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.
@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.
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
@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ć.
@koszotorobur przekracza to moje pojmowanie xDDD
Zatrzymałem się na informatyce z liceum chyba xD
@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.
@koszotorobur dzięki wielkie :*
@koszotorobur Bardzo fajny pomysł z wykorzystaniem do takich rzeczy lambdy. Dzięki za podpowiedź!
@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.
@entropy_ a na co to api? A po co te numerki generujesz? A czemu tylko kilka godzin dziennie?
@roadie a chciałem sobie coś zautomatyzować w n8n i mam mniej więcej taki problem
@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
@entropy_ - czyli technologia idzie do przodu a Ty się rozwijasz - fascynujące
Zaloguj się aby komentować