Deploying to AWS
The Django Starter Project comes with a complete CircleCI configuration, as well as some useful scripts that make deployment a breeze. The project is designed to be deployed automatically via CircleCI.
Setup CircleCI
Applications are deployed automatically by CircleCI when commits are
pushed to develop or main. Make sure CircleCI is setup on your
project by visiting the CircleCI
dashboard for your project.
- Commits to the
developbranch are automatically deployed to the Staging environment. - Commits to the
mainbranch are automatically deployed to the Production environment.
Set CircleCI Environment Variables
In order for automatic deploys to work, your CircleCI must be setup with the correct environment variables.
The easy way
We include a script that pulls the necessary environment variables from
your terraform state, and uploads them to CircleCI for you. In order to
run it, you will need to have already provisioned your terraform
infrastructure, setup the project on
CircleCI,
and created a CircleCI API
token. Once your have
retrieved your CircleCI API token, simply run the following command,
replacing the values for CIRCLECI_TOKEN and PROJECT_NAME with your
own.
CIRCLECI_TOKEN=my-api-token PROJECT_NAME=my-project scripts/update-circleci.sh
Depending on your current terraform workspace the script will show you what environment variables you will need, and will ask you if it's ok to set them on CircleCI.
After the script works, you can make a push to develop for staging, or
main for production, to start a deploy process and make sure
everything works.
The manual way
The following environment variables are required to be set within the CircleCI Project Settings. Descriptions (and example values) of the environment variables follow:
PROJECT_NAME- The name of your project. This variable will be used to tag your docker image file. A safe name would be to use the same name as your git repository. Cannot contain spaces.
my-project
STAGING_AWS_ACCESS_KEY_ID- The AWS access key ID used to authenticate with AWS.
AKIAIOSFODNN7EXAMPLE
STAGING_AWS_SECRET_ACCESS_KEY- The AWS secret key used to authenticate with AWS.
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
STAGING_AWS_DEFAULT_REGION- The default region your infrastructure is deployed to.
us-west-2
STAGING_AWS_ECR_ACCOUNT_URL- The ECR (Elastic Container Repository) account url. This will be used to store the docker images that are built for production and staging.
012345678901.dkr.ecr.us-west-2.amazonaws.com
STAGING_AWS_ECR_REPO_NAME- The ECR repository name, this can be found in the AWS console.
my-project-ecr-repo
STAGING_EB_ENVIRONMENT_NAME- The EB (Elastic Beanstalk) environment name, this can be found in the AWS console.
my-project-api-webserver
STAGING_EB_APPLICATION_NAME- The EB application name, this can be found in the AWS console.
my-project
STAGING_AWS_ROLE_ARN- When using AWS AssumeRole (as bitwise does for AWS infastructure in our accounts). You must set this environment variable. When deploying to infrastructure outside of bitwise infrastructure, this variable is optional. The example value is the value you should use on bitwise infrastructure.
arn:aws:iam::008036621198:role/SuperDevAssumeRole
Once all of these are setup, commits to the develop branch should automatically deploy to your staging infrastructure. For more details on the deployment process, or if you need to customize it to fit your needs, check out the .cirleci/config.yml file.
Deploying to Production
Production deploys from the main branch, and uses the same set of environment variables as staging just with PRODUCTION instead of STAGING in the names. The list of those variables follow:
PRODUCTION_AWS_ACCESS_KEY_IDPRODUCTION_AWS_SECRET_ACCESS_KEYPRODUCTION_AWS_DEFAULT_REGIONPRODUCTION_AWS_ECR_ACCOUNT_URLPRODUCTION_AWS_ECR_REPO_NAMEPRODUCTION_EB_ENVIRONMENT_NAMEPRODUCTION_EB_APPLICATION_NAMEPRODUCTION_AWS_ROLE_ARN(optional)