Olá a todos,
Irei compartilhar um passo a passo completo que fiz para Instalação do NovoSGA v2.2.6 com a compilação do Painel e Triagem Web nas versões 2.1, tudo rodando em Docker no Sistema Operacional Linux Debian 12.
Verifique atualizações do Sistema
sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get clean && sudo apt dist-upgrade -y && sudo apt-get autoremove
Instale ferramentas básicas
sudo apt-get install net-tools wget git curl -y
Instale o Docker
sudo apt-get install ca-certificates curl -y
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Instalação e configuração do NovoSGA
Crie a pasta para o NovoSGA, Painel-Web e Triagem-Web
mkdir novosga-docker
mkdir novosga-docker/painel-web/
mkdir novosga-docker/triagem-web/
cd novosga-docker
Arquivo .env
Para a criação do envfile você precisará possuir algumas informações:
1. APP_SECRET
Necessita ser gerado de modo que seja uma string segura, aleatória e hexadecimal com 64 caracteres, para isto utilize o comando:
openssl rand -hex 32
Salve o código gerado, pois ele será utilizado para o APP_SECRET no .env
2. MERCURE_JWT_SECRET e MERCURE_PUBLISHER_JWT_KEY
2.1 Assim como no passo anterior a SECRET e KEY precisa ser gerado de modo que seja uma string segura, aleatória e hexadecimal com 64 caracteres, o comando para gerar é o mesmo, mas deve ser diferente do APP_SECRET, o código gerado será utilizado tanto para MERCURE_JWT_SECRET quanto para MERCURE_PUBLISHER_JWT_KEY (ambos utilizam a mesma chave).
openssl rand -hex 32
Salve o código gerado, pois ele será utilizado para MERCURE_JWT_SECRET e MERCURE_PUBLISHER_JWT_KEY no .env
3. MERCURE_JWT_TOKEN
3.1 Para gerar o TOKEN de validação, acesse o site: https://jwt.io/ e clique na opção "JWT ENCODER"
No campo HEADER preencha:
{
"alg": "HS256",
"typ": "JWT"
}
No Campo PAYLOAD preencha:
{
"mercure": {
"publish": ["*"]
}
}
No Campo Sign JWT: Secret preencha com o código gerado para MERCURE_JWT_SECRET
:
Copie e salve o código gerado, ele será utilizado no .env para MERCURE_JWT_TOKEN
Agora que você já gerou todas as informações necessárias, crie o arquivo ENV
nano .env
Copie e Cole o conteúdo abaixo e substitua as informações geradas nos passos anteriores e modifique as informações necessárias
DB_ROOT_PASSWORD=SuaSenhaROOTdoBancoDeDados123
DB_NAME=novosgaDB
DB_USER=novosga
DB_PASSWORD=SenhaDoUsuáriodoBanco
APP_ENV=prod
APP_SECRET=<cole_aqui_a_chave_aleatória_segura_criada_para:APP_SECRET>
MERCURE_URL=http://mercure:3000/.well-known/mercure
MERCURE_PUBLIC_URL=http://<SEU_HOST_ou_IP_do_SERVIDOR>:3000/.well-known/mercure
MERCURE_JWT_TOKEN=<insira_o_TOKEN_gerado_no_JWT.IO>
MERCURE_JWT_SECRET=<cole_aqui_o_SECRET/KEY_gerado>
MERCURE_PUBLISHER_JWT_KEY=<cole_aqui_o_SECRET/KEY_gerado>
** IMPORTANTE: O arquivo env não pode conter espaços ao final de cada linha, bem como não pode conter <enter> entre as linhas**
Para salvar e sair do nano utilize:
CTRL + O
CRTL + X
Próximo arquivo será o docker-compose.yml
Crie o arquivo
nano docker-compose.yml
Cole o conteúdo abaixo no arquivo, você não precisará alterar nada nele, todas as variáveis serão preenchidas com base no arquivo .env criado anteriormente.
services:
db:
image: mariadb:10.6
container_name: novosga-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
TZ: 'America/Sao_Paulo'
volumes:
- db_data:/var/lib/mysql
networks:
- novosga_net
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
mercure:
image: novosga/mercure:v0.11
container_name: novosga-mercure
restart: always
ports:
- "3000:3000"
networks:
- novosga_net
environment:
SERVER_NAME: ":3000"
MERCURE_JWT_SECRET: ${MERCURE_JWT_SECRET}
MERCURE_PUBLISHER_JWT_KEY: ${MERCURE_JWT_SECRET}
MERCURE_EXTRA_DIRECTIVES: "allow_anonymous 1; anonymous 1; cors_origins *"
TZ: 'America/Sao_Paulo'
novosga:
image: novosga/novosga:2.2.6
restart: always
container_name: novosga
env_file:
- .env
depends_on:
db:
condition: service_healthy
mercure:
condition: service_started
ports:
- "80:80"
networks:
- novosga_net
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf
- ./painel-web:/var/www/html/public/painel
- ./triagem-web:/var/www/html/public/triagem
environment:
APP_ENV: ${APP_ENV}
APP_SECRET: ${APP_SECRET}
DATABASE_URL: "mysql://${DB_USER}:${DB_PASSWORD}@db:3306/${DB_NAME}?charset=utf8mb4&serverVersion=10.6"
TZ: 'America/Sao_Paulo'
APP_LANGUAGE: 'pt_BR'
MERCURE_PUBLISH_URL: ${MERCURE_URL}
MERCURE_PUBLIC_URL: ${MERCURE_PUBLIC_URL}
MERCURE_JWT_TOKEN: ${MERCURE_JWT_TOKEN}
MERCURE_JWT_SECRET: ${MERCURE_JWT_SECRET}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/login"]
interval: 30s
timeout: 5s
retries: 5
volumes:
db_data:
networks:
novosga_net:
driver: bridge
Para salvar e sair do nano utilize:
CTRL + O
CRTL + X
Por último crie o arquivo default.conf ele será responsável por configurar as rotas internas do sistema no Nginx
nano default.conf
Copie e Cole o conteúdo abaixo, da mesma forma, não será necessário alterar nada no arquivo.
server {
listen [::]:80 default_server;
listen 80 default_server;
server_name _;
client_max_body_size 100M;
client_body_buffer_size 128k;
sendfile off;
tcp_nodelay on;
absolute_redirect off;
root /var/www/html/public;
location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php$is_args$args;
}
# Mapeamento para Painel-Web
location /painel {
alias /var/www/html/public/painel/;
index index.html;
try_files $uri $uri/ /index.html;
}
# Mapeamento para Triagem-Web
location /triagem {
alias /var/www/html/public/triagem/;
index index.html;
try_files $uri $uri/ /index.html;
}
# Pass the PHP scripts to PHP-FPM listening on php-fpm.sock
location ~ ^/index\.php(/|$) {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
internal;
}
# return 404 for all other php files not matching the front controller
# this prevents access to other php files you don't want to be accessible.
location ~ \.php$ {
return 404;
}
# Set the cache-control headers on assets to cache for 5 days
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 5d;
}
# Deny access to . files, for security
location ~ /\. {
log_not_found off;
deny all;
}
# Allow fpm ping and status from localhost
location ~ ^/(fpm-status|fpm-ping)$ {
access_log off;
allow 127.0.0.1;
deny all;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm.sock;
}
}
Para salvar e sair do nano utilize:
CTRL + O
CRTL + X
Instalar as dependências e ferramentas para Build do Painel Web e Triagem Web
sudo apt update
sudo apt install -y build-essential wget curl git zlib1g-dev libssl-dev \
libbz2-dev libreadline-dev libsqlite3-dev libncurses5-dev libffi-dev xz-utils
cd /tmp
wget https://nodejs.org/dist/v18.19.0/node-v18.19.0-linux-x64.tar.xz
tar -xf node-v18.19.0-linux-x64.tar.xz
sudo mv node-v18.19.0-linux-x64 /opt/nodejs
export PATH=/opt/nodejs/bin:$PATH
source ~/.bashrc
cd /tmp
wget https://nodejs.org/dist/v12.22.12/node-v12.22.12-linux-x64.tar.xz
tar -xf node-v12.22.12-linux-x64.tar.xz
sudo mv node-v12.22.12-linux-x64 /opt/nodejs12
export PATH=/opt/nodejs12/bin:$PATH
sudo rm -rf /opt/nodejs/lib/node_modules/npm
sudo ln -sf /opt/nodejs/bin/node /usr/bin/node
cd /tmp
curl -L https://registry.npmjs.org/npm/-/npm-9.2.0.tgz -o npm-9.2.0.tgz
tar -xzf npm-9.2.0.tgz
cd package
sudo /opt/nodejs/bin/node bin/npm-cli.js install -g .
cd /tmp
wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz
tar -xzf Python-2.7.18.tgz
cd Python-2.7.18
./configure --prefix=/opt/python2.7
make -j$(nproc)
sudo make install
sudo ln -sf /opt/python2.7/bin/python2 /usr/local/bin/python
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
sudo /opt/python2.7/bin/python2 get-pip.py
PAINEL-APP v2.1
Clone o diretório oficial do Painel-App
git clone --branch v2.1 https://github.com/novosga/panel-app.git
cd panel-app
npm ci
npm run build:web
Mova ou Copie os arquivos gerados no build:web, (eles estão na pasta dist/web) para a pasta novosga-docker/painel-web/
TRIAGE-APP v2.1
Clone o diretório oficial do Triage-App
git clone --branch v2.1 https://github.com/novosga/triage-app.git
cd triage-app
npm install -g yarn
rm -rf node_modules package-lock.json yarn.lock
yarn install
yarn build:web
Mova ou Copie os arquivos gerados no build:web, (eles estão na pasta dist/web) para a pasta novosga-docker/triagem-web/
Para levantar os Conteiners via docker execute
sudo docker compose up -d
Criar dados iniciais do Sistema
sudo docker ps
sudo docker exec -it novosga sh
Execute dentro do contêiner "novosga"
php bin/console doctrine:migrations:migrate --no-interaction
php bin/console novosga:install
exit
** Durante o passo php bin/console novosga:install, você irá criar os dados de acesso inicial do sistema, após isto você poderá criar/alterar estas configurações pela interface do NovoSGA**
Isto irá levantar o NovoSGA na versão atual 2.2.6, Triagem Web na versão 2.1 e Painel Web na versão 2.1 acessíveis em:
NovoSGA: http://<seu_host> ou http://<ip_servidor>
Painel: http://<seu_host>/painel ou http://<ip_servidor>/painel
Triagem: http://<seu_host>/triagem ou http://<ip_servidor>/triagem
Pronto, agora com todos os sistemas levantados, é possível fazer as demais configurações necessarias para a configuração do Triagem e do Painel.
Com estes passos eu consegui instalar e configurar corretamente o NovoSGA 2.2.6, e ainda realizar os Builds do Painel e Triagem na versão 2.1, sem a necessidade de modificações nos fontes clonados.
No meu ambiente a única "modificação" foi na questão da persistência das configurações do Painel e Triagem, sendo injetados através de um .js e um .json, que se for de interesse posso descrever neste modelo de passo-a-passo.
Quanto à modificações de interface, integração com outros Painéis/Triagem ou mesmo os builds de executáveis (Windows), ou mesmo a implantação em ambiente Windows, não saberei como proceder.
Espero ter colaborado de alguma forma, um abraço
Oberdan Gomes