Go Server/API boilerplate using best practices, DDD, CQRS, ES, gRPC.
- Rest API
- Domain Driven Design (DDD)
- Event Sourcing
- Hexagonal, Onion, Clean Architecture
Worth getting to know packages used in this boilerplate:
This repository was created for personal use and needs, may contain bugs. If found please report. If you think some things could be done better, or if this repository is missing something feel free to contribute and create pull request.
Want to contribute ? Feel free to send pull requests!
Have problems, bugs, feature ideas? We are using the github issue tracker to manage them.
HOW TO USE
In order to run this project you need to have Docker > 1.17.05 for building the production image and Kubernetes cluster > 1.11 for running pods installed.
➜ go-api-boilerplate git:(master) ✗ make help version Show version key [HTTP] Generate key cert [HTTP] Generate self signed certificate docker-build [DOCKER] Build given container. Example: `make docker-build BIN=user` docker-run [DOCKER] Run container on given port. Example: `make docker-run BIN=user PORT=3000` docker-stop [DOCKER] Stop docker container. Example: `make docker-stop BIN=user` docker-rm [DOCKER] Stop and then remove docker container. Example: `make docker-rm BIN=user` docker-publish [DOCKER] Docker publish. Example: `make docker-publish BIN=user REGISTRY=https://your-registry.com` docker-tag [DOCKER] Tag current container. Example: `make docker-tag BIN=user REGISTRY=https://your-registry.com` docker-release [DOCKER] Docker release - build, tag and push the container. Example: `make docker-release BIN=user REGISTRY=https://your-registry.com` kubernetes-create [KUBERNETES] Create kubernetes deployment. Example: `make kubernetes-create BIN=user` aws-repo-login [HELPER] login to AWS-ECR
The Dashboard UI is not deployed by default. To deploy it, run the following command:
kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
You can access Dashboard using the kubectl command-line tool by running the following command:
Kubectl will handle authentication with apiserver and make Dashboard available at http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/. The UI can only be accessed from the machine where the command is executed. See kubectl proxy –help for more options.
Build the module. This will automatically add missing or unconverted dependencies as needed to satisfy imports for this particular build invocation
go build ./...
For more read: https://github.com/golang/go/wiki/Modules
To run services repeat following steps for each micro-service. Changing
BIN= value to directory name from
STEP 1. Build docker image
make docker-build BIN=user
STEP 2. Deploy
make kubernetes-create BIN=user
This will deploy each of them to the kubernetes cluster using your local docker image (built in first step).