assets hosting
asmirbelkic
HOBBYOP

2 years ago

How much is fast railway to deliver images does it use cdn or something, i mean is it a good idea to store data in the persistent volume ?

146 Replies

asmirbelkic
HOBBYOP

2 years ago

N/A


2 years ago

Railway doesn't have a CDN, you'll need to have your own CDN layer


2 years ago

It's not that slow though, I'm in South Africa and most of my deployments is in US-West and I haven't felt the need to add a CDN layer


asmirbelkic
HOBBYOP

2 years ago

right but the volume is still limited to 5gb right ?


2 years ago

Oh yea, on hobby plan it's limited to 5GB


2 years ago

You can increase it to 250GB on pro plan though


asmirbelkic
HOBBYOP

2 years ago

oh nice, by the way the pro plan the price is fixed to 25 bucks a month


asmirbelkic
HOBBYOP

2 years ago

or it's only for the additonal usage ?


2 years ago

pro plan is a fixed price of 20 bucks per person in the team plus additional resource usage


asmirbelkic
HOBBYOP

2 years ago

ok so you pay even if your not using 20 bucks of bandwich/resource value ?


2 years ago

just want to note, a single volume is 5gb on hobby, up to 50 on pro


2 years ago

so you could have multiple volumes if needed, they just have to be on different services


asmirbelkic
HOBBYOP

2 years ago

so 50gb not 250


2 years ago

where are you seeing 250?


2 years ago

the default is 50GB, it can be increased to 250GB


asmirbelkic
HOBBYOP

2 years ago

Fragly was saying maybe i'm not understanding well


2 years ago

it was updated recently i believe


asmirbelkic
HOBBYOP

2 years ago

all right so the bandwith is fast enough and stuff to not even need a cdn tho ?


2 years ago

yea, 20 usd per person you have on your railway project and then you also pay for resource usage seperately


asmirbelkic
HOBBYOP

2 years ago

i think i'll start hosting on hobby and when my app will grow and need more i'll pass to pro


2 years ago

For me personally I never bother adding a CDN but it'd depend on your project's requirements and scale


2 years ago

Sounds good 🙂


asmirbelkic
HOBBYOP

2 years ago

by the way i have something that seems not existing anymore


asmirbelkic
HOBBYOP

2 years ago

the "credits" based plan


asmirbelkic
HOBBYOP

2 years ago

1282038407752712192


2 years ago

The credits based plan does still exist


2 years ago

it just can't be used as an option on pro plan accounts


asmirbelkic
HOBBYOP

2 years ago

oh yeah thats what i was gonna ask, so yeah your still locked to the base hobby plan even if you have enough of credits


2 years ago

yea, it's worth noting though that when you get pro plan it'll be seperate from your hobby plan

so it's not like you upgrade your hobby plan to turn into a pro plan, you just purchase a pro plan

here's what that'd look like:

1282038964085063751


2 years ago

Here you can see a hobby (personal) plan and a pro (team) plan


asmirbelkic
HOBBYOP

2 years ago

ok so like on vercel yeah


2 years ago

yea


asmirbelkic
HOBBYOP

2 years ago

Okey then, one last question if you don't mind


asmirbelkic
HOBBYOP

2 years ago

Do you know any good self hostable service similar to cloudinary (api based hosting assets images, video only needed) with image transform (bluring, resizing) ?


2 years ago

I've heard good things about imagekit (never used it before though), you could check that out


asmirbelkic
HOBBYOP

2 years ago

okey, i need something that is plug and play with railway template, and capable of hosting images on the direct volume


asmirbelkic
HOBBYOP

2 years ago

i'll check that out


2 years ago

for future reference, we can transfer credits from your hobby to pro workspace after you create the pro workspace


asmirbelkic
HOBBYOP

2 years ago

thats cool, ty brody


asmirbelkic
HOBBYOP

2 years ago

@Fragly Thanks for the help thats very sweet from both of you have a great day 😄 !


2 years ago

Happy to help, you too 🙂


asmirbelkic
HOBBYOP

2 years ago

Sorry, i have a question concerning volume.

So i've created a volume with mount path -> /assets

So i suppose i can now use it directly like a path static folder

so const ASSETS_PATH = "/assets"; and await writeFile to the path.

Is it right ?

So now i'd like to give those images a subdomain so with nginx i'd probably do a server_name and location root..

The goal is to access the images by going on assets.website.com/images.png

But here how can i do that ?


2 years ago

you've answered your own question! you are correct in the first question and the second question, yep that's how you'd write to the volume and nginx or similar is how you'd serve files.


asmirbelkic
HOBBYOP

2 years ago

Isn’t there easier way to do that with cloudflare prixing ?


asmirbelkic
HOBBYOP

2 years ago

And i've installed nginx in railway.

So what i suppose again is that i create a nginx.conf file in my project root folder ?


asmirbelkic
HOBBYOP

2 years ago

Yeah but no, i just found this answer from Brody, -> https://help.railway.app/questions/nixpacks-staticfile-provider-configure-n-f0cd2327

Brody - "Railway does not provide a way to provide an nginx.conf file for the staticfile provider.

instead, have railway build your app and then serve it with caddy, example here".

Yeah here i'm lost never head of that...


asmirbelkic
HOBBYOP

2 years ago

Project ID : 37fc7b13-e02a-498b-8b9e-6d266d1ccf97


asmirbelkic
HOBBYOP

2 years ago

So i've tried Caddyfile + nixpacks deploys are fine but app not accessible 502 bad gateway

{
    admin off
    auto_https off # Disable automatic HTTPS as Cloudflare handles it
}

baryum.co {
    tls {
        protocols tls1.2 tls1.3
    }
    reverse_proxy localhost:3000
}

assets.baryum.co {
    tls {
        protocols tls1.2 tls1.3
    }
    root * /assets
    file_server
}

Idk what is causing the issue, Public Networking tab seems to be correct and cloudflare looks ok aswell...


asmirbelkic
HOBBYOP

2 years ago

ok tried everything out with caddyfile so i'm leaving that there i'm finnaly trying this example

https://railway.app/template/o3MbZe

But still experiencing issues with nginx file not seems to be applied


asmirbelkic
HOBBYOP

2 years ago

anyway i give up nothing works...


2 years ago

you were close, but you used domains instead of listening on the PORT environment variable.

either way, nginx or caddy, doesn't provide you with a way to put media onto the service.

if this is all new to you, it might be better to stick with something like cloudinary


asmirbelkic
HOBBYOP

2 years ago

either way, nginx or caddy, doesn't provide you with a way to put media onto the service.

I made an endpoint on my sveltekit app that will upload the assets to the volume.


asmirbelkic
HOBBYOP

2 years ago

i used your create react app example for caddy & nixpack but getting 404 or 502...


2 years ago

you can not attach a single volume to multiple services, so whatever volume you are uploading files to is not the same volume you have hooked up to caddy/nginx


asmirbelkic
HOBBYOP

2 years ago

so it is not possible to have a volume on my service with the caddy in the frontend service and attach it to assets in volume ??

1282345809328738364


2 years ago

not at the same time, no


asmirbelkic
HOBBYOP

2 years ago

oh :/

There is basically no way then to have a subdomain on the volume while being capable of passing data to it from the frontend ? No way, even with another service/template anything ?


2 years ago

oh there definitely is, just not with what you have setup


asmirbelkic
HOBBYOP

2 years ago

oh well i still need to keep my endpoints and api in my frontend sveltekit app, and if i can use the volume to store persistent data that fit my needs

How can i do that ?


2 years ago

I don't think i understand the question, you simply read and write files to the volume at its mount point


asmirbelkic
HOBBYOP

2 years ago

yup, but from what i've understood i need nginx or caddy to be able to rewrite the path to make the subdomain pointing the assets folder


2 years ago

why do you need an assets subdomain?


asmirbelkic
HOBBYOP

2 years ago

since cloudinary isn't not cheap at all for custom domain and usage, i want to keep having good looking urls from my custom domain

like ppl have with cdn, images or stuff


2 years ago

then just add assets.domain.com to your railway service


asmirbelkic
HOBBYOP

2 years ago

as custom domain ?


2 years ago

yes


asmirbelkic
HOBBYOP

2 years ago

i did but it serves the app like the main domain does, and it doesn't serve images like

assets.domain.com/image.png


2 years ago

  1. you need to write the code to not serve your main app on that domain.
  2. you need to write the code to serve your assets on that subdomain.

asmirbelkic
HOBBYOP

2 years ago

oh rly


asmirbelkic
HOBBYOP

2 years ago

after many search i've not found anything explaining that


2 years ago

just write the code to do it


asmirbelkic
HOBBYOP

2 years ago

i'll do some search to discover more on the subject but here now idk where to start, never knew we could do that from the frontend side


2 years ago

did you say you were using sveletkit?


asmirbelkic
HOBBYOP

2 years ago

yup


2 years ago

I assume you are using it in CSR mode?


asmirbelkic
HOBBYOP

2 years ago

had to disable it


2 years ago

why?


2 years ago

you would need to be using the node adapter for what you want to achieve


asmirbelkic
HOBBYOP

2 years ago

i manage my website content from a chrome web extensions and i need to pass requests from the browser to access the endpoint


2 years ago

huh


2 years ago

are you using the node adapter


asmirbelkic
HOBBYOP

2 years ago

yup automated everything in the browser one click and it's resize + screenshot the website then a form is filled and if submitted it goes on my endpoint secured by api key


asmirbelkic
HOBBYOP

2 years ago

yes sir


2 years ago

okay then accessing the volume and doing the hostname checks, serving the files, etc, are all going to be done server side


asmirbelkic
HOBBYOP

2 years ago

yes always


2 years ago

okay then I'm not sure why you mentioned client side


asmirbelkic
HOBBYOP

2 years ago

i'm unsure but maybe i don't completely understand everything

note-adapter is just an adapter to build the code and stuff not providing a complete standalone backend service like express ?


2 years ago

it enables you to write server side code


2 years ago

vs. a client side website


asmirbelkic
HOBBYOP

2 years ago

yup exactly why i use sveltekit with SSR instead of static adapter


2 years ago

then it sounds like you understand what you need to be doing, just don't overthink!


asmirbelkic
HOBBYOP

2 years ago

then yeah i'm missing some knowledge then if i can do all of that from node-adapter


2 years ago

you write the code to do what you want to do


asmirbelkic
HOBBYOP

2 years ago

yeah 🤣 thats my main issue i do overthink everything always


2 years ago

just start typing


asmirbelkic
HOBBYOP

2 years ago

sometimes for lack of knowledge


2 years ago

nah you got this, first things first, create a server side route that returns the given media file


asmirbelkic
HOBBYOP

2 years ago

👌


asmirbelkic
HOBBYOP

2 years ago

fine ty brody


asmirbelkic
HOBBYOP

2 years ago

You are right i've never tried this part of svelteit docs

https://kit.svelte.dev/docs/adapter-node#custom-server


2 years ago

you don't need a custom server to read files off the volume, but you would likely need it to do the assets subdomain redirection stuff


asmirbelkic
HOBBYOP

2 years ago

yes thats why i created my server.js to rediction concenrant the read files off the volume i still don't know how to do that but i'll do my search


2 years ago

at that point it's just writing JavaScript, easy enough, you got it!


asmirbelkic
HOBBYOP

2 years ago

So i can access the volume data, as simple as going to a direct folder like express.static(path.join(__dirname, "/assets"))(req, res, next); right ?


2 years ago

correct


asmirbelkic
HOBBYOP

2 years ago

one thing, now i have to create a subdomain at cloudflare do i have to add it also in railway ?


2 years ago

yes


asmirbelkic
HOBBYOP

2 years ago

so it's limited to 2 custom domains i have to remove www ?


2 years ago

you first need to add it to railway, and then cloudflare though


2 years ago

correct, hobby is limited to two


asmirbelkic
HOBBYOP

2 years ago

yup but by doing this arn't we saying that we want our app to run like "main domain name" to the subdomain ?


asmirbelkic
HOBBYOP

2 years ago

mhhh actually this works tho so i guess it's not


2 years ago

no lol


asmirbelkic
HOBBYOP

2 years ago

Ok the subdomain works but image delivery looks not


2 years ago

you need to write the code for that


asmirbelkic
HOBBYOP

2 years ago

i did

app.use((req, res, next) => {
    const host = req.hostname;
    if (host.startsWith("cdn.")) {
        // Check if a specific file is requested
        if (req.url === "/" || req.url === "") {
            // No specific file requested, redirect to error page
            return res.status(404).send("Error: No file specified");
        }
        // Serve static files from the /assets directory
        express.static(path.join(__dirname, "/assets"))(req, res, (err) => {
            if (err) {
                // If file not found, send a 404 error
                res.status(404).send("Error: File not found");
            }
        });
    } else {
        next();
    }
});

Maybe an issue witht the endpoint image location ?


2 years ago

doesnt look like valid code to me


asmirbelkic
HOBBYOP

2 years ago

in test env that works


asmirbelkic
HOBBYOP

2 years ago

even when launched in production localhost


2 years ago

how do you know there are images in the volume


asmirbelkic
HOBBYOP

2 years ago

actually idk


asmirbelkic
HOBBYOP

2 years ago

by passing it through my endpoint it return "message": "Images processed and saved successfully",

with the url but idk how to actually verify since there is no terminal to access


2 years ago

how do you know you are saving to the correct location


asmirbelkic
HOBBYOP

2 years ago

i suppose from your previous answer, when i asked if by doing await writeFile(path.join(ASSETS_PATH, filename1), image1); it'll write the file to the volume location and folder /assets


asmirbelkic
HOBBYOP

2 years ago

reading this

https://www.answeroverflow.com/m/1168623790020886578

"By default, the storage location is set to the storage subdirectory in the root of the volume, but by setting a service variable USE_VOLUME_ROOT to 1 you can opt to use the root of the volume as the storage location instead"


2 years ago

what does that have to do with the volume on the sveltekit service though?


asmirbelkic
HOBBYOP

2 years ago

oh i was thinking maybe when i upload my file it's uploading it in the root folder instead of going on the volume ?? maybe i misunderstood


2 years ago

you did, that is specific to the filebrowser service


asmirbelkic
HOBBYOP

2 years ago

meh ok so won't help me tho


asmirbelkic
HOBBYOP

2 years ago

Ok tried with


app.get("/:file", (req, res) => {
    const file = req.params.file;
    res.sendFile(path.join(__dirname, "assets", file));
});

But no success


2 years ago

for future reference "no success" is not very helpful


asmirbelkic
HOBBYOP

2 years ago

yeah sorry, i mean after upload success by endpoint i get url

"https://cdn.baryum.co/download_1725812650425_800x500.png",

But it's not accessible


2 years ago

it's not accessible is also not helpful, as that's a very vague term


asmirbelkic
HOBBYOP

2 years ago

basically idk how i can verify if data is written on volume there is no more information on dashboard so hard to say


asmirbelkic
HOBBYOP

2 years ago

i still can't figure out if it's a url/middleware problem or path/location


2 years ago

there's metrics on disk usage


asmirbelkic
HOBBYOP

2 years ago

yeah stuff seems to be written, where, when and more idk

so i can only suppose that yes stuff is being stored so there is a problem in my middle, the way i am retrieving those assets

1282377682675433482


asmirbelkic
HOBBYOP

2 years ago

😄


asmirbelkic
HOBBYOP

2 years ago

still not found out but i won't give up


asmirbelkic
HOBBYOP

2 years ago

finally made it work but under /cdn/ folder next the main domain and not as a subdomain


2 years ago

awesome!


asmirbelkic
HOBBYOP

2 years ago

after 495 commits it works



asmirbelkic
HOBBYOP

2 years ago

i think i'm gonna change the way i upload imgs cuz csrf is kinda bad to be disabled.

I still can upload those by base64 raw in the json payload


asmirbelkic
HOBBYOP

2 years ago

@Brody Ty for your help this can be closed


2 years ago

sounds good!


Welcome!

Sign in to your Railway account to join the conversation.

Loading...