# Concept

Cycloid recommends the usage of Infrastructure as Code and invites you to organize this code using the concept of a stack.

A stack is a way of build and organize your infrastructure as code and files. There is nothing required, it's up to you to follow and apply it to any tools and software or not.

The global idea is to create a generic description of your application that you will use across all your projects and environments. Exposing to the end users only few parameters to configure it, based on their needs.

To achieve it, we speak about stack and config: Stack Concept

The result of a merge between the stack and the config is called a configured stack. When a user create an environment into a project it will consists of selecting a stack and provide a configuration to deploy a configured stack.

To understand a little bit more what do we expect to find in those 2 sections, let's use a basic example of a LEMP stack:

  • A stack is a generic description of an application. You should put here everything common between all environments of this stack. In our example, we will define using IaaC servers on which we install an Nginx web server and PHP, connected to a database.
  • The config gives all related configuration to an environment (dev, staging, prod, ...). In our LEMP example, the number and the size of the servers to create.

Basically in a project, you might want staging environment to be the same as the production one but, with smaller servers size to limitate the cost. Using the stack concept, all the environments will have the same stack but use their own dedicated config to specify the different size of the environment.

Cycloid usually works with a stack and config definition stored in a git repository, created respectively in stacks and config branches.

Git

Stack and configuration definition could be in a public or private git.

# Most common content of a stack

Cycloid Framework is here to make the glue and the integration between technologies. Most of our stacks are based on OpenSource technologies like :

Tech Description
Terraform Describes the infrastructure and services used.
Ansible Describes and deploys applications inside servers (Amazon EC2).
Concourse Provides pipeline view and scheduler for the CI/CD jobs.

It is not mandatory to use all those parts, for example if your stack goal is only to create infrastructure via terraform, you can ignore ansible.

note

You can also use other technologies (e.g.: salt, puppet, chef, etc) regarding your needs, feel free to ask Cycloid engineer for some help.