1. Initialize a Project

With the Garden CLI installed, we'll kick off by configuring a simple example project for use with Garden.

Start by cloning our repo and finding the example project:

git clone https://github.com/garden-io/garden.git
cd garden/examples/demo-project-start

This directory contains two directories, with one container service each, backend and frontend. We'll first define a boilerplate Garden project, and then a Garden module for each of the services.

To initialize the project, we can use a helper command:

garden create project --skip-comments

This will create a basic boilerplate project configuration in the current directory, making it our project root.

kind: Project
name: demo-project
environments:
  - name: default
providers:
  - name: local-kubernetes

We have one environment (default) and a single provider. We'll get back to this later.

Next, let's create module configs for each of our two modules, starting with backend. You can omit the --skip-comments flag to create a module with commented-out fields, which reveal all the options available.

cd backend
garden create module --skip-comments
cd ..

You'll get a suggestion to make it a container module. Pick that, and give it the default name as well. Then do the same for the frontend module:

cd frontend
garden create module --skip-comments
cd ..

This is now enough configuration to build the project. Before we can deploy, we need to configure services in each module configuration, as well as set up a local cluster or connect to a remote cluster.

Starting with the former, go ahead and open the newly created backend/garden.yml file. Just to keep things simple for now, go ahead and append to the file the following:

services:
  - name: backend
    ports:
      - name: http
        containerPort: 8080
        servicePort: 80
    ingresses:
      - path: /hello-backend
        port: http

This is enough information for Garden to be able to deploy and expose the backend service. Now do the same for the frontend service, with the following block:

services:
  - name: frontend
    ports:
      - name: http
        containerPort: 8080
    ingresses:
      - path: /hello-frontend
        port: http
      - path: /call-backend
        port: http
    dependencies:
      - backend

This does the same for the frontend service, with the addition of declaring a runtime dependency on the backend service.

Now, let's move on to our next section, and connect to a Kubernetes cluster.

Last updated