MatijaL

MatijaL

Help with setting up cloud storage to avoid excessive cloud bills

Hi guys,

I’m building a small app for myself, with a simple static HTML page generator, the whole project is for me to learn some things and I would need your help with setting up cloud storage.

The app is built with Phoenix LiveView. it allows users to create their own pages and have them on subdomain, user_page.appdomain.com. Users can upload images to the app which are then shown on their page. Pages are static HTML pages. So, there is a small CMS, users can add content, images and then static HTML page is generated and users can access it on their subdomain.

When users upload their images, they are saved to Tigris Cloud storage. In front of the app, there is Cloudflare for caching images.

Should I use public or private bucket for storage? What about CORS? What else should I take into the account? I want to learn how to set it up properly to avoid potential attacks, huge cloud bills everyone is talking these days about etc.

I don’t have much experience with setting up cloud so I would really appreciate your help here.

Most Liked

garrison

garrison

Traditional wisdom with S3 and co is that you should not serve files directly from the bucket due to cloud egress costs being quite high on major cloud platforms like AWS. If you were using AWS you could use their CDN (Cloudfront) or Cloudflare like you suggest.

However, my understanding is that the whole point of Tigris is they integrated the CDN into the product specifically so that you don’t have to deal with that. I did not look too closely but I see on their docs page that they advertise “zero egress fees” for this reason, so you probably don’t need Cloudflare in front if you’re using them.

For uploads obviously you want to make sure you rate-limit that, per-user and also perhaps globally as a sanity check in case of an attack.

If you need to enforce more complex access controls (some sites only viewable by logged-in users and so on) then maybe you would want to proxy everything through your app.

If everything is meant to be public then you may as well use Tigris as a CDN since that’s what it’s for I guess.

Do you want users to be able to embed content from their page into other websites? This is specific to your use-case, there is no general answer.

As long as you rate-limit your uploads and Tigris honors their free egress promise you should be safe. If you start serving petabytes they’ll probably call you to complain.

One more thing: if you’re hosting user data publicly like this make sure you accept and promptly respond to any takedown notices or your upstream providers are going to be very unhappy when they get them.

derek-zhou

derek-zhou

Public and enable CORS, so it is easier to embed them directly. And unless you are streaming videos, or have content that attract abusers (eg. porn, warez, …) you should not need to worry about egress fee yet.

Where Next?

Popular in Questions Top

nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
komlanvi
Hi everyone, I was playing with phoenix liveView but I run into an issue. I have a form and want to validate each input text when the te...
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New

Other popular topics Top

joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

We're in Beta

About us Mission Statement