Add support for custom domains and auto-deployment
- Docs and config files for setting up custom domain name - Add deploy_dev job to successful build & test runs on master branch in CI - Temporarily switch to a specific commit of serverless to address upstream issue: https://github.com/serverless/serverless/issues/4957 - Temporarily switch to a specific branch of serverless-domain-manager to address upstream issue: https://github.com/amplify-education/serverless-domain-manager/issues/64#issuecomment-370102422 Issue #11
This commit is contained in:
Родитель
60e9c754ec
Коммит
53d2778c21
|
@ -17,8 +17,27 @@ jobs:
|
|||
key: v1-dependencies-{{ checksum "package.json" }}
|
||||
- run: npm run lint
|
||||
- run: npm test
|
||||
- persist_to_workspace:
|
||||
root: .
|
||||
paths:
|
||||
- ./*
|
||||
deploy_dev:
|
||||
docker:
|
||||
- image: circleci/node:8.11.2@sha256:495a13db597b5306f05ae728489fedb9faa4defbac24ca0e00e8cc1eca95396d
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run: npm run deploy:master
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
test:
|
||||
test_and_deploy:
|
||||
jobs:
|
||||
- test
|
||||
- deploy_dev:
|
||||
requires:
|
||||
- test
|
||||
filters:
|
||||
branches:
|
||||
only: master
|
||||
|
|
14
README.md
14
README.md
|
@ -111,12 +111,26 @@ If you want to remove this stack from AWS and delete everything, run `npm run re
|
|||
|
||||
The [Serverless docs on workflow are useful](https://serverless.com/framework/docs/providers/aws/guide/workflow/).
|
||||
|
||||
### Custom stable domain name for local development
|
||||
|
||||
By default, no custom domain name is created. You can use the semi-random domain name serverless offers on deployment and with `serverless info`.
|
||||
|
||||
If you want to create a domain name for local development (e.g. `watchdog-proxy-lmorchard.dev.mozaws.net`):
|
||||
|
||||
1. Edit your `serverless.local.yml` to contain an enabled `customDomain` section with appropriate details
|
||||
1. Run `npx serverless create_domain` - this only needs to be done once, to create the new custom domain name in Route53 and an accompanying CloudFront distribution
|
||||
1. Run `npm run deploy:dev` to update your stack
|
||||
|
||||
Read this Serverless Blog post for more details: https://serverless.com/blog/serverless-api-gateway-domain/
|
||||
|
||||
## Deployment
|
||||
|
||||
### Environment variables
|
||||
|
||||
When using `serverless deploy` to deploy the stack, you can use several environment variables to alter configuration:
|
||||
|
||||
- `STAGE` - Stage for building and deploying - e.g. `dev`, `stage`, `production`
|
||||
- `DOMAIN` - Custom domain config selection for Route 53 and CloudFront distribution - e.g. `local`, `dev`, `stage`, `production`. If omitted, custom domain handling is disabled
|
||||
- `NODE_ENV` - Use `production` for a more optimized production build, `development` for a development build with more verbose logging and other conveniences
|
||||
- `GIT_COMMIT` - The value reported by the `__version__` resource as `commit`. If not set, Serverless config will attempt to run the `git` command to discover the current commit.
|
||||
- `UPSTREAM_SERVICE_URL` - the URL of the production upstream web service (i.e. PhotoDNA)
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -6,6 +6,7 @@
|
|||
"precommit": "lint-staged && npm run test:js",
|
||||
"deploy": "cross-env NODE_ENV=production serverless deploy",
|
||||
"deploy:dev": "cross-env NODE_ENV=development ENABLE_DEV_AUTH=1 serverless deploy",
|
||||
"deploy:master": "cross-env STAGE=dev DOMAIN=dev NODE_ENV=development ENABLE_DEV_AUTH=1 UPSTREAM_SERVICE_URL=__MOCK__ UPSTREAM_SERVICE_KEY=__MOCK__ serverless deploy",
|
||||
"info": "serverless info",
|
||||
"lint": "npm-run-all lint:*",
|
||||
"lint:js": "eslint functions lib test",
|
||||
|
@ -50,8 +51,9 @@
|
|||
"nsp": "3.2.1",
|
||||
"onchange": "4.0.0",
|
||||
"prettier": "1.12.1",
|
||||
"serverless": "1.27.2",
|
||||
"serverless": "github:serverless/serverless#0001b7e5fe0bc6f2a9e0684e147d183163a05c80",
|
||||
"serverless-apigw-binary": "0.4.4",
|
||||
"serverless-domain-manager": "github:lmorchard/serverless-domain-manager#certificateArn-config",
|
||||
"serverless-s3-remover": "0.4.1",
|
||||
"serverless-sqs-alarms-plugin": "0.1.7",
|
||||
"sinon": "5.0.7"
|
||||
|
|
|
@ -6,3 +6,14 @@ stage: your-name-here-dev
|
|||
upstreamService:
|
||||
url: __MOCK__
|
||||
key: __MOCK__
|
||||
|
||||
# Uncomment and change the following properties to set up a custom domain for
|
||||
# your own dev stack
|
||||
customDomain:
|
||||
enabled: false
|
||||
# enabled: true
|
||||
# stage: your-name-here-dev
|
||||
# domainName: watchdog-proxy-your-name.dev.mozaws.net
|
||||
# certificateArn: 'arn:aws:acm:us-east-1:927034868273:certificate/61e462bd-410e-48b6-95da-fa5501430d1d'
|
||||
# basePath: ''
|
||||
# createRoute53Record: true
|
||||
|
|
|
@ -3,6 +3,7 @@ service: watchdog-proxy
|
|||
plugins:
|
||||
- serverless-s3-remover
|
||||
- serverless-apigw-binary
|
||||
- serverless-domain-manager
|
||||
|
||||
custom:
|
||||
localConfig: ${file(serverless.local.yml)}
|
||||
|
@ -15,6 +16,40 @@ custom:
|
|||
credentials: ${self:custom.prefix}-credentials
|
||||
sqs: ${self:custom.prefix}-messages
|
||||
contentBucket: ${self:custom.prefix}-content
|
||||
|
||||
# This customDomain stuff is a little complicated to allow switching between
|
||||
# deployment stages / modes
|
||||
customDomain: ${self:custom.customDomainVariants.${env:DOMAIN, "local"}}
|
||||
customDomainDisabled:
|
||||
enabled: false
|
||||
customDomainVariants:
|
||||
local: ${file(serverless.local.yml):customDomain, self:custom.customDomainDisabled}
|
||||
disabled:
|
||||
enabled: false
|
||||
dev:
|
||||
domainName: ${self:service}.dev.mozaws.net
|
||||
certificateArn: 'arn:aws:acm:us-east-1:927034868273:certificate/61e462bd-410e-48b6-95da-fa5501430d1d'
|
||||
basePath: ''
|
||||
stage: ${self:provider.stage}
|
||||
createRoute53Record: true
|
||||
enabled: true
|
||||
stage:
|
||||
# TODO: Tweak this so it has the right properties for staging, even if all pulled from env
|
||||
domainName: ${self:service}-stage.dev.mozaws.net
|
||||
certificateArn: 'arn:aws:acm:us-east-1:927034868273:certificate/61e462bd-410e-48b6-95da-fa5501430d1d'
|
||||
basePath: ''
|
||||
stage: ${self:provider.stage}
|
||||
createRoute53Record: true
|
||||
enabled: true
|
||||
production:
|
||||
# TODO: Tweak this so it has the right properties for production, even if all pulled from env
|
||||
domainName: ${self:service}-prod.dev.mozaws.net
|
||||
certificateArn: 'arn:aws:acm:us-east-1:927034868273:certificate/61e462bd-410e-48b6-95da-fa5501430d1d'
|
||||
basePath: ''
|
||||
stage: ${self:provider.stage}
|
||||
createRoute53Record: true
|
||||
enabled: true
|
||||
|
||||
remover:
|
||||
buckets:
|
||||
- ${self:custom.contentBucket}
|
||||
|
@ -39,7 +74,7 @@ custom:
|
|||
provider:
|
||||
name: aws
|
||||
runtime: nodejs8.10
|
||||
stage: ${self:custom.localConfig.stage, opt:stage, 'dev'}
|
||||
stage: ${env:STAGE, self:custom.localConfig.stage, opt:stage, 'dev'}
|
||||
region: us-east-1
|
||||
memorySize: 128
|
||||
iamRoleStatements:
|
||||
|
|
Загрузка…
Ссылка в новой задаче