Setup
The development environment is a first-class component of this system. From installation and configuration to supporting fast development feedback loops, it should strive to deliver the best developer experience to as many developers as possible. This section describes the recommended steps to configure a development environment suitable for working on Acme. Please install tools as they are mentioned in the documentation.
Decisions made in service of this goal are often loaded with tradeoffs and are documented as a Decision Record. |
Quick Start
These instructions are designed to work on macOS and Ubuntu. They should also work for Windows under WSL but have not been verified. |
-
Install Homebrew
-
Install Task
-
Install the rest of the development tools:
$ task env:setup
-
Install your preferred Docker Manager
-
Install your preferred Kubernetes Manager
Docker Manager
To run containers you’ll need to install a Docker engine manager. The following products are supported by this tooling:
Rancher Desktop
Rancher Desktop is an alternative to Docker Desktop.
Once installed, configure Rancher Desktop with sudo access and dockerd
as the container runtime:
As of this writing Rancher Desktop has an issue with binding to privileged ports on Linux.
The workaround is to adjust the default net.ipv4.ip_unprivileged_port_start
value to 80
.
Run the following command and restart Rancher Desktop afterwards:
sudo sysctl net.ipv4.ip_unprivileged_port_start=80
This configuration makes it possible to access Kubernetes Ingress resources on localhost
over privileged ports 80
(HTTP) and 443
(HTTPS).
It also affords the user of friendly local URLs via http://nip.io/.
Kubernetes Manager
There are many tools that will run a local Kubernetes cluster The following products are supported by this tooling:
GUIs
The following products require a user to point-and-click a GUI to manage a Kubernetes cluster.
Docker Desktop
Using Docker Desktop is, arguably, the easiest way to run Kubernetes locally given its ubiquity. It is also widely supported and actively maintained for all major operating systems. The main trade-off when choosing Docker Desktop is that the version of Kubernetes cannot be changed.
Rancher Desktop
Rancher Desktop, similar to Docker Desktop, can also be used to run a local Kubernetes cluster. An advantage Rancher Desktop has over Docker Desktop is that the version of Kubernetes can be changed
When choosing the Kubernetes version, choose a version with the same minor version specified by the
KUBERNETES_VERSION
environment variable inTaskfile.yaml
CLIs
The following products are command-line interfaces. Subjectively, they may offer a better user-experience for developers.
minikube
minikube is a command-line tool for running Kubernetes clusters locally.
Follow these instructions to install minikube
.
k3d
k3d is another command-line tool for running Kubernetes clusters.
Follow these instructions to install k3d
.
IDEs
IntelliJ IDEA
IntelliJ IDEA is used for, but not limited to, Kotlin development and Asciidoc authoring.
Visual Studio Code
Visual Studio Code is primarily used for, but not limited to, TypeScript project development.