https://github.com/teamplanes/static
A zero config CLI tool for deploying static sites to S3 & CloudFront
https://github.com/teamplanes/static
aws aws-cloudfront aws-s3 cli deployment static-site
Last synced: 2 months ago
JSON representation
A zero config CLI tool for deploying static sites to S3 & CloudFront
- Host: GitHub
- URL: https://github.com/teamplanes/static
- Owner: teamplanes
- Created: 2018-02-25T19:25:27.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2019-08-12T07:22:29.000Z (over 6 years ago)
- Last Synced: 2025-08-25T00:48:12.461Z (7 months ago)
- Topics: aws, aws-cloudfront, aws-s3, cli, deployment, static-site
- Language: JavaScript
- Size: 167 KB
- Stars: 38
- Watchers: 3
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Static CLI ⚡
Static attempts to make it effortless to publish static websites to AWS' S3 + CloudFront, shamelessly taking inspiration from the amazing [Surge.sh](surge.sh).
### Usage
```sh
$ static ./ domain.com
```
### Install
```sh
$ npm i -g sttc
```
### Features
* **Deplyed to S3:** Deploys your directory to an S3 bucket.
* **Custom domains:** prefixed with your domain name (or a random string if none is provided).
* **Automatic Static Hosting:** Enables Static Hosting for your bucket.
* **CDN'd via CloudFront:** Creates a CloudFront distribution so that your site is served over a CDN, making it speedy wherever you are in the world.
* **Invalidates cache on each deploy:** It will update the chache of your CloudFront distribution if one exists.
* **Client Side Routing:** It'll handle both standard static routing OR client side routing.
* **Custom error pages:** If you aren't using client side routing you can add your own 404 page by adding a 404.html document to the route of your directory.
* **Clean URLs:** All URLs will be 'cleaned', i.e. your-domain.com/hello.html is reached via your-domain.com/hello.
### Notes
* 🚨This will remove all contents of the S3 bucket if it exists already (and replace with the contents of our specified directory).
* ⏳ Deploying using cloudfront is not instant, for a new site you can expect to wait up to 20-30 minutes for it to propogate through your CDN. For an existing site it could be as good as instant.
* ℹ️ You'll need to have AWS configured with `~/.aws/credentials` or via environment variables: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`.
### Deploying a client-side routed app
**tldr;** To handle routing client-side simply rename your index.html file to 200.html. All unknown requests will now return this file.
```sh
# Example: with create-react-app
$ create-react-app my-app
# Move into the root of your new React app
$ cd my-app
# ...do some work on your app...
# Build you app
$ npm run build
# 🔑Rename your index.html file to 200.html
$ mv build/index.html build/200.html
# Deploy 🚀
$ static ./build my-domain.com
```
### TODO
- [ ] If a distribution already exists validate that the config is going to be compatible with Static
- NOTE: Default Root Object is something to look out for, for example it will commonly be index.html but Static needs it to be index
- [ ] Needs to set "Compress Objects Automatically" to true
- [ ] Add a tag to deployments to highlight that its deployed by Static
- [ ] Add command to list all deployments by Static