-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Upload do SEI IA no Github em Wed Oct 30 12:50:06 PM -03 2024
- Loading branch information
Ennio Bastos
committed
Oct 30, 2024
0 parents
commit e97b15e
Showing
593 changed files
with
79,940 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
version: 2 | ||
updates: | ||
- package-ecosystem: "pip" | ||
directory: "/" | ||
schedule: | ||
interval: "daily" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
# Byte-compiled / optimized / DLL files\ | ||
deletar.sh | ||
env_files/assistente.env | ||
manager_env | ||
airflow_proj_dir/dags | ||
copiar* | ||
debug_airflow.py | ||
.vscode | ||
*.joblib | ||
__pycache__/ | ||
*.py[cod] | ||
*$py.class | ||
id_rsa | ||
logs/ | ||
plugins/ | ||
storage/ | ||
# C extensions | ||
*.so | ||
# Distribution / packaging | ||
.Python | ||
build/ | ||
develop-eggs/ | ||
dist/ | ||
downloads/ | ||
eggs/ | ||
.eggs/ | ||
lib/ | ||
lib64/ | ||
parts/ | ||
sdist/ | ||
var/ | ||
wheels/ | ||
share/python-wheels/ | ||
*.egg-info/ | ||
.installed.cfg | ||
*.egg | ||
MANIFEST | ||
|
||
# PyInstaller | ||
# Usually these files are written by a python script from a template | ||
# before PyInstaller builds the exe, so as to inject date/other infos into it. | ||
*.manifest | ||
*.spec | ||
|
||
# Installer logs | ||
pip-log.txt | ||
pip-delete-this-directory.txt | ||
|
||
# Unit test / coverage reports | ||
htmlcov/ | ||
.tox/ | ||
.nox/ | ||
.coverage | ||
.coverage.* | ||
.cache | ||
nosetests.xml | ||
coverage.xml | ||
*.cover | ||
.hypothesis/ | ||
.pytest_cache/ | ||
|
||
# Translations | ||
*.mo | ||
*.pot | ||
|
||
# Django stuff: | ||
*.log | ||
local_settings.py | ||
db.sqlite3 | ||
|
||
# Flask stuff: | ||
instance/ | ||
.webassets-cache | ||
|
||
# Scrapy stuff: | ||
.scrapy | ||
|
||
# Sphinx documentation | ||
docs/_build/ | ||
|
||
# PyBuilder | ||
target/ | ||
|
||
# Jupyter Notebook | ||
.ipynb_checkpoints | ||
|
||
# IPython | ||
profile_default/ | ||
ipython_config.py | ||
|
||
# pyenv | ||
.python-version | ||
|
||
# celery beat schedule file | ||
celerybeat-schedule | ||
|
||
# SageMath parsed files | ||
*.sage.py | ||
|
||
# Environments | ||
.env | ||
.venv | ||
env/ | ||
venv/ | ||
ENV/ | ||
env.bak/ | ||
venv.bak/ | ||
|
||
# Spyder project settings | ||
.spyderproject | ||
.spyproject | ||
|
||
# Rope project settings | ||
.ropeproject | ||
|
||
# mkdocs documentation | ||
/site | ||
|
||
# mypy | ||
.mypy_cache/ | ||
.dmypy.json | ||
dmypy.json | ||
|
||
# Pyre type checker | ||
.pyre/ | ||
dags/.keep | ||
logs/.keep | ||
plugins/.keep | ||
scripts_airflow/cli_dags_to_queue_airflow.sh | ||
|
||
# Autodeployer status | ||
autodeployer/status/ | ||
autodeployer/shared | ||
|
||
# Docker files | ||
|
||
|
||
upload_seiia.sh |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,156 @@ | ||
# Módulo SEI IA - Aplicações de backend | ||
|
||
## Requisitos | ||
- Requisito Mínimo é o SEI 4... | ||
- Docker Community Edition (versão >= 27.0.3) | ||
- Hardware: CPU Intel(R) Xeon(R) 2.10GHz / RAM 128G | ||
|
||
## Orientações preliminares | ||
A instalação das aplicações de backend do módulo SEI IA foi projetada tendo como objetivo principal a simplificação máxima do processo, automatizando todos os procedimentos possíveis. Ainda assim, há alguns procedimentos que, ou por segurança ou por estarem relacionados ao ambiente de instalação, necessitam ser manualmente realizados pelo usuário. | ||
|
||
Sendo assim, sugere-se fortemente que, antes de iniciar a instalação do SEI IA, seja feita uma leitura integral desse manual, pois dúvidas que possam surgir no início da instalação podem ser esclarecidas pela leitura completa das orientações que constam nesse manual. | ||
|
||
## Procedimentos para Instalação | ||
|
||
### 1. Configuração de Rede do Docker | ||
O docker utiliza como default a faixa de IP 172.17.\*.\*. Considere se o seu ambiente de rede também utiliza esta faixa de IPs para outro propósito. Se for esse o caso, faz-se necessária a utilização de uma faixa de IPs dedicadas para os containers docker, com objetivo de evitar erros de roteamento causados pela sobreposição de endereços IP. | ||
|
||
Caso o bloco de IPs default do Docker entre em conflito com a sua rede, sugerimos usar outra subrede para os containers do SEI IA. Poderia-se usar, por exemplo, o bloco 192.168.144.0/24, pois essa subnet permite utilizar até 252 containers, mais que suficientes para as aplicações do SEI IA. | ||
|
||
A restrição da subnet deve ser feita através da criação de user defined bridge network para cada docker host. Também sugerimos a remoção da default bridge, como forma de evitar o uso de uma bridge fora da subnet, dado que novos containers adotam a default bridge por padrão se uma rede não for especificada e se a default bridge estiver disponível. | ||
|
||
Uma vez definida a subrede a ser utilizada para o SEI IA, o próximo passo é a criação da rede `docker-host-bridge`. Segue um exemplo do comando a ser executado, considerando que o bloco de rede a ser usado é o **192.168.144.0/24**: | ||
|
||
```bash | ||
docker network create --driver=bridge --subnet=192.168.144.0/24 --ip-range=192.168.144.0/24 --gateway=192.168.144.1 docker-host-bridge | ||
``` | ||
|
||
É importante certificar-se de que a rede `docker-host-bridge` foi criada, o que pode ser feito com o comando `docker network ls`, como poder ser visto abaixo: | ||
|
||
``` | ||
$ docker network ls | ||
NETWORK ID NAME DRIVER SCOPE | ||
1a9d40cca392 docker-host-bridge bridge local | ||
7cee8287f256 host host local | ||
0355f600e1d7 none null local | ||
``` | ||
|
||
|**IMPORTANTE**| | ||
|--| | ||
| A criação da rede `docker-host-bridge` é um requisito **obrigatório** para a instalação do SEI IA.| | ||
|
||
### 3. Criação do usuário de instalação do SEI IA | ||
É necessário criar um usuário específico para a instalação e atualização do módulo SEI IA. | ||
Sugerimos usar o nome `seiia` para esse usuário. É obrigatório que o usuário criado tenha acesso de administrador no Docker, o que geralmente é realizado ao definir-se que o usuário de instalação faz parte do grupo `docker` no momento da sua criação. | ||
Para criar o usuário `seiia` e colocá-lo no grupo `docker` você pode usar o comando abaixo: | ||
```bash | ||
useradd -G docker seiia | ||
``` | ||
|
||
**Observação**: o comando `useradd` somente pode ser executado por usuários administradores. Caso você não tenha accesso de administrador, fale com a sua equipe de TI para obter mais informações sobre como proceder para criar o usuário de instalação do SEI IA. | ||
|
||
### 4. **Fazer download do projeto SEI IA** | ||
Os comandos para o download do projeto SEI IA devem ser realizados pelo usuário de instalação (criado no passo anterior)! | ||
|
||
```bash | ||
su seiia | ||
cd /opt | ||
git clone https://github.com/anatelgovbr/sei-ia.git | ||
cd sei-ia | ||
``` | ||
|
||
**Observação**: embora não seja obrigatório fazer o download do SEI IA na pasta `/opt`, sugerimos **fortemente** que esse padrão seja seguido. | ||
|
||
### 5. Configurações do Ambiente | ||
|
||
| **IMPORTANTE**| | ||
|--| | ||
| É obrigatório que o arquivo `security.env` esteja **totalmente** configurado para que a instalação possa ser realizada! | | ||
|
||
Editar e preencher no arquivo `env_files/security.env` as variáveis de ambiente de acesso ao banco de dados do SEI e configurações adicionais. | ||
|
||
| Variável | Descrição | | ||
|-----------------------------------|-------------------------------------------------------------------------------------| | ||
| `ENVIRONMENT` | Define o ambiente de execução da aplicação. Valores suportados: dev \| homol \| prod| | ||
| `GID_DOCKER`² | GID do grupo Docker no host². | | ||
| `DB_SEI_USER` | Usuário do banco de dados do SEI com permissão de leitura. | | ||
| `DB_SEI_PWD` | Senha do usuário do banco de dados do SEI com permissão de leitura. | | ||
| `DB_SEI_HOST` | Nome do host do banco de dados do SEI. | | ||
| `DB_SEI_DATABASE` | Nome do banco de dados do SEI. | | ||
| `DB_SEI_PORT` | Porta do banco de dados do SEI. | | ||
| `DB_SEI_SCHEMA` | Esquema do banco de dados do SEI. | | ||
| `DATABASE_TYPE` | Tipo de banco de dados do SEI. Valores suportados: mysql \| mssql \| oracle | | ||
| `SEI_SOLR_ADDRESS` | Endereço do servidor Solr do SEI. | | ||
| `SEI_SOLR_CORE` | Core do servidor Solr utilizado para armazenar os documentos do SEI. | | ||
| `SEI_IAWS_URL` | URL de acesso à API IAWS do SEI. | | ||
| `SEI_IAWS_KEY` | Chave de acesso à API IAWS do SEI. | | ||
| `POSTGRES_USER` | Usuário do banco de dados Postgres da aplicação. | | ||
| `POSTGRES_PASSWORD` | Senha do banco de dados Postgres da aplicação. | | ||
| `ASSISTENTE_PGVECTOR_USER` | **Não altere essa variável, pois ela já está devidamente preenchida.** | | ||
| `ASSISTENTE_PGVECTOR_PWD` | **Não altere essa variável, pois ela já está devidamente preenchida.** | | ||
| `OPENAI_API_VERSION` | Versão da API da OpenAI. | | ||
| `AZURE_OPENAI_ENDPOINT` | Endpoint da Azure OpenAI. | | ||
| `AZURE_OPENAI_ENDPOINT_GPT4o` | Endpoint da API na Azure OpenAI para o modelo GPT-4o. | | ||
| `AZURE_OPENAI_KEY_GPT4o` | Chave de conexão à API da Azure OpenAI para o modelo GPT-4o. | | ||
| `GPT_MODEL_4o_128k` | Nome do modelo GPT-4o 128K na Azure OpenAI. | | ||
| `AZURE_OPENAI_ENDPOINT_GPT4o_mini`| Endpoint da API na Azure OpenAI para o modelo GPT-4o mini. | | ||
|
||
¹ Caso você tenha dúvidas sobre o preenchimento mais apropriada para o seu caso, sugerimos conversar com sua equipe de TI sobre essa questão. Caso tenha somente um ambiente de execução para o SEI IA, então use a opção **prod**. | ||
² **DICA**: se a configuração default do Docker não foi alterada, então você pode usar esse comando para obter o GID do docker `grep "^docker:" /etc/group | cut -d: -f3` | ||
|
||
|
||
### 6. Subir a aplicação | ||
|
||
Uma vez configurado o ambiente (passo anterior), a instalação será realizada integralmente ao rodar o script `deploy.sh`, como pode ser visto abaixo. | ||
|
||
| **IMPORTANTE**| | ||
|--| | ||
| O comando abaixo deve ser executado pelo usuário de instalação (`seiia`) à partir da pasta de instalação (`/opt/sei-ia`)! | | ||
|
||
```bash | ||
sh ./deploy-externo.sh | ||
``` | ||
|
||
O script `deploy-externo.sh` executa todos os comandos necessários para subir as aplicações necessárias (backend) para o módulo SEI IA. | ||
|
||
Você pode verificar o status das aplicações rodando o comando abaixo: | ||
|
||
```bash | ||
docker ps --format "table {{.Names}}\t{{.Status}}" | ||
``` | ||
|
||
O comando acima deverá retornar algo semelhante ao texto abaixo: | ||
```bash | ||
NAMES STATUS | ||
sei_ia-langfuse_assistente-1 Up 2 minutes | ||
sei_ia-nginx_assistente-1 Up 2 minutes | ||
sei_ia-pgvector_assistente_pd-1 Up 2 minutes (healthy) | ||
sei_ia-api_assistente-1 Up 2 minutes | ||
sei_ia-api_sei-1 Up 2 minutes (healthy) | ||
sei_ia-airflow-worker-2 Up 2 minutes (healthy) | ||
sei_ia-airflow-scheduler-pd-1 Up 2 minutes (healthy) | ||
sei_ia-airflow-worker-3 Up 2 minutes (healthy) | ||
sei_ia-airflow-triggerer-pd-1 Up 2 minutes (healthy) | ||
sei_ia-airflow-worker-1 Up 2 minutes (healthy) | ||
sei_ia-airflow-webserver-pd-1 Up 2 minutes (healthy) | ||
sei_ia-jobs_api-1 Up 2 minutes | ||
sei_ia-airflow_postgres-pd-1 Up 3 minutes (healthy) | ||
sei_ia-rabbitmq-pd-1 Up 3 minutes (healthy) | ||
sei_ia-pgvector_pd-1 Up 13 minutes (healthy) | ||
sei_ia-solr_pd-1 Up 13 minutes (healthy) | ||
|
||
``` | ||
|
||
|**IMPORTANTE**| | ||
|--| | ||
| Pode acontecer que algumas aplicações ainda não estejam com status `healthy`, dependendo do tempo em que elas estão UP. Geralmente, de 2 a 4 minutos após o fim do script `deploy.sh`, todas as aplicações estarão no status `healthy`.| | ||
|
||
### 7. Backup periódico dos dados das aplicações do SEI IA | ||
|
||
Um ponto importante em relação ao uso do módulo SEI IA é a realização de backup periódico, principalmente dos bancos de dados utilizados pela aplicações. | ||
Todos os dados das aplicações de backend do módulo SEI IA são armazenados em volumes Docker e, via de regra, estão localizados na pasta `/var/lib/docker/volume`. | ||
O comando abaixo lista os volumes relacionados às aplicações de backend do módulo SEI IA: | ||
```bash | ||
docker volume ls|grep "^sei_ia-" | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# arquivo intencionalmente vazio | ||
# o arquivo original está na pasta jobs/configs do projeto jobs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
FROM python:3.9-alpine | ||
LABEL Description="AutoDeployer" | ||
|
||
RUN apk update | ||
|
||
# Instala o bash e outras dependências necessárias | ||
RUN apk add bash jq git curl openssh docker docker-cli-compose dcron logrotate su-exec | ||
|
||
ADD . /app | ||
|
||
ARG NB_USER | ||
ARG NB_UID | ||
ARG GID_DOCKER | ||
|
||
# Corrigindo as interpolações para usar corretamente as variáveis | ||
RUN addgroup -g "${GID_DOCKER}" docker_host | ||
RUN adduser -D -u "${NB_UID}" "${NB_USER}" | ||
RUN addgroup "${NB_USER}" docker_host | ||
|
||
RUN mkdir -p /home/${NB_USER}/.ssh | ||
RUN chown -R ${NB_USER} /home/${NB_USER}/.ssh | ||
RUN chmod 700 /home/${NB_USER}/.ssh | ||
|
||
RUN chmod -R 777 /app/ | ||
RUN chown -R ${NB_USER} /app | ||
|
||
# Criando pastas para o log do autodeployer | ||
RUN mkdir -p /var/log/autodeployer | ||
RUN chown ${NB_USER} /var/log/autodeployer | ||
|
||
# Cria a configuração do logrotate para rotacionar o autodeployer.log | ||
RUN echo -e "/var/log/autodeployer/autodeployer.log {\n\ | ||
weekly\n\ | ||
missingok\n\ | ||
rotate 4\n\ | ||
compress\n\ | ||
delaycompress\n\ | ||
create 0640 ${NB_USER} root\n\ | ||
}\n" > /etc/logrotate.d/autodeployer | ||
|
||
# Ativa o suid bit | ||
RUN chmod u+s /sbin/su-exec | ||
|
||
USER ${NB_USER} | ||
|
||
WORKDIR /app | ||
RUN python -m pip install --upgrade pip && pip install -e . | ||
|
||
SHELL ["/bin/bash", "-c"] | ||
|
||
CMD su-exec root crond -L /var/log/cron.log && umask 000 && exec /bin/bash -c "python3 -m app_monitor" |
Oops, something went wrong.