top | item 22955260

Ask HN: Optimal cloud service to run tiny website with back end Python + SQLite?

73 points| djoldman | 5 years ago

Web ninjas: What is your go-to cloud service for running a small website served with python + jinja2 + sqlite? The website does little besides searching an sqlite table, serving a form, and writing the form response to an sqlite table, all with minimal computation and bandwidth. Wants are:

  Low price
  Low maintenance time/cost
  Simplicity
My strengths do not include web development/servers but I know the basics. I'm particularly interested in the gotchas like: difficulties setting up SSL, transfer limits, and "X is perfect except that ____".

If I'm asking the wrong question or not providing enough info, please say so.

77 comments

order
[+] joshmn|5 years ago|reply
Dokku + your favorite VPS: http://dokku.viewdocs.io/dokku/

Installation is a breeze and there are plugins. If you're at all familiar with Heroku's deploy, you'll love this. It's the closest thing I've found to `git push` without any thinking.

[+] throwaway77384|5 years ago|reply
Dokku + Hetzner + CloudFlare here. It's just so simple. I love it.

I have noticed that deploys eat HDD for breakfast. Prune often. ("docker system df" helps show stats on space usage).

I have also read many optimisation guides talking about Alpine Linux images, but not sure whether that makes a difference.

Running a Go stack. Often wondering whether Caddy could be an alternative?

Sometimes I feel like this is still "too much". Like I still don't have enough control over the stack. Cloudflare introduces a lot of magic. I am not sure I fully grasp Dokku, but it works. Oh well!

[+] StavrosK|5 years ago|reply
Another vote for dokku, I moved all my projects there years ago and couldn't be more satisfied.
[+] znpy|5 years ago|reply
Glad to see that dokku is still alive. Definitely recommend this.
[+] rasulkireev|5 years ago|reply
I've used DigitalOcean (ref link -> https://m.do.co/c/a2a2c0826ff3) to host my Django sites, both with postgresql and sqlite. It will take you some time to figure out how to host it.

Once you a succeed each subsequent time becomes much easier. Plus you get to learn a ton about server management.

There are fantastic posts that will help you.

https://www.digitalocean.com/community/tutorials/how-to-set-...

[+] kumarvvr|5 years ago|reply
Second this. DO is insanely easy to use and it provides solid footwork to delve into a bit of an actual production deployment process.
[+] platform|5 years ago|reply
PRGMR.com 1.25 GiB RAM, 15 GiB Disk for $5 per month.

https://prgmr.com/xen/ inexpensive. no overage charges. can pay by bitcoin. (and a FreeBSD friendly).

I wonder if you would also benefit from installing something like yunohost [2] on top of Debian. This will get you your personal cloud. And the use YounoHost's 'Custom web app' container [4]

This way, you get an automatically configured web server (nginx), with certificates (via Let's encrypt) that get auto updated.

You also get a pre-configured user/sftp access to your app's folders.

And those folders will be backed up when you hit the backup button...

Nginx will invoke your python app when the predefined URL is hit.

All you have to do is to point your domain registrar to the prmgr VPS host running yunohost.

[2] https://yunohost.org/#/whatsyunohost [3] https://yunohost.org/#/apps [4] https://github.com/YunoHost-Apps/my_webapp_ynh

[+] dclusin|5 years ago|reply
Are you affiliated with the company? I chuckle when I see this hosting shop pop up on HN. They had advertisements on the dividers at the Safeway in Mountain View. Was wondering how they worked that.
[+] doctoboggan|5 years ago|reply
Google cloud run. If you can put your python app in a docker container (very easy) then you can run it on Cloud Run. They have a very generous “always free” tier.
[+] justsomeuser|5 years ago|reply
If SQLite sends writes to the disk you cannot use cloud run, as it does not have a persistent disk.
[+] stubob|5 years ago|reply
Second. I'm running an appengine site, and it's nice to be able to deploy from command line. I'm using Mongo Atlas, but they have a free tier as well. If you don't mind an appengine domain, you can have a free friendly domain as well.
[+] paxpelus|5 years ago|reply
I hate messing with nginx and ssl configurations that why I tried caprover (https://caprover.com/) on a vultr server. It handles ssl through let's encrypt and it even includes some nice monitoring tool. It needs some familiarity with docker if you want to fully use its features but in general I am running it on 2 servers with success and I am very happy. I totally recommend it.
[+] znpy|5 years ago|reply
If you don't have too much load, heroku could be good for you, but you'll have to use postgresql. The free tier is nice though.
[+] tln|5 years ago|reply
Having to use postgres seems like a plus :) besides being a great dbms, using postgres means you can port to other hosts easily, as opposed to say firebase.

I second heroku for OPs requirements, extremely easy to set up and manage, and the free tier handles many small sites well.

Whatever you choose, use cloudflare for free SSL.

[+] kirubakaran|5 years ago|reply
How important is SQLite to you? I run https://crushentropy.com/ (high-res scheduling) on Google App Engine (Standard) with data persisted on Firebase. It costs me $0 per month.
[+] anaganisk|5 years ago|reply
So the user must, re-write his code to fit into firebase?
[+] antender|5 years ago|reply
http://pythonanywhere.com This guys specialize in python hosting and have a free tier
[+] rich_sasha|5 years ago|reply
I too have a very good experience with them. Very, very simple and no hassle to set up.

In particular, all the web hosting side of things is preconfigured.

[+] syedmeesamali|5 years ago|reply
Love them always and still hosting with them. Will switch to paid one once I get some traffic. Excellent guys and hosting packages.
[+] blikdak|5 years ago|reply
AWS has a free tier for a year after signing up. A 'tiny' instance for webserver with letsencrypt on for your free ssl/tls certificates. You can automate backups via snapshots, though make sure they delete automatically after a week or so. I would recommend you use MySQL instead of SQlite, use RDS free tier there, SQlite not so good with concurrent connections and definately not if people are adding their own information. Look into haproxy as your gateway so you can scale to multiple servers if need to but not be tied into AWS specific Route 53, if you set it up right you can basically grab the configs, site source, files etc and a database dump and run it on a Raspberry PI in your home if you need to and have a static IP. Try not to get tied into one specific cloud provider too and keep shopping around for free or better deals. You can have a web presence for no money except your DNS registration with a little bit of tinkering and looking around.
[+] anaganisk|5 years ago|reply
The user says, a tiny site, why the over engineering? Unless we are speaking of tens of concurrent connections SQLITE works.
[+] aoeusnth1|5 years ago|reply
Check out google cloud run for running your stateless webserver, its free tier is pretty good and you can run whatever stateless container you want to.

Personally from there I would use a min-spec Postgres CloudSQL for the DB, but you can use whatever hosting you like if you want to DIY.

[+] MoBattah_|5 years ago|reply
Amazon Web Services. Won't cost much.

If you want to keep it simple..

A very small EC2 box. Maybe even micro instance. That'll run your python code + sqlite.

If you want, you can use an elastic load balancer or Route53. If you don't have DNS already. Route53 is AWS's DNS service which is easy to use.

This whole setup should not cost you much. If you do it right, you can probably spend less than $10/month taking advantage of the free tier.

Later on, as a side project, you can try to make the app serverless. You're probably close to it being serverless. Doing this allows you to run it on AWS Lambda. Which makes things even cheaper, if not free. And it's just pretty cool.

But most likely you'd have to switch to a real data store. No problem since AWS has DynamoDB.

[+] rini17|5 years ago|reply
Absolutely nope. Both unfamiliar naming and the console interface is overwhelming, it's overkill to learn it just to run one VPS.
[+] aivarsk|5 years ago|reply
Not mentioned by others, http://atlantic.net starts at $5 a month. DigitalOcean has a similar offer with much better documentation. I run a couple of larger servers at DigitalOcean and am really satisfied with uptime, management console, etc. So my vote goes for DigitalOcean.

But Atlantic had a 256Mb RAM, 10Gb disk option years ago for just $0.99 I still have one server there for hosting static HTML, running some scraping tasks, MS document to PDF conversion service (Python Twisted) for a customer, etc. All that for just $1.20 a month (including VAT)

[+] mateioprea|5 years ago|reply
http://scaleway.com it costs 3$/month for a vps
[+] bunya017|5 years ago|reply
Second.

Scaleway + Cloudflare + CapRover, you get the simplicity and joy of using PAAS without the cost. CapRover's one click install is awesome.

[+] somishere|5 years ago|reply
Would definitely be looking at removing the homespun server aspect and going with a high-performance, low latency paas / serverless setup. Lets you focus on and deliver the outputs you need (i.e. user interface + data).

If I were in your shoes I'd be looking at either:

- Firebase (free tier). Probably just using their RTDB for storage. You could conceivably do away with your backend entirely here.

- Cloudflare workers + KV storage (~$5 per month?) .. this would give you killer performance and let you write your storage logic in python. You're paying a minimum fee per month here, but in reality that could cover a large number of seperate sites.

Both suggestions raise vendor lock-in considerations, but given the use-case it doesn't seem like a major concern. Of course if you're looking forward to the joys of managing a box ...

[+] chrisgoman|5 years ago|reply
DigitalOcean (or any of the $5 VPS) with Debian 10, you will need to know "basics" like SSH and typing some commands (a bunch of sudo apt-get _____) and then you are done. The only thing you don't have with DigitalOcean is domain name registration but everything else is there. Use them for DNS! They have some pre-built stuff for your list here but I would just spin up a blank Debian 10 box.

You can also get a free tier at Amazon AWS but you have to learn all the EC2 stuff and almost piece yourself a server one piece at a time (like the good old days where you build your own PC but clicking buttons) -- IMHO this takes much longer than just doing a $5 VPS and typing things. So if you want to learn Amazon AWS stuff, this may be a good path but it is going to take a lot longer

[+] gospaz|5 years ago|reply
Sign up for an Amazon Web Services account and a Cloudflare account

Python + SQLite AWS EC2 t2.micro

DNS + SSL Cloudflare free plan

Total cost = $0

[+] martininmelb|5 years ago|reply
I wrote this app last weekend mostly so that I could look at COVID-19 stats, but also as a learning exercise. I download data from John Hopkins, ingest it into a SQLite database and then have a couple of Python scripts to present an API to the front end. It is hosted on a Digitalocean droplet which costs me US$5.00 per month. Setup is easy - takes less than 10 minutes, and if you know Linux everything is pretty straightforward.

I also use Cloudflare as a DNS (free tier).

https://martin.schweitzer.id.au/covid19/

[+] mahalol|5 years ago|reply
That's a pretty cool project. As a Sysadmin I know a bit of Python and how to use Rest APIs but would you mind pointing me in the right direction on how you present an API to the front end? I'd like to learn how to build a website like this.