Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jweyrich/static-deployer

☁ Deploy static websites using a single command! Currently supports AWS S3 and CloudFront.
https://github.com/jweyrich/static-deployer

aws-cloudfront aws-s3 cloudfront cloudfront-distribution cloudfront-invalidation deploy deploy-tool deployer deployment deployment-automation s3 s3-bucket single-page-app single-page-applications single-page-site site website

Last synced: 2 months ago
JSON representation

☁ Deploy static websites using a single command! Currently supports AWS S3 and CloudFront.

Awesome Lists containing this project

README

        

# static-deployer

## What is static-deployer?

static-deployer aims to simplify the deploy and rollback of your static website (frontend) to AWS using a single command.
It _still_ does not create the AWS resources for you, so you need to have a previously existing S3 bucket and a CloudFront distribution configured with an origin pointing to your S3 bucket.
The credentials you will use to run the static-deployer need to have List+Read+Write permissions to the specified bucket and cloudfront distribution.

## How to install?

pip3 install static-deployer

## How to configure the AWS credentials?

We recomend using [aws-vault](https://github.com/99designs/aws-vault) because it does not store your credentials in plaintext. But you can also use [aws-cli](https://aws.amazon.com/cli/).

After installing aws-vault, add a new profile using the following command:

```sh
aws-vault add mysite
```

## How to deploy a static website?

aws-vault exec mysite -- static-deployer deploy \
--root-dir ROOT_DIR \
--patterns PATTERNS \
--bucket-name BUCKET_NAME \
--distribution-id DISTRIBUTION_ID \
--origin-name ORIGIN_NAME \
--version VERSION
--cache-maxage "1 hour"

The deploy command does the following:

1. Finds all files from `ROOT_DIR`, including only those that match the patterns specified in `PATTERNS` (comma separated);
2. Inside the bucket specified by `BUCKET_NAME`, creates a new folder/directory with the name specified in `VERSION`;
3. Uploads all files to the folder/directory created in step 2;
4. Changes the CloudFront distribution `DISTRIBUTION_ID` origin named `ORIGIN_NAME` to point the folder/directory created in step 2;
4. Invalidates the CloudFront distribution `DISTRIBUTION_ID` cache using the pattern `/*`;
5. Waits for the distribution changes to complete.

## How to rollback to a previous deployed version?

static-deployer rollback \
--bucket-name BUCKET_NAME \
--distribution-id DISTRIBUTION_ID \
--origin-name ORIGIN_NAME \
--version VERSION

The rollback command does the following:
1. Changes the CloudFront origin `ORIGIN_NAME` to point to a previously deployed version specified by `VERSION`.
2. Waits for the distribution changes to complete.

## Example of config file `config.toml`

```toml
dry_run = "false"

[content]
root_dir = "public"
patterns = "**"

[storage]
name = "your-website-domain.com"
prefix = "{{version}}"
cache_maxage = "1 hour"

[cdn]
distribution_id = "your-cloudfront-distribution-id"
origin_name = "your-cloudfront-origin-name"
```

## How to use the config file?

static-deployer -c config.toml deploy --version VERSION

Once you have settings in a config file, you can tell static-deployer to use the config file by using the arguments `-c yourfile.toml`.
By specifying a config file, you eliminate the need of informing all parameters at every invocation. You're then required to inform only the missing parameters.
The command-line arguments override any settings you have in the config file.