# Documentação Máquina Virtual Qintess

**Colaborador:** Edson Belém de Souza Junior
**Matrícula:** re047197
## Linguagem de Programação
### java 8, PHP 7.2, Laravel 6., nodeJs como recursos para o Back end
.
.
.
## Front-End
# Instalação do ReactJs -- Site responsivo
**Instalação global na máquina:**
Clicar na tecla de Windows e digitar `cmd`, abrir como **administrador**

Ao abrir a janela do cmd. digitar o comando:
```
npm install -g create-react-app
```

Instalado!

## Para criar um projeto em Reactjs
Abrir uma janela de cmd dentro do diretorio desejado e digitar o comando:
```
npx create-react-app nome_do_projeto
```

Aguardar criar e baixar as dependencias

Entrar no diretorio do projeto e iniciar o projeto com o comando:
```
npm start
```
Aguardar abrir o browser.
*Obs: O reactjs usar a porta 3000 para rodar o projeto.*

*Projeto iniciado com sucesso!*
# Instalação do ReactNative -- Mobile
**Instalação global na máquina:**
Clicar na tecla de Windows e digitar `cmd`, abrir como **administrador**

Ao abrir a janela do cmd. digitar o comando:
```
npm install -g react-native-cli
```

## Para criar um projeto usando Expo:
```
npm i -g expo-cli
npx create-expo-app projetoUsers
```

.
Confirmar

.
Projeto criado!

.
Para rodar:
- cd projetoUsers
- code . (Para abrir o projeto com Visual Code)
- npm run android
- npm run ios # you need to use macOS to build the iOS project - use the Expo app if you need to do iOS development without a Mac
- npm run web
## Banco de Dados
.
### Conforme os requisitos Oracle 11 G (Free), Postgree (Free)
#### Não tenho o costume de inserir software pago
## Gerenciador de Pacote
- gradle versão 6.4 e 6.7 ( fase de teste )
## Fase de Configuração e testes
### Configuração nas dependências Java , Struts2, Junit 4, Spring-MVC, Hibernate, jwt Token para autenticação do Sistema, patterns Filter com Altenticações de Segurança, apache tomcat (inserindo as autenticações e usuários) e registrando os logs.
# Instalações:
:::success
### Ambiente de Dev, Esse é um Documento em constante atualização ao entrar no arquivo é só pressionar atualizar a página que está acessando está em constante crescimento e atualização
:::
.
.
.
## IDEs para Java
### Vscode (eu estou utilizando para gerar um template que não irá precisar de Ide para rodar) caso o programador queira rodar no vscode ele também conseguirá, Eclipse 2019, e o Eclipse Mars, InteliJ Comunity
### Nenhum software pago até o momento.
### O mais importante na Instalação do Java é sempre mudar na variável de ambiente a versão se possível.
.
.
.
### Está sendo utilizado dois sitemas o Windows para quem coda com máquina Windows e Linux Ubuntu 20
## Java JDK 8u202 instalação

Clicar no botão ==Next==

Clicar no botão ==Next==

Aguardar instalar

Clicar no botão ==OK==

Clicar no botão ==Próximo==

Clicar no botão ==Aguardar==

Clicar no botão ==Close==

### Adicionar a JDK na variavel de ambiente
Clicar na tecla do ==Windows==, digitar: `Editar as variáveis de ambiente do sistema`

Clicar no botão ==Variáveis de Ambiente==

Na área de variáveis do sistema, clicar no botão ==Novo==

Criar a variável `JAVA_HOME`

Clicar no botão ==Procurar no Diretório== para indicar onde está instalado o JDK e clicar no botão ==OK==

Depois de selecionado o diretório, clicar no botão ==OK==

Variável de sistema criada!

Na área de variaveis do sistema, clicar na linha Path e clicar no botão ==Editar==

Clicar no botão Novo para adicionar a nova variavel ao ==Path== do sistema

Digitar o nome da variável: `%JAVA_HOME%\bin` e clicar no botão ==OK==

Clicar no botão ==OK==

Clicar no botão ==OK==

## Para verificar a versão do Java
Clicar na tecla de `Windows + R`, digitar `cmd`

Abrirá um terminal, digitar o comando `java -version`

# Instalação do Eclipse Mars
Ir no site: https://www.eclipse.org/downloads/packages/release/mars/r/eclipse-ide-java-ee-developers e fazer o download.
*Obs: É preciso ter um JDK instalado na máquina.*

Descompactar o arquivo

Aguardar descompactar

Entrar na pasta descompactar e clicar no icone do Eclipse

Selecionar um diretório para criar o workspace

Aguardar abrir o programa

# Instalação do Intellij Community
Ir no site: https://www.jetbrains.com/pt-br/idea/download/?section=windows e fazer o download

Depois de baixado o aplicativo, clicar e instalar.

Clicar no botão Next

Clicar no botão Next

Marcar as opções marcadas na imagem para facilitar a abertura de projetos ja existentes, clicar no botão Next

Clicar no botão Install

Aguardar instalar

Reiniciar a máquina

# Instalação do Oracle XE 11g
Descompactar o arquivo

Entrar no diretório descompactado `DISK1` e clicar no icone de Setup.exe

Aguardar instalar

Clicar no botão Next

Clicar em aceitar, clicar no botão Next

Clicar no botão Next

Digitar uma senha (Usei root1), clicar no botão Next

Clicar no botão Install

Aguardar a instalação

Clicar no botão Finish

## Para iniciar o Oracle XE
Clicar na tecla do Windos e digitar `run sql`

Aguardar abrir

# Instalação do SQL Developer
Descompactar o arquivo de instalação

Clicar no arquivo executável,

Aguardar abrir

Clicar no botão Não para não importar as preferências

Aguardar

Clicar em desmarcar o envio de infromações, clicar no botão OK

SQL Developer iniciado!

# Instalação do Gradle 6.7.1
Ir no site: https://gradle.org/releases/ e fazer download do arquivo binary-only

Descompartilhar o arquivo

Copiar a pasta Gradle 6.7.1 para C:\Program Files

## Adicionar o gradle à variável de ambiente
Clicar na tecla do ==Windows==, digitar: `Editar as variáveis de ambiente do sistema`

Clicar no botão ==Variáveis de Ambiente==

Na área de variáveis do sistema, clicar no botão ==Novo==

Criar a variável `GRADLE_HOME`

Clicar no botão ==Procurar no Diretório== para indicar onde está instalado o JDK e clicar no botão ==OK==

Depois de selecionado o diretório, clicar no botão ==OK==

Variável de sistema criada!

Na área de variaveis do sistema, clicar na linha Path e clicar no botão ==Editar==

Clicar no botão Novo para adicionar a nova variavel ao ==Path== do sistema

Digitar o nome da variável: `%GRADLE_HOME%\bin` e clicar no botão ==OK==

Clicar no botão ==OK==

Clicar no botão ==OK==

## Para verificar a versão do Gradle
Clicar na tecla de `Windows + R`, digitar `cmd`

Abrirá um terminal, digitar o comando `gradle -version`

## Criação para a Variavel de Ambiente para o Tomcat
### Seu nome é CATALINA_HOME

### Criação de Ambiente de Programação ir para o diretório do seu projeto e digitar
```cmd=
gradle init
```
## Gradle Configuração com Gradle init
## Ambiente Via gradle nosso Caso
### gradle init#

### Dicas
- Digitei no Diretório na Programação
- gradle init
- pressionar 2 de application
- pressionar 3 java
- pressionar 1 para groovy
- pressionar 1 para junit 4.0
- todo esse trabalho sempre no diretório que seu programa estiver configurado, é bom ter variável de ambiente para o gradle também
- Segue as minhas variáveis de ambiente
-
### Na maquina Virtual eu configurei o gralde 6.7, na minha máquina versão 6.4

## Tomcat 9.0 Linux Ubuntu
## sudo systemctl stop jboss.service

## Tomcat 9.0 no Windows
#### Tomcat 9.0 foi uma recomendação do Felipe
- Para rodar o tomcat como usuario
- depois de start no tomcat linux UBUNTU (Caso alguém code com ubuntu)

- No windows
## C:\Users\edson\tomcat\tomcat9\bin
### Caminho do arquivo para o start no tomcat

## Configurar o tomcat-user.xml

- Inserir a configuração do usuario admin para ter permissões aos recursos de gerenciamento do tomcat ...
-
```java=
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>
</tomcat-users>
```

### Log no Apache Tomcat 9.0
#### caminho exato

#### logging.properties
#### apachetomcat\conf\logging.properties
```cmd=
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 90
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8
3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3manager.org.apache.juli.AsyncFileHandler.maxDays = 90
3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8
4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 90
4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8
## Logs
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler
# Uncomment the following lines to enable more detailed logging for specific components.
#org.apache.catalina.util.LifecycleBase.level = FINE
#org.apache.jasper.compiler.TldLocationsCache.level = FINE
#org.apache.coyote.http2.level = FINE
#org.apache.tomcat.websocket.level = FINE
```

## Log
### logging-info.html
```html=
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<title>Configuração de Log do Tomcat</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1, h2 { color: #2A6EBB; }
table { width: 100%; border-collapse: collapse; margin-top: 20px; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
code { background-color: #f4f4f4; padding: 2px 5px; border-radius: 5px; }
pre { background-color: #f4f4f4; padding: 10px; border-radius: 5px; white-space: pre-wrap; word-wrap: break-word; }
</style>
</head>
<body>
<h1>Documentação da Configuração de Log do Apache Tomcat</h1>
<p>Esta página documenta as configurações de log utilizadas no servidor Tomcat, incluindo níveis de log, handlers e formatos.</p>
<h2>Handlers de Log</h2>
<table>
<thead>
<tr>
<th>Handler</th>
<th>Nível</th>
<th>Diretório</th>
<th>Prefixo</th>
<th>Máximo de Dias</th>
<th>Codificação</th>
</tr>
</thead>
<tbody>
<tr>
<td>1catalina.org.apache.juli.AsyncFileHandler</td>
<td>FINE</td>
<td>${catalina.base}/logs</td>
<td>catalina.</td>
<td>90</td>
<td>UTF-8</td>
</tr>
<tr>
<td>2localhost.org.apache.juli.AsyncFileHandler</td>
<td>FINE</td>
<td>${catalina.base}/logs</td>
<td>localhost.</td>
<td>90</td>
<td>UTF-8</td>
</tr>
<tr>
<td>3manager.org.apache.juli.AsyncFileHandler</td>
<td>FINE</td>
<td>${catalina.base}/logs</td>
<td>manager.</td>
<td>90</td>
<td>UTF-8</td>
</tr>
<tr>
<td>4host-manager.org.apache.juli.AsyncFileHandler</td>
<td>FINE</td>
<td>${catalina.base}/logs</td>
<td>host-manager.</td>
<td>90</td>
<td>UTF-8</td>
</tr>
<tr>
<td>java.util.logging.ConsoleHandler</td>
<td>FINE</td>
<td>N/A</td>
<td>N/A</td>
<td>N/A</td>
<td>UTF-8</td>
</tr>
</tbody>
</table>
<h2>Configuração Específica de Logs</h2>
<pre>
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
</pre>
</body>
</html>
```
.
.
.
# Instalação do NodeJs 18.20.3
Ir no site https://nodejs..rg/en/download/prebuilt-binaries
Baixar a versão 18 do prebuilt binary

Descompactar o arquivo.

No diretório `C:\Program Files` criar umas pasta chamada `Node`
Copiar a pasta `node-v18.20.3-win-x64` para `C:\Program Files\Node`

## Adicionar o Nodejs a variável de ambiente
Clicar na tecla do ==Windows==, digitar: `Editar as variáveis de ambiente do sistema`

Clicar no botão ==Variáveis de Ambiente==

Na área de variáveis do sistema, clicar no botão ==Novo==

Criar a variável `NODE_HOME`

## Adicionar o gradle à variável de ambiente
Clicar na tecla do ==Windows==, digitar: `Editar as variáveis de ambiente do sistema`

Clicar no botão ==Variáveis de Ambiente==

Na área de variáveis do sistema, clicar no botão ==Novo==

Criar a variável `NODE_HOME`

Clicar no botão ==Procurar no Diretório== para indicar onde está instalado o **Nodejs** e clicar no botão ==OK==

Depois de selecionado o diretório, clicar no botão ==OK==

Variável de sistema criada!

Na área de variaveis do sistema, clicar na linha Path e clicar no botão ==Editar==

Clicar no botão Novo para adicionar a nova variavel ao ==Path== do sistema

Digitar o nome da variável: `%NODE_HOME%\bin` e clicar no botão ==OK==

Clicar no botão ==OK==

Clicar no botão ==OK==

## Para verificar a versão do Nodejs
Clicar na tecla de `Windows + R`, digitar `cmd`

Abrirá um terminal, digitar o comando `node -version`

# Instalação do PostgreSql 15.7
Ir no site https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
Fazer o download do instalador

Executar o instalador (2 cliques)

Aguardar iniciar e clicar no botão Next

Clicar no botão Next

Clicar no botão Next

Clicar no botão Next

Digitar uma senha (Usei `root1`), digitar novamente e clicar no botão Next

Clicar no botão Next

Clicar no botão Next

Clicar no botão Next

Clicar no botão Next

Aguardar instalar

Desmarcar a caixa de seleção e clicar no botão Finish

## Para iniciar o PostgreSql
Clicar ne tecla de Windows e digitar `psql`

Clicar na tecla Enter até chegar no campo de digitar a senha

Digitar a senha e entrar no banco

## Postgre Manual
```cmd=
# criacao de uma base de dados
create database copergas;
# conexao na base de dados
\c copergas
# criacao da tabela
create table usuario(id serial primary key,
name varchar (255), email varchar (255) unique,
password varchar (255), status varchar (255), token
varchar (255));
# mostrar a tabela criada (describe)
\ d usuario
# mostrar a estrura da tabela
\dt
```
### descricao da tabela

### mostra todas as tabelas e sequencias criadas

### Criacao da Variável de Ambiente do PHP 7.4

### PHP Instalado na Variável de Ambiente Laravel
:::danger
Não posso instalar nenhum programa xamp, ou wamp
:::

## Dica
### Todos os Programas todos os bancos de dados devem sem desligados e desativados até seu uso novamente
## Compatibilidade da versão do gradle
```cmd=
gradle wrapper --gradle-version 6.4
```
# Instalação Jenkins 2.452

Ir no site para baixar
https://www.jenkins.io/download/#downloading-jenkins
Baixar o instalador

.
Clicar para instalar

.
Clicar no botão Next

.
Clicar no botão Next

.
Marcar run service as LocalSystem, clicar no botão Next

.
Selecionar uma porta diferente da que o Oracle utiliza. Digitei a 8084.

.
Clicar no botão para testar a porta, clicar no botão Next

.
Selecionar onde está a pasta do JDK 11, clicar no botão Next

.
Clicar no botão Next

.
Clicar no botão Install

.
Aguardar a instalação e clicar no botão Finish

.
Ao rodar o Jenkins pela primeira vez http://localhost:8084/, ele pedirá a senha inicial.

.
Seguindo o caminho indicado: `C:\ProgramData\Jenkins\.jenkins\secrets`

.
Abri o arquivo com o bloco de notas e copiar a senha

.
Colar a senha e clicar no botão Continuar

.
Jenkins instalado com sucesso! ⭐Clicar em Install suggested plugins

.
Aguardar a instalação

.
Vamos criar o usuario:
* username: Qintess
* senha: root1
* Full name: qintess
* E-mail: re047197@qintess.com
Clicar no botão Save and continue

.
Clicar no botão save and finish

.
Start using Jenkins

.
Jenkins iniciado com sucesso! ⭐

.
## Integração do Github com o Jenkins
Criar um repositorio para o projeto.
Subir o projeto para lá.
Vou usar esse repositorio xomo exemplo: https://github.com/usuqintess/projetoreactnative
### Gerar um Token de Acesso
Vá para **Settings** no GitHub.

Vá para **Developer settings** > **Personal access tokens > Token classic**.

Clique em **Generate new token**.

**Generate new token classic**

Dê um nome para o token criado: `Jenkins Integration Token`
Selecionar a expiração: `No Expiration`
Selecione os escopos necessários, como repo para acesso ao repositório.

.

.

.
Descer a tela, clicar no botão Generate Token
Foi gerado o token! ⭐
Copie o token gerado, pois você precisará dele para configurar o Jenkins.
:::info
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
:::
:::success
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
:::

.
## Configurar o Job no Jenkins
http://localhost:8084/
Clicar em **create a job**

.
Digite o nome do Job: `projetoNativo`, clicar em **pipeline** e clicar em OK

.
Na proxima tela, marque a caixa **GitHub project**.
No campo **Project URL**, insira a URL do seu repositório GitHub: https://github.com/usuqintess/projetoreactnative

.
Descer a tela até Pipeline -> Definition, Selecionar **Pipeline ipt from SCM**. Em SCM, selecionar **Git**. Em **Repository URL**, insira a URL do seu repositório GitHub.

.
* No campo Definition, selecione **Pipeline script from SCM**.
* Em **SCM**, selecione **Git**.
* Em **Repository URL**, insira a URL do repositório GitHub.
* Clique em **Add** e selecione Jenkins.

.
Irá abrir uma janela Jenkins Credentials Provider: Jenkins, Add credentials.
* Em **Domain**, deixar Global Credentials (unrestricted)
* Em **Kind**, selecione **Secret text**.
* Em **Scope**, selecione Global(Jenkins, node, items, all)
* No campo **Secret**, cole o **token de acesso pessoal do GitHub**.
* Dê um **ID** para a credencial, como **github-token**.
* Preencha **Description** como **GitHub Personal Access Token for Jenkins**. Clique no botão Add.

.
* Em Branch Specifier, insira a branch que você quer usar, por exemplo, */main.
* No campo Script Path, insira o caminho do seu Jenkinsfile. Se ele estiver na raiz do repositório, pode ser simplesmente Jenkinsfile.
```pipeline {
agent any
environment {
GITHUB_TOKEN = credentials('github-pat')
}
stages {
stage('Checkout') {
steps {
script {
git url: 'https://github.com/usuqintess/projetoreactnative.git',
branch: 'main',
credentialsId: "${env.GITHUB_TOKEN}"
}
}
}
stage('Build') {
steps {
bat 'npm install'
}
}
stage('Test') {
steps {
bat 'npm test -- --ci --reporters=jest-junit'
}
}
stage('Archive Test Results') {
steps {
junit 'jest-junit.xml'
}
}
}
post {
always {
archiveArtifacts artifacts: '**/target/*.jar', allowEmptyArchive: true
}
}
}
```