Conhecendo e Disponibilizando a ferramenta FormsFlow.ai
Data: 19/05/23
Autores:
1. João Batista da Silva Junior (Assessor)
2. Michel Farias Ferreira (Assessor)
_________________________________________________________________________________________________________________________________________
1. OBJETIVO
O objetivo do FormsFlow.ai é fornecer uma solução completa para gerenciamento de fluxo de trabalho. Isso é alcançado por meio de um sistema que permite a automação de processos de negócios, melhorando a eficiência e produtividade da organização. O FormsFlow.ai é capaz de fornecer uma solução escalável, personalizada e fácil de usar para gerenciamento de fluxo de trabalho. O objetivo deste estudo é fornecer uma visão geral do FormsFlow.ai, incluindo sua instalação e configuração no ambiente local da SETIC
2. INTRODUÇÃO
Nos últimos anos, tem havido um aumento significativo na adoção de soluções de gerenciamento de fluxo de trabalho para melhorar a eficiência das organizações. O FormsFlow.ai é um exemplo de um sistema que permite o gerenciamento de fluxo de trabalho em diferentes setores.
3. DESENVOLVIMENTO
O FormsFlow.ai é um sistema que pode ser instalado localmente em um ambiente Docker. Isso permite às organizações personalizar a instalação de acordo com suas necessidades específicas. O processo de instalação pode ser realizado seguindo as instruções detalhadas no guia de instalação do FormsFlow.ai. Uma vez instalado, o sistema pode ser configurado para atender às necessidades da organização.
A configuração do FormsFlow.ai é feita por meio de um painel de administração, que é acessado por meio de um navegador da web. A partir deste painel, é possível configurar as opções de autenticação, adicionar usuários e definir permissões. Também é possível criar e gerenciar fluxos de trabalho personalizados e definir as etapas específicas do fluxo de trabalho.
Uma das principais características do FormsFlow.ai é a sua capacidade de disponibilizar uma rota de acesso para os usuários. Isso significa que os usuários podem enviar solicitações de fluxo de trabalho diretamente pelo sistema, sem a necessidade de enviar e-mails ou preencher formulários em papel. A rota de acesso permite que os usuários enviem solicitações, verifiquem o status de suas solicitações e recebam notificações por e-mail quando uma etapa do fluxo de trabalho é concluída.
3.1 INSTALAÇÃO LOCAL (OCP)
O OpenShift é uma plataforma de contêineres baseada em Kubernetes, que permite hospedar e gerenciar aplicativos em contêineres de forma escalável e automatizada.
Para subir um serviço no FormsFlow, você precisará seguir alguns passos básicos. Primeiro, certifique-se de que seu projeto FormsFlow esteja configurado corretamente em seu ambiente OpenShift.
Em seguida, você precisará criar um arquivo YAML que descreva seu serviço e seus requisitos. O arquivo YAML especifica o nome do serviço, o tipo de serviço (ClusterIP, NodePort, LoadBalancer), a porta a ser usada para acessar o serviço e outros detalhes.
Depois de criar o arquivo YAML, você pode usar o comando "oc apply" para implantar o serviço no OpenShift. O comando irá criar um objeto de serviço e implantá-lo no cluster.
3.1.1 IMPEDIMENTOS
Caso apareça a mensagem de falta de permissão em volume volumes:
- ./postgres/camunda:/var/lib/postgresql/data 777 , como faço sendo que ao iniciar o serviço está dando crash e não tenho acesso ao terminal?
-
A mensagem de erro indica que o processo que executa o contêiner não tem permissão para acessar o volume que você definiu em seu arquivo YAML. A solução para esse problema pode depender das permissões definidas em seu ambiente e das políticas de segurança que estão em vigor.
Se você não tem acesso ao terminal do contêiner, você pode tentar algumas ações para solucionar o problema:
Verifique se o usuário ou processo que executa o contêiner tem permissões suficientes para acessar o volume definido. Em alguns casos, pode ser necessário adicionar permissões adicionais para o usuário ou processo que executa o contêiner.
Verifique se o volume foi criado corretamente e se as permissões de acesso do volume estão corretas. Certifique-se de que o volume esteja montado corretamente em seu contêiner e que o caminho para o volume esteja correto.
Tente usar o comando "oc logs" para visualizar os logs do contêiner e ver se há alguma informação adicional sobre o erro. Isso pode ajudar a identificar qual é o problema e como resolvê-lo.
Se tudo mais falhar, você pode tentar alterar as permissões do volume diretamente em seu ambiente OpenShift ou em seu sistema de arquivos. Certifique-se de que essas alterações não afetem a segurança de seu ambiente e que as permissões estejam definidas corretamente.
Lembre-se de que, se você não tem experiência em solucionar problemas em ambientes OpenShift, pode ser útil solicitar ajuda de alguém com mais experiência ou consultar a documentação oficial e fóruns de suporte para obter assistência adicional.
Consigo passar alguma variavél para dar essa permissão? Qual?
Sim, você pode usar a variável de ambiente PGDATA para especificar o diretório de dados do PostgreSQL e, em seguida, definir as permissões corretas para esse diretório.
Para fazer isso, você pode adicionar uma seção env ao seu arquivo YAML do contêiner, como o exemplo abaixo:
yaml
containers:
- name: postgres
image: postgres:latest
env:
- name: PGDATA
value: /var/lib/postgresql/data
command: ["postgres"]
args: ["-c", "config_file=/etc/postgresql/postgresql.conf"]
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
ports:
- containerPort: 5432
Em seguida, você pode definir as permissões corretas para o diretório /var/lib/postgresql/data usando o comando chmod. Por exemplo:
chmod 777 /var/lib/postgresql/data
Certifique-se de que as permissões que você definir sejam seguras e adequadas para o ambiente em que o contêiner está sendo executado.
como posso passar isso "chmod 777 /var/lib/postgresql/data" no yaml para dar a permissão logo no início, ao subir o container?
-
Você pode usar a seção initContainers em seu arquivo YAML para executar um contêiner de inicialização que define as permissões do diretório /var/lib/postgresql/data antes que o contêiner principal do PostgreSQL seja iniciado.
Para fazer isso, adicione a seção initContainers ao arquivo YAML e especifique um contêiner de inicialização com o comando chmod para definir as permissões corretas no diretório de dados do PostgreSQL, como no exemplo abaixo:
yaml
apiVersion: v1
kind: Pod
metadata:
name: postgres
spec:
initContainers:
- name: init-permissions
image: busybox
command: ["sh", "-c", "chmod 777 /var/lib/postgresql/data"]
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
containers:
- name: postgres
image: postgres:latest
command: ["postgres"]
args: ["-c", "config_file=/etc/postgresql/postgresql.conf"]
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
ports:
- containerPort: 5432
volumes:
- name: postgres-data
persistentVolumeClaim:
claimName: postgres-pvc
Observe que, neste exemplo, estou usando um contêiner de inicialização baseado na imagem busybox, que inclui o comando chmod. Isso é apenas um exemplo; você pode usar outra imagem de contêiner que tenha o comando chmod instalado.
Certifique-se de que as permissões que você definir sejam seguras e adequadas para o ambiente em que o contêiner está sendo executado.
3.2 DOCKER-COMPOSE
Segue abaixo o exemplo de compose com os serviços disponiveis para o formsflow.ai que você pode utilizar para disponibilizar o sistema no Openshift de forma manual:
version: '3.7'
services:
keycloak-db:
image: postgres:14
volumes:
- ./postgres/keycloak:/var/lib/postgresql/data 777
environment:
POSTGRES_DB: ${KEYCLOAK_JDBC_DB:-keycloak}
POSTGRES_USER: ${KEYCLOAK_JDBC_USER:-admin}
POSTGRES_PASSWORD: ${KEYCLOAK_JDBC_PASSWORD:-changeme}
PGDATA: /var/lib/postgresql/data
networks:
- formsflow
keycloak:
image: quay.io/keycloak/keycloak:14.0.0
volumes:
- ./configuration/imports:/opt/jboss/keycloak/imports
command:
- "-b 0.0.0.0 -Dkeycloak.import=/opt/jboss/keycloak/imports/formsflow-ai-realm.json -Dkeycloak.migration.strategy=OVERWRITE_EXISTING"
environment:
- DB_VENDOR=POSTGRES
- DB_ADDR=keycloak-db
- DB_PORT=5432
- DB_DATABASE=${KEYCLOAK_JDBC_DB:-keycloak}
- DB_USER=${KEYCLOAK_JDBC_USER-admin}
- DB_PASSWORD=${KEYCLOAK_JDBC_PASSWORD:-changeme}
- KEYCLOAK_USER=${KEYCLOAK_ADMIN_USER:-admin}
- KEYCLOAK_PASSWORD=${KEYCLOAK_ADMIN_PASSWORD:-changeme}
ports:
- "8080:8080"
links:
- keycloak-db
networks:
- formsflow
forms-flow-forms-db:
image: mongo:5.0
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: ${FORMIO_DB_USERNAME:-admin}
MONGO_INITDB_ROOT_PASSWORD: ${FORMIO_DB_PASSWORD:-changeme}
MONGO_INITDB_DATABASE: ${FORMIO_DB_NAME:-formio}
volumes:
- ./../../formsflow-forms/mongo_entrypoint/001_user.js:/docker-entrypoint-initdb.d/001_user.js:ro
- ./mongodb/data/db/:/data/db/
- ./mongodb/data/log/:/var/log/mongodb/
- ./mongodb/mongod.conf:/etc/mongod.conf
ports:
- "27018:27017"
networks:
- formsflow
forms-flow-web:
image: formsflow/forms-flow-web:v5.1.0
volumes:
- ./configuration/config.js:/usr/share/nginx/html/config/config.js
links:
- forms-flow-webapi
ports:
- "3000:8080"
networks:
- formsflow
forms-flow-forms:
image: formsflow/forms-flow-forms:v5.1.0
restart: always
environment:
DEBUG: formio:*
NODE_CONFIG: "{\"mongo\":\"mongodb://${FORMIO_DB_USERNAME:-admin}:${FORMIO_DB_PASSWORD:-changeme}@forms-flow-forms-db:27017/${FORMIO_DB_NAME:-formio}?authMechanism=SCRAM-SHA-1&authSource=admin\"}"
ROOT_EMAIL: ${FORMIO_ROOT_EMAIL:-admin@example.com}
ROOT_PASSWORD: ${FORMIO_ROOT_PASSWORD:-changeme}
FORMIO_DOMAIN: ${FORMIO_DEFAULT_PROJECT_URL}
FORMIO_CLIENT_UI: ${FORMIO_CLIENT_UI:-false}
FORMIO_JWT_SECRET: ${FORMIO_JWT_SECRET}
ports:
- "3001:3001"
links:
- forms-flow-forms-db
networks:
- formsflow
forms-flow-bpm-db:
image: postgres:14
environment:
POSTGRES_USER: ${CAMUNDA_JDBC_USER:-admin}
POSTGRES_PASSWORD: ${CAMUNDA_JDBC_PASSWORD:-changeme}
POSTGRES_DB: ${CAMUNDA_JDBC_DB_NAME:-formsflow-bpm}
volumes:
- ./postgres/camunda:/var/lib/postgresql/data 777
ports:
- "5432:5432"
networks:
- formsflow
forms-flow-bpm:
image: formsflow/forms-flow-bpm:v5.1.0
restart: always
environment:
- KEYCLOAK_URL=${KEYCLOAK_URL}
- KEYCLOAK_URL_REALM=${KEYCLOAK_URL_REALM:-forms-flow-ai}
- KEYCLOAK_CLIENTID=${KEYCLOAK_BPM_CLIENT_ID:-forms-flow-bpm}
- KEYCLOAK_CLIENTSECRET=${KEYCLOAK_BPM_CLIENT_SECRET:-e4bdbd25-1467-4f7f-b993-bc4b1944c943}
- CAMUNDA_JDBC_URL=${CAMUNDA_JDBC_URL:-jdbc:postgresql://forms-flow-bpm-db:5432/formsflow-bpm}
- CAMUNDA_JDBC_USER=${CAMUNDA_JDBC_USER:-admin}
- CAMUNDA_JDBC_PASSWORD=${CAMUNDA_JDBC_PASSWORD:-changeme}
- CAMUNDA_JDBC_DRIVER=${CAMUNDA_JDBC_DRIVER:-org.postgresql.Driver}
- CAMUNDA_APP_ROOT_LOG_FLAG=${CAMUNDA_APP_ROOT_LOG_FLAG:-error}
- FORMSFLOW_API_URL=${FORMSFLOW_API_URL}
- FORMIO_URL=${FORMIO_DEFAULT_PROJECT_URL}
- FORMIO_ROOT_EMAIL=${FORMIO_ROOT_EMAIL:-admin@example.com}
- FORMIO_ROOT_PASSWORD=${FORMIO_ROOT_PASSWORD:-changeme}
- APP_SECURITY_ORIGIN=${APP_SECURITY_ORIGIN:-*}
- WEBSOCKET_SECURITY_ORIGIN=${WEBSOCKET_SECURITY_ORIGIN}
- WEBSOCKET_MESSAGE_TYPE=${WEBSOCKET_MESSAGE_TYPE:-TASK_EVENT}
- WEBSOCKET_ENCRYPT_KEY=${WEBSOCKET_ENCRYPT_KEY:-giert989jkwrgb@DR55}
- DATA_BUFFER_SIZE=${DATA_BUFFER_SIZE:-2}
- IDENTITY_PROVIDER_MAX_RESULT_SIZE=${IDENTITY_PROVIDER_MAX_RESULT_SIZE:-250}
- DATA_ANALYSIS_URL=${DATA_ANALYSIS_URL}
- CUSTOM_SUBMISSION_URL=${CUSTOM_SUBMISSION_URL}
- CUSTOM_SUBMISSION_ENABLED=${CUSTOM_SUBMISSION_ENABLED:-false}
- MULTI_TENANCY_ENABLED=${MULTI_TENANCY_ENABLED:-false}
- FORMSFLOW_ADMIN_URL=${FORMSFLOW_ADMIN_URL:-}
- REDIS_ENABLED=${REDIS_ENABLED:-false}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT:-6379}
- REDIS_PASSCODE=${REDIS_PASSCODE:-changeme}
- SESSION_COOKIE_SECURE=${SESSION_COOKIE_SECURE:-true}
ports:
- "8000:8080"
links:
- forms-flow-bpm-db
- keycloak
networks:
- formsflow
forms-flow-webapi-db:
image: postgres:14
restart: always
environment:
POSTGRES_USER: ${FORMSFLOW_API_DB_USER:-postgres}
POSTGRES_PASSWORD: ${FORMSFLOW_API_DB_PASSWORD:-changeme}
POSTGRES_DB: ${FORMSFLOW_API_DB_NAME:-webapi}
volumes:
- ./postgres/webapi:/var/lib/postgresql/data 777
ports:
- "6432:5432"
networks:
- formsflow
forms-flow-webapi:
image: formsflow/forms-flow-webapi:v5.1.0
restart: always
links:
- forms-flow-webapi-db
- forms-flow-forms
entrypoint: "/wait-for-service.sh forms-flow-webapi-db:5432 -s -- /wait-for-service.sh keycloak:8080 -s -- /wait-for-service.sh forms-flow-forms:3001 -s -- ./entrypoint.sh "
volumes:
- ./:/app:rw
environment:
INSIGHT_API_KEY: ${INSIGHT_API_KEY}
INSIGHT_API_URL: ${INSIGHT_API_URL}
DATABASE_URL: ${FORMSFLOW_API_DB_URL:-postgresql://postgres:changeme@forms-flow-webapi-db:5432/webapi}
BPM_TOKEN_API: ${KEYCLOAK_URL}/auth/realms/${KEYCLOAK_URL_REALM:-forms-flow-ai}/protocol/openid-connect/token
BPM_CLIENT_ID: ${KEYCLOAK_BPM_CLIENT_ID:-forms-flow-bpm}
BPM_CLIENT_SECRET: ${KEYCLOAK_BPM_CLIENT_SECRET:-e4bdbd25-1467-4f7f-b993-bc4b1944c943}
BPM_API_URL: ${BPM_API_URL}
FORMSFLOW_API_CORS_ORIGINS: ${FORMSFLOW_API_CORS_ORIGINS:-*}
JWT_OIDC_WELL_KNOWN_CONFIG: ${KEYCLOAK_URL}/auth/realms/${KEYCLOAK_URL_REALM:-forms-flow-ai}/.well-known/openid-configuration
JWT_OIDC_ALGORITHMS: 'RS256'
JWT_OIDC_JWKS_URI: ${KEYCLOAK_URL}/auth/realms/${KEYCLOAK_URL_REALM:-forms-flow-ai}/protocol/openid-connect/certs
JWT_OIDC_ISSUER: ${KEYCLOAK_URL}/auth/realms/${KEYCLOAK_URL_REALM:-forms-flow-ai}
JWT_OIDC_AUDIENCE: ${KEYCLOAK_WEB_CLIENT_ID:-forms-flow-web}
JWT_OIDC_CACHING_ENABLED: 'True'
JWT_OIDC_JWKS_CACHE_TIMEOUT: 300
KEYCLOAK_URL: ${KEYCLOAK_URL}
KEYCLOAK_URL_REALM: ${KEYCLOAK_URL_REALM:-forms-flow-ai}
WEB_API_BASE_URL: ${FORMSFLOW_API_URL}
FORMIO_URL: ${FORMIO_DEFAULT_PROJECT_URL}
FORMIO_ROOT_EMAIL: ${FORMIO_ROOT_EMAIL:-admin@example.com}
FORMIO_ROOT_PASSWORD: ${FORMIO_ROOT_PASSWORD:-changeme}
CHROME_DRIVER_PATH: ${CHROME_DRIVER_PATH}
CUSTOM_SUBMISSION_URL: ${CUSTOM_SUBMISSION_URL}
CUSTOM_SUBMISSION_ENABLED: ${CUSTOM_SUBMISSION_ENABLED}
FORMIO_JWT_SECRET: ${FORMIO_JWT_SECRET:---- change me now ---}
ports:
- "5000:5000"
networks:
- formsflow
proxy:
image: nginx:stable-alpine
volumes:
- ./configuration/conf.d/nginx.conf:/etc/nginx/nginx.conf
restart: unless-stopped
links:
- forms-flow-bpm
- forms-flow-web
- forms-flow-webapi
- forms-flow-forms
ports:
- "8081:8081"
networks:
- formsflow
volumes:
postgres:
mongodb:
networks:
formsflow:
driver: bridge
4. CONCLUSÃO
O FormsFlow.ai é uma solução eficiente e personalizada para gerenciamento de fluxo de trabalho. Sua instalação local em Docker permite às organizações personalizar a instalação de acordo com suas necessidades específicas. A configuração do sistema é feita por meio de um painel de administração fácil de usar, que permite a definição de permissões de usuário e a criação de fluxos de trabalho personalizados. Além disso, o sistema é capaz de fornecer uma rota de acesso para os usuários, o que torna o processo de gerenciamento de fluxo de trabalho ainda mais eficiente.
Nenhum comentário