HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
laurilehmijoki
s3_website
Scala2014–2020
laurilehmijoki / s3_website

s3_website

Manage an S3 website: sync, deliver via CloudFront, benefit from advanced S3 website features.

16Distinct people
17Mentions
0Explicit recommenders
2.2KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Manage an S3 website: sync, deliver via CloudFront, benefit from advanced S3 website features.

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year17 dated mentions

Observed mentions: 2014-05-07 03:58:28 UTC to 2020-02-15 23:25:38 UTC.

02462014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments20142015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 7 mentions; 0 submissions, 7 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20172018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2020

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC303
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC303
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC707
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC202
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC101
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC000
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC101

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
Deploy your website to S3 Please note that this project is not actively maintained. Consider using s3_website_revived instead. What s3_website can do for you Create and configure an S3 website for you Upload your static website to AWS S3 Jekyll, Nanoc, and Middleman are automatically supported Help you use AWS Cloudfront to distribute your website Improve page speed with HTTP cache control and gzipping Set HTTP redirects for your website (for other features, see the documentation below) Install gem install s3_website s3_website needs both Ruby and Java to run. (S3_website is partly written in Scala, hence the need for Java.) Usage Here's how you can get started: Create API credentials that have sufficient permissions to S3. More info here. Go to your website directory Run s3_website cfg create. This generates a configuration file called s3_website.yml. Put your AWS credentials and the S3 bucket name into the file Run s3_website cfg apply. This will configure your bucket to function as an S3 website. If the bucket does not exist, the command will create it for you. Run s3_website push to push your website to S3. Congratulations! You are live. At any later time when you would like to synchronise your local website with the S3 website, simply run s3_website push again. (It will calculate the difference, update the changed files, upload the new files and delete the obsolete files.) Specifying the location of your website S3_website will automatically discover websites in the _site and public/output directories. If your website is not in either of those directories, you can point the location of your website in two ways: Add the line site: path-to-your-website into the s3_website.yml file Or, use the --site=path-to-your-site command-line argument If you want to store the s3_website.yml file in a directory other than the project's root you can specify the directory like so: s3_website push --config-dir config. Using standard AWS credentials If you omit s3_id from your s3_website.yml, S3_website will fall back to reading from the default AWS SDK locations. For instance, if you've used aws configure to set up credentials in ~/.aws/credentials, S3_website can use these. Using an AWS profile or a profile that assumes a role If you omit s3_id, s3_secret, and session_token you can specify an AWS credentials profile to use via the profile configuration variable, eg: profile: name_of_aws_profile In addition, if you want this profile to assume a role before executing against S3, use the profile_assume_role_arn variable, eg: profile_assume_role_arn: arn_of_role_to_assume (Note: you have to use a regular profile with an ID and SECRET and specify the role ARN via a variable like this instead of a profile that specifies a role_arn as documented here since it does not look like the Java SDK supports that format, yet...) Using environment variables You can use ERB in your s3_website.yml file which incorporates environment variables: s3_id: <%= ENV['S3_ID'] %> s3_secret: <%= ENV['S3_SECRET'] %> s3_bucket: blog.example.com (If you are using s3_website on an EC2 instance with IAM roles, you can omit the s3_id and s3_secret keys in the config file.) S3_website implements support for reading environment variables from a file using the dotenv gem. You can create a .env file in the project's root directory to take advantage of this feature. Please have a look at dotenv's usage guide for syntax information. Your .env file should containing the following variables: S3_ID=FOO S3_SECRET=BAR S3_website will also honor environment variables named AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_SESSION_TOKEN (if using STS) automatically if s3_id is ommitted from s3_website.yml. Project goals Provide a command-line interface tool for deploying and managing S3 websites Let the user have all the S3 website configurations in a file Minimise or remove the need to use the AWS Console Allow the user to deliver the website via CloudFront Automatically detect the most common static website tools, such as Jekyll, Nanoc, and Middleman. Be simple to use: require only the S3 credentials and the name of the S3 bucket Let the power users benefit from advanced S3 website features such as redirects, Cache-Control headers and gzip support Be as fast as possible. Do in parallel all that can be done in parallel. s3_website attempts to be a command-line interface tool that is easy to understand and use. For example, s3_website --help should print you all the things it can perform. Please create an issue if you think the tool is incomprehensible or inconsistent. Additional features Cache Control You can use either the setting max_age or cache_controlto enable more effective browser caching of your static assets. max_age There are two possible ways to use the option: you can specify a single age (in seconds) like so: max_age: 300 Or you can specify a hash of globs, and all files matching those globs will have the specified age: max_age: "assets/*": 6000 "*": 300 After changing the max_age setting, push with the --force option. Force-pushing allows you to update the S3 object metadata of existing files. cache_control The cache_control setting allows you to define an arbitrary string that s3_website will put on all the S3 objects of your website. Here's an example: cache_control: public, no-transform, max-age=1200, s-maxage=1200 You can also specify a hash of globs, and all files matching those globs will have the specified cache-control string: cache_control: "assets/*": public, max-age=3600 "*": no-cache, no-store After changing the cache_control setting, push with the --force option. Force-pushing allows you to update the S3 object metadata of existing files. Content type detection By default, s3_website automatically detects the content type of a file with the help of Apache Tika. For some file types Tika's auto detection does not work correctly. Should this problem affect you, use the content_type setting to override
Read the full README on GitHub

What Hacker News says

17 sources
Yes, S3 + CloudFront. I host a bunch of domains, including few whose properties/IP/company was acquired. The monthly for the static hosting is less than a dollar a month. Cloudflare > CloudFront + S3 (sometimes just S3 responding to Cloudflare's request). I could have done Route53 but I've lots of other domains managed by Cloudflare. I have a single instance Jekyll setup that spits out a bunch of index.html files for all the domains, including my primary personal[1]. To automate further, the setup runs within a few NPM modules, and gulp does the compile and build. When I need to change/update something, I let it build and then deploy to the primary S3 Bucket. The deployment is done with the S3_website[2] Gem. Been running this setup for over 3 years or so. I can strip away everything and just stay with the minimal Jekyll setup and manuall
Read the rest
In Building a Kickass Portfolio
A number of our portfolio sites (including http://piaustralia.com.au ) are static html hosted on AWS S3 + Cloudfront. The sites are created using Middleman[1], a ruby static site generator which I've found to be a little bit more flexible than Jekyll. On our static sites, we grab inventory information as JSONP from a small Sinatra based service on Elastic Beanstalk with read only access to the DB. Other than this and the checkout (we'll get to that in a bit), everything is client side Javascript utilising local storage for the cart state. We do not host our own checkout. Instead we use Shopify's ancient and way under-publicised "Cart Links"[2] feature. Cart Links let you pre-populate a cart and send the user to the checkout if you so wish. To upload the static files to S3 we use an awesome program called S3_website which knows how to look
Read the rest
for the rendered html from a number of static site generators, and sync it to S3. It's also smart enough to setup redirects, invalidate CDN caches and even gzipping content. It's freaking amazing[3]. [1] Middleman - https://middlemanapp.com [2] Shopify Cart Links - https://help.shopify.com/themes/customization/cart/use-perma... [3] S3_website - https://github.com/laurilehmijoki/s3_website
In Ask HN: Excluding WordPress, what is your favorite for blogs or small stores?
I was just about to say the same! I've been VERY happy with my AWS static hosting via cloudfront. It's cheap, fast, and reliable. I can even deploy my site from the command line with this [1]! It's very fast because it only pushes diffs. I use a bit of command line scripting to create an zip archival copy (for historical reasons) and to push the site to AWS just by doing: $./deploy.sh [1] https://github.com/laurilehmijoki/s3_website
In Hosting My Static Site
At first I didn't understand the difference between Netlify vs. Jekyll / Hugo + s3_website [1] + S3/CloudFront + git. Admittedly, (1) the OP does a terrible job differentiating the two, and (2) there's significant overlap. Netlify is built for "dynamic" static websites, or rather JavaScript applications (whether they be single-page or not, it doesn't matter). It serves up a static page, and the JS and APIs do the rest. So, for anyone who wants a basic breakdown between Netlify's features, and Jekyll + s3_website + S3/CloudFront + git/GitHub, here's the list of things BOTH support: - Continuous Deployment - Custom Domains / Domain Redirects / Domain Aliases - Domain Redirects - SSL (letsencrypt-s3front helps here [2]) - Redirects / Reverse Proxying (s3_website helps here with x-amz-redirect-location header [3]) - Headers / Custom Headers /
Read the rest
Basic Auth - Versioning and Rollbacks (handled with git) Here's the list of things ONLY Netlify supports: - GeoIP / language-based redirects (on their Enterprise Plan for $1,000/month) - Form submissions [4] - Analytics snippet injection [5] (albeit a little unnecessary for most developers) - Atomic deploys [6] - Prerending [7] (one of the most important and useful features) Please, correct anything that's wrong. Netlify's killer feature, for me, looks like prerending: rendering JS pages with a headless browser to help with SEO, with no work on the developer's end, is awesome! However, Netlify strikes me as far too expensive at $9/$49/$399/$1k per month. Especially with developers as their target market. That's too much for what little extra features it does offer. Here's to hoping they can continue to differentiate themselves more. [1]: https://github.com/laurilehmijoki/s3_website [2]: https://github.com/dlapiduz/letsencrypt-s3front [3]: http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-r... [4]: https://www.netlify.com/docs/form-handling [5]: https://www.netlify.com/docs/inject-analytics-snippets [6]: https://www.netlify.com/docs/versioning-and-rollbacks [7]: https://www.netlify.com/docs/prerendering EDIT: formatting
In Netlify, a sevice for quickly rolling out static websites, raises $2.1M
Yes. I have a high volume ecommerce site that sells Raspberry Pis in Australia[1] which is static and built using middleman[2]. The files sit on S3 + Cloudfront and are deployed using S3_website[3]. The contact page is powered by AWS Lambda. Some old school jQuery keeps track of the commerce cart and forms "Cart Links"[4], that send the user to the checkout of a Shopify Store. [1] http://raspberry.piaustralia.com.au [2] https://middlemanapp.com/ [3] https://github.com/laurilehmijoki/s3_website [4] https://help.shopify.com/themes/customization/cart/use-perma...
In Ask HN: How are you using Serverless architecture in production?
I'll second these comments about Hugo. I use it with my business website (http://www.optimojoe.com/) and have been extremely happy. As a couple more comments: - Grab the repo https://github.com/spf13/hugoThemes and flip through the themes. Personally, I don't keep the repository in my Hugo project, but just have a soft link to the base directory. Then, the command `hugo server --theme=MyThemeHere`, let's me instantly see what my website looks like under a new theme. - The ruby gem s3_website (https://github.com/laurilehmijoki/s3_website) lets me update my Amazon hosted website instantly. Basically, I just run `rm -rf ./public && hugo && s3_website push` after adding a new page and I'm done. - In any case, like liquidmetal, I'm not a Ruby person, but I was able to easily modify the themes into something that worked well for me. I sta
Read the rest
rted using Hugo after running through the other popular static site generators and found Hugo the easiest to get up and running and maintain.
In Hugo – Golang static site editor
OP here. Some of the tools are related to clients / hackathon sponsors - but most aren't. And s3 is an excellent tool for static site hosting. You can add cloudfront in a snap, it's stupid cheap, and you can deploy from the command line ( https://github.com/laurilehmijoki/s3_website is awesome for this.) Also, I've actually used _all_ of these tools before, both for personal & hackathon projects. I know they work.
In Hackathon DevOps 101

Showing the 15 most recent of 17 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.