{"id":5998,"date":"2026-04-06T15:15:29","date_gmt":"2026-04-06T15:15:29","guid":{"rendered":"https:\/\/dalelane.co.uk\/blog\/?p=5998"},"modified":"2026-04-06T15:15:29","modified_gmt":"2026-04-06T15:15:29","slug":"paying-for-image-hosting","status":"publish","type":"post","link":"https:\/\/dalelane.co.uk\/blog\/?p=5998","title":{"rendered":"Paying for image hosting"},"content":{"rendered":"<p>I don&#8217;t take my blog very seriously. It\u2019s a place where I leave myself reminders of things I figured out how to do, or share things I\u2019ve done that won\u2019t fit in a <strike>tweet<\/strike> Bluesky post. But even so, I get annoyed that my blog has often been offline. <\/p>\n<p>My site&#8217;s <a href=\"https:\/\/www.eukhost.com\/\">host provider<\/a> has a monthly bandwidth limit. When I hit that limit, my site is taken offline, replaced with an error page saying that I\u2019ve exceeded my quota. <\/p>\n<p>I\u2019ll write a blog post that includes images, and if too many people look at the page too many times, the whole site goes offline for the rest of the month. (To be fair, it\u2019s never a single post that does that &#8211; I don&#8217;t get that many hits! More often it\u2019s when I\u2019ve written a few posts in a month, and the last one pushes me over the line). Normally I end up offline for just a day a two, but it has been over a week before. <\/p>\n<p>Last month, I finally decided to do something about it. I started looking at moving the images I use in blog posts somewhere else that wouldn\u2019t count against my bandwidth limit. My blog isn\u2019t serious enough for me to be willing to spend a lot on it, but I don\u2019t mind paying <em>something<\/em> to make the worry about image bandwidth go away. <\/p>\n<p>I searched for image hosting services, and started reading about services such as postimages.org ($14.99 a month), imgbb.com ($12.99 a month), sirv ($19 a month), and imagekit.io ($9 a month). Every service I found felt too limited, too expensive, or both. <\/p>\n<p><!--more--><img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2026-04-06-imagehosting\/imgbb.jpg\" style=\"border: thin black solid; width: 100%; max-width: 600px;\"\/><\/p>\n<p>I was tempted by Cloudflare Images, which felt like it was probably a better option, but their docs and pricing were a little opaque. I wasn\u2019t 100% sure I knew what to expect if I went with it, and that was enough to put me off. <\/p>\n<p>I decided to keep it simple and do something myself. I signed up for a new AWS account, created an S3 bucket I could put images in, and setup Amazon\u2019s CloudFront CDN to allow cached HTTP access to what I put in S3. <\/p>\n<p>I was expecting that to be fiddly to set up, but it was surprisingly quick and easy. I considered making this post a step-by-step how-to on how to set it up, but really that would be a waste of time. Click through the screens, accept the defaults, you\u2019re done. The whole thing took me less than an hour, and that included setting up an images.dalelane.co.uk subdomain to put it all behind. Now if I change my mind and want to move somewhere else it will be a little easier (as long as I pick somewhere that also supports custom domains). <\/p>\n<p>What surprised me even more was how cheap it has been so far &#8211; especially after spending so long looking at services at $10 a month or more. <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2026-04-06-imagehosting\/s3-costs.jpg\" style=\"border: thin black solid; width: 100%; max-width: 600px;\"\/><\/p>\n<p>My first month\u2019s usage across S3 and CloudFront came to $0.01<\/p>\n<p>Because I created a new account, I got $100 of AWS credits at signup, so actually my first month didn\u2019t cost me anything, it just reduced my credits to $99.99. <\/p>\n<p>Those credits will expire in a year &#8211; long before I\u2019ve spent them. But a year of free hosting followed by a bill of a few cents a month\u2026 I can\u2019t complain about that!<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2026-04-06-imagehosting\/s3-credits.jpg\" style=\"border: thin black solid; width: 100%; max-width: 600px;\"\/><\/p>\n<p>In hindsight, this was an obvious fix that I should have done <em>months<\/em> ago instead of putting up with bandwidth annoyances and outages. But better late than never!<\/p>\n<p>Now I\u2019m thinking about whether it\u2019s worth the effort (patching, upgrades, hosting costs for a MySQL database, etc.) to keep this blog as a WordPress site. Maybe I make this a static site and put the whole lot in S3. For the moment, the switching cost of migrating from WordPress is holding me back, but it\u2019s close.<\/p>\n<blockquote class=\"bluesky-embed\" data-bluesky-uri=\"at:\/\/did:plc:mecl54mdisxz3xv5da7yxr53\/app.bsky.feed.post\/3mh2dtgmmx22l\" data-bluesky-cid=\"bafyreie5e5pbl4dzzdx4rfssztbv7uxizo3sty3bgwph3plpiwtwuyccs4\" data-bluesky-embed-color-mode=\"system\">\n<p lang=\"en\">Setting up S3 + CloudFront as a cheaper place to host images than my blog&#x27;s hosting provider charges me. <\/p>\n<p>It&#x27;s impressively easy&#8230; I&#x27;m seriously tempted to just ditch WordPress, switch to a static site and move the whole lot there.<\/p>\n<p>&mdash; Dale Lane (<a href=\"https:\/\/bsky.app\/profile\/did:plc:mecl54mdisxz3xv5da7yxr53?ref_src=embed\">@dalelane.co.uk<\/a>) <a href=\"https:\/\/bsky.app\/profile\/did:plc:mecl54mdisxz3xv5da7yxr53\/post\/3mh2dtgmmx22l?ref_src=embed\">14 March 2026 at 21:12<\/a><\/p><\/blockquote>\n<p><script async src=\"https:\/\/embed.bsky.app\/static\/embed.js\" charset=\"utf-8\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I don&#8217;t take my blog very seriously. It\u2019s a place where I leave myself reminders of things I figured out how to do, or share things I\u2019ve done that won\u2019t fit in a tweet Bluesky post. But even so, I get annoyed that my blog has often been offline. My site&#8217;s host provider has a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-5998","post","type-post","status-publish","format-standard","hentry","category-misc"],"_links":{"self":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5998"}],"version-history":[{"count":2,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5998\/revisions"}],"predecessor-version":[{"id":6000,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5998\/revisions\/6000"}],"wp:attachment":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}