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

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
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
Content type
Image
Digest
Size
145.9 MB
Last updated
over 5 years ago
docker pull rocksdf/crudcliente