Skip to content

Adams-Shop/django-continuous-delivery

Β 
Β 

Repository files navigation

Talos Submodule - Django Continuous Delivery

Code style: black

A Django project template ready for continuous delivery.

🧩 Requirements

The Talos script can be run either using Docker or as a local shell command.

πŸ‹ Docker

In order to run Talos via Docker, a working Docker installation is the only requirement.

πŸ‘¨β€πŸ’» Shell command

In order to run Talos as a shell command, first clone the repository in a local projects directory

cd ~/projects
git clone git@github.com:20tab/django-continuous-delivery.git talos-django

Then, install the following requirements

Requirements Instructions
🌎 Terraform Install Guide
🐍 Python Dependencies pip install -r talos-django/requirements/common.txt

πŸ”‘ Credentials

🦊 GitLab

If the GitLab integration is enabled, a Personal Access Token with api permission is required.
It can be generated in the GitLab User Settings panel.

Note: the token can be generated in the Access Tokens section of the GitLab User Settings panel.
⚠️ Beware that the token is shown only once after creation.

πŸš€οΈ Quickstart

Change to the projects directory, for example

cd ~/projects

πŸ‹ Docker

docker run --interactive --tty --rm --volume $PWD:/data 20tab/talos-django:latest

πŸ‘¨β€πŸ’» Shell command

./talos-django/start.py

Example

Project name: My Project Name
Project slug [my-project-name]:
Service slug [backend]:
Project dirname (backend, myprojectname) [backend]: myprojectname
Deploy type (digitalocean-k8s, other-k8s) [digitalocean-k8s]:
Terraform backend (gitlab, terraform-cloud) [terraform-cloud]:
Terraform host name [app.terraform.io]:
Terraform Cloud User token:
Terraform Organization: my-organization-name
Do you want to create Terraform Cloud Organization 'my-organization-name'? [y/N]:
Choose the environments distribution:
  1 - All environments share the same stack (Default)
  2 - Dev and Stage environments share the same stack, Prod has its own
  3 - Each environment has its own stack
 (1, 2, 3) [1]:
Development environment complete URL [https://dev.my-project-name.com]:
Staging environment complete URL [https://stage.my-project-name.com]:
Production environment complete URL [https://www.my-project-name.com]:
Media storage (digitalocean-s3, aws-s3, local, none) [digitalocean-s3]:
Do you want to configure Redis? [y/N]:
Do you want to use GitLab? [Y/n]:
GitLab group slug [my-project-name]:
Make sure the GitLab "my-project-name" group exists before proceeding. Continue? [y/N]: y
GitLab private token (with API scope enabled):
Sentry DSN (leave blank if unused) []:
Initializing the backend service:
...cookiecutting the service
...generating the .env file
...formatting the cookiecut python code
...compiling the requirements files
	- common.txt
	- test.txt
	- local.txt
	- remote.txt
	- base.txt
...creating the '/static' directory
...creating the GitLab repository and associated resources
...creating the Terraform Cloud resources

πŸ—’οΈ Arguments

The following arguments can be appended to the Docker and shell commands

User id

--uid=$UID

Group id

--gid=1000

Output directory

--output-dir="~/projects"

Project name

--project-name="My project name"

Project slug

--project-slug="my-project-name"

Project dirname

--project-dirname="myprojectname"

πŸŽ–οΈ Service

Service slug

--service-slug=backend

Service port

--internal-service-port=8000

πŸ“ Architecture

Deploy type

Description Argument
DigitalOcean Kubernates --deployment-type=digitalocean-k8s
Other Kubernetes --deployment-type=other-k8s

Terraform backend

Name Argument
Terraform Cloud --terraform-backend=terraform-cloud
GitLab --terraform-backend=gitlab
Terraform Cloud required argument

--terraform-cloud-hostname=app.terraform.io
--terraform-cloud-token={{terraform-cloud-token}}
--terraform-cloud-organization

Terraform Cloud create organization

--terraform-cloud-organization-create
--terraform-cloud-admin-email={{terraform-cloud-admin-email}}

Disabled args --terraform-cloud-organization-create-skip

Environment distribution

Choose the environments distribution:

Value Description Argument
1 All environments share the same stack (Default) --environment-distribution=1
2 Dev and Stage environments share the same stack, Prod has its own --environment-distribution=2
3 Each environment has its own stack --environment-distribution=3

Project Domain

If you don't want DigitalOcean DNS configuration the following args are required

--project-url-dev=https://dev.project-domain.com
--project-url-stage=https://stage.project-domain.com
--project-url-prod=https://www.project-domain.com

Media storage

Value Description Argument
digitalocean-s3 DigitalOcean Spaces are used to store media --media-storage=digitalocean-s3
aws-s3 AWS S3 are used to store media --media-storage=aws-s3
local Docker Volume are used to store media --media-storage=local
none Project have no media --media-storage=none

Redis

For enabling redis integration the following arguments are needed:

--use-redis

Disabled args --no-redis

🦊 GitLab

⚠️ Important: Make sure the GitLab group exists before creating. > https://gitlab.com/gitlab-org/gitlab/-/issues/244345

For enabling gitlab integration the following arguments are needed:

--gitlab-private-token={{gitlab-private-token}}
--gitlab-group-slug={{gitlab-group-slug}}

πŸͺ– Sentry

For enabling sentry integration the following arguments are needed:

--sentry-dsn={{frontend-sentry-dsn}}

πŸ”‡ Quiet

No confirmations shown.

--quiet

About

A Django project cookiecutter ready for continuous delivery.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Python 53.8%
  • HCL 31.9%
  • Makefile 6.2%
  • Shell 4.4%
  • Dockerfile 3.7%