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
