This repo can be used as a starting point for backend development with Golang. It comes bundled with Docker. The development environment uses docker-compose
to start dependent services like mongo.
A few things to note in the project:
- Github Actions Workflows - Pre-configured Github Actions to run automated builds and publish image to Github Packages
- Dockerfile - Dockerfile to generate docker builds.
- docker-compose - Docker compose script to start service in production mode.
- Containerized Mongo for development - Starts a local mongo container with data persistence across runs.
- Mongo Driver - MongoDB supported driver for Go.
- Gorilla Mux - HTTP request multiplexer.
- jwt-go - Implementation of JWT Tokens.
- Validator - Package validator implements value validations for structs.
- .env file for configuration - Change server config like app port, mongo url etc
- File Uploads - io package provides interfaces to I/O primitives.
- httptest - Utilities for HTTP testing.
$ git clone git@github.com:umangraval/Go-Mongodb-REST-boilerplate.git your-app-name
$ cd your-app-name
$ go mod vendor
Starting the dev server also starts MongoDB as a service in a docker container using the compose script at docker-compose.yml
.
$ go run main.go routes.go
Running the above commands results in
- 🌏 API Server running at
http://localhost:8080
- ⛁ MongoDB running at
mongodb://localhost:27017/db
$ go build
$ cd tests
$ go test
$ docker build -t api-server .
$ docker run -t -i -p 8080:8080 api-server
$ docker-compose up
To edit environment variables, create a file with name .env
and copy the contents from .env.default
to start with.
Var Name | Type | Default | Description |
---|---|---|---|
JWT_SECRET | string | secret |
JWT secret to verify |
PORT | number | 8080 |
Port to run the API server on |
MONGO_URL | string | mongodb://localhost:27017/db |
URL for MongoDB |
+-- controllers
| +-- personController.go
+-- db
| +-- db.go
+-- handlers
| +-- config.go
| +-- logs.go
| +-- response.go
| +-- verifyJWT.go
+-- models
| +-- models.go
+-- validators
| +-- validators.go
+-- tests
| +-- api_test.go
+-- routes
| +-- routes.go
+-- uploaded
+-- vendor
+-- nginx
| +-- dev.conf.d
| | +-- nginx.conf
+-- .env
+-- .env.default
+-- .gitignore
+-- docker-compose.yml
+-- Dockerfile
+-- go.mod
+-- go.sum
+-- main.go
+-- README.md