A NextJS project template ready for continuous delivery.
The Talos script can be run either using Docker or a Python virtual environment.
In order to run Talos via Docker, a working Docker installation is the only requirement.
In order to run Talos in a virtual environment, first clone the repository in a local projects directory and ensure it is your current directory:
cd ~/projects
git clone [email protected]:20tab/nextjs-continuous-delivery.git talos-nextjs
cd talos-nextjs
Then, create and activate a virtual environment and install the requirements:
python3.12 -m venv .venv
source .venv/bin/activate
python3 -m pip install --upgrade pip setuptools
python3 -m pip install -r requirements/common.txt
The terraform
cli package is required, unless you want to generate a project only locally. To install it we suggest to use the official install guide.
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.
Change to the projects directory, for example:
cd ~/projects
docker run --interactive --tty --rm --volume $PWD/.dumps:/app/.dumps --volume $PWD/.logs:/app/.logs --volume $PWD:/data 20tab/talos-nextjs:latest
source talos-nextjs/.venv/bin/activate
./talos-nextjs/start.py
Project name: My Project Name
Project slug [my-project-name]:
Service slug [frontend]:
Project dirname (frontend, myprojectname) [frontend]: 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/]:
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 frontend service:
...cookiecutting the service
...generating the .env file
...creating the GitLab repository and associated resources
...creating the Terraform Cloud resources
The following arguments can be appended to the Docker and shell commands
--uid=$UID
--gid=1000
--output-dir="~/projects"
--project-name="My project name"
--project-slug="my-project-name"
--project-dirname="myprojectname"
--service-slug=frontend
--internal-service-port=3000
--internal-backend-url=http://backend:8000
Description | Argument |
---|---|
DigitalOcean Kubernetes | --deployment-type=digitalocean-k8s |
Other Kubernetes | --deployment-type=other-k8s |
Name | Argument |
---|---|
Terraform Cloud | --terraform-backend=terraform-cloud |
GitLab | --terraform-backend=gitlab |
--terraform-cloud-hostname=app.terraform.io
--terraform-cloud-token={{terraform-cloud-token}}
--terraform-cloud-organization
--terraform-cloud-organization-create
--terraform-cloud-admin-email={{terraform-cloud-admin-email}}
Disabled args
--terraform-cloud-organization-create-skip
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 |
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
For enabling redis integration the following arguments are needed:
--use-redis
Disabled args
--no-redis
β οΈ 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-path={{gitlab-group-path}}
For enabling sentry integration the following arguments are needed:
--sentry-dsn={{frontend-sentry-dsn}}
No confirmations shown.
--quiet