Frontend accessing backend - internal URL?

tony-hunterHOBBY

8 months ago

Hi folks

I have a seperate FE and BE service - two different projects.

The FE has an env var to locate the backend.

Should I set this to the internal URL of the BE service that railway exposes?

If so, should I prefix with http/https?

0 Replies

tony-hunterHOBBY

8 months ago

c18400df-5dee-4fe7-bc56-a98db8d475bd


8 months ago

two different projects, or two different services?

please read this page so we can get our terminology correct before going forward -


tony-hunterHOBBY

8 months ago

two different services within the same project


8 months ago

thank you


8 months ago

is this a CSR frontend?


tony-hunterHOBBY

8 months ago

NextJS frontend, blend of SSR/CSR


tony-hunterHOBBY

8 months ago

some of my build steps hit the backend, when I've changed to the internal URL (with https:// prefix) I get this:


tony-hunterHOBBY

8 months ago

```#12 22.31 TypeError: fetch failed

12 22.31 at node:internal/deps/undici/undici:12502:13

12 22.31 at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

12 22.31 at async a (/app/.next/server/…/page.js:1:11099)

12 22.31 at async u (/app/.next/server/…/page.js:1:10740) {

12 22.31 digest: '4154157414',

12 22.31 [cause]: Error: getaddrinfo ENOTFOUND

12 22.31 at GetAddrInfoReqWrap.onlookupall as oncomplete

12 22.31 at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:130:17) {

12 22.31 errno: -3008,

12 22.31 code: 'ENOTFOUND',

12 22.31 syscall: 'getaddrinfo',

12 22.31 hostname: '.railway.internal'

12 22.31 }```


8 months ago

the private network is not available during build time.

the internal domains may use domains instead of IP addresses, but they need to be treated like a local IP, meaning you use http and a port in the URL.

if your frontend calls the backend via SSR during runtime use the private network.

if a client's browser calls the backend, use the public url.


tony-hunterHOBBY

8 months ago

Are the IPs static on a hobby plan?


8 months ago

that is a pro only feature, and it doesnt have anything to do with private networking.


tony-hunterHOBBY

8 months ago

all makes sense, thanks Brody


8 months ago

let me know if you have any more questions


tony-hunterHOBBY

8 months ago

sorry, one more, when addressing the internal url in SSR, do I use http or https prefix?


8 months ago

http


8 months ago

treat it like your local network, but instead of a ip, it uses a domain


tony-hunterHOBBY

8 months ago

thanks man. Is that something that's obvious to everyone but me, or should it be in docs? (Or, is it already?)


8 months ago

its not obvious to everyone, i can for sure see the logic in thinking you would use https with a domain name, but it is in the docs! -


tony-hunterHOBBY

8 months ago

thanks again - should have read the manual


8 months ago

its not always a first thought to dig into the docs, no worries!


tony-hunterHOBBY

8 months ago

ok - have been trying this, on an API call that is definitely SSR

I'm calling :8080/ from my frontend. My backend (python) has the internal url in ALLOWED_HOSTS


tony-hunterHOBBY

8 months ago

I'm getting a ``` code: 'ECONNREFUSED',

syscall: 'connect',```

tony-hunterHOBBY

8 months ago

on the frontend


8 months ago

please provide the actual url you are using


tony-hunterHOBBY

8 months ago

DM'd


8 months ago

<#727685388893945877> #5


tony-hunterHOBBY

8 months ago

you need a way people can pass you variables they don't want exposed


tony-hunterHOBBY

8 months ago

would rather not post in public



8 months ago

I assure you it's not sensitive in the slightest



8 months ago

it wouldn't be a very private network otherwise haha


8 months ago

does your backend listen on 8080?


tony-hunterHOBBY

8 months ago

yes


8 months ago

gunicorn? unicorn?


tony-hunterHOBBY

8 months ago

verified with a print on launch of my backend - THE PORT IS 8080


tony-hunterHOBBY

8 months ago

gunicorn - started with web: python [manage.py](manage.py) migrate &amp;&amp; gunicorn .asgi:application -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:$PORT


8 months ago

remove the bind flag


8 months ago

(and it's accompanying host:port)


tony-hunterHOBBY

8 months ago

doing so


tony-hunterHOBBY

8 months ago

no joy


8 months ago

show me your new start command please


tony-hunterHOBBY

8 months ago

web: python manage.py migrate && gunicorn shareapodcast_be.asgi:application -k uvicorn.workers.UvicornWorker


8 months ago

what error are you getting now


tony-hunterHOBBY

8 months ago

Same as above


tony-hunterHOBBY

8 months ago

Connection refused


8 months ago

very sorry, i was mistaken, your start command needs to be -

web: python manage.py migrate &amp;&amp; gunicorn .asgi:application -k uvicorn.workers.UvicornWorker --bind [::]:$PORT

tony-hunterHOBBY

8 months ago

works!


tony-hunterHOBBY

8 months ago

Next is now giving me warnings about mixed protocols being used (https vs http)


tony-hunterHOBBY

8 months ago

Which I’ll look at


8 months ago

sounds good