Cloud Native Application Development is a one way of speeding up building web applications, using micro-services, containers and orchestration tools.
As the first step, this repository shows How to build a Dockerized RESTful API application using Go.
๐ก Refer learning-cloud-native-go.github.io or commit messages and
step-
branches for a step by step guild.
- Usage of Docker and Docker Compose.
- Usage of Golang and MySQL Alpine images.
- Usage of Docker Multistage builds.
- Liveness and Readiness APIs for K8s.
- Usage of Goose for Migrations.
- Usage of GORM as the ORM.
- Usage of Chi as the Router.
- Usage of Zerolog as the Logger.
- Usage of Validator.v10 as the Form Validator.
๐ญ Hope to use Wire for Compile-time Dependency Injection in the future.
- DB: 229MB
- App
- Development environment: 728MB
- Production environment: 21.8MB
๐ก Building Docker image for production
docker build -f docker/app/prod.Dockerfile . -t myapp_app
- Store Docker related files inside the
docker
folder. But keep thedocker-compose.yml
file in the project root. - Store executable packages inside the
cmd
folder. - Store database migrations inside the
migrations
folder. - Store main application code inside the
app
folder. - Store reusable packages like configs, utils, models and repositories in separate folders. This will be helpful if you are adding more executable applications to support web front-ends, publish/subscribe systems, document stores and etc.
.
โโโ docker
โ โโโ app
โ โโโ bin
โ โ โโโ init.sh
โ โ โโโ wait-for-mysql.sh
โ โโโ Dockerfile
โโโ docker-compose.yml
โ
โโโ cmd
โ โโโ app
โ โ โโโ main.go
โ โโโ migrate
โ โโโ main.go
โ
โโโ migrations
โ โโโ 20190805170000_create_books_table.sql
โ
โโโ app
โ โโโ app
โ โ โโโ app.go
โ โ โโโ book_handler.go
โ โ โโโ health_handler.go
โ โ โโโ index_handler.go
โ โโโ requestlog
โ โ โโโ handler.go
โ โ โโโ log_entry.go
โ โโโ router
โ โโโ middleware
โ โ โโโ content_type_json.go
โ โ โโโ content_type_json_test.go
โ โโโ router.go
โ
โโโ config
โ โโโ config.go
โ
โโโ adapter
โ โโโ db
โ โ โโโ db.go
โ โโโ gorm
โ โโโ gorm.go
โ
โโโ util
โ โโโ logger
โ โ โโโ logger.go
โ โ โโโ logger_test.go
โ โโโ validator
โ โโโ validator.go
โ โโโ validator_test.go
โ
โโโ model
โ โโโ book.go
โโโ repository
โ โโโ book.go
โ
โโโ go.mod
โโโ go.sum
๐ก About
app/app/app.go
; Some preferapp/server/server.go
orhttp/app/app.go