naeemaei/golang-clean-web-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Golang Web API System Design Diagram

Golang Web API System Design Diagram

If you like this repo or found it helpful, please give it a star. Thanks!

  1. Gin as web framework
  2. JWT for authentication and authorization
  3. Redis for caching
  4. Elasticsearch for logging database
  5. Beat for log shipping
  6. Kibana as log viewer
  7. Postgresql as main database engine
  8. PgAdmin as database management tool
  9. Prometheus for metric database
  10. Grafana for metric dasards
  11. Validator for endpoint input Validation
  12. Viper for configurations
  13. Zap for logging
  14. Zerolog for logging
  15. Gorm as ORM
  16. Swagger for documentation
  17. Docker compose to run project with all dependencies in docker
docker compose -f "docker/docker-compose.yml" up -d setup elasticsearch kibana filebeat postgres pgadmin redis prometheus node-exporter alertmanager grafana
cd src
go install .com/swaggo/swag/cmd/swag@latest
cd src/cmd
go run main.go
docker compose -f "docker/docker-compose.yml" down
curl -X 'POST' \
  'http://localhost:5005/api/v1/users/login-by-username' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "password": "12345678",
  "username": "admin"
}'
{
  "filter": {
    "Name": {
      "filterType": "text",
      "from": "t", 
      "type": "contains"
    } 
  },
  "pageNumber": 1,
  "pageSize": 10,
  "sort": [
    {
      "colId": "name",
      "sort": "desc"
    }
  ]
}
{
  "filter": {
    "Id": { // Column name
      "filterType": "number", // number, text,...
      "from": "1", 
      "to": "7", 
      "type": "inRange" // contains, equals,...
    } 
  },
  "pageNumber": 1,
  "pageSize": 10,
  "sort": [
    {
      "colId": "name",
      "sort": "desc"
    }
  ]
}
docker compose -f "docker/docker-compose.yml" up -d --build
Token Url: http://localhost:9002/api/v1/users/login-by-username
Username: admin
Password: 12345678
Username: elastic
Password: @aA123456
Username: admin
Password: foobar
Username: [email protected]
Password: 123456

Postgres Server info:

Host: postgres_container
Port: 5432
Username: postgres
Password: admin
docker compose -f 'docker/docker-compose.yml' --project-name 'docker' down
  1. build Project and copy configuration
/src > go build -o ../prod/server ./cmd/main.go
/src > mkdir ../prod/config/ && cp config/config-production.yml ../prod/config/config-production.yml
  1. Create systemd unit
sudo vi /lib/systemd/system/go-api.service
  1. Service config
[Unit]
Description=go-api

[Service]
Type=simple
Restart=always
RestartSec=20s
ExecStart=/home/hamed//golang-clean-web-api/prod/server
Environment="APP_ENV=production"
WorkingDirectory=/home/hamed//golang-clean-web-api/prod
[Install]
WantedBy=multi-user.target
  1. Start service
sudo systemctl start go-api
  1. Stop service
sudo systemctl stop go-api
  1. Show service logs
sudo journalctl -u go-api -e

Golang Web API preview

Golang Web API grafana dashboard

Golang Web API grafana dashboard

About

Golang Clean architecture REST API example with a comprehensive real project. It uses docker, docker compose, redis, elasticsearch, kibana, filebeat, postgresql, prometheus, grafana. also use gin, gorm, viper, zerolog, zap, validator, dynamic search, swagger and JWT

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •