Installation
Last edited on 3/1/2018, 2:02:47 AM
Installing DodgerCMS requires creating a few buckets in S3 and a new IAM user.
Buckets
DodgerCMS requires a static website bucket in S3 for the frontend website, and an optional website bucket for the manager. If you don't need cloud access to the manager then you can simply run the manager locally and skip creating a bucket for it. You will also need a bucket for uploaded assets, and another to store the source markdown files. The bucket names below should be changed to reflect your own settings.
data.dodgercms.comUsed to store the markdown files. This is a private bucket, and does not need a bucket policy since it defaults to private. Edit the
CORSconfiguration.<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>HEAD</AllowedMethod> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <ExposeHeader>ETag</ExposeHeader> <ExposeHeader>x-amz-meta-title</ExposeHeader> <ExposeHeader>x-amz-meta-label</ExposeHeader> <AllowedHeader>*</AllowedHeader> </CORSRule> </CORSConfiguration>assets.dodgercms.comUsed for uploaded images and other resources. A pre-existing bucket can be used for the assets, a new one is not necessary. This bucket should be public, an example policy with limited privileges is as follows:
{ "Version": "2012-10-17", "Id": "Policy1427772347182", "Statement": [ { "Sid": "Stmt1427772340560", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::assets.dodgercms.com/*" } ] }The
CORSfile will also need to be modified.<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>HEAD</AllowedMethod> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <ExposeHeader>ETag</ExposeHeader> <AllowedHeader>*</AllowedHeader> </CORSRule> </CORSConfiguration>dodgercms.comThis bucket is used for the generated
HTMLfiles. It is the website end users will be visiting, and must be configured as a static website.{ "Version": "2012-10-17", "Id": "Policy1427772347182", "Statement": [ { "Sid": "Stmt1427772340560", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::dodgercms.com/*" } ] }The
CORSfile will also need to be modified.<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>HEAD</AllowedMethod> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <ExposeHeader>ETag</ExposeHeader> <ExposeHeader>x-amz-meta-title</ExposeHeader> <ExposeHeader>x-amz-meta-label</ExposeHeader> <AllowedHeader>*</AllowedHeader> </CORSRule> </CORSConfiguration>manager.dodgercms.comBucket for the admin manager, also must be configured as a static website. If you do not need cloud access to the manager, and instead will work locally, this bucket is optional.
After the bucket is setup, you will need to upload the contents of https://github.com/ChrisZieba/dodgercms into it. For more information, see this article on how to upload objects to S3.
www.dodgercms.comOptional bucket used to redirect
wwwto the apex.
User Account
Create a user account in AWS for the application. You should not give this user permissions to anything other than the S3 buckets needed for this application. The user does not need sign-in credentials to the console, but it does need an access key for the authentication to the manager. These credentials are exchanged for the federated token and are not stored by the application, unless explicitly chosen.
Sample Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1427944232000",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObject",
"s3:GetBucketWebsite",
"s3:PutBucketWebsite",
"s3:DeleteBucketWebsite",
"s3:GetBucketLogging",
"s3:GetBucketVersioning",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::data.dodgercms.com",
"arn:aws:s3:::data.dodgercms.com/*",
"arn:aws:s3:::assets.dodgercms.com",
"arn:aws:s3:::assets.dodgercms.com/*",
"arn:aws:s3:::dodgercms.com",
"arn:aws:s3:::dodgercms.com/*"
]
},
{
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "*"
}
]
}
Domain
You can setup DNS to point to your site bucket quite easily by adding a CNAME record for the bucket. For more information on how to setup a custom domain please refer to this guide.
CloudFront
Setting up a CloudFront distribution in front of your docs is very simple. The only things to take into account is that invalidation will need to be done manually. In the future, this might be handled by Dodger, but for now that feature does not exist.