Sign inSign up

rocksdf/crudcliente

By rocksdf

•Updated over 5 years ago

Image
0

159

rocksdf/crudcliente repository overview

⁠Bem vindo ao projeto de teste do CRUD do cliente

Esse sistema é um monólito que tem um CRUD simples da entidade Cliente. Ele foi desenvolvido usando um arquétipo do JHipster e aprimorado a API Rest. https://crudcliente.albertomonteiro.dev/⁠
Você pode logar como admin admin ou user user

⁠Tecnologia usada

  • Java 11
  • Angular 11
  • Spring Boot
  • Spring Security
  • Spring Data
  • JWT
  • mapstruct
  • Liquibase
  • PostgreSQL
  • Redis
  • Swagger
  • Cucumber
⁠Em produção
  • Google Cloud Platform
  • Docker

⁠Como foi desenvolvido


A partir dessa modelagem o sistema foi feito.

A estrutura das tabelas se encontram em crud-cliente-jhipster/src/main/resources/config/liquibase/changelog/⁠ baseado em liquibase

A API Rest possui uma documentação feita em Swagger que pode ser consultada em https://crudcliente.albertomonteiro.dev/docs⁠. Para explorar o Swagger você pode configurar o tokem:
bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ1c2VyIiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTYxOTg0NzUxMn0.O5aVYFXtawLf2u55fdMS-jxkpdBZovt5QF1SPZ9bPNNJGVA7GKICCrzvjRU0j-bp8_QceeEru-A6VrxJAJaQ

Também tem a documentação em Postman https://documenter.getpostman.com/view/15195822/TzCP5mJB⁠
E o arquivo exportado pelo Postman https://www.postman.com/collections/2788deaf95a50f000ea7⁠

O sistema está usando um provedor de cache pelo redis

⁠Testes:
  • protractor
  • cucumber
  • gatling

⁠Produção

O sistema está rodando em produção em uma maquina virtual no Google Cloud Platform dentro de um container do Docker, a imagem foi gerada pelo Maven usando um plugin jib da google, com ele é possível gerar imagem sem a daemon Docker.

Essa imagem Docker está disponível no meu repositório publico do DockerHub rocksdf/crudcliente:latest⁠

Através do proxy traefik eu disponibilizei o link https://crudcliente.albertomonteiro.dev/⁠ com o certificado da Let's Encrypt, sempre é redirecionado para o Https.

O arquivo do docker-compose que está em produção é esse:

version: '3.9'
services:
  traefik:
    container_name: traefik
    image: library/traefik:v2.4.7
    labels:
      - traefik.http.routers.api.rule=Host(`traefik.albertomonteiro.dev`)
      - traefik.http.routers.api.entrypoints=web
      - traefik.http.routers.api.tls=false
      - traefik.http.routers.api.middlewares=https_redirect
      - traefik.http.middlewares.https_redirect.redirectscheme.scheme=https
      - traefik.http.middlewares.https_redirect.redirectscheme.permanent=true

      - traefik.http.routers.apis.rule=Host(`traefik.albertomonteiro.dev`)
      - traefik.http.routers.apis.entrypoints=websecure
      - traefik.http.routers.apis.tls.certresolver=leresolver
      - traefik.http.routers.apis.service=api@internal
      - traefik.http.routers.apis.middlewares=auth

      - traefik.http.middlewares.auth.basicauth.users=admin:******
    command:
      - --providers.docker=true
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      #- --certificatesresolvers.leresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory # <- Comentar em produção
      - [email protected]
      - --certificatesResolvers.leresolver.acme.storage=/letsencrypt/acme.json
      - --certificatesResolvers.leresolver.acme.httpChallenge.entryPoint=web
      - --api.dashboard=true
      - --api.insecure=false
      #- --log.level=DEBUG
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /home/dockerVolume/traefik/letsencrypt:/letsencrypt
    restart: always
    ports:
      - 80:80
      - 443:443
      #- 8080:8080

  portainer:
    container_name: portainer
    image: portainer/portainer-ce:2.1.1
    labels:
      - traefik.http.routers.portainer-http.rule=Host(`portainer.albertomonteiro.dev`)
      - traefik.http.routers.portainer-http.entrypoints=web
      - traefik.http.routers.portainer-http.tls=false
      - traefik.http.routers.portainer-http.middlewares=https_redirect
      - traefik.http.middlewares.https_redirect.redirectscheme.scheme=https
      - traefik.http.middlewares.https_redirect.redirectscheme.permanent=true

      - traefik.http.routers.portainer-https.rule=Host(`portainer.albertomonteiro.dev`)
      - traefik.http.routers.portainer-https.entrypoints=websecure
      - traefik.http.routers.portainer-https.tls.certresolver=leresolver

      - traefik.http.services.portainer.loadbalancer.server.port=9000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /home/dockerVolume/portainer/data:/data
    restart: always
    #ports:
    #  - 8000:8000
    #  - 9000:9000

  crudcliente-postgresql:
    container_name: crudcliente-postgresql
    image: postgres:13.2
    environment:
      - POSTGRES_DB=crudcliente
      - POSTGRES_PASSWORD=******
    volumes:
      - /home/dockerVolume/postgresql:/var/lib/postgresql/data/
    restart: always
    #ports:
    #  - 5432:5432

  crudcliente-redis:
    container_name: crudcliente-redis
    image: library/redis:6.2.1
    volumes:
      - /home/dockerVolume/redis/data:/data
    restart: always
    #ports:
    #  - 6379:6379

  crudcliente-app:
    container_name: crudcliente-app
    image: rocksdf/crudcliente
    labels:
      - traefik.http.routers.crudcliente-http.rule=Host(`crudcliente.albertomonteiro.dev`)
      - traefik.http.routers.crudcliente-http.entrypoints=web
      - traefik.http.routers.crudcliente-http.tls=false
      - traefik.http.routers.crudcliente-http.middlewares=https_redirect
      - traefik.http.middlewares.https_redirect.redirectscheme.permanent=true
      - traefik.http.middlewares.https_redirect.redirectscheme.scheme=https

      - traefik.http.routers.crudcliente-https.rule=Host(`crudcliente.albertomonteiro.dev`)
      - traefik.http.routers.crudcliente-https.entrypoints=websecure
      - traefik.http.routers.crudcliente-https.tls.certresolver=leresolver

      - traefik.http.services.crudcliente.loadbalancer.server.port=8080
    environment:
      - _JAVA_OPTIONS=-Xmx512m -Xms256m
      # Para gerar um novo, digite: openssl rand -base64 64
      - JHIPSTER_SECURITY_AUTHENTICATION_JWT_BASE64_SECRET=ZfVKFfZC4gRM+9lb2lXNWkQl6gCXR+oBT3nKlrUa7mlghJtG4Gm9vz2PZmcRWzCrklZZwMroaZC9d54gedfm8w==
      - SPRING_PROFILES_ACTIVE=prod,api-docs
      - SPRING_LIQUIBASE_CONTEXTS=prod,faker
      - SPRING_LIQUIBASE_URL=jdbc:postgresql://crudcliente-postgresql:5432/crudcliente
      - SPRING_DATASOURCE_URL=jdbc:postgresql://crudcliente-postgresql:5432/crudcliente
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=******
      - JHIPSTER_CACHE_REDIS_SERVER=redis://crudcliente-redis:6379
      - JHIPSTER_CACHE_REDIS_CLUSTER=false
      - SPRING_MAIL_HOST=smtp.sendgrid.net
      - SPRING_MAIL_PORT=587
      - SPRING_MAIL_USERNAME=apikey
      - SPRING_MAIL_PASSWORD=******
      - [email protected]
      - JHIPSTER_MAIL_BASEURL=https://crudcliente.albertomonteiro.dev
      - MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED=false
      - JHIPSTER_SLEEP=30
    restart: always
    #ports:
    #  - 8080:8080

Caso queira testar na maquina local você pode usar o seguinte docker-compose:

version: '3.9'
services:
  crudcliente-redis:
    container_name: crudcliente-redis
    image: library/redis:6.2.1
    restart: always
    #ports:
    #  - 6379:6379

  crudcliente-postgresql:
    container_name: crudcliente-postgresql
    image: postgres:13.2
    environment:
      - POSTGRES_DB=crudcliente
      - POSTGRES_PASSWORD=
      - POSTGRES_HOST_AUTH_METHOD=trust
    restart: always
    #ports:
    #  - 5432:5432

  crudcliente-app:
    container_name: crudcliente-app
    image: rocksdf/crudcliente
    environment:
      - _JAVA_OPTIONS=-Xmx512m -Xms256m
      - SPRING_PROFILES_ACTIVE=prod,api-docs
      - SPRING_LIQUIBASE_CONTEXTS=prod,faker
      - SPRING_LIQUIBASE_URL=jdbc:postgresql://crudcliente-postgresql:5432/crudcliente
      - SPRING_DATASOURCE_URL=jdbc:postgresql://crudcliente-postgresql:5432/crudcliente
      - SPRING_DATASOURCE_USERNAME=postgres
      - JHIPSTER_CACHE_REDIS_SERVER=redis://crudcliente-redis:6379
      - JHIPSTER_SLEEP=30
    restart: always
    ports:
      - 80:8080

Tag summary

Content type

Image

Digest

Size

145.9 MB

Last updated

over 5 years ago

docker pull rocksdf/crudcliente