demo-redis

command module
v0.0.0-...-c9eeb25 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 13, 2023 License: MIT Imports: 29 Imported by: 0

README

demo-redis

Build Status Go Report Card codecov GitHub go.mod Go version MIT License

This is a small go-based project to craft an API Backend which persist to Redis. It can be run on bare-metal computer as well in containerized environment with Docker and Docker-Compose. Keep watching for more features updates like redis-based pubsub async event for persisting data to file-like storage such as BoltDB and authenticate & authorize with JWT (Json Web Token) and log monitoring with Loki/Grafana and metrics monitoring with Prometheus/Grafana and tracing with OpenTelemetry/Tempo. The project mimic a DDD approach but in order to keep it minimal (avoid folders/packages) - I crafted it with some flat contextual files. Based on each file name, you can easily restructure to packages-based style.

Get-Started

You can run this project directly on your host machine (windows or linux or macos) or inside containerized environment (with docker-compose). I will be adding K8s manifest files soon. You can use the Make Tool for common tasks (check the Makefile for available actions). Make sure, you have git or git bash and make tools installed along with docker or docker desktop and docker-compose. All these tools could be installed even on windows-based machine. i.e install make tool on windows. You can use a hybrid approach like running some services (especially Redis container) inside a linux-based virtual machine and the golang app on your local machine. Feel free to use whatever approach that better suit to your setup. Finally you can always download golang from official page.

[Step 1] - Clone or download the repository on your local machine

$ git clone https://github.com/jeamon/demo-redis.git
$ cd demo-redis

[Step 2] - Open and check the config.yml and config.env files

Update the content (especially the redis and app host & port values) based on your setup or leave it like it is.

[Step 3] - Build and/or run the project

  • Method 1: Use docker-compose to build and spin up the project
$ make docker.build
$ make docker.run
  • Method 2: Run the Redis in docker and the App locally

Go inside the config.yml file and change the server host value to host: "127.0.0.1" Then change the redis host value to the exact IP address of the host where it is running. Finally do the same changes inside the config.env file for both server host and redis host.

  • create volume and start redis instance from your docker host

    $ docker volume create db.demo.redis.data
    $ docker run -d --name db.demo.redis -v db.demo.redis.data:/data -p 6379:6379 redis redis-server --requirepass "<secret>"
    
  • start the server on your local machine (depending if you have make or/and git tools)

    $ make local.run
    
    $ DRAP_REDIS_HOST=<IP.ADDRESS.REDIS.HOST> make local.run
    
    $ go run -ldflags "-X 'main.GitCommit=$(shell git rev-parse --short HEAD)' -X 'main.GitTag=$(shell git describe --tags --abbrev=0)' -X 'main.BuildTime=$(shell date -u '+%Y-%m-%d %I:%M:%S %p GMT')'" .
    
    $ go run .
    
  • delete the container and volume created before for redis on your docker host

    $ docker rm -f db.demo.redis
    $ docker volume rm db.demo.redis.data
    
  • connect to redis server from another temporary redis-cli container (on your docker host)

    $ docker run --rm -it --link db.demo.redis:redis-cli --name redis-cli redis sh
    $ redis-cli -h db.demo.redis
    $ auth default <secret>
    

Step 4: Check by performing basics requests (from curl or postman or browser)

## example of basic app checking
$ http://<server-address>:8080/

## example of fetching app status info
$ http://<server-address>:8080/status

## example of all books listing request
$ http://<server-address>:8080/v1/books

## example of pulling in-use app settings
$ http://<server-address>:8080/internal/configs
## example of book creation request

$ curl -X POST http://<server-address>:8080/v1/books \
   -H 'Content-Type: application/json; charset=UTF-8' \
   -d '{"title": "golang programming", "description": "Pratical golang exercices", "author": "Jerome Amon", "price": "10$"}'

Contact

Feel free to reach out to me before any action. Feel free to connect on Twitter or linkedin

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL