An open API service indexing awesome lists of open source software.

https://github.com/erdemerbaba/general-purpose-inclusive-devops-ecosystem

Inclusive devops ecosystem is general purpose environment for maintain both fullstack and devops projects.
https://github.com/erdemerbaba/general-purpose-inclusive-devops-ecosystem

ansible configurable devops docker elasticsearch flagger fullstack java jenkins kafka keda kubernetes mongodb prometheus react redis sonarcube swagger system terraform

Last synced: 3 months ago
JSON representation

Inclusive devops ecosystem is general purpose environment for maintain both fullstack and devops projects.

Awesome Lists containing this project

README

          

# General Purpose Inclusive DevOps Ecosystem

Inclusive Devops Ecosystem is general purpose environment for maintain both fullstack and devops projects. This ecosystem offer configureable management web application with provides a devops environment that can be calibrated and used for other projects such as maintaining, monitoring,infastructure practices of this web application.


gepidethumbnailwideful

# Index




  • 1. Ecosystem Summary

  • 2. Architecture Overview

  • 3. Technology Stacks

  • 4. Project Structure

  • 5. Information of Services

  • 6. Local Setup

  • - 6.1. With Container

  • - 6.2. With Manual





  • 7. Get packages

  • - 7.1. With Container

  • - 7.2. With Manual

  • 8. Deployment Operation

  • - 8.1. With Kubernetes

  • - 8.2. With Container

  • - 8.3. With Manual

  • - 8.4. Error Handling





  • 9. Database Parameters

  • 10. Contributing

  • 11. License

  • 12. Support

  • 13. Donate



# 1 Ecosystem Summary

Configurable web application for a calibratable devops enironment. Devops Ecosystem is general purpose environment for maintain both fullstack and devops projects. This ecosystem offer configureable management web application with provides a devops environment that can be calibrated and used for other projects such as maintaining, monitoring,infastructure practices of this web application.

# 2 Architecture Overview



2.1 General Sections of Ecosystem



  • Continuous Development

  • Continuous Integration

  • Continuous Testing

  • Continuous Deployment

  • Continuous Delivery

  • Continuous Monitoring

  • Continuous Feedback

  • Continuous Operations




2.2 Sector Summary of Ecosystem



  • Frontend

  • Backend

  • Dataservice

  • Gateway

  • Docker

  • Kubernetes

  • Pipeline

  • Infrastructure

  • Monitoring

  • Logging

  • Network

  • Security

  • Traffic Management

  • Scalability

  • Upgradeability

  • Migration




gepideschema



# 3 Technology Stacks



3.1 Backend



  • Framework: Spring Boot 2.7.0

  • Language: Java 17

  • Security: Spring Security + JWT

  • Validation: Bean Validation (JSR-303)

  • Logging: SLF4J + Logback

  • Monitoring: Spring Boot Actuator + Prometheus




3.2 Frontend



  • Framework: React 17

  • Language: JavaScript/JSX

  • Styling: Bootstrap 4.5

  • HTTP Client: Axios

  • Routing: React Router DOM

  • State Management: Context API




3.3 dataservice



  • Framework: MongoDB






3.4 Container Tools



  • Containerization: Docker-ready

  • Monitoring: Health checks, metrics

  • Configuration: Environment-based configuration

  • Logging: Structured logging with rotation




3.5 Kubernetes Tools



  • Infastructure: Terraform

  • Configuration: Ansible

  • Environment: Istio

  • Maintenance: Rancher




3.6 Automation Tools



  • Continuous Delivery: Jenkins



# 4 Project Structure

```
general_purpose_inclusive_devops_ecosystem/
├── user-service/ # User management microservice
│ ├── src/main/java/
│ │ ├── controller/ # REST controllers
│ │ ├── service/ # Business logic layer
│ │ ├── repository/ # Data access layer
│ │ ├── dto/ # Data transfer objects
│ │ ├── document/ # MongoDB entities
│ │ ├── config/ # Configuration classes
│ │ └── exception/ # Custom exceptions
│ └── src/main/resources/
│ └── application.yml # Externalized configuration
├── product-service/ # Product management microservice
│ ├── src/main/java/
│ │ ├── controller/ # REST controllers
│ │ ├── service/ # Business logic layer
│ │ ├── repository/ # Data access layer
│ │ ├── dto/ # Data transfer objects
│ │ ├── document/ # MongoDB entities
│ │ ├── config/ # Configuration classes
│ │ └── exception/ # Custom exceptions
│ └── src/main/resources/
│ └── application.yml # Externalized configuration
├── asset-service/ # asset management microservice
│ ├── src/main/java/
│ │ ├── controller/ # REST controllers
│ │ ├── service/ # Business logic layer
│ │ ├── repository/ # Data access layer
│ │ ├── dto/ # Data transfer objects
│ │ ├── document/ # MongoDB entities
│ │ ├── config/ # Configuration classes
│ │ └── exception/ # Custom exceptions
│ └── src/main/resources/
│ └── application.yml # Externalized configuration
├── management-app/ # React frontend application
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── services/ # API service layer
│ │ ├── context/ # React context providers
│ │ └── pages/ # Page components
│ └── package.json # Node.js dependencies
├── mongo-init.js # mongodb configurations
├── eureka-server/ # eureka configurations
└── gateway/ # gateway configurations
```


frontendlayout

## 4.1 Used Principle, Pattern and Techniques

### 4.1.1 SOLID Principles for maintainable and extensible code

**Single Responsibility Principle (SRP)**: Controllers handle only HTTP requests/responses
**Open/Closed Principle (OCP)**: Service interfaces allow extension without modification
**Liskov Substitution Principle (LSP)**: Service implementations are interchangeable
**Interface Segregation Principle (ISP)**: Focused service interfaces
*Dependency Inversion Principle (DIP)**: Controllers depend on service interfaces

### 4.1.2 12-Factor App methodology for cloud-native applications

**Codebase**: Single repository for all services
**Dependencies**: Maven/Node.js dependency management
**Config**: Externalized configuration via environment variables
**Backing Services**: MongoDB as backing service
**Build, Release, Run**: Maven build process
**Processes**: Stateless services
**Port Binding**: Configurable ports via environment
**Concurrency**: Horizontal scaling support
**Disposability**: Graceful shutdown handling
**Dev/Prod Parity**: Consistent environments
**Logs**: Structured logging with SLF4J
**Admin Processes**: Health check endpoints

### 4.1.3 Service-Oriented Architecture (SOAP) principles for loose coupling

**Service Abstraction**: Clear service boundaries
**Loose Coupling**: Services communicate via well-defined interfaces
**Service Reusability**: Services can be reused across different contexts
**Service Autonomy**: Services operate independently

# 5 Information of Services


gepideports



5.1 Zookeper



  • image: bitnami/zookeeper:latest

  • container_name: zookeeper

  • ports: "2181"




5.2 kafka



  • image: bitnami/kafka:latest

  • container_name: kafka

  • ports: "9093,9092"




5.3 kafdrop



  • image: obsidiandynamics/kafdrop:latest

  • container_name: kafdrop

  • ports: "9099"





5.4 Mongodb



  • image: mongo:latest

  • container_name: mongodb

  • ports: "27017"




5.5 redis



  • image: redis:latest

  • container_name: redis

  • ports:"6379"




5.6 eureka



  • image: local

  • container_name: eureka-server

  • Eports: "8761"






5.7 gateway



  • image: local

  • container_name: gateway

  • ports: "8080"




5.8 user service



  • image: local

  • container_name: user-service

  • ports: "8081"




5.9 product service



  • image: local

  • container_name: product-service

  • ports: "8082"






5.10 asset service



  • image: local

  • container_name: asset-service

  • ports: "8083"




5.11 management app



  • image: local

  • container_name: management-app

  • ports: "3000"




5.12 sonarqube



  • image: sonarqube:latest

  • container_name: sonarqube

  • ports: "9000"






5.13 jenkins



  • mage: jenkins/jenkins:lts

  • container_name: jenkins

  • ports: "8443,8043,50000"




5.14 elastic search



  • image: elasticsearch/elasticsearch:7.17.10

  • container_name: elasticsearch

  • ports: "9200,9300"




5.15 logstash



  • image: logstash/logstash:7.17.10

  • container_name: logstash

  • ports: "5044,9600"






5.16 filebeat



  • mage: beats/filebeat:7.17.10

  • container_name: filebeat




5.17 kibana



  • image: kibana/kibana:7.17.10

  • container_name: kibana

  • ports: "5601"




5.18 prometheus



  • image: prom/prometheus:latest

  • container_name: prometheus

  • ports: "9090"






5.19 grafana



  • mage: grafana/grafana:latest

  • container_name: grafana

  • ports: "3001"




5.20 postgre



  • image: postgres:13

  • container_name: jira_db




5.21 jira



  • image: atlassian/jira-software:latest

  • container_name: jira

  • ports: "8090"



# 6 Local Setup

User can run whole project with docker and kubernetes but if want to run manual please read 6.3 instructions.

## 6.1 Prerequisites




  • 16 core 2.5 ghz cpu

  • 16 gb ram

  • 50 gb disk space

  • Docker

  • minikube

  • terraform

  • python pip kubernetes

  • ansible




  • if do not use docker then:

  • Java 17+

  • Maven 3.6+

  • Node.js 14+

  • MongoDB 4.4+

  • python 3.12+

  • also should download related tools that inside of docker compose




image

## 6.2 Run Services with container

### 6.2.1 install docker

```bash
https://docs.docker.com/desktop/
```

### 6.2.2 locate to project path

```bash
cd general-purpose-inclusive-devops-ecosystem/
```

### 6.2.3 execute docker compose

```bash
docker compose up -d --build
```

### 6.2.4 take a tea and wait a while after that check statusses with different terminal

```bash
docker images
docker ps
```

### 6.2.5 you are read to go for check services

```bash
curl http://localhost:3000
Website: http://localhost:3000
```

### 6.2.6 if you want to down all the compose

```bash
docker compose down
```

## 6.3 Run Services with old school style (non-container)

### 6.3.1 Configure Environment Variables

```bash
export MONGODB_HOST=localhost
export MONGODB_PORT=27017
export MONGODB_DATABASE=management
export JWT_SECRET=your-secret-key
```

### 6.3.2 Start MongoDB

```bash
mongod --dbpath
```

### 6.3.3 Build and Run eureka server

```bash
cd eureka-server
mvn clean install
mvn spring-boot:run
```

### 6.3.4 Build and Run gateway

```bash
cd gateway
mvn clean install
mvn spring-boot:run
```

### 6.3.5 Build and Run User Service

```bash
cd user-service
mvn clean install
mvn spring-boot:run
```

### 6.3.6 Build and Run Product Service

```bash
cd product-service
mvn clean install
mvn spring-boot:run
```

### 6.3.7 Build and Run asset Service

```bash
cd asset-service
mvn clean install
mvn spring-boot:run
```

### 6.3.8 Install Dependencies

```bash
cd management-app
npm install
npm start
```

### 6.3.9 Enter Web app

```bash
Website: localhost:3000
```

# 7 Get Package

User can run whole project with docker and kubernetes but if want to run manual please read 7.2 instructions.


dockercontainers

## 7.1 Get package with container

### 7.1.1 login docker

```bash
docker login
```

### 7.1.2 build compose

```bash
docker compose build
```

### 7.1.3 push to docker hub

```bash
docker compose push
```

#### 7.1.3.1 if you get package with offline environment

```bash
docker compose images --quiet | xargs -n1 docker save -o .tar
```

## 7.2 Get package with old school style (non-container)

### 7.2.1 Database

```bash
mongosh
```

### 7.2.2 Backend

```bash
mvn package
```

### 7.2.3 Frontend

```bash
npm run build
```

# 8 Deployment Operation

User can run whole project with docker and kubernetes but if want to run manuel please read 8.3 instructions. Firstly, Enter related machine to deploy process.


gepidekubernetes

## 8.1 Deploy with kubernetes

### 8.1.1 Install minikube for kubernetes environment

For Linux

```bash
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
```

For Mac

```bash
brew install minikube
```

For Windows

```bash
choco install minikube -y
```

### 8.1.2 Execute minikube for setup kubernetes and create namespace (terraform trigger to create namespace sometimes)

```bash
minikube start
kubectl create namespace gepide
kubectl create namespace keda
kubectl create namespace flagger
kubectl create namespace istio-system
```

### 8.1.3 Install Terraform

```bash
https://developer.hashicorp.com/terraform/install
```

### 8.1.4 get ready local containers

```bash
docker compose up -d
```

### 8.1.5 transfer local updated images int kubernetes environment

```bash
for image in gepide-eureka:latest gepide-gateway:latest gepide-user-service:latest gepide-product-service:latest gepide-asset-service:latest gepide-management-app:latest; do minikube image load $image; done
or
minikube image load gepide-eureka-server:latest
minikube image load gepide-gateway:latest
minikube image load gepide-user-service:latest
minikube image load gepide-product-service:latest
minikube image load gepide-asset-service:latest
minikube image load gepide-management-app:latest
```

### 8.1.6 locate file and execute init

```bash
cd terraform/
terraform init
(if you do not want to up all the tools, you can just convert main.tf into main.tf.bak then lite version mainlite.tf activated)
```

### 8.1.7 plan teraform environment

```bash
terraform plan
```

### 8.1.8 apply teraform environment

```bash
terraform apply -auto-approve
```

### 8.1.9 now take a time to terraform handle process and you can see the status with paralel terminal

```bash
kubectl get all -A
```

### 8.1.10 Install Ansible

```bash
https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
```

### 8.1.11 Install python kubernetes lib

```bash
pip install kubernetes
```

### 8.1.12 Change what required in spesific tool yml file

```bash
ansible-playbook -i inventory.ini playbook.yml
```

### 8.1.13 Take a rest and look environment to see configurations done or not

```bash
kubectl describe pod -n
```

### 8.1.14 To down services execute below command in environment

```bash
kubectl delete namespace gepide
or
terraform destroy
```

### 8.1.14 To delete kubernetes environment then execute below command

```bash
minikube delete
```

## 8.2 Deploy with docker

### 8.2.1 send docker compose to related machine

```bash
scp docker-compose.yml root::/home/docker-compose.yml
```

### 8.2.2 enter machine, locate file and execute compose

```bash
docker compose up -d --build
```

#### 8.2.2.1 if environment offline, locate file then enter machine and execute below rpm command

```bash
docker load -i all-images.tar
```

### 8.2.3 stop the services if needed

```bash
docker compose down
```

## 8.3 Deploy with local

### 8.3.1 Database

mongosh

### 8.3.2 Backend

java -jar package.jar

### 8.3.3 Frontend

npm install -g serve
serve -s build

## 8.4 Error Handling

export NODE_OPTIONS=--openssl-legacy-provider
export SKIP_PREFLIGHT_CHECK=true
lsof -i tcp:8080
taskkill /F /PID

# 9 Database Parameters

- Employee
-- ID
-- Name
-- Surname
-- Profession
-- Role
-- Level
-- Team
-- Mentor
-- Join Date
-- Leave Date
-- Location
-- Email
-- Phone Number
-- Birth Date
-- Nationality
-- Address
-- Identity Number
-- Educations
-- Experience
-- Skills
-- Certifications
-- Honors
-- Memberships
-- Projects
-- Links
-- Government Papers
-- Additional Notes

- Products
-- ID
-- Name
-- Category
-- Description
-- Members
-- Customer Segment
-- Revenue Source
-- Cost Source
-- Customer Platforms
-- Developer Platforms
-- Tech Stacks
-- Deployments
-- Sources
-- Historic Dates
-- Performance Indicators
-- Legal Compliance
-- Financial Procedures
-- Additional Notes

- Assets
-- ID
-- Name
-- Type
-- SerialNumber
-- Department
-- AssignedTo
-- TechnicalSpecs
-- PurchaseDate
-- Value

# 10 Contributing

1. Follow the established architecture patterns
2. Maintain SOLID principles
3. Add comprehensive tests
4. Update documentation
5. Follow the coding standards

# 11 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

# 12 Support

For support and questions:

- Create an issue in the repository
- Review the documentation
- Check the health endpoints

contact me erdemerbaba@gmail.com

# 13 Donate

**Buy me a coffee if you want to donate**
https://www.buymeacoffee.com/erdemerbaba/

---

**Built with ❤️ by Era Technology Co aka Erdem Erbaba**