Microservices starter kit for Golang, aims to be developer friendly.
- Monorepo - Sharing Code Between Microservices
 - gRPC microservices with REST Gateway
 - Input Validation with protoc-gen-validate (PGV)
 - Config - Pluggable Sources, Mergeable Config, Safe Recovery
 - Customizable Logging
 - CRUD Example using GORM, benchmarks, XORM next?
 - GORM code gen via protoc-gen-gorm or use protoc-go-inject-tag?
 - Dependency injection Container, Try wire next?
 - multi-stage-multi-target Dockerfile
 - One Step build/publish/deploy with ko
 - BuildInfo with govvv
 - Linting with GolangCI linters aggregator
 - Linting Protos with Buf
 - CICD Pipelines with GitHub Actions
 - Kubernetes Matrix Deployment with Kustomize
 - Add k8s healthchecks with cmux
 - Feature Flags (enable/disable with zero cost)
 - Observability
 - Service Mesh with Istio
 - GraphQL Gateway with gqlgen, rejoiner,gqlgen
 - Graph-Based ORM ent
 - Switch to Bazel Build
 
Refer prerequisites docs
Also Refer scaffolding docs
clone the repo
git clone https://github.com/xmlking/micro-starter-kit ~/Developer/Work/go/micro-starter-kit
# pull dependencies (when every time `go.mod` changed)
go mod downloadBy default this project use embedded sqlite3 database. if you want to use postgreSQL,
- start postgres via 
docker-composecommand provided below - uncommend 
postgresimport statement and commentsqliteinplugin.go - start micro server with 
--configFile=config.dev.postgres.yamlflag
i.e.,go run srv/account/main.go srv/account/plugin.go --configFile=config.dev.postgres.yaml 
# to start postgres in foreground
docker-compose up postgres
# to stop postgres
docker-compose down
# if needed, remove `postgres_data` volume to recreate database next time, when you start.
docker system prune --volumesNode:
--server_address=localhost:5501x --broker_address=localhost:5502xrequired only when you are behind VPN a.k.aWork From Home
# dev mode
make run-account
# or
make run-account ARGS="--server_address=localhost:55011 --broker_address=localhost:55021"
# or
go run srv/account/main.go srv/account/plugin.go \
--configDir deploy/bases/account-srv/config \
--server_address=localhost:55011 --broker_address=localhost:55021
make run-greeter
# or
make run-emailer ARGS="--server_address=localhost:55012 --broker_address=localhost:55022"
make run-emailer
# or
make run-emailer ARGS="--server_address=localhost:55013 --broker_address=localhost:55023"
# integration tests for config module via CMD
make run TARGET=demo TYPE=cmd
go run cmd/demo/main.go --help
go run cmd/demo/main.go --database_host=1.1.1.1 --database_port=7777
export APP_ENV=production
go run cmd/demo/main.goRefer testing docs
Refer makefile docs
Refer docker docs
Refer releasing docs
make docker DOCKER_REGISTRY=docker.pkg.github.com DOCKER_CONTEXT_PATH=xmlking/micro-starter-kit
docker rmi $(docker images -f "dangling=true" -q)
# make kustomize OVERLAY=e2e NS=default VERSION=v0.1.0-440-g6c7fb7a
make kustomize
kubectl apply -f build/kubernetes.yaml
POD_NAME=$(kubectl get pods  -lapp.kubernetes.io/name=account-srv -o jsonpath='{.items[0].metadata.name}')
kubectl logs -f -c srv $POD_NAME
kubectl delete -f build/kubernetes.yaml- prerequisites
 - scaffolding
 - makefile
 - testing
 - docker
 - gitops
 - Protobuf Style Guide
 - Google Protobuf Style Guide
 
- Go-Micro Getting Started
 - examples - example usage code for micro
 - microhq - a place for prebuilt microservices
 - explorer - which aggregates micro based open source projects
 - micro-plugins extensible micro plugins
 - step-by-step-guide-micro
 - micro-in-cn
 - Platform Web
 - grpc template
 - Simple API backed by PostgresQL, Golang and gRPC
 
