Golang Clean Web Api
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
Install / Use
npx skills add naeemaei/golang-clean-web-apiInstalls into whichever agent you are using.
README
Golang Clean Web API (Dockerize) with a full sample project (Car Sale project)
System Design Diagram
<p align="center"><img src='/docs/files/system_diagram.png' alt='Golang Web API System Design Diagram' /></p>Database Design Diagram
<p align="center"><img src='/docs/files/db_diagram.png' alt='Golang Web API System Design Diagram' /></p>Give a Star! :star:
If you like this repo or found it helpful, please give it a star. Thanks!
Used Tools
- Gin as web framework
- JWT for authentication and authorization
- Redis for caching
- Elasticsearch for logging database
- Beat for log shipping
- Kibana as log viewer
- Postgresql as main database engine
- PgAdmin as database management tool
- Prometheus for metric database
- Grafana for metric dashboards
- Validator for endpoint input Validation
- Viper for configurations
- Zap for logging
- Zerolog for logging
- Gorm as ORM
- Swagger for documentation
- Docker compose to run project with all dependencies in docker
How to run
Run on local system
Start dependencies on docker
docker compose -f "docker/docker-compose.yml" up -d setup elasticsearch kibana filebeat postgres pgadmin redis prometheus node-exporter alertmanager grafana
Install swagger and run app
cd src
go install github.com/swaggo/swag/cmd/swag@latest
cd src/cmd
go run main.go
Address: http://localhost:5005
Stop
docker compose -f "docker/docker-compose.yml" down
Examples
Login
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"
}'
Sample filters request body
City filter and sort
{
"filter": {
"Name": {
"filterType": "text",
"from": "t",
"type": "contains"
}
},
"pageNumber": 1,
"pageSize": 10,
"sort": [
{
"colId": "name",
"sort": "desc"
}
]
}
City in range filter
{
"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"
}
]
}
Run project with dependencies on Docker
docker compose -f "docker/docker-compose.yml" up -d --build
Web API Run in docker http://localhost:9002
Token Url: http://localhost:9002/api/v1/users/login-by-username
Username: admin
Password: 12345678
Kibana http://localhost:5601
Username: elastic
Password: @aA123456
Prometheus http://localhost:9090
Grafana http://localhost:3000
Username: admin
Password: foobar
PgAdmin http://localhost:8090
Username: h.naimaei@gmail.com
Password: 123456
Postgres Server info:
Host: postgres_container
Port: 5432
Username: postgres
Password: admin
Docker Stop
docker compose -f 'docker/docker-compose.yml' --project-name 'docker' down
Linux
- 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
- Create systemd unit
sudo vi /lib/systemd/system/go-api.service
- Service config
[Unit]
Description=go-api
[Service]
Type=simple
Restart=always
RestartSec=20s
ExecStart=/home/hamed/github/golang-clean-web-api/prod/server
Environment="APP_ENV=production"
WorkingDirectory=/home/hamed/github/golang-clean-web-api/prod
[Install]
WantedBy=multi-user.target
- Start service
sudo systemctl start go-api
- Stop service
sudo systemctl stop go-api
- Show service logs
sudo journalctl -u go-api -e
Project preview
Swagger
<p align="center"><img src='/docs/files/swagger.png' alt='Golang Web API preview' /></p>Grafana
<p align="center"><img src='/docs/files/grafana.png' alt='Golang Web API grafana dashboard' /></p>Kibana
<p align="center"><img src='/docs/files/kibana.png' alt='Golang Web API grafana dashboard' /></p>Related Skills
node-connect
385.5kDiagnose OpenClaw Android, iOS, or macOS node pairing, QR/setup code, route, auth, and connection failures.
prose
385.5kOpenProse VM skill pack. Activate on any `prose` command, .prose files, or OpenProse mentions; orchestrates multi-agent workflows.
blender-python-addon
40.5kBlender Python add-on rules for operators, panels, properties, registration, testing, and API-safe scripting
fastapi-production-architecture-cursorrules-prompt-file
40.5kCursor rules for FastAPI services with router/service/repository boundaries, typed provider adapters, bulkhead isolation, idempotency, and domain exceptions.
