├── infra ├── jenkins │ └── comminganytime.txt ├── orquestrators │ ├── rancher-cattle │ │ └── comminganytime.txt │ └── rancher-kubernetes │ │ ├── topublish │ │ └── .gitkeep │ │ └── templates │ │ ├── secrets-template.yaml │ │ ├── ingress-template.yaml │ │ ├── pvc-template.yaml │ │ ├── jobs-template.yaml │ │ ├── configmaps-template.yaml │ │ ├── statefullsets-template.yaml │ │ └── deploys-svc-template.yaml ├── tests │ ├── Selenium │ │ └── PythonExported │ │ │ ├── teste.pdf │ │ │ ├── test_suiteBasics-original.py │ │ │ └── test_suiteBasics.py │ └── README.md ├── docs │ ├── README.md │ ├── VideoTutoriais.md │ ├── duploSEI │ │ └── duplosei.md │ └── Instrucoes.md ├── generatebase64.sh ├── certificado.pem └── README.md ├── containers ├── app │ ├── app-prd │ │ └── comminganytime.txt │ ├── app-dev │ │ ├── assets │ │ │ ├── conf │ │ │ │ ├── info.php │ │ │ │ ├── xdebug.ini │ │ │ │ ├── cron.conf │ │ │ │ ├── sei.ini │ │ │ │ ├── sei.conf │ │ │ │ └── deflate.conf │ │ │ ├── scripts-e-automatizadores │ │ │ │ ├── ConfiguracaoSEI.php │ │ │ │ ├── command.sh │ │ │ │ └── ConfiguracaoSip.php │ │ │ └── install.sh │ │ └── Dockerfile │ ├── app-ci │ │ ├── assets │ │ │ ├── scripts-e-automatizadores │ │ │ │ ├── modulos │ │ │ │ │ ├── mod-sei-estatisticas │ │ │ │ │ │ └── sei_gov_configurar_ambiente.php │ │ │ │ │ ├── mod-sei-resposta │ │ │ │ │ │ └── mod-sei-resposta.php │ │ │ │ │ └── mod-sei-pen │ │ │ │ │ │ └── mod-sei-pen.sh │ │ │ │ ├── openldap │ │ │ │ │ ├── sip-config-openldap-desligar.php │ │ │ │ │ └── sip-config-openldap.php │ │ │ │ ├── clone-modules.sh │ │ │ │ └── misc │ │ │ │ │ └── enableservicePD.php │ │ │ ├── install.sh │ │ │ └── conf │ │ │ │ ├── sei.ini │ │ │ │ ├── sei.conf │ │ │ │ ├── ConfiguracaoSip.php │ │ │ │ └── ConfiguracaoSEI.php │ │ └── Dockerfile │ ├── app-ci-agendador │ │ ├── Dockerfile │ │ └── assets │ │ │ ├── install.sh │ │ │ └── conf │ │ │ └── mod-pen │ │ │ └── supervisor.ini.template │ └── app-base │ │ ├── Dockerfile │ │ └── assets │ │ ├── copy-packages.sh │ │ └── install.sh ├── solr │ ├── assets │ │ ├── command.sh │ │ ├── solr8sei │ │ │ ├── sei-cores-8.2.0 │ │ │ │ ├── sei-protocolos │ │ │ │ │ └── core.properties │ │ │ │ ├── sei-publicacoes │ │ │ │ │ └── core.properties │ │ │ │ └── sei-bases-conhecimento │ │ │ │ │ ├── core.properties │ │ │ │ │ └── conf │ │ │ │ │ └── schema.xml │ │ │ ├── solr.service │ │ │ ├── log4j.properties │ │ │ └── sei-solr-8.2.0.sh │ │ └── install.sh │ └── Dockerfile ├── databases │ ├── mariadb │ │ ├── assets │ │ │ ├── pos-install.sql │ │ │ ├── entrypoint.sh │ │ │ ├── pre-install.sql │ │ │ └── my.cnf │ │ └── Dockerfile │ ├── oracle │ │ ├── assets │ │ │ ├── sei-config.sql │ │ │ ├── sip-config.sql │ │ │ ├── pre-install.sql │ │ │ └── install.sh │ │ └── Dockerfile │ ├── mariadb-base │ │ └── Dockerfile │ ├── oracle-base │ │ └── Dockerfile │ ├── sqlserver-base │ │ └── Dockerfile │ └── sqlserver │ │ ├── assets │ │ ├── install.sh │ │ └── restore.sql │ │ └── Dockerfile ├── openldap │ ├── openldap │ │ ├── files │ │ │ ├── 50-grupo.ldif │ │ │ └── 51-usuario.ldif │ │ └── Dockerfile │ └── openldap-base │ │ └── Dockerfile ├── haproxy │ ├── haproxy │ │ ├── Dockerfile │ │ └── files │ │ │ └── cert0.pem │ └── haproxy-base │ │ └── Dockerfile ├── phpmemcachedadmin │ ├── phpmemcachedadmin │ │ ├── Dockerfile │ │ ├── start.sh │ │ └── Memcache.php │ └── phpmemcachedadmin-base │ │ └── Dockerfile ├── jod │ ├── assets │ │ ├── entrypoint.sh │ │ └── install.sh │ └── Dockerfile ├── base-centos │ └── Dockerfile ├── dbadminer │ └── Dockerfile ├── memcached │ └── Dockerfile ├── base-rockylinux │ └── Dockerfile ├── phpldapadmin │ └── Dockerfile ├── mailcatcher │ └── Dockerfile ├── envcontainers.env.modelo ├── README.md └── tests │ ├── envcontainers-test.env.modelo │ └── Makefile ├── dev ├── tests │ ├── Selenium │ │ └── PythonExported │ │ │ ├── teste.pdf │ │ │ └── test_suiteBasics.py │ └── Makefile ├── envs │ ├── env-oracle.env │ ├── env-mysql.env │ └── env-sqlserver.env ├── docker-compose.yml ├── Makefile └── README.md ├── .github └── workflows │ ├── issues-para-projeto.yml │ └── tests.yml ├── .gitignore └── README.md /infra/jenkins/comminganytime.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/app/app-prd/comminganytime.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /infra/orquestrators/rancher-cattle/comminganytime.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /infra/orquestrators/rancher-kubernetes/topublish/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/app/app-dev/assets/conf/info.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/solr/assets/command.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | /opt/solr/bin/solr start -f -force -p 8983 4 | -------------------------------------------------------------------------------- /containers/databases/mariadb/assets/pos-install.sql: -------------------------------------------------------------------------------- 1 | 2 | USE sei; 3 | 4 | GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; 5 | -------------------------------------------------------------------------------- /dev/tests/Selenium/PythonExported/teste.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengovbr/super-docker/HEAD/dev/tests/Selenium/PythonExported/teste.pdf -------------------------------------------------------------------------------- /infra/tests/Selenium/PythonExported/teste.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengovbr/super-docker/HEAD/infra/tests/Selenium/PythonExported/teste.pdf -------------------------------------------------------------------------------- /containers/openldap/openldap/files/50-grupo.ldif: -------------------------------------------------------------------------------- 1 | dn: cn=grupo1,dc=pen,dc=gov,dc=br 2 | objectClass: top 3 | objectClass: posixGroup 4 | gidNumber: 678 -------------------------------------------------------------------------------- /containers/haproxy/haproxy/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG IMAGEM_BASE=supergovbr/haproxy-base:latest 2 | 3 | FROM ${IMAGEM_BASE} 4 | 5 | ADD files/cert0.pem /mycertexample/ 6 | -------------------------------------------------------------------------------- /containers/databases/oracle/assets/sei-config.sql: -------------------------------------------------------------------------------- 1 | update orgao set sigla='ABC', descricao='ORGAO ABC' where id_orgao=0; 2 | delete from auditoria_protocolo; 3 | 4 | EXIT; 5 | -------------------------------------------------------------------------------- /containers/solr/assets/solr8sei/sei-cores-8.2.0/sei-protocolos/core.properties: -------------------------------------------------------------------------------- 1 | name=sei-protocolos 2 | config=solrconfig.xml 3 | schema=schema.xml 4 | dataDir=/dados/sei-protocolos/conteudo -------------------------------------------------------------------------------- /containers/databases/mariadb/assets/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Leberado acesso irrestrito à base para uso em desenvolvimento 4 | /usr/bin/mysqld_safe --bind-address=0.0.0.0 5 | -------------------------------------------------------------------------------- /containers/openldap/openldap/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG IMAGEM_BASE=supergovbr/openldap-base:latest 2 | 3 | FROM ${IMAGEM_BASE} 4 | 5 | ADD files/* /container/service/slapd/assets/config/bootstrap/ldif/ 6 | -------------------------------------------------------------------------------- /containers/solr/assets/solr8sei/sei-cores-8.2.0/sei-publicacoes/core.properties: -------------------------------------------------------------------------------- 1 | name=sei-publicacoes 2 | config=solrconfig.xml 3 | schema=schema.xml 4 | dataDir=/dados/sei-publicacoes/conteudo -------------------------------------------------------------------------------- /containers/app/app-dev/assets/scripts-e-automatizadores/ConfiguracaoSEI.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengovbr/super-docker/HEAD/containers/app/app-dev/assets/scripts-e-automatizadores/ConfiguracaoSEI.php -------------------------------------------------------------------------------- /containers/solr/assets/solr8sei/sei-cores-8.2.0/sei-bases-conhecimento/core.properties: -------------------------------------------------------------------------------- 1 | name=sei-bases-conhecimento 2 | config=solrconfig.xml 3 | schema=schema.xml 4 | dataDir=/dados/sei-bases-conhecimento/conteudo -------------------------------------------------------------------------------- /containers/phpmemcachedadmin/phpmemcachedadmin/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG IMAGEM_BASE=supergovbr/phpmemcachedadmin-base:latest 2 | 3 | FROM ${IMAGEM_BASE} 4 | 5 | ADD Memcache.php /usr/share/nginx/html/Config/ 6 | ADD ./start.sh /start.sh -------------------------------------------------------------------------------- /containers/jod/assets/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | /usr/bin/soffice --headless --nologo --nofirststartwizard --accept="socket,host=127.0.0.1,port=8100;urp" & > /dev/null 2>&1 4 | /opt/jodconverter-tomcat-2.2.2/bin/catalina.sh run 5 | -------------------------------------------------------------------------------- /containers/base-centos/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # SO Centos Oficial - apenas redundancia do repo oficial 3 | ################################################################################ 4 | 5 | FROM centos:7 -------------------------------------------------------------------------------- /containers/app/app-ci/assets/scripts-e-automatizadores/modulos/mod-sei-estatisticas/sei_gov_configurar_ambiente.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengovbr/super-docker/HEAD/containers/app/app-ci/assets/scripts-e-automatizadores/modulos/mod-sei-estatisticas/sei_gov_configurar_ambiente.php -------------------------------------------------------------------------------- /containers/dbadminer/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # dbadminer - apenas redundancia do repo original 3 | ################################################################################ 4 | 5 | FROM dockette/adminer:full -------------------------------------------------------------------------------- /containers/memcached/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Memcached Oficial - apenas redundancia do repo oficial 3 | ################################################################################ 4 | 5 | FROM memcached:latest -------------------------------------------------------------------------------- /containers/haproxy/haproxy-base/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # HAPROXY - apenas redundancia do repo original 3 | ################################################################################ 4 | 5 | FROM dockercloud/haproxy -------------------------------------------------------------------------------- /containers/base-rockylinux/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # SO Rockylinux Oficial - apenas redundancia do repo oficial 3 | ################################################################################ 4 | 5 | FROM rockylinux:8 -------------------------------------------------------------------------------- /containers/databases/mariadb-base/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Mariadb Oficial - apenas redundancia do repo oficial 3 | ################################################################################ 4 | 5 | FROM mariadb:10.5 -------------------------------------------------------------------------------- /containers/openldap/openldap-base/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # openldap - apenas redundancia do repo original 3 | ################################################################################ 4 | 5 | FROM osixia/openldap:1.2.2 -------------------------------------------------------------------------------- /containers/phpldapadmin/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # phpldapadmin - apenas redundancia do repo original 3 | ################################################################################ 4 | 5 | FROM osixia/phpldapadmin:0.9.0 -------------------------------------------------------------------------------- /containers/app/app-dev/assets/conf/xdebug.ini: -------------------------------------------------------------------------------- 1 | ; Enable xdebug extension module 2 | zend_extension=/usr/lib64/php/modules/xdebug.so 3 | xdebug.mode=debug 4 | xdebug.client_host=localhost 5 | xdebug.client_port=9003 6 | xdebug.remote_handler=dbgp 7 | xdebug.discover_client_host=1 8 | xdebug.idekey=default -------------------------------------------------------------------------------- /containers/databases/oracle-base/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Oracle Imagem Alternativa - apenas redundancia do repo oficial 3 | ################################################################################ 4 | 5 | FROM oracleinanutshell/oracle-xe-11g -------------------------------------------------------------------------------- /containers/phpmemcachedadmin/phpmemcachedadmin-base/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # phpmemcachedadmin - apenas redundancia do repo original 3 | ################################################################################ 4 | 5 | FROM processoeletronico/sei4-phpmemcachedadmin1.2.2:1.0.0 -------------------------------------------------------------------------------- /containers/databases/sqlserver-base/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # SqlServer Imagem Alternativa - apenas redundancia do repo oficial 3 | ################################################################################ 4 | 5 | FROM processoeletronico/sei4-sqlserver:1.0 6 | #liaisonintl/mssql-server-linux -------------------------------------------------------------------------------- /containers/databases/mariadb/assets/pre-install.sql: -------------------------------------------------------------------------------- 1 | 2 | CREATE DATABASE sei; 3 | 4 | USE sei; 5 | CREATE USER 'sei_user'@'%' IDENTIFIED BY 'sei_user'; 6 | GRANT ALL PRIVILEGES ON sei.* TO 'sei_user'@'%'; 7 | 8 | 9 | CREATE DATABASE sip; 10 | 11 | USE sip; 12 | CREATE USER 'sip_user'@'%' IDENTIFIED BY 'sip_user'; 13 | GRANT ALL PRIVILEGES ON sip.* TO 'sip_user'@'%'; 14 | 15 | -------------------------------------------------------------------------------- /containers/app/app-dev/assets/conf/cron.conf: -------------------------------------------------------------------------------- 1 | * * * * * root . /crond_env.sh; root /usr/bin/php -c /etc/php.ini /opt/sei/scripts/AgendamentoTarefaSEI.php 2>&1 >> /var/log/sei/agendamento_sei.log 2 | * * * * * root . /crond_env.sh; root /usr/bin/php -c /etc/php.ini /opt/sip/scripts/AgendamentoTarefaSip.php 2>&1 >> /var/log/sip/agendamento_sip.log 3 | 00 01 * * * root rm -rf /opt/sei/temp/* 4 | 00 01 * * * root rm -rf /opt/sip/temp/* -------------------------------------------------------------------------------- /containers/databases/oracle/assets/sip-config.sql: -------------------------------------------------------------------------------- 1 | update orgao set sigla='ABC', descricao='ORGAO ABC' where id_orgao=0; 2 | update sistema set pagina_inicial='http://localhost/sip' where sigla='SIP'; 3 | update sistema set pagina_inicial='http://localhost/sei/inicializar.php', web_service='http://localhost/sei/controlador_ws.php?servico=sip' where sigla='SEI'; 4 | update orgao set sin_autenticar='N' where id_orgao=0; 5 | 6 | EXIT; 7 | -------------------------------------------------------------------------------- /containers/openldap/openldap/files/51-usuario.ldif: -------------------------------------------------------------------------------- 1 | dn: cn=teste,dc=pen,dc=gov,dc=br 2 | objectClass: top 3 | objectClass: account 4 | objectClass: posixAccount 5 | objectClass: shadowAccount 6 | cn: teste 7 | uid: teste 8 | uidNumber: 16859 9 | gidNumber: 100 10 | homeDirectory: /home/adam 11 | loginShell: /bin/bash 12 | gecos: adam 13 | userPassword: 123456 14 | shadowLastChange: 0 15 | shadowMax: 0 16 | shadowWarning: 0 17 | 18 | -------------------------------------------------------------------------------- /infra/docs/README.md: -------------------------------------------------------------------------------- 1 | # Documentação Geral do SUPER-Docker 2 | 3 | ## Apresentação 4 | 5 | - [Comece aqui com a leitura do README inicial](../README.md) 6 | 7 | ## Instruções Iniciais 8 | 9 | - [Clique aqui](Instrucoes.md) para abrir as instruções iniciais 10 | 11 | ## Vídeo Tutoriais 12 | 13 | - [Clique aqui](VideoTutoriais.md) para abrir a ajuda com os vídeos tutoriais 14 | 15 | --- 16 | 17 | Voltar para [Readme Principal](../README.md) -------------------------------------------------------------------------------- /containers/app/app-ci/assets/scripts-e-automatizadores/openldap/sip-config-openldap-desligar.php: -------------------------------------------------------------------------------- 1 | abrirConexao(); 7 | 8 | 9 | $objOrgaoDTO = new OrgaoDTO(); 10 | $objOrgaoDTO->setNumIdOrgao(0); 11 | $objOrgaoDTO->setStrSinAutenticar('N'); 12 | $objOrgaoBD = new OrgaoBD(BancoSip::getInstance()); 13 | $objOrgaoBD->alterar($objOrgaoDTO); 14 | 15 | ?> -------------------------------------------------------------------------------- /containers/mailcatcher/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Dockerfile de construção do container MailCatcher utilizado pelo SUPER 3 | # Apenas redundancia do repo oficial 4 | ################################################################################ 5 | 6 | FROM schickling/mailcatcher 7 | 8 | ############################# INÍCIO DA INSTALAÇÃO ############################# 9 | ENV TERM xterm 10 | 11 | EXPOSE 1080 -------------------------------------------------------------------------------- /containers/solr/assets/solr8sei/solr.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Apache SOLR 3 | After=syslog.target network.target remote-fs.target nss-lookup.target 4 | [Service] 5 | PIDFile=/opt/solr/bin/solr-8983.pid 6 | ExecStart=/opt/solr/bin/solr -p 8983 7 | User=solr 8 | ExecReload=/bin/kill -s HUP $MAINPID 9 | ExecStop=/opt/solr/bin/solr stop -p 8983 10 | PrivateTmp=true 11 | LimitNPROC=65000 12 | LimitNOFILE=65000 13 | 14 | [Install] 15 | WantedBy=multi-user.target 16 | -------------------------------------------------------------------------------- /containers/app/app-ci-agendador/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Dockerfile de construcao do container APP com os pacotes basicos 3 | ################################################################################ 4 | 5 | ARG IMAGEM_BASE=supergovbr/app-ci:latest 6 | 7 | FROM ${IMAGEM_BASE} 8 | 9 | ADD assets /tmp/assets 10 | 11 | 12 | RUN /tmp/assets/install.sh && \ 13 | rm -rf /tmp/assets 14 | 15 | ENTRYPOINT /entrypoint-agendador.sh 16 | -------------------------------------------------------------------------------- /containers/phpmemcachedadmin/phpmemcachedadmin/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ ! -d "/phpmemcachedadmin/Config" ]; then 4 | mv /usr/share/nginx/html/Config /phpmemcachedadmin 5 | ln -s /phpmemcachedadmin/Config /usr/share/nginx/html/ 6 | else 7 | rm -fr /usr/share/nginx/html/Config 8 | ln -s /phpmemcachedadmin/Config /usr/share/nginx/html/ 9 | fi 10 | 11 | /usr/sbin/php5-fpm -D && /usr/sbin/nginx & 12 | 13 | cd /usr/share/nginx/html 14 | ln -sf . memcachedadmin 15 | cd - 16 | tail -f /dev/null -------------------------------------------------------------------------------- /containers/databases/mariadb/assets/my.cnf: -------------------------------------------------------------------------------- 1 | [mysqld] 2 | #sql-mode=STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 3 | 4 | character-set-server = latin1 5 | collation-server = latin1_swedish_ci 6 | connect_timeout = 28000 7 | net_read_timeout = 28000 8 | max_allowed_packet = 128M 9 | thread_stack = 192K 10 | thread_cache_size = 8 11 | innodb_buffer_pool_size = 128M 12 | -------------------------------------------------------------------------------- /.github/workflows/issues-para-projeto.yml: -------------------------------------------------------------------------------- 1 | name: Adiciona issues de melhoria para projeto específico 2 | 3 | on: 4 | issues: 5 | types: 6 | - labeled 7 | 8 | jobs: 9 | add-to-project: 10 | name: Adiciona issues de melhoria para projeto da Carolina 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/add-to-project@v0.5.0 14 | with: 15 | project-url: https://github.com/orgs/pengovbr/projects/16 16 | github-token: ${{ secrets.PAT_PARA_ISSUES_MELHORIA }} 17 | labeled: melhoria 18 | -------------------------------------------------------------------------------- /containers/app/app-ci-agendador/assets/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | yum -y update 6 | 7 | yum install -y \ 8 | cronie \ 9 | gearmand \ 10 | libgearman \ 11 | php-pecl-gearman \ 12 | supervisor 13 | 14 | 15 | #Instalação Supervisor 16 | mkdir -p /etc/supervisor/ 17 | #echo_supervisord_conf > /etc/supervisor/supervisord.conf 18 | mv /tmp/assets/conf/supervisord.conf /etc/supervisor/supervisord.conf 19 | mv /tmp/assets/conf/mod-pen/supervisor.ini.template /etc/supervisor/ 20 | mv /tmp/assets/scripts-e-automatizadores/entrypoint-agendador.sh / 21 | chmod +x /entrypoint-agendador.sh 22 | 23 | 24 | yum clean all 25 | rm -rf /var/cache/yum 26 | -------------------------------------------------------------------------------- /containers/app/app-dev/assets/conf/sei.ini: -------------------------------------------------------------------------------- 1 | [php] 2 | ; Parâmetros recomendados no Manual de Instalação 3 | include_path = ".:/php/includes:/opt/infra/infra_php" 4 | default_charset = "iso-8859-1" 5 | session.gc_maxlifetime = 28800 6 | short_open_tag = On 7 | default_socket_timeout = 60 8 | max_input_vars = 2000 9 | magic-quotes-gpc = 0 10 | magic_quotes_runtime = 0 11 | magic_quotes_sybase = 0 12 | post_max_size = 110M 13 | upload_max_filesize = 100M 14 | 15 | ; Parâmetros recomendados para ambiente de desenvolvimento 16 | error_reporting = E_ALL 17 | display_errors = On 18 | display_startup_errors = On 19 | html_errors = On 20 | always_populate_raw_post_data = -1 -------------------------------------------------------------------------------- /containers/jod/assets/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Configuração do pacote de línguas pt_BR 4 | localedef pt_BR -i pt_BR -f ISO-8859-1 5 | 6 | # Instalação do utilitários necessários para o provisionamento 7 | yum -y install unzip java-1.7.0-openjdk wget unzip libreoffice libreoffice-headless 8 | 9 | # Instalação da api de serviços de conversão de documentos 10 | unzip /jodconverter-tomcat-2.2.2.zip -d /opt 11 | rm -rf /jodconverter-tomcat-2.2.2.zip 12 | 13 | # Remover arquivos temporários 14 | yum clean all 15 | rm -rf /var/cache/yum 16 | 17 | # Configuração de permissões de execução no script de inicialização do container 18 | chmod +x /entrypoint.sh 19 | 20 | exit 0 21 | -------------------------------------------------------------------------------- /containers/app/app-base/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Dockerfile de construcao do container APP com os pacotes basicos 3 | ################################################################################ 4 | 5 | ARG IMAGEM_BASE=supergovbr/base-centos7:latest 6 | 7 | FROM ${IMAGEM_BASE} 8 | 9 | ARG IMAGEM_APP_PACOTEMYSQL_PRESENTE=true 10 | ARG IMAGEM_APP_PACOTESQLSERVER_PRESENTE=true 11 | ARG IMAGEM_APP_PACOTEORACLE_PRESENTE=true 12 | 13 | ENV TERM="xterm" \ 14 | LANG="pt_BR.ISO-8859-1" 15 | 16 | ADD assets /tmp/assets 17 | 18 | RUN /tmp/assets/copy-packages.sh && \ 19 | /tmp/assets/install.sh && \ 20 | rm -rf /tmp/assets -------------------------------------------------------------------------------- /containers/databases/sqlserver/assets/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | # Variáveis de ambiente 5 | export ACCEPT_EULA=Y 6 | export SA_PASSWORD='yourStrong(!)Password' 7 | 8 | # Instalação do FreeTDS para acesso ao SQL Server 9 | #apt-get -y --allow-unauthenticated update 10 | #apt-get -y --allow-unauthenticated install libodbc1 freetds-dev freetds-bin 11 | 12 | /opt/mssql/bin/sqlservr & 13 | sleep 30 14 | 15 | mv /tmp/sip_4.0.x.1_BD_Ref_Exec.bak /tmp/sip_sqlserver.bak 16 | mv /tmp/sei_4.0.x.1_BD_Ref_Exec.bak /tmp/sei_sqlserver.bak 17 | 18 | tsql -S localhost -U sa -P $SA_PASSWORD < /tmp/restore.sql 19 | 20 | # Remover arquivos temporários 21 | rm -rf /tmp/* 22 | 23 | exit 0 24 | -------------------------------------------------------------------------------- /containers/phpmemcachedadmin/phpmemcachedadmin/Memcache.php: -------------------------------------------------------------------------------- 1 | 'Server', 4 | 'slabs_api' => 'Server', 5 | 'items_api' => 'Server', 6 | 'get_api' => 'Server', 7 | 'set_api' => 'Server', 8 | 'delete_api' => 'Server', 9 | 'flush_all_api' => 'Server', 10 | 'connection_timeout' => '1', 11 | 'max_item_dump' => '100', 12 | 'refresh_rate' => 5, 13 | 'memory_alert' => '80', 14 | 'hit_rate_alert' => '90', 15 | 'eviction_alert' => '0', 16 | 'file_path' => 'Temp/', 17 | 'servers' => 18 | array ( 19 | 'Default' => 20 | array ( 21 | 'MemcachedSEI' => 22 | array ( 23 | 'hostname' => 'memcached', 24 | 'port' => '11211', 25 | ), 26 | ), 27 | ), 28 | ); 29 | -------------------------------------------------------------------------------- /dev/envs/env-oracle.env: -------------------------------------------------------------------------------- 1 | ENVIRONMENT_VERSION=1.12 2 | 3 | DOCKER_REGISTRY=supergovbr 4 | 5 | DATABASE_IMAGE=oracle11g 6 | DATABASE_TYPE=Oracle 7 | DATABASE_HOST=oracle 8 | DATABASE_PORT=1521 9 | DATABASE_DATA_DIR=/opt/oracle/oradata 10 | 11 | SEI_CHAVE_ACESSO=7babf862e12bd48f3101075c399040303d94a493c7ce9306470f719bb453e0428c6135dc 12 | SEI_DATABASE_NAME=sei 13 | SEI_DATABASE_USER=sei 14 | SEI_DATABASE_PASSWORD=sei_user 15 | SEI_DATABASE_USER_SCRIPT=sei 16 | SEI_DATABASE_PASSWORD_SCRIPT=sei_user 17 | 18 | SIP_CHAVE_ACESSO=d27791b894028d9e7fa34887ad6f0c9a2c559cccda5f64f4e108e3573d5db862b66fb933 19 | SIP_DATABASE_NAME=sip 20 | SIP_DATABASE_USER=sip 21 | SIP_DATABASE_PASSWORD=sip_user 22 | SIP_DATABASE_USER_SCRIPT=sip 23 | SIP_DATABASE_PASSWORD_SCRIPT=sip_user -------------------------------------------------------------------------------- /dev/envs/env-mysql.env: -------------------------------------------------------------------------------- 1 | ENVIRONMENT_VERSION=1.12 2 | 3 | DOCKER_REGISTRY=supergovbr 4 | 5 | DATABASE_IMAGE=mariadb10.5 6 | DATABASE_TYPE=MySql 7 | DATABASE_HOST=mysql 8 | DATABASE_PORT=3306 9 | DATABASE_DATA_DIR=/var/lib/mysql 10 | 11 | SEI_CHAVE_ACESSO=7babf862e12bd48f3101075c399040303d94a493c7ce9306470f719bb453e0428c6135dc 12 | SEI_DATABASE_NAME=sei 13 | SEI_DATABASE_USER=sei_user 14 | SEI_DATABASE_PASSWORD=sei_user 15 | SEI_DATABASE_USER_SCRIPT=sei_user 16 | SEI_DATABASE_PASSWORD_SCRIPT=sei_user 17 | 18 | SIP_CHAVE_ACESSO=d27791b894028d9e7fa34887ad6f0c9a2c559cccda5f64f4e108e3573d5db862b66fb933 19 | SIP_DATABASE_NAME=sip 20 | SIP_DATABASE_USER=sip_user 21 | SIP_DATABASE_PASSWORD=sip_user 22 | SIP_DATABASE_USER_SCRIPT=sip_user 23 | SIP_DATABASE_PASSWORD_SCRIPT=sip_user -------------------------------------------------------------------------------- /dev/envs/env-sqlserver.env: -------------------------------------------------------------------------------- 1 | ENVIRONMENT_VERSION=1.12 2 | 3 | DOCKER_REGISTRY=supergovbr 4 | 5 | DATABASE_IMAGE=sqlserver2017 6 | DATABASE_TYPE=SqlServer 7 | DATABASE_HOST=sqlserver 8 | DATABASE_PORT=1433 9 | DATABASE_DATA_DIR=/var/opt/mssql/data 10 | 11 | SEI_CHAVE_ACESSO=7babf862e12bd48f3101075c399040303d94a493c7ce9306470f719bb453e0428c6135dc 12 | SEI_DATABASE_NAME=sei 13 | SEI_DATABASE_USER=sei_user 14 | SEI_DATABASE_PASSWORD=sei_user 15 | SEI_DATABASE_USER_SCRIPT=sei_user 16 | SEI_DATABASE_PASSWORD_SCRIPT=sei_user 17 | 18 | SIP_CHAVE_ACESSO=d27791b894028d9e7fa34887ad6f0c9a2c559cccda5f64f4e108e3573d5db862b66fb933 19 | SIP_DATABASE_NAME=sip 20 | SIP_DATABASE_USER=sip_user 21 | SIP_DATABASE_PASSWORD=sip_user 22 | SIP_DATABASE_USER_SCRIPT=sip_user 23 | SIP_DATABASE_PASSWORD_SCRIPT=sip_user -------------------------------------------------------------------------------- /containers/jod/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Dockerfile de construção do container JOD utilizado pelo SUPER 3 | ################################################################################ 4 | 5 | ARG IMAGEM_BASE=supergovbr/base-centos7:latest 6 | 7 | FROM ${IMAGEM_BASE} 8 | 9 | ############################# INÍCIO DA INSTALAÇÃO ############################# 10 | ENV TERM xterm 11 | 12 | ADD assets/install.sh \ 13 | assets/entrypoint.sh \ 14 | https://github.com/spbgovbr/sei-docker-binarios/raw/main/pacoteslinux/jodconverter-tomcat-2.2.2.zip \ 15 | / 16 | 17 | RUN sh /install.sh && rm -rf /install.sh 18 | ############################## FIM DA INSTALACAO ############################### 19 | 20 | ENTRYPOINT ["/entrypoint.sh"] 21 | EXPOSE 8080 -------------------------------------------------------------------------------- /containers/app/app-ci/assets/scripts-e-automatizadores/clone-modules.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p /sei-modulos 4 | 5 | cd /sei-modulos 6 | 7 | git clone https://github.com/supergovbr/mod-sei-estatisticas.git 8 | git clone https://github.com/supergovbr/mod-sei-pen.git 9 | git clone https://github.com/supergovbr/mod-wssei.git 10 | git clone https://github.com/anatelgovbr/mod-sei-peticionamento.git peticionamento 11 | git clone https://github.com/supergovbr/mod-sei-resposta.git 12 | git clone https://${GITUSER_REPO_MODULOS}:${GITPASS_REPO_MODULOS}@github.com/supergovbr/mod-gestao-documental.git 13 | git clone https://${GITUSER_REPO_MODULOS}:${GITPASS_REPO_MODULOS}@github.com/supergovbr/mod-sei-loginunico.git 14 | git clone https://${GITUSER_REPO_MODULOS}:${GITPASS_REPO_MODULOS}@github.com/supergovbr/mod-sei-assinatura-avancada.git 15 | -------------------------------------------------------------------------------- /containers/app/app-ci/assets/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | cp /tmp/assets/conf/sei.ini /etc/php.d/ 6 | cp /tmp/assets/conf/sei.conf /etc/httpd/conf.d/ 7 | 8 | cp /tmp/assets/scripts-e-automatizadores/entrypoint.sh / 9 | cp /tmp/assets/scripts-e-automatizadores/entrypoint-atualizador.sh / 10 | 11 | /tmp/assets/scripts-e-automatizadores/clone-modules.sh 12 | 13 | mkdir -p /sei/controlador-instalacoes/ /sei/arquivos_externos_sei/ /sei/certs 14 | mkdir -p /sei/files/conf /sei/files/scripts-e-automatizadores/modulos 15 | mv /tmp/assets/conf/ConfiguracaoSEI.php /sei/files/conf 16 | mv /tmp/assets/conf/ConfiguracaoSip.php /sei/files/conf 17 | mv /tmp/assets/scripts-e-automatizadores/openldap /tmp/assets/scripts-e-automatizadores/misc /sei/files/scripts-e-automatizadores/ 18 | mv /tmp/assets/scripts-e-automatizadores/modulos/* /sei/files/scripts-e-automatizadores/modulos/ 19 | -------------------------------------------------------------------------------- /containers/solr/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Dockerfile de construcao do container Solr utilizado pelo SUPER 3 | # 4 | # Container preparado e configurado para uso em desenvolvimento e testes 5 | ################################################################################ 6 | 7 | ARG IMAGEM_BASE=supergovbr/base-centos7:latest 8 | 9 | FROM ${IMAGEM_BASE} 10 | 11 | ENV TERM xterm 12 | 13 | ADD assets/ \ 14 | https://github.com/spbgovbr/sei-docker-binarios/raw/main/pacoteslinux/solr-8.2.0.tgz.partaa \ 15 | https://github.com/spbgovbr/sei-docker-binarios/raw/main/pacoteslinux/solr-8.2.0.tgz.partab \ 16 | https://github.com/spbgovbr/sei-docker-binarios/raw/main/pacoteslinux/msttcore-fonts-2.0-3.noarch.rpm \ 17 | /tmp/ 18 | 19 | RUN ls -lh /tmp && sh /tmp/install.sh && rm -rf /tmp/* 20 | 21 | EXPOSE 8983 22 | CMD ["/command.sh"] 23 | -------------------------------------------------------------------------------- /containers/solr/assets/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | set -e 4 | 5 | # Instalação do pacote Java JDK e utilitários utilizados no provisionamento 6 | #apk update && apk add lsof curl bash openjdk8-jre 7 | yum -y update && yum -y install lsof curl wget java-1.8.0-openjdk 8 | 9 | # Instalação de pacote de fontes do windows 10 | rpm -Uvh /tmp/msttcore-fonts-2.0-3.noarch.rpm 11 | 12 | # Configuração do pacote de línguas pt_BR 13 | localedef pt_BR -i pt_BR -f ISO-8859-1 14 | 15 | # join splited solr 16 | cat /tmp/solr-8.2.0.tgz.part* > /tmp/solr-8.2.0.tgz 17 | 18 | mv /tmp/solr8sei/* /tmp/ 19 | 20 | useradd solr 21 | 22 | chmod +x /tmp/sei-solr-8.2.0.sh 23 | 24 | # Instalação do Apache Sol2 25 | sh /tmp/sei-solr-8.2.0.sh 26 | 27 | mv /tmp/command.sh / 28 | 29 | yum clean all 30 | rm -rf /var/cache/yum 31 | 32 | # Configuração de permissões de execução no script de inicialização do container 33 | chmod +x /command.sh 34 | 35 | exit 0 36 | -------------------------------------------------------------------------------- /containers/app/app-base/assets/copy-packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | mkdir -p /tmp/assets/pacotes 6 | cd /tmp/assets/pacotes 7 | 8 | curl -L -O \ 9 | https://github.com/spbgovbr/sei-docker-binarios/raw/main/pacoteslinux/msttcore-fonts-2.0-3.noarch.rpm \ 10 | -O \ 11 | https://github.com/spbgovbr/sei-docker-binarios/raw/main/pacoteslinux/oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm \ 12 | -O \ 13 | https://github.com/spbgovbr/sei-docker-binarios/raw/main/pacoteslinux/oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm \ 14 | -O \ 15 | https://github.com/spbgovbr/sei-docker-binarios/raw/main/pacoteslinux/oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm \ 16 | -O \ 17 | https://github.com/spbgovbr/sei-docker-binarios/raw/main/pacoteslinux/uploadprogress.tgz \ 18 | -O \ 19 | https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox-0.12.6.1-2.almalinux8.x86_64.rpm 20 | 21 | cd - 22 | -------------------------------------------------------------------------------- /containers/databases/oracle/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Dockerfile de construção do container Oracle utilizado pelo SUPER 3 | # 4 | # Container preparado e configurado para uso em desenvolvimento e testes 5 | # construa antes a imagem base 6 | ################################################################################ 7 | 8 | ARG IMAGEM_BASE=supergovbr/base-oracle11g:latest 9 | 10 | FROM ${IMAGEM_BASE} 11 | 12 | ARG GIT_DB_REF=https://github.com/supergovbr/sei-db-ref-executivo/raw/master 13 | 14 | ENV TERM xterm \ 15 | ORACLE_ALLOW_REMOTE=true \ 16 | NLS_LANG=PORTUGUESE_BRAZIL.WE8MSWIN1252 17 | 18 | ADD ${GIT_DB_REF}/oracle/v4.0.x.1/sei_4.0.x.1_BD_Ref_Exec.dmp \ 19 | ${GIT_DB_REF}/oracle/v4.0.x.1/sip_4.0.x.1_BD_Ref_Exec.dmp \ 20 | assets/pre-install.sql \ 21 | assets/sei-config.sql \ 22 | assets/sip-config.sql \ 23 | assets/install.sh \ 24 | /tmp/ 25 | 26 | RUN bash /tmp/install.sh 27 | -------------------------------------------------------------------------------- /containers/databases/oracle/assets/pre-install.sql: -------------------------------------------------------------------------------- 1 | SHUTDOWN; 2 | STARTUP MOUNT; 3 | ALTER SYSTEM ENABLE RESTRICTED SESSION; 4 | ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 5 | ALTER DATABASE OPEN; 6 | ALTER DATABASE CHARACTER SET INTERNAL_USE WE8MSWIN1252; 7 | ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16; 8 | SHUTDOWN IMMEDIATE; 9 | STARTUP; 10 | 11 | CREATE TABLESPACE SEI DATAFILE '/u01/app/oracle/oradata/XE/sei.dbf' SIZE 50M AUTOEXTEND ON; 12 | CREATE TABLESPACE SIP DATAFILE '/u01/app/oracle/oradata/XE/sip.dbf' SIZE 50M AUTOEXTEND ON; 13 | 14 | ALTER USER SYSTEM IDENTIFIED BY P@ssword; 15 | ALTER USER SYS IDENTIFIED BY P@ssword; 16 | 17 | ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL; 18 | ALTER PROFILE DEFAULT limit PASSWORD_REUSE_TIME unlimited; 19 | ALTER PROFILE DEFAULT limit PASSWORD_LIFE_TIME unlimited; 20 | 21 | CREATE USER sei IDENTIFIED BY sei_user; 22 | CREATE USER sip IDENTIFIED BY sip_user; 23 | 24 | GRANT ALL PRIVILEGES TO sei; 25 | GRANT ALL PRIVILEGES TO sip; 26 | 27 | EXIT; 28 | -------------------------------------------------------------------------------- /containers/databases/oracle/assets/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | # Variáveis de ambiente 5 | export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe 6 | export PATH=$ORACLE_HOME/bin:$PATH 7 | export ORACLE_SID=XE 8 | export NLS_LANG=PORTUGUESE_BRAZIL.WE8MSWIN1252 9 | 10 | mv /tmp/sei_4.0.x.1_BD_Ref_Exec.dmp /tmp/sei_4_0_0_BD_Ref_Exec.dmp 11 | mv /tmp/sip_4.0.x.1_BD_Ref_Exec.dmp /tmp/sip_4_0_0_BD_Ref_Exec.dmp 12 | 13 | # Inicialização do servidor 14 | /usr/sbin/startup.sh 15 | 16 | # Configuração do character set e outros parâmetros iniciais 17 | sqlplus sys/oracle as sysdba @"/tmp/pre-install.sql" 18 | 19 | # Restauração das bases de dados do SEI e SIP 20 | imp sei/sei_user file=/tmp/sei_4_0_0_BD_Ref_Exec.dmp full=y 21 | imp sip/sip_user file=/tmp/sip_4_0_0_BD_Ref_Exec.dmp full=y 22 | 23 | # Configuração das bases de dados do sistema 24 | sqlplus sei/sei_user @"/tmp/sei-config.sql" 25 | sqlplus sip/sip_user @"/tmp/sip-config.sql" 26 | 27 | # Remover arquivos temporários 28 | rm -rf /tmp/* 29 | 30 | exit 0 31 | -------------------------------------------------------------------------------- /containers/databases/sqlserver/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Dockerfile de construção do container SqlServer utilizado pelo SUPER 3 | # 4 | # Container preparado e configurado para uso em desenvolvimento e testes 5 | # SQL Server para Linux é uma versão experimental e não deve ser utilizada em 6 | # ambiente de produção 7 | # construa antes a imagem base 8 | ################################################################################ 9 | 10 | ARG IMAGEM_BASE=supergovbr/base-sqlserver2017:latest 11 | 12 | FROM ${IMAGEM_BASE} 13 | 14 | ARG GIT_DB_REF=https://github.com/supergovbr/sei-db-ref-executivo/raw/master/ 15 | 16 | ENV TERM xterm \ 17 | ACCEPT_EULA=Y \ 18 | SA_PASSWORD='yourStrong(!)Password' 19 | 20 | ADD assets/install.sh \ 21 | assets/restore.sql \ 22 | ${GIT_DB_REF}/sqlserver/v4.0.x.1/sei_4.0.x.1_BD_Ref_Exec.bak \ 23 | ${GIT_DB_REF}/sqlserver/v4.0.x.1/sip_4.0.x.1_BD_Ref_Exec.bak \ 24 | /tmp/ 25 | 26 | RUN bash /tmp/install.sh 27 | -------------------------------------------------------------------------------- /containers/envcontainers.env.modelo: -------------------------------------------------------------------------------- 1 | DOCKER_REGISTRY=supergovbr 2 | DOCKER_CONTAINER_VERSAO_PRODUTO=1.13 3 | 4 | IMAGEM_BASE_CENTOS=supergovbr/base-centos7 5 | IMAGEM_BASE_CENTOS_VERSAO=latest 6 | 7 | IMAGEM_BASE_ROCKYLINUX=supergovbr/base-rockylinux8 8 | IMAGEM_BASE_ROCKYLINUX_VERSAO=latest 9 | 10 | IMAGEM_BASE_MARIADB=supergovbr/base-mariadb10.5 11 | IMAGEM_BASE_MARIADB_VERSAO=latest 12 | 13 | IMAGEM_BASE_SQLSERVER=supergovbr/base-sqlserver2017 14 | IMAGEM_BASE_SQLSERVER_VERSAO=latest 15 | 16 | IMAGEM_BASE_ORACLE=supergovbr/base-oracle11g 17 | IMAGEM_BASE_ORACLE_VERSAO=latest 18 | 19 | IMAGEM_BASE_APP=supergovbr/base-app 20 | IMAGEM_BASE_APP_VERSAO=latest 21 | 22 | IMAGEM_BASE_APP_AGENDADOR=supergovbr/app-ci 23 | IMAGEM_BASE_APP_AGENDADOR_VERSAO=latest 24 | 25 | IMAGEM_BASE_PHPMEMCACHEDADMIN=supergovbr/phpmemcachedadmin-base 26 | IMAGEM_BASE_PHPMEMCACHEDADMIN_VERSAO=latest 27 | 28 | IMAGEM_BASE_OPENLDAP=supergovbr/openldap-base 29 | IMAGEM_BASE_OPENLDAP_VERSAO=latest 30 | 31 | IMAGEM_BASE_HAPROXY=supergovbr/haproxy-base 32 | IMAGEM_BASE_HAPROXY_VERSAO=latest 33 | -------------------------------------------------------------------------------- /containers/app/app-ci/assets/conf/sei.ini: -------------------------------------------------------------------------------- 1 | [php] 2 | include_path = ".:/php/includes:/opt/infra/infra_php" 3 | default_charset = "iso-8859-1" 4 | session.gc_maxlifetime = 28800 5 | short_open_tag = On 6 | default_socket_timeout = 60 7 | max_input_vars = 2000 8 | magic_quotes_gpc = 0 9 | magic_quotes_runtime = 0 10 | magic_quotes_sybase = 0 11 | html_errors = 0 12 | always_populate_raw_post_data = -1 13 | 14 | post_max_size = 505M 15 | upload_max_filesize = 500M 16 | 17 | ;openssl.cafile=/etc/ssl/certs/cacert.pem 18 | ;curl.cainfo=/etc/ssl/certs/cacert.pem 19 | 20 | 21 | ; Retirados da configuração do php.ini de produção. Verificar necessidade 22 | ; y2k_compliance = On 23 | ; serialize_precision = 100 24 | ; allow_call_time_pass_reference = Off 25 | ; safe_mode = Off 26 | ; safe_mode_gid = Off 27 | ; safe_mode_include_dir = 28 | ; safe_mode_exec_dir = 29 | ; safe_mode_allowed_env_vars = PHP_ 30 | ; safe_mode_protected_env_vars = LD_LIBRARY_PATH 31 | ; error_reporting = E_ALL & ~E_DEPRECATED 32 | ; html_errors = Off 33 | ; register_globals = Off 34 | ; register_long_arrays = Off -------------------------------------------------------------------------------- /containers/solr/assets/solr8sei/log4j.properties: -------------------------------------------------------------------------------- 1 | # Logging level 2 | solr.log=logs 3 | log4j.rootLogger=WARN, file, CONSOLE 4 | 5 | log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 6 | 7 | log4j.appender.CONSOLE.layout=org.apache.log4j.EnhancedPatternLayout 8 | log4j.appender.CONSOLE.layout.ConversionPattern=%-4r %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%n 9 | 10 | #- size rotation with log cleanup. 11 | log4j.appender.file=org.apache.log4j.RollingFileAppender 12 | log4j.appender.file.MaxFileSize=4MB 13 | log4j.appender.file.MaxBackupIndex=9 14 | 15 | #- File to log to and log format 16 | log4j.appender.file.File=${solr.log}/solr.log 17 | log4j.appender.file.layout=org.apache.log4j.EnhancedPatternLayout 18 | log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m\n 19 | 20 | log4j.logger.org.apache.zookeeper=WARN 21 | log4j.logger.org.apache.hadoop=WARN 22 | 23 | # set to INFO to enable infostream log messages 24 | log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF 25 | -------------------------------------------------------------------------------- /containers/README.md: -------------------------------------------------------------------------------- 1 | # SUPER-DOCKER 2 | 3 | ## Containers 4 | 5 | Na pasta containers encontram-se as receitas para as imagens docker. Os conteineres já existem de forma pública para você rodar o projeto em sua máquina local ou infra. Não é necessário entrar aqui ou conhecer essa área para rodar o Super. 6 | 7 | Mas caso mesmo assim deseje buildar as imagens por conta própria, modificá-las ou usar o seu próprio registry; basta acessar essa pasta. Nela estão as receitas docker usadas, bem como as automatizações (Makefile) para criar seus próprios conteineres em seu próprio Docker Registry. 8 | 9 | Rode ``` make help ``` para uma lista de todos os comandos disponíveis. 10 | 11 | Rode ``` make getenv ``` para criar um arquivo envcontainers.env que serve de modelo para rodar todos os outros targets. Altere-o a seu gosto. 12 | 13 | Verifique que se vc alterar esse arquivo, deverá replicar essas alteracoes com o novo DOCKER_REGISTRY e DOCKER_CONTAINER_VERSAO_PRODUTO nos envfiles referentes às outras áreas do projeto (dev e infra) 14 | 15 | 16 | ### Pasta tests 17 | 18 | Mais sobre os testes [clique aqui](../README.md#testes) 19 | -------------------------------------------------------------------------------- /infra/orquestrators/rancher-kubernetes/templates/secrets-template.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | data: 3 | APP_DB_PORTA: ${APP_DB_PORTA_BASE64} 4 | APP_DB_ROOT_PASSWORD: ${APP_DB_ROOT_PASSWORD_BASE64} 5 | APP_DB_ROOT_USERNAME: ${APP_DB_ROOT_USERNAME_BASE64} 6 | APP_DB_SEI_BASE: ${APP_DB_SEI_BASE_BASE64} 7 | APP_DB_SEI_PASSWORD: ${APP_DB_SEI_PASSWORD_BASE64} 8 | APP_DB_SEI_USERNAME: ${APP_DB_SEI_USERNAME_BASE64} 9 | APP_DB_SIP_BASE: ${APP_DB_SIP_BASE_BASE64} 10 | APP_DB_SIP_PASSWORD: ${APP_DB_SIP_PASSWORD_BASE64} 11 | APP_DB_SIP_USERNAME: ${APP_DB_SIP_USERNAME_BASE64} 12 | APP_MAIL_AUTENTICAR: "${APP_MAIL_AUTENTICAR_BASE64}" 13 | APP_MAIL_PORTA: ${APP_MAIL_PORTA_BASE64} 14 | APP_MAIL_SEGURANCA: "${APP_MAIL_SEGURANCA_BASE64}" 15 | APP_MAIL_SENHA: "${APP_MAIL_SENHA_BASE64}" 16 | APP_MAIL_USUARIO: "${APP_MAIL_USUARIO_BASE64}" 17 | APP_SEI_CHAVE_ACESSO: ${APP_SEI_CHAVE_ACESSO_BASE64} 18 | APP_SIP_CHAVE_ACESSO: ${APP_SIP_CHAVE_ACESSO_BASE64} 19 | APP_FONTES_GIT_PRIVKEY_BASE64: ${APP_FONTES_GIT_PRIVKEY_BASE64} 20 | kind: Secret 21 | metadata: 22 | name: super-secret1 23 | namespace: ${KUBERNETES_NAMESPACE} 24 | type: Opaque -------------------------------------------------------------------------------- /infra/orquestrators/rancher-kubernetes/templates/ingress-template.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | annotations: 5 | cert-manager.io/cluster-issuer: letsencrypt-dth 6 | ingress.kubernetes.io/app-root: /sei/ 7 | ingress.kubernetes.io/backend-protocol: HTTPS 8 | ingress.kubernetes.io/proxy-body-size: 200m 9 | kubernetes.io/ingress.class: nginx 10 | kubernetes.io/tls-acme: "true" 11 | nginx.ingress.kubernetes.io/affinity: cookie 12 | nginx.ingress.kubernetes.io/app-root: /sei/ 13 | nginx.ingress.kubernetes.io/backend-protocol: HTTPS 14 | nginx.ingress.kubernetes.io/session-cookie-name: PIINGRESSAFFINITY 15 | nginx.ingress.kubernetes.io/proxy-body-size: 200m 16 | name: ing-sei 17 | namespace: ${KUBERNETES_NAMESPACE} 18 | spec: 19 | rules: 20 | - host: ${APP_HOST} 21 | http: 22 | paths: 23 | - backend: 24 | service: 25 | name: sei-app 26 | port: 27 | number: 443 28 | path: / 29 | pathType: Prefix 30 | tls: 31 | - hosts: 32 | - ${APP_HOST} 33 | #secretName: tls-sei1 34 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: Unit and Functional Testing 2 | 3 | on: [push, pull_request] 4 | env: # Or as an environment variable 5 | GITPASS_REPO_MODULOS: ${{ secrets.GITPASSREPOMODULOS }} 6 | GITUSER_REPO_MODULOS: ${{ secrets.GITUSERREPOMODULOS }} 7 | SUPER_PATH: /home/runner/work/super-docker/super-docker/super/src 8 | 9 | jobs: 10 | test: 11 | runs-on: ubuntu-latest 12 | 13 | 14 | steps: 15 | - name: Login to Docker Hub 16 | uses: docker/login-action@v2 17 | with: 18 | username: ${{ secrets.DOCKERHUB_USERNAME }} 19 | password: ${{ secrets.DOCKERHUB_TOKEN }} 20 | - name: Fetch Pull Request branch 21 | uses: actions/checkout@v3 22 | - name: Run make tests containers 23 | run: cd containers/tests; make getenv-test; make test-containers; cd ../../ 24 | - name: Fetch código do SUPER 25 | uses: actions/checkout@v3 26 | with: 27 | repository: supergovbr/super 28 | token: ${{ secrets.GH_PAT }} 29 | path: super 30 | - name: Run make tests app 31 | run: pwd; cd dev/tests; make tests-all-bases; cd ../../ 32 | -------------------------------------------------------------------------------- /containers/app/app-ci-agendador/assets/conf/mod-pen/supervisor.ini.template: -------------------------------------------------------------------------------- 1 | [program:monitoramento_tarefas_pen] 2 | command=/usr/bin/php -c /etc/php.ini /opt/sei/scripts/mod-pen/MonitoramentoTarefasPEN.php --monitorar --segundo-plano 3 | directory=/opt/sei/web 4 | user=root 5 | numprocs=1 6 | autostart=true 7 | autorestart=true 8 | startsecs=5 9 | startretries=10000000 10 | log_stdout=true 11 | log_stderr=true 12 | logfile_maxbytes=0 13 | logfile_backups=50 14 | logfile=/proc/1/fd/1 15 | stdout_logfile=/proc/1/fd/1 16 | stderr_logfile=/proc/1/fd/2 17 | stderr_events_enabled=true 18 | 19 | [program:processamento_tarefas_pen] 20 | command=/usr/bin/php -c /etc/php.ini /opt/sei/scripts/mod-pen/ProcessamentoTarefasPEN.php --worker=%(process_num)02d 21 | directory=/opt/sei/web 22 | process_name=%(program_name)s_%(process_num)02d 23 | numprocs=<> 24 | user=root 25 | autostart=true 26 | autorestart=true 27 | startsecs=5 28 | startretries=10000000 29 | log_stdout=true 30 | log_stderr=true 31 | logfile_backups=0 32 | logfile_maxbytes=10MB 33 | logfile=/proc/1/fd/1 34 | stdout_logfile=/proc/1/fd/1 35 | stderr_logfile=/proc/1/fd/2 36 | stderr_events_enabled=true -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | **/.DS_Store 3 | containers/envcontainers.env 4 | containers/tests/envcontainers-test.env 5 | dev/env.env 6 | dev/tests/Selenium/PythonExported/__pycache__ 7 | dev/tests/Selenium/PythonExported/resultado.xml 8 | dev/tests/Selenium/PythonExported/test_suiteBasics-executar.py 9 | dev/tests/Selenium/PythonExported/test_suiteBasics-executar.py-e 10 | infra/orquestrators/docker-compose/docker-compose.yml 11 | infra/orquestrators/docker-compose/docker-compose.yml-e 12 | infra/orquestrators/rancher-kubernetes/topublish/configmaps.yaml 13 | infra/orquestrators/rancher-kubernetes/topublish/deploys-svc.yaml 14 | infra/orquestrators/rancher-kubernetes/topublish/ingress.yaml 15 | infra/orquestrators/rancher-kubernetes/topublish/jobs.yaml 16 | infra/orquestrators/rancher-kubernetes/topublish/pvc.yaml 17 | infra/orquestrators/rancher-kubernetes/topublish/secrets.yaml 18 | infra/orquestrators/rancher-kubernetes/topublish/statefullsets.yaml 19 | infra/tests/Selenium/PythonExported/__pycache__ 20 | infra/tests/Selenium/PythonExported/resultado.xml 21 | infra/tests/Selenium/PythonExported/test_suiteBasics-executar.py 22 | infra/tests/Selenium/PythonExported/test_suiteBasics-executar.py-e 23 | -------------------------------------------------------------------------------- /containers/app/app-dev/assets/conf/sei.conf: -------------------------------------------------------------------------------- 1 | Listen 8000 2 | KeepAlive On 3 | MaxKeepAliveRequests 100 4 | KeepAliveTimeout 15 5 | 6 | Alias "/sei" "/opt/sei/web" 7 | Alias "/sip" "/opt/sip/web" 8 | Alias "/infra_css" "/opt/infra/infra_css" 9 | Alias "/infra_js" "/opt/infra/infra_js" 10 | 11 | SetEnvIfNoCase user-agent "Microsoft Data Access Internet Publishing Provider Protocol Discovery" bad_bot=1 12 | 13 | Order Allow,Deny 14 | Allow from all 15 | Deny from env=bad_bot 16 | 17 | 18 | 19 | DocumentRoot /var/www/html 20 | ServerAdmin admin@dominio.gov.br 21 | ServerName localhost 22 | 23 | DirectoryIndex index.php index.html 24 | IndexIgnore * 25 | EnableSendfile Off 26 | HostnameLookups Off 27 | ServerSignature Off 28 | AddDefaultCharset iso-8859-1 29 | TimeOut 300 30 | 31 | 32 | AllowOverride None 33 | Require all denied 34 | 35 | 36 | 37 | AllowOverride None 38 | Options None 39 | Require all granted 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /containers/solr/assets/solr8sei/sei-solr-8.2.0.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | clear 4 | 5 | for n in /tmp/solr-8.2.0.tgz /tmp/log4j.properties /tmp/solr.service 6 | do 7 | if [ ! -f $n ]; then 8 | echo "Arquivo ["$n"] nao encontrado." 9 | exit 1 10 | fi 11 | done 12 | 13 | if [ ! -d "/tmp/sei-cores-8.2.0" ]; then 14 | echo "Diretorio [/tmp/sei-cores-8.2.0] nao encontrado." 15 | exit 1 16 | fi 17 | 18 | cd /tmp 19 | 20 | tar -xf /tmp/solr-8.2.0.tgz 21 | 22 | cp -Rf /tmp/solr-8.2.0 /opt/solr 23 | 24 | mkdir -v /dados 25 | 26 | ln -vs /dados /opt/solr/server/solr 27 | 28 | cp -Rfv /tmp/log4j.properties /opt/solr/server/resources 29 | 30 | cp -Rf /tmp/sei-cores-8.2.0/* /dados 31 | 32 | mv /opt/solr/example/files/conf/solrconfig.xml /opt/solr/example/files/conf/solrconfig.bak 33 | 34 | cp -R /opt/solr/example/files/conf /dados/sei-protocolos 35 | cp -R /opt/solr/example/files/conf /dados/sei-bases-conhecimento 36 | cp -R /opt/solr/example/files/conf /dados/sei-publicacoes 37 | 38 | rm -Rf /opt/solr/example 39 | 40 | mkdir -v /dados/sei-protocolos/conteudo 41 | mkdir -v /dados/sei-bases-conhecimento/conteudo 42 | mkdir -v /dados/sei-publicacoes/conteudo 43 | 44 | chown -R solr.solr /dados 45 | chown -R solr.solr /opt/solr/ 46 | 47 | cp solr.service /etc/systemd/system/solr.service 48 | 49 | -------------------------------------------------------------------------------- /containers/tests/envcontainers-test.env.modelo: -------------------------------------------------------------------------------- 1 | DOCKER_REGISTRY=supergovbr 2 | 3 | # nao mude a var abaixo qd for rodar os testes, caso contrario o makefile de conteiner vai tagear o conteiner de teste como latest 4 | # como um dos testes eh enviar as imagens para o seu registry isso geralmente n eh o que se deseja (enviar imagem de teste como latest) 5 | DOCKER_CONTAINER_VERSAO_PRODUTO=test 6 | 7 | IMAGEM_BASE_CENTOS=supergovbr/base-centos7 8 | IMAGEM_BASE_CENTOS_VERSAO=test 9 | 10 | IMAGEM_BASE_ROCKYLINUX=supergovbr/base-rockylinux8 11 | IMAGEM_BASE_ROCKYLINUX_VERSAO=test 12 | 13 | IMAGEM_BASE_MARIADB=supergovbr/base-mariadb10.5 14 | IMAGEM_BASE_MARIADB_VERSAO=test 15 | 16 | IMAGEM_BASE_SQLSERVER=supergovbr/base-sqlserver2017 17 | IMAGEM_BASE_SQLSERVER_VERSAO=test 18 | 19 | IMAGEM_BASE_ORACLE=supergovbr/base-oracle11g 20 | IMAGEM_BASE_ORACLE_VERSAO=test 21 | 22 | IMAGEM_BASE_APP=supergovbr/base-app 23 | IMAGEM_BASE_APP_VERSAO=test 24 | 25 | IMAGEM_BASE_APP_AGENDADOR=supergovbr/app-ci 26 | IMAGEM_BASE_APP_AGENDADOR_VERSAO=test 27 | 28 | IMAGEM_BASE_PHPMEMCACHEDADMIN=supergovbr/phpmemcachedadmin-base 29 | IMAGEM_BASE_PHPMEMCACHEDADMIN_VERSAO=test 30 | 31 | IMAGEM_BASE_OPENLDAP=supergovbr/openldap-base 32 | IMAGEM_BASE_OPENLDAP_VERSAO=test 33 | 34 | IMAGEM_BASE_HAPROXY=supergovbr/haproxy-base 35 | IMAGEM_BASE_HAPROXY_VERSAO=test -------------------------------------------------------------------------------- /containers/app/app-dev/assets/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | mv /tmp/assets/scripts-e-automatizadores/command.sh \ 6 | /tmp/assets/scripts-e-automatizadores/ConfiguracaoSip.php \ 7 | /tmp/assets/scripts-e-automatizadores/ConfiguracaoSEI.php \ 8 | / 9 | 10 | chmod +x /command.sh 11 | 12 | yum -y update 13 | 14 | 15 | dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm -y 16 | dnf install --nogpgcheck https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm -y 17 | # Instalação de ferramentas utilitárias e dependências do SUPER 18 | yum install -y libmcrypt httpd memcached openssl wget curl unzip gcc java-1.8.0-openjdk \ 19 | libxml2 crontabs mysql net-tools vim git nc ffmpeg 20 | 21 | 22 | # Instalação do XDebug, versão 3 23 | pecl install xdebug-3.0.4 24 | 25 | # Configuração de permissão do diretório de arquivos 26 | mkdir -p /var/sei/arquivos 27 | chmod -R 777 /var/sei/arquivos 28 | 29 | # Configuração dos serviços de background do Cron 30 | mkdir /var/log/sei 31 | sed -i '/session required pam_loginuid.so/c\#session required pam_loginuid.so' /etc/pam.d/crond 32 | 33 | mkdir -p /etc/cron.d/sei 34 | 35 | cp /tmp/assets/conf/info.php /var/www/html/ 36 | cp /tmp/assets/conf/sei.ini /etc/php.d/ 37 | cp /tmp/assets/conf/sei.conf /etc/httpd/conf.d/ 38 | cp /tmp/assets/conf/deflate.conf /etc/httpd/conf.d/ 39 | cp /tmp/assets/conf/cron.conf /etc/cron.d/ 40 | cp /tmp/assets/conf/xdebug.ini /etc/php.d/ 41 | 42 | # Remover arquivos temporários 43 | yum clean all 44 | rm -rf /var/cache/yum 45 | -------------------------------------------------------------------------------- /containers/app/app-dev/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Dockerfile de construcao do container APP com os pacotes basicos 3 | ################################################################################ 4 | 5 | ARG IMAGEM_BASE=supergovbr/base-app:latest 6 | 7 | FROM ${IMAGEM_BASE} 8 | 9 | ADD assets /tmp/assets 10 | 11 | RUN /tmp/assets/install.sh && \ 12 | rm -rf /tmp/assets 13 | 14 | RUN sed -i 's+^post_max_size = 8M+post_max_size = 120M+g;s+^upload_max_filesize = 2M+upload_max_filesize = 100M+g;s+^short_open_tag = Off+short_open_tag = On+g;s+;mysqli.allow_local_infile = On+mysqli.allow_local_infile = On+g' /etc/php.ini && sed -i 's+pid = /run/php-fpm/php-fpm.pid+pid = /run/httpd/php-fpm.pid+g' /etc/php-fpm.conf && sed -i 's+listen = /run/php-fpm/www.sock+listen = 9000+g' /etc/php-fpm.d/www.conf && sed -i 's+SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"+SetHandler "proxy:fcgi://127.0.0.1:9000"+g' /etc/httpd/conf.d/php.conf && sed -i 's+UserDir disabled+UserDir html+g;s+tory "/home/\*/public_html">+tory "/var/*/html">+g' /etc/httpd/conf.d/userdir.conf && echo "alias ll='ls -l'" >> /etc/bashrc && DOTHT_NUM=$(grep -n '^+tory "/var/*/html">+g' /etc/httpd/conf.d/userdir.conf && \ 21 | echo "alias ll='ls -l'" >> /etc/bashrc && \ 22 | DOTHT_NUM=$(grep -n '^ orquestrators/rancher-kubernetes/topublish/secrets.yaml -------------------------------------------------------------------------------- /infra/orquestrators/rancher-kubernetes/templates/pvc-template.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: vol-sei-arquivosexternos 5 | namespace: ${KUBERNETES_NAMESPACE} 6 | spec: 7 | accessModes: 8 | - ReadWriteOnce 9 | - ReadWriteMany 10 | resources: 11 | requests: 12 | storage: 20Gi 13 | storageClassName: ${KUBERNETES_PVC_STORAGECLASS} 14 | 15 | --- 16 | 17 | apiVersion: v1 18 | kind: PersistentVolumeClaim 19 | metadata: 20 | name: vol-sei-controladorinstalacao 21 | namespace: ${KUBERNETES_NAMESPACE} 22 | spec: 23 | accessModes: 24 | - ReadWriteOnce 25 | - ReadWriteMany 26 | resources: 27 | requests: 28 | storage: 1Gi 29 | storageClassName: ${KUBERNETES_PVC_STORAGECLASS} 30 | 31 | --- 32 | 33 | apiVersion: v1 34 | kind: PersistentVolumeClaim 35 | metadata: 36 | name: vol-sei-db 37 | namespace: ${KUBERNETES_NAMESPACE} 38 | spec: 39 | accessModes: 40 | - ReadWriteOnce 41 | - ReadWriteMany 42 | resources: 43 | requests: 44 | storage: 50Gi 45 | storageClassName: ${KUBERNETES_PVC_STORAGECLASS} 46 | 47 | --- 48 | 49 | apiVersion: v1 50 | kind: PersistentVolumeClaim 51 | metadata: 52 | name: vol-sei-fontes 53 | namespace: ${KUBERNETES_NAMESPACE} 54 | spec: 55 | accessModes: 56 | - ReadWriteOnce 57 | - ReadWriteMany 58 | resources: 59 | requests: 60 | storage: 1Gi 61 | storageClassName: ${KUBERNETES_PVC_STORAGECLASS} 62 | 63 | --- 64 | 65 | apiVersion: v1 66 | kind: PersistentVolumeClaim 67 | metadata: 68 | name: vol-sei-solr 69 | namespace: ${KUBERNETES_NAMESPACE} 70 | spec: 71 | accessModes: 72 | - ReadWriteOnce 73 | - ReadWriteMany 74 | resources: 75 | requests: 76 | storage: 50Gi 77 | storageClassName: ${KUBERNETES_PVC_STORAGECLASS} 78 | -------------------------------------------------------------------------------- /containers/app/app-ci/assets/scripts-e-automatizadores/modulos/mod-sei-resposta/mod-sei-resposta.php: -------------------------------------------------------------------------------- 1 | setBolLigado(true); 12 | InfraDebug::getInstance()->setBolDebugInfra(false); 13 | InfraDebug::getInstance()->setBolEcho(true); 14 | 15 | //$conexao = BancoSEI::getInstance(); 16 | //$conexao->setBolScript(true); 17 | 18 | $MODULO_RESPOSTA_SISTEMA_ID = getenv(' MODULO_RESPOSTA_SISTEMA_ID') ?: 'a:1:{i:0;s:1:"8";}'; 19 | $MODULO_RESPOSTA_DOCUMENTO_ID = getenv('MODULO_RESPOSTA_DOCUMENTO_ID') ?: "153"; 20 | 21 | $objMdRespostaParametroDTO = new MdRespostaParametroDTO(); 22 | $objMdRespostaParametroDTO->setStrNome("PARAM_TIPO_DOCUMENTO"); 23 | //$objMdRespostaParametroDTO->setStrNome(MDRespostaParametroRN::PARAM_TIPO_DOCUMENTO); 24 | $objMdRespostaParametroDTO->setStrValor($MODULO_RESPOSTA_DOCUMENTO_ID); 25 | $arrObjMdRespostaParametroDTO[] = $objMdRespostaParametroDTO; 26 | 27 | $objMdRespostaParametroDTO = new MdRespostaParametroDTO(); 28 | //$objMdRespostaParametroDTO->setStrNome(MDRespostaParametroRN::PARAM_SISTEMA); 29 | $objMdRespostaParametroDTO->setStrNome('PARAM_SISTEMA'); 30 | $objMdRespostaParametroDTO->setStrValor($MODULO_RESPOSTA_SISTEMA_ID); 31 | $arrObjMdRespostaParametroDTO[] = $objMdRespostaParametroDTO; 32 | 33 | $objMdRespostaParametroRN = new MdRespostaParametroRN(); 34 | try{ 35 | $objMdRespostaParametroDTO = $objMdRespostaParametroRN->atribuir($arrObjMdRespostaParametroDTO); 36 | }catch(Exception $e){ 37 | echo "Erro ao configurar modulo de resposta. Verifique. Nao vamos interromper a execucao."; 38 | echo "Erro: " . print_r($e, true); 39 | echo ""; 40 | } 41 | 42 | 43 | ?> -------------------------------------------------------------------------------- /infra/orquestrators/rancher-kubernetes/templates/jobs-template.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | name: sei-inicializador 5 | namespace: ${KUBERNETES_NAMESPACE} 6 | spec: 7 | backoffLimit: 6 8 | completions: 1 9 | parallelism: 1 10 | template: 11 | metadata: 12 | labels: 13 | job-name: sei-inicializador 14 | spec: 15 | containers: 16 | - command: 17 | - /entrypoint-atualizador.sh 18 | envFrom: 19 | - configMapRef: 20 | name: sei-app 21 | - secretRef: 22 | name: super-secret1 23 | image: ${DOCKER_IMAGE_APP} 24 | imagePullPolicy: Always 25 | name: sei-inicializador 26 | resources: 27 | limits: 28 | cpu: ${KUBERNETES_LIMITS_CPU_APP} 29 | memory: ${KUBERNETES_LIMITS_MEMORY_APP} 30 | requests: 31 | cpu: ${KUBERNETES_REQUEST_CPU_APP} 32 | memory: ${KUBERNETES_REQUEST_MEMORY_APP} 33 | stdin: true 34 | terminationMessagePath: /dev/termination-log 35 | terminationMessagePolicy: File 36 | tty: true 37 | volumeMounts: 38 | - mountPath: /opt 39 | name: vol1 40 | - mountPath: /sei/arquivos_externos_sei/ 41 | name: vol2 42 | - mountPath: /sei/controlador-instalacoes 43 | name: vol3 44 | dnsPolicy: ClusterFirst 45 | restartPolicy: Never 46 | terminationGracePeriodSeconds: 30 47 | volumes: 48 | - name: vol1 49 | persistentVolumeClaim: 50 | claimName: vol-sei-fontes 51 | - name: vol2 52 | persistentVolumeClaim: 53 | claimName: vol-sei-arquivosexternos 54 | - name: vol3 55 | persistentVolumeClaim: 56 | claimName: vol-sei-controladorinstalacao 57 | 58 | 59 | -------------------------------------------------------------------------------- /containers/databases/mariadb/Dockerfile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Dockerfile de construção do container Mariadb utilizado pelo SUPER 3 | # construa antes a imagem base 4 | ################################################################################ 5 | 6 | ARG IMAGEM_BASE=supergovbr/base-mariadb10.5:latest 7 | 8 | FROM ${IMAGEM_BASE} as builder 9 | 10 | ARG GIT_DB_REF=https://github.com/supergovbr/sei-db-ref-executivo/raw/master 11 | 12 | ############################# INÍCIO DA INSTALAÇÃO ############################# 13 | ENV MYSQL_ROOT_PASSWORD=P@ssword 14 | 15 | COPY assets/my.cnf /etc/mysql/mariadb.conf.d/sei.cnf 16 | COPY assets/pre-install.sql /docker-entrypoint-initdb.d/1_pre-install.sql 17 | ADD ${GIT_DB_REF}/mysql/v4.0.x.1/sei_4.0.x.1_BD_Ref_Exec.sql /docker-entrypoint-initdb.d/2_sei_4_0_0_BD_Ref_Exec.sql 18 | ADD ${GIT_DB_REF}/mysql/v4.0.x.1/sip_4.0.x.1_BD_Ref_Exec.sql /docker-entrypoint-initdb.d/3_sip_4_0_0_BD_Ref_Exec.sql 19 | COPY assets/pos-install.sql /docker-entrypoint-initdb.d/9_pos-install.sql 20 | 21 | RUN chmod 644 /etc/mysql/mariadb.conf.d/sei.cnf 22 | RUN chmod +r /docker-entrypoint-initdb.d/2_sei_4_0_0_BD_Ref_Exec.sql 23 | RUN chmod +r /docker-entrypoint-initdb.d/3_sip_4_0_0_BD_Ref_Exec.sql 24 | RUN sed -i '1i use sei; \n' /docker-entrypoint-initdb.d/2_sei_4_0_0_BD_Ref_Exec.sql 25 | RUN sed -i '1i use sip; \n' /docker-entrypoint-initdb.d/3_sip_4_0_0_BD_Ref_Exec.sql 26 | 27 | RUN ["sed", "-i", "s/exec \"$@\"/echo \"not running $@\"/", "/usr/local/bin/docker-entrypoint.sh"] 28 | RUN ["/usr/local/bin/docker-entrypoint.sh", "mysqld", "--datadir", "/initialized-db"] 29 | 30 | 31 | ############################## FIM DA INSTALAÇÃO ########################### 32 | FROM ${IMAGEM_BASE} 33 | COPY --from=builder /initialized-db /var/lib/mysql 34 | COPY --from=builder /etc/mysql/mariadb.conf.d/sei.cnf /etc/mysql/mariadb.conf.d/sei.cnf -------------------------------------------------------------------------------- /containers/databases/sqlserver/assets/restore.sql: -------------------------------------------------------------------------------- 1 | 2 | -- TODO: Padronizar datafiles da base de dados em SQL Server 3 | RESTORE DATABASE [sei] FROM DISK = N'/tmp/sei_sqlserver.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5, 4 | MOVE 'gedoc' TO '/var/opt/mssql/data/sei_data.mdf', 5 | MOVE 'SEI_data3' TO '/var/opt/mssql/data/sei_data1.ndf', 6 | MOVE 'SEI_data4' TO '/var/opt/mssql/data/sei_data2.ndf', 7 | MOVE 'SEI_log2' TO '/var/opt/mssql/data/sei_data3.ndf', 8 | MOVE 'Sei_Log3' TO '/var/opt/mssql/data/sei_data4.ndf', 9 | MOVE 'gedoc_log' TO '/var/opt/mssql/data/sei_1og.ldf' 10 | GO 11 | 12 | -- TODO: Padronizar datafiles da base de dados em SQL Server 13 | RESTORE DATABASE [sip] FROM DISK = N'/tmp/sip_sqlserver.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5, 14 | MOVE 'sip_Data' TO '/var/opt/mssql/data/sip_data.mdf', 15 | MOVE 'sip_Log' TO '/var/opt/mssql/data/sip_log.ldf' 16 | GO 17 | 18 | USE sei; 19 | GO 20 | 21 | DROP USER IF EXISTS [sei_user] 22 | GO 23 | 24 | CREATE LOGIN sei_user 25 | WITH PASSWORD = 'sei_user', CHECK_POLICY=OFF; 26 | GO 27 | 28 | CREATE USER sei_user FOR LOGIN sei_user; 29 | GO 30 | 31 | EXEC sp_addrolemember 'db_owner', 'sei_user' 32 | GO 33 | 34 | update orgao set sigla='ABC', descricao='ORGAO ABC' where id_orgao=0; 35 | GO 36 | 37 | delete from auditoria_protocolo; 38 | GO 39 | 40 | USE sip; 41 | GO 42 | 43 | DROP USER IF EXISTS [sip_user] 44 | GO 45 | 46 | CREATE LOGIN sip_user 47 | WITH PASSWORD = 'sip_user', CHECK_POLICY=OFF; 48 | GO 49 | 50 | CREATE USER sip_user FOR LOGIN sip_user; 51 | GO 52 | 53 | EXEC sp_addrolemember 'db_owner', 'sip_user' 54 | GO 55 | 56 | update orgao set sigla='ABC', descricao='ORGAO ABC' where id_orgao=0; 57 | GO 58 | 59 | update sistema set pagina_inicial='http://localhost/sip' where sigla='SIP'; 60 | GO 61 | 62 | update sistema set pagina_inicial='http://localhost/sei/inicializar.php', web_service='http://localhost/sei/controlador_ws.php?servico=sip' where sigla='SEI'; 63 | GO 64 | 65 | update orgao set sin_autenticar='N' where id_orgao=0; 66 | GO 67 | 68 | delete from seq_infra_auditoria 69 | GO 70 | -------------------------------------------------------------------------------- /containers/app/app-ci/assets/conf/sei.conf: -------------------------------------------------------------------------------- 1 | KeepAlive On 2 | MaxKeepAliveRequests 100 3 | KeepAliveTimeout 15 4 | 5 | Alias "/sei" "/opt/sei/web" 6 | Alias "/sip" "/opt/sip/web" 7 | Alias "/infra_css" "/opt/infra/infra_css" 8 | Alias "/infra_js" "/opt/infra/infra_js" 9 | 10 | SetEnvIfNoCase user-agent "Microsoft Data Access Internet Publishing Provider Protocol Discovery" bad_bot=1 11 | 12 | Order Allow,Deny 13 | Allow from all 14 | Deny from env=bad_bot 15 | 16 | 17 | 18 | 19 | DocumentRoot /var/www/html 20 | 21 | ServerAdmin admin@dominio.gov.br 22 | ServerName localhost 23 | 24 | DirectoryIndex index.php index.html 25 | IndexIgnore * 26 | 27 | EnableSendfile Off 28 | HostnameLookups Off 29 | ServerSignature Off 30 | AddDefaultCharset iso-8859-1 31 | 32 | # Bloqueia acesso à qualquer arquivo ou diretório externo ao DocumentRoot 33 | 34 | AllowOverride None 35 | Require all denied 36 | 37 | 38 | 39 | AllowOverride None 40 | Options None 41 | Require all granted 42 | 43 | 44 | 45 | 46 | 47 | 48 | SSLEngine on 49 | SSLCertificateFile /etc/pki/tls/certs/sei.crt 50 | SSLCertificateChainFile /etc/pki/tls/certs/sei-ca.pem 51 | SSLCertificateKeyFile /etc/pki/tls/private/sei.key 52 | 53 | DocumentRoot /var/www/html 54 | 55 | ServerAdmin admin@dominio.gov.br 56 | ServerName localhost 57 | 58 | DirectoryIndex index.php index.html 59 | IndexIgnore * 60 | 61 | EnableSendfile Off 62 | HostnameLookups Off 63 | ServerSignature Off 64 | AddDefaultCharset iso-8859-1 65 | 66 | # Bloqueia acesso à qualquer arquivo ou diretório externo ao DocumentRoot 67 | 68 | AllowOverride None 69 | Require all denied 70 | 71 | 72 | 73 | AllowOverride None 74 | Options None 75 | Require all granted 76 | 77 | 78 | -------------------------------------------------------------------------------- /containers/app/app-dev/assets/conf/deflate.conf: -------------------------------------------------------------------------------- 1 | 2 | SetOutputFilter DEFLATE 3 | 4 | 5 | 6 | ExpiresActive On 7 | ExpiresDefault "access plus 3 seconds" 8 | ExpiresByType text/html "access plus 3 seconds" 9 | ExpiresByType image/gif "access plus 2419200 seconds" 10 | ExpiresByType image/jpeg "access plus 2419200 seconds" 11 | ExpiresByType image/png "access plus 2419200 seconds" 12 | ExpiresByType image/svg+xml "access plus 2419200 seconds" 13 | ExpiresByType text/css "access plus 2419200 seconds" 14 | ExpiresByType text/javascript "access plus 2419200 seconds" 15 | ExpiresByType application/javascript "access plus 2419200 seconds" 16 | ExpiresByType application/x-javascript "access plus 2419200 seconds" 17 | 18 | 19 | 20 | AddOutputFilterByType DEFLATE text/html 21 | AddOutputFilterByType DEFLATE text/css 22 | AddOutputFilterByType DEFLATE text/javascript 23 | AddOutputFilterByType DEFLATE text/xml 24 | AddOutputFilterByType DEFLATE text/plain 25 | AddOutputFilterByType DEFLATE image/x-icon 26 | AddOutputFilterByType DEFLATE application/rss+xml 27 | AddOutputFilterByType DEFLATE application/javascript 28 | AddOutputFilterByType DEFLATE application/x-javascript 29 | AddOutputFilterByType DEFLATE application/xml 30 | AddOutputFilterByType DEFLATE application/xhtml+xml 31 | AddOutputFilterByType DEFLATE application/x-font 32 | AddOutputFilterByType DEFLATE application/x-font-truetype 33 | AddOutputFilterByType DEFLATE application/x-font-ttf 34 | AddOutputFilterByType DEFLATE application/x-font-otf 35 | AddOutputFilterByType DEFLATE application/font-woff 36 | AddOutputFilterByType DEFLATE application/x-font-woff 37 | AddOutputFilterByType DEFLATE application/x-font-woff2 38 | AddOutputFilterByType DEFLATE application/x-font-opentype 39 | AddOutputFilterByType DEFLATE application/vnd.ms-fontobject 40 | AddOutputFilterByType DEFLATE font/ttf 41 | AddOutputFilterByType DEFLATE font/otf 42 | AddOutputFilterByType DEFLATE font/eot 43 | AddOutputFilterByType DEFLATE font/woff 44 | AddOutputFilterByType DEFLATE font/woff2 45 | AddOutputFilterByType DEFLATE font/opentype 46 | 47 | -------------------------------------------------------------------------------- /dev/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | jod: 4 | image: ${DOCKER_REGISTRY}/jod:${ENVIRONMENT_VERSION} 5 | container_name: jod 6 | 7 | smtp: 8 | image: ${DOCKER_REGISTRY}/mailcatcher:${ENVIRONMENT_VERSION} 9 | container_name: smtp 10 | ports: 11 | - "1080:1080" 12 | 13 | memcached: 14 | image: ${DOCKER_REGISTRY}/memcached:${ENVIRONMENT_VERSION} 15 | container_name: memcached 16 | ports: 17 | - "11211:11211" 18 | 19 | database: 20 | image: ${DOCKER_REGISTRY}/${DATABASE_IMAGE}:${ENVIRONMENT_VERSION} 21 | container_name: ${DATABASE_HOST} 22 | restart: always 23 | volumes: 24 | - ${DATABASE_HOST}:${DATABASE_DATA_DIR} 25 | ports: 26 | - ${DATABASE_PORT}:${DATABASE_PORT} 27 | 28 | solr: 29 | image: ${DOCKER_REGISTRY}/solr8.2.0:${ENVIRONMENT_VERSION} 30 | container_name: solr 31 | ports: 32 | - "8983:8983" 33 | 34 | httpd: 35 | image: ${DOCKER_REGISTRY}/app-dev:${ENVIRONMENT_VERSION} 36 | container_name: httpd 37 | restart: always 38 | ports: 39 | - "8000:8000" 40 | depends_on: 41 | - database 42 | #command: "tail -f /dev/null" 43 | volumes: 44 | - ${SUPER_PATH}:/opt/ 45 | environment: 46 | - XDEBUG_CONFIG="idekey=default client_host=${HOST_IP} client_port=9003 discover_client_host=1" 47 | - XDEBUG_SESSION=default 48 | - XDEBUG_MODE=debug 49 | - HOST_URL=http://localhost:8000 50 | - DATABASE_TYPE=${DATABASE_TYPE} 51 | - DATABASE_HOST=${DATABASE_HOST} 52 | - DATABASE_PORT=${DATABASE_PORT} 53 | 54 | - SEI_CHAVE_ACESSO=${SEI_CHAVE_ACESSO} 55 | - SEI_DATABASE_NAME=${SEI_DATABASE_NAME} 56 | - SEI_DATABASE_USER=${SEI_DATABASE_USER} 57 | - SEI_DATABASE_PASSWORD=${SEI_DATABASE_PASSWORD} 58 | - SEI_DATABASE_USER_SCRIPT=${SEI_DATABASE_USER_SCRIPT} 59 | - SEI_DATABASE_PASSWORD_SCRIPT=${SEI_DATABASE_PASSWORD_SCRIPT} 60 | 61 | - SIP_CHAVE_ACESSO=${SIP_CHAVE_ACESSO} 62 | - SIP_DATABASE_NAME=${SIP_DATABASE_NAME} 63 | - SIP_DATABASE_USER=${SIP_DATABASE_USER} 64 | - SIP_DATABASE_PASSWORD=${SIP_DATABASE_PASSWORD} 65 | - SIP_DATABASE_USER_SCRIPT=${SIP_DATABASE_USER_SCRIPT} 66 | - SIP_DATABASE_PASSWORD_SCRIPT=${SIP_DATABASE_PASSWORD_SCRIPT} 67 | links: 68 | - database:${DATABASE_HOST} 69 | - memcached:memcached 70 | - solr:solr 71 | - smtp:smtp 72 | - jod:jod 73 | 74 | 75 | volumes: 76 | mysql: 77 | oracle: 78 | sqlserver: -------------------------------------------------------------------------------- /containers/app/app-ci/assets/scripts-e-automatizadores/modulos/mod-sei-pen/mod-sei-pen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | if [ -z "$MODULO_PEN_REPOSITORIO_ORIGEM" ]; then 5 | echo "Nenhum valor informado para MODULO_PEN_REPOSITORIO_ORIGEM, n sera feita a configuracao automatica para esse parametro" 6 | else 7 | echo "Configurando MODULO_PEN_REPOSITORIO_ORIGEM" 8 | php -r " 9 | require_once '/opt/sei/web/SEI.php'; 10 | \$conexao = BancoSEI::getInstance(); 11 | \$conexao->abrirConexao(); 12 | \$conexao->executarSql(\"UPDATE md_pen_parametro SET valor = $MODULO_PEN_REPOSITORIO_ORIGEM WHERE nome = 'PEN_ID_REPOSITORIO_ORIGEM'\"); 13 | " 14 | fi 15 | 16 | if [ -z "$MODULO_PEN_TIPO_PROCESSO_EXTERNO" ]; then 17 | echo "Nenhum valor informado para MODULO_PEN_TIPO_PROCESSO_EXTERNO, nao sera feita a config automatica para esse parametro" 18 | else 19 | echo "Configurando MODULO_PEN_TIPO_PROCESSO_EXTERNO" 20 | php -r " 21 | require_once '/opt/sei/web/SEI.php'; 22 | \$conexao = BancoSEI::getInstance(); 23 | \$conexao->abrirConexao(); 24 | \$conexao->executarSql(\"UPDATE md_pen_parametro SET valor = $MODULO_PEN_TIPO_PROCESSO_EXTERNO WHERE nome = 'PEN_TIPO_PROCESSO_EXTERNO'\"); 25 | " 26 | fi 27 | 28 | if [ -z "$MODULO_PEN_UNIDADE_GERADORA" ]; then 29 | echo "Nenhum valor informado para MODULO_PEN_UNIDADE_GERADORA, nao sera feita a config automatica para esse parametro" 30 | else 31 | echo "Configurando MODULO_PEN_UNIDADE_GERADORA" 32 | php -r " 33 | require_once '/opt/sei/web/SEI.php'; 34 | \$conexao = BancoSEI::getInstance(); 35 | \$conexao->abrirConexao(); 36 | \$conexao->executarSql(\"UPDATE md_pen_parametro SET valor = $MODULO_PEN_UNIDADE_GERADORA WHERE nome = 'PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO'\"); 37 | " 38 | 39 | fi 40 | 41 | if [ -z "$MODULO_PEN_UNIDADE_ASSOCIACAO_SUPER" ] || [ -z "$MODULO_PEN_UNIDADE_ASSOCIACAO_PEN" ]; then 42 | echo "Nenhum valor informado para MODULO_PEN_UNIDADE_ASSOCIACAO_PEN ou MODULO_PEN_UNIDADE_ASSOCIACAO_SUPER, nao sera feita a config automatica para esse parametro" 43 | else 44 | echo "Configurando MODULO_PEN_UNIDADE_ASSOCIACAO_SUPER e MODULO_PEN_UNIDADE_ASSOCIACAO_PEN " 45 | php -r " 46 | require_once '/opt/sei/web/SEI.php'; 47 | \$conexao = BancoSEI::getInstance(); 48 | \$conexao->abrirConexao(); 49 | \$conexao->executarSql(\"insert ignore into md_pen_unidade(id_unidade, id_unidade_rh) values ($MODULO_PEN_UNIDADE_ASSOCIACAO_SUPER, $MODULO_PEN_UNIDADE_ASSOCIACAO_PEN)\"); 50 | " 51 | 52 | fi -------------------------------------------------------------------------------- /containers/app/app-ci/assets/scripts-e-automatizadores/misc/enableservicePD.php: -------------------------------------------------------------------------------- 1 | setBolLigado(true); 12 | InfraDebug::getInstance()->setBolDebugInfra(false); 13 | InfraDebug::getInstance()->setBolEcho(true); 14 | 15 | $conexao = BancoSEI::getInstance(); 16 | $conexao->setBolScript(true); 17 | 18 | $SIGLA_SISTEMA=getenv('SERVICO_PD_SIGLA') ?: "GOV.BR"; 19 | $SERVICO_NOME=getenv('SERVICO_PD_NOME') ?: "Protocolo.GOV.BR"; 20 | $STR_OPERACOES=getenv('SERVICO_PD_OPERACOES') ?: "3,2,15,0,1"; 21 | 22 | 23 | $objUsuarioDTO = new UsuarioDTO(); 24 | $objUsuarioDTO->setNumIdUsuario(null); 25 | $objUsuarioDTO->setNumIdOrgao(0); 26 | $objUsuarioDTO->setStrIdOrigem(null); 27 | $objUsuarioDTO->setStrSigla($SIGLA_SISTEMA); 28 | $objUsuarioDTO->setStrNome($SIGLA_SISTEMA); 29 | $objUsuarioDTO->setNumIdContato(null); 30 | $objUsuarioDTO->setStrStaTipo(UsuarioRN::$TU_SISTEMA); 31 | $objUsuarioDTO->setStrSenha(null); 32 | $objUsuarioDTO->setStrSinAcessibilidade('N'); 33 | $objUsuarioDTO->setStrSinAtivo('S'); 34 | 35 | $objUsuarioRN = new UsuarioRN(); 36 | $objUsuarioDTO = $objUsuarioRN->cadastrarRN0487($objUsuarioDTO); 37 | 38 | $id_usuario=$objUsuarioDTO->getNumIdUsuario(); 39 | 40 | $objServicoDTO = new ServicoDTO(); 41 | $objServicoDTO->setNumIdServico(null); 42 | $objServicoDTO->setNumIdUsuario($id_usuario); 43 | $objServicoDTO->setStrIdentificacao($SERVICO_NOME); 44 | $objServicoDTO->setStrDescricao($SERVICO_NOME); 45 | $objServicoDTO->setStrServidor("*"); 46 | $objServicoDTO->setStrSinLinkExterno("S"); 47 | $objServicoDTO->setStrSinServidor("S"); 48 | $objServicoDTO->setStrSinChaveAcesso("N"); 49 | $objServicoDTO->setStrSinAtivo('S'); 50 | 51 | $objServicoRN = new ServicoRN(); 52 | $objServicoDTO = $objServicoRN->cadastrar($objServicoDTO); 53 | 54 | $id_servico = $objServicoDTO->getNumIdServico(); 55 | 56 | $arrOperacoes = explode(",", $STR_OPERACOES); 57 | 58 | foreach($arrOperacoes as $o){ 59 | $objOperacaoServicoDTO = new OperacaoServicoDTO(); 60 | $objOperacaoServicoDTO->setNumIdOperacaoServico(null); 61 | $objOperacaoServicoDTO->setNumIdServico($id_servico); 62 | $numStaOperacaoServico = $o; 63 | $objOperacaoServicoDTO->setNumStaOperacaoServico($numStaOperacaoServico); 64 | $objOperacaoServicoDTO->setNumIdTipoProcedimento(null); 65 | $objOperacaoServicoDTO->setNumIdSerie(null); 66 | $objOperacaoServicoDTO->setNumIdUnidade(null); 67 | $objOperacaoServicoRN = new OperacaoServicoRN(); 68 | $objOperacaoServicoDTO = $objOperacaoServicoRN->cadastrar($objOperacaoServicoDTO); 69 | } 70 | 71 | ?> -------------------------------------------------------------------------------- /infra/tests/README.md: -------------------------------------------------------------------------------- 1 | # Testes do Projeto 2 | 3 | Testes para o desenvolvedor desse projeto validar inicialmente se as suas alterações quebraram algo que já estava implementado anteriormente. 4 | 5 | Esses testes foram elaborados para simular diferentes configurações no arquivo envlocal.env. 6 | O teste sobe o projeto e roda validações na instância que está no ar para verificar se está tudo ok. 7 | 8 | ## Sabores das Instâncias Verificadas 9 | As instâncias são variadas alterando-se o arquivo envlocal.env 10 | 11 | - Instalação reduzida 12 | - sem balanceador 13 | - app sobe na url https://meusei.orgao.gov.br 14 | - memcached, solr e jod 15 | 16 | - Instalacao default 17 | - balanceador 18 | - app sobem em localhost 19 | - memcached, solr e jod 20 | 21 | - Instalação completa 22 | - balanceador 23 | - app sobe na url https://meusei2.orgao.gov.br 24 | - memcached, solr, jod, dbadminer, phpmemcached, openldap, phpmemcachedadmin 25 | 26 | 27 | ## Itens Verificados 28 | 29 | Seguem alguns itens que o teste verifica para cada instalação: 30 | - verificação de volumes se estao presentes ou ausentes 31 | - sobe o projeto do zero obedecendo 32 | - verifica se a url esta respondendo 33 | - verificar se o balanceador esta respondendo em seus backends 34 | - verificar se os componentes estao presentes 35 | - escalona a aplicacao e verifica componentes e balanceador 36 | - roda um teste em Selenium para logar e criar processo com doc interno e externo 37 | 38 | ## Instâncias Testadas 39 | 40 | O teste completo, roda na sequência as seguintes instâncias e testa cada uma delas: 41 | - instalação reduzida - mysql 42 | - instalação reduzida - sqlserver 43 | - instalação reduzida - oracle 44 | - instalacao default - mysql 45 | - instalacao default - sqlserver 46 | - instalacao default - oracle 47 | - instalacao completa - mysql 48 | - instalacao completa - sqlserver 49 | - instalacao completa - oracle 50 | - instalação reduzida apenas http - mysql 51 | - instalação reduzida apenas http - sqlserver 52 | - instalação reduzida apenas http - oracle 53 | - instalacao default apenas http - mysql 54 | 55 | ## Como Rodar 56 | 57 | Basta seguir para a pasta tests. 58 | 59 | ``` 60 | cd tests 61 | make help 62 | ``` 63 | informa os comandos disponíveis para o teste. Caso deseje testar apenas partes da aplicação. 64 | 65 | Um teste completo basta rodar: 66 | ``` 67 | make test_lineup_completa 68 | ``` 69 | 70 | O comando acima desencadeia o processo de teste completo criando e testando cada instância/sabor. 71 | 72 | --- 73 | 74 | Caso deseje rodar os teste em apenas uma instância, pode rodar da seguinte forma: 75 | ``` 76 | make MODALIDADE=completa BANCO=oracle test_ambiente 77 | ``` 78 | 79 | O comando acima vai rodar os testes apenas em um ambiente, na modalidade completa e no oracle 80 | 81 | outro exemplo: 82 | 83 | ``` 84 | make MODALIDADE=default BANCO=mysql test_ambiente 85 | ``` 86 | 87 | Nesse caso acima, vai rodar os testes apenas na instalação default no mysql 88 | 89 | -------------------------------------------------------------------------------- /containers/app/app-ci/assets/conf/ConfiguracaoSip.php: -------------------------------------------------------------------------------- 1 | array( 17 | 'URL' => getenv('APP_PROTOCOLO').'://'.getenv('APP_HOST').'/sip', 18 | 'Producao' => true), 19 | 20 | 'PaginaSip' => array('NomeSistema' => 'SIP'), 21 | 22 | 'SessaoSip' => array( 23 | 'SiglaOrgaoSistema' => getenv('APP_ORGAO'), 24 | 'SiglaSistema' => 'SIP', 25 | 'PaginaLogin' => getenv('APP_PROTOCOLO').'://'.getenv('APP_HOST').'/sip/login.php', 26 | 'SipWsdl' => getenv('APP_PROTOCOLO').'://'.getenv('APP_HOST').'/sip/controlador_ws.php?servico=sip', 27 | 'ChaveAcesso' => getenv('APP_SIP_CHAVE_ACESSO'), //ATEN��O: gerar uma nova chave para o SIP ap�s a instala��o (ver documento de instala��o) 28 | 'https' => (getenv('APP_PROTOCOLO') == 'https' ? true : false)), 29 | 30 | 'BancoSip' => array( 31 | 'Servidor' => getenv('APP_DB_HOST'), 32 | 'Porta' => getenv('APP_DB_PORTA'), 33 | 'Banco' => getenv('APP_DB_SIP_BASE'), 34 | 'Usuario' => getenv('APP_DB_SIP_USERNAME'), 35 | 'Senha' => getenv('APP_DB_SIP_PASSWORD'), 36 | 'UsuarioScript' => getenv('APP_DB_SIP_USERNAME'), 37 | 'SenhaScript' => getenv('APP_DB_SIP_PASSWORD'), 38 | 'Tipo' => getenv('APP_DB_TIPO')), //MySql, SqlServer, Oracle ou PostgreSql 39 | 40 | /* 41 | 'BancoAuditoriaSip' => array( 42 | 'Servidor' => '[Servidor BD]', 43 | 'Porta' => '', 44 | 'Banco' => '', 45 | 'Usuario' => '', 46 | 'Senha' => '', 47 | 'Tipo' => ''), //MySql, SqlServer, Oracle ou PostgreSql 48 | */ 49 | 50 | 'CacheSip' => array('Servidor' => 'memcached', 51 | 'Porta' => '11211'), 52 | 53 | 'InfraMail' => array( 54 | 'Tipo' => '2', //1 = sendmail (neste caso n�o � necess�rio configurar os atributos abaixo), 2 = SMTP 55 | 'Servidor' => 'smtp', 56 | 'Porta' => '25', 57 | 'Codificacao' => '8bit', //8bit, 7bit, binary, base64, quoted-printable 58 | 'MaxDestinatarios' => 999, //numero maximo de destinatarios por mensagem 59 | 'MaxTamAnexosMb' => 999, //tamanho maximo dos anexos em Mb por mensagem 60 | 'Seguranca' => '', //TLS, SSL ou vazio 61 | 'Autenticar' => false, //se true ent�o informar Usuario e Senha 62 | 'Usuario' => '', 63 | 'Senha' => '', 64 | 'Protegido' => '' //campo usado em desenvolvimento, se tiver um email preenchido entao todos os emails enviados terao o destinatario ignorado e substitu�do por este valor (evita envio incorreto de email) 65 | ) 66 | ); 67 | } 68 | } 69 | ?> 70 | -------------------------------------------------------------------------------- /containers/app/app-dev/assets/scripts-e-automatizadores/command.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Atribuição dos parâmetros de configuração do SUPER 4 | if [ -f /opt/sei/config/ConfiguracaoSEI.php ] && [ ! -f /opt/sei/config/ConfiguracaoSEI.php~ ]; then 5 | mv /opt/sei/config/ConfiguracaoSEI.php /opt/sei/config/ConfiguracaoSEI.php~ 6 | fi 7 | 8 | if [ ! -f /opt/sei/config/ConfiguracaoSEI.php ]; then 9 | cp /ConfiguracaoSEI.php /opt/sei/config/ConfiguracaoSEI.php 10 | fi 11 | 12 | # Atribuição dos parâmetros de configuração do SIP 13 | if [ -f /opt/sip/config/ConfiguracaoSip.php ] && [ ! -f /opt/sip/config/ConfiguracaoSip.php~ ]; then 14 | mv /opt/sip/config/ConfiguracaoSip.php /opt/sip/config/ConfiguracaoSip.php~ 15 | fi 16 | 17 | if [ ! -f /opt/sip/config/ConfiguracaoSip.php ]; then 18 | cp /ConfiguracaoSip.php /opt/sip/config/ConfiguracaoSip.php 19 | fi 20 | 21 | # Ajustes de permissões diversos para desenvolvimento do SUPER 22 | chmod +x /opt/sei/bin/pdfboxmerge.jar 23 | mkdir -p /opt/sip/temp 24 | mkdir -p /opt/sei/temp 25 | chmod -R 777 /opt/sei/temp 26 | chmod -R 777 /opt/sip/temp 27 | chmod -R 777 /var/sei/arquivos 28 | 29 | # Inicialização das rotinas de agendamento 30 | printenv | sed 's/^\(.*\)$$/export \1/g' > /crond_env.sh 31 | chown root:root /etc/cron.d/sei 32 | chmod 0644 /etc/cron.d/sei 33 | crond 34 | 35 | # Atualização do endereço de host da aplicação 36 | HOST_URL=${HOST_URL:-"http://localhost:8000"} 37 | SEI_DATABASE_NAME=${SEI_DATABASE_NAME:-"sei"} 38 | SEI_DATABASE_USER=${SEI_DATABASE_USER:-"root"} 39 | SEI_DATABASE_PASSWORD=${SEI_DATABASE_PASSWORD:-"P@ssword"} 40 | SIP_DATABASE_NAME=${SIP_DATABASE_NAME:-"sip"} 41 | SIP_DATABASE_USER=${SIP_DATABASE_USER:-"root"} 42 | SIP_DATABASE_PASSWORD=${SIP_DATABASE_PASSWORD:-"P@ssword"} 43 | 44 | # Ver issue #19 45 | if [ "$DATABASE_TYPE" = "SqlServer" ]; then 46 | ln -s /opt2/microsoft /opt/microsoft 47 | fi 48 | 49 | # Atualizar os endereços de host definidos para na inicialização e sincronização de sequências 50 | php -r " 51 | require_once '/opt/sip/web/Sip.php'; 52 | \$conexao = BancoSip::getInstance(); 53 | \$conexao->abrirConexao(); 54 | \$conexao->executarSql(\"update sistema set pagina_inicial='$HOST_URL/sip' where sigla='SIP'\"); 55 | \$conexao->executarSql(\"update sistema set pagina_inicial='$HOST_URL/sei/inicializar.php' where sigla='SEI'\"); 56 | \$conexao->executarSql(\"update sistema set web_service='$HOST_URL/sei/controlador_ws.php?servico=sip' where sigla='SEI'\"); 57 | \$objScriptRN = new ScriptRN(); 58 | \$objScriptRN->atualizarSequencias(); 59 | " || exit 1 60 | 61 | # Atualizar os endereços de host definidos para na inicialização e sincronização de sequências 62 | php -r " 63 | require_once '/opt/sei/web/SEI.php'; 64 | \$conexao = BancoSEI::getInstance(); 65 | \$objScriptRN = new ScriptRN(); 66 | \$objScriptRN->atualizarSequencias(); 67 | " || exit 1 68 | 69 | # Apaga o PID antes de reinicar o servidor 70 | rm -f /run/httpd/httpd.pid 71 | 72 | 73 | # Inicialização do servidor web 74 | /bin/sh -c /usr/sbin/php-fpm && /usr/sbin/httpd -DFOREGROUND 75 | -------------------------------------------------------------------------------- /dev/Makefile: -------------------------------------------------------------------------------- 1 | SHELL := /bin/bash 2 | 3 | ifneq ("$(wildcard env.env)","") 4 | include env.env 5 | endif 6 | 7 | ifndef base 8 | base=mysql 9 | endif 10 | 11 | ifndef HOST_URL 12 | HOST_URL=http://localhost:8000 13 | endif 14 | 15 | 16 | define MENSAGEM_AVISO_FONTES 17 | Nao foi possivel localizar o fonte do Super. 18 | Verifique o valor da variavel SUPER_PATH 19 | Vc pode definir um valor para a variavel SUPER_PATH: 20 | - adicionando SUPER_PATH=caminhodosfontes ao seu env.env ou 21 | - exportando a var rodadno o seguinte comando: export SUPER_PATH=caminhodosfontes 22 | 23 | endef 24 | export MENSAGEM_AVISO_FONTES 25 | 26 | CMD_CURL_SUPER_LOGIN = curl -s -L $(HOST_URL)/sei | grep "txtUsuario" 27 | 28 | help: ## Mostra essa ajuda. Voce pode usar tab para completar os comandos 29 | @fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -e 's/##//' | sed -e 's|^\ ||' 30 | 31 | env.env: ## Target de apoio. Carrega o arquivo env de acordo com a base escolhida 32 | @if [ ! -f "env.env" ]; then \ 33 | cp envs/env-$(base).env env.env; \ 34 | echo "Arquivo env.env nao existia. Copiado o arquivo default da pasta envs."; \ 35 | echo "Se for o caso, faca as alteracoes nele antes de subir o ambiente."; \ 36 | echo ""; sleep 5; \ 37 | fi 38 | 39 | 40 | check-super-path: ## Target de apoio. Verifica se o codigo do Super existe no local indicado 41 | @if [ ! -f $(SUPER_PATH)/sei/web/SEI.php ]; then \ 42 | echo "$${MENSAGEM_AVISO_FONTES}" ; \ 43 | echo ""; \ 44 | exit 1 ; \ 45 | fi 46 | 47 | 48 | # acessa o super e verifica se esta respondendo a tela de login 49 | check-super-isalive: ## Target de apoio. Verifica se o Super respondeu a tela de login 50 | @echo "" 51 | @echo "Vamos tentar acessar a pagina de login do SUPER, vamos aguardar por 45 segs." 52 | @for number in 1 2 3 4 5 6 7 8 9 ; do \ 53 | echo 'Tentando acessar...'; var=$$(echo $$($(CMD_CURL_SUPER_LOGIN))); \ 54 | if [ "$$var" != "" ]; then \ 55 | echo 'Pagina respondeu com tela de login' ; \ 56 | echo 'Acesse com $(HOST_URL)/sei ou $(HOST_URL)/sip' ; \ 57 | break ; \ 58 | else \ 59 | echo 'Aguardando resposta ...'; \ 60 | fi; \ 61 | sleep 5; \ 62 | done 63 | 64 | ## prerequisites-up: Target de apoio. Encadeia env.env e check-super-path 65 | prerequisites-up: env.env check-super-path 66 | 67 | 68 | ## up: Sobe o projeto, mas antes verifica os pre-requisitos 69 | up: prerequisites-up 70 | docker-compose --env-file env.env up -d 71 | make check-super-isalive 72 | 73 | 74 | config: ## sobreescreve o arquivo env.env para uma nova base de dados. Ex: make base=sqlserver config 75 | @cp -f envs/env-$(base).env env.env 76 | @echo "Ambiente configurado para utilizar a base de dados $(base). (base=[mysql|oracle|sqlserver])" 77 | 78 | 79 | down: ## apenas para o projeto com possibilidade de subir novamente mais tarde 80 | docker-compose --env-file env.env down 81 | 82 | 83 | ## restart: Roda os targets down e up na sequencia 84 | restart: down up 85 | 86 | 87 | ## destroy: destroi os componentes e também apaga os volumes de dados 88 | destroy: env.env 89 | docker-compose --env-file env.env down --volumes 90 | -------------------------------------------------------------------------------- /containers/haproxy/haproxy/files/cert0.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAxDbvdDEZVT+VvJ3JDrwx7swGXLWOgZh9mooyh3r9A8hv7gaG 3 | Pw/nXIe8yY1rGtjNkwv8nq/yDXaoaX3C4t0zVcTMKod1Gfw3kYT/mK1An8C24dSq 4 | HxsUjvq7Am16b2UyCpgDQV5ewA70IgOySQ5sQ3OmcsqB8IHw53otmN6z9ZdRSEq7 5 | FeOqlpApCOAGuo6bttFcD4Ka/jz3I46s0bSsvwblHXvAnnmT6hLv2ROMSJ/Pzt3N 6 | 1Z1zVhOpx7W7BUBuawbKQTvyWaE8E3u9GEVKCovST3oZb2n+WvNQUx9f4nVGXD0s 7 | VcpJl27358Nv2i2LPwuArNPuLkD6r+tVgN5tMwIDAQABAoIBAH3IKaB2iSLY7AhJ 8 | rcXAZtIKAFoWGRCCzKHwzYuEEAYIy5funsh2TX5HlYIvIeXH7aDCImMnrydqVXOq 9 | pu//lRT6X1c0FqFdydGDTMZ26eJ/C72hMp1WIsu1d4SK4d3fJUEdSZjyAhNkgqP7 10 | cqLamBR1YtJbdwjSg7gf3nMM8JgSFS5dyxcbWF2qWyp93XfmnuTSw0muimBtZHTT 11 | dKfqXqz0wO4QGERlCWqpv6VxMucmsx0LJ23NxEPbiss0tzUht7Df/gisug1Oe3MP 12 | 1/ewJaOvvwuBB2q7ss1n2jr4hkxTaiv6h3Mm/Zk+GNo2H0HXzGbp4weI6zdunyhI 13 | 9NVwtsECgYEA4uJh+FytpCAalEG+naWZ2Fi2P3ypmxU5bJrICE9tln74M1jJYeA/ 14 | epoylq7MqrSmClQ2AWYc+7JtxEb1rHPzxFaQUyy3brRZxDTpXKEx2wcs06tpxTgd 15 | iqAooVe27o/S69hf6jMtrmUwplvUvaX7kNwLYoC07qrP2zoiCMczeVsCgYEA3WT9 16 | QBLLg53z9InAIlZ5DFKEpnqb2E8LdRJX4NBgvKfSKYyhXgJFa/dObnkSpUZPdOA7 17 | gId0RIqd+7DeEinmPWenMgZKcFQ7fvoq3cyOBtb6Q8UjitCwhbX/jYxRpS95+ZuZ 18 | rDmU4AboiKFEEbnLeMYRGD2lc99rCbmkj7C8ywkCgYEA3TshjKvSJVeokygIVnBD 19 | s1HNY9qLB02K0PucUX4hvb3RB0BsHaQsQcBZ09RefZXo0emLP5HycPtrTRhkNeRa 20 | rfg6gt/3fVserNNrOYd0tb4pV7ytRkGRjLre43RETBqx8Ibr/9InmQXSimTA7KwM 21 | wRPPhh06T/7+7yWgSi7zYkECgYA6hRY32H/440h3q+2gZfELI8iyZJhLHeGuaVHX 22 | N91KIKX5m5WPztPgzPbrVo9qJmKcRyUTPTqrX2SRAdhBPtgABST5oRYOCQXM831f 23 | MVGdVzfBsBtL9wuh3FCXbq6qFhmMs+dz0aibatgOPWpLsSuqWdhs6uaP8U9Ou8ZW 24 | wOW2WQKBgARB0T67mc8K9+mJnC++FxQ+snRFkveKwqL1QP3P0L3NvHunl+LDVPe6 25 | +eHXlEPhkHEGckSt1SlIKgzQvRdAgj+NkP39YdAjhaMEH+AmH6IzeDZ1IeEZDg3E 26 | XFmR64L9ILXXkELlAI5gxn8z6sIrhSiE0ttlFnIV0EJJQTPJw5Li 27 | -----END RSA PRIVATE KEY----- 28 | -----BEGIN CERTIFICATE----- 29 | MIIDxDCCAqygAwIBAgIBATANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQGEwJhYTEL 30 | MAkGA1UECBMCYWExCzAJBgNVBAcTAmFhMQswCQYDVQQKEwJhYTELMAkGA1UECxMC 31 | YWExFzAVBgNVBAMTDnd3dy5rb2h6ZWUueHl6MREwDwYJKoZIhvcNAQkBFgJhYTAe 32 | Fw0xNzEyMjEwNDE0MDBaFw0yODEyMjEwNDE0MDBaMG0xCzAJBgNVBAYTAmFhMQsw 33 | CQYDVQQIEwJhYTELMAkGA1UEBxMCYWExCzAJBgNVBAoTAmFhMQswCQYDVQQLEwJh 34 | YTEXMBUGA1UEAxMOd3d3LmtvaHplZS54eXoxETAPBgkqhkiG9w0BCQEWAmFhMIIB 35 | IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxDbvdDEZVT+VvJ3JDrwx7swG 36 | XLWOgZh9mooyh3r9A8hv7gaGPw/nXIe8yY1rGtjNkwv8nq/yDXaoaX3C4t0zVcTM 37 | Kod1Gfw3kYT/mK1An8C24dSqHxsUjvq7Am16b2UyCpgDQV5ewA70IgOySQ5sQ3Om 38 | csqB8IHw53otmN6z9ZdRSEq7FeOqlpApCOAGuo6bttFcD4Ka/jz3I46s0bSsvwbl 39 | HXvAnnmT6hLv2ROMSJ/Pzt3N1Z1zVhOpx7W7BUBuawbKQTvyWaE8E3u9GEVKCovS 40 | T3oZb2n+WvNQUx9f4nVGXD0sVcpJl27358Nv2i2LPwuArNPuLkD6r+tVgN5tMwID 41 | AQABo28wbTAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTcNn58ungDMPtmoMFhBYXG 42 | LtfpGDALBgNVHQ8EBAMCBeAwEQYJYIZIAYb4QgEBBAQDAgZAMB4GCWCGSAGG+EIB 43 | DQQRFg94Y2EgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQELBQADggEBAC0SVGGgcYIn 44 | HsFlXSdzzTA8PFA7AULRYwuIxzYzF0FtfZwuFdoCUZX8MKXPjVwReN0fclSWKQiV 45 | WpnKxZki3aseS54gLhlZKhiyk8ibsV5nWarr5I0YA8OBR26Z+PCaYVEubxtdr/0x 46 | Dkq4H6VIbVJFPdqvE0CYOl74BJ4M8p3dWxtodUhDt82kSXnXrdjomj7nbr4YEH/3 47 | S/LVXZahMYuUM2RP1WPRoax/j9dSukMkL0Nd78PXVmx/jKPT+oysX3/bQ8OgWzdv 48 | o4vtB7hnKU28Oo7/tzb4HxHrN4Ov2L2D03d54Y47QNceZVaDa3hlygKTtaZa0wm+ 49 | CjcPERzBvWo= 50 | -----END CERTIFICATE----- 51 | -------------------------------------------------------------------------------- /infra/certificado.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDxjCCAq6gAwIBAgICEDAwDQYJKoZIhvcNAQELBQAwczELMAkGA1UEBhMCQlIx 3 | GTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxETAPBgNVBAcMCEJyYXNpbGlhMQsw 4 | CQYDVQQKDAJNUDEMMAoGA1UECwwDUEVOMRswGQYDVQQDDBJJbnRlcm9wZXJhYmls 5 | aWRhZGUwHhcNMTgwNzAyMTU1MzUzWhcNMjgwNjI5MTU1MzUzWjBcMQswCQYDVQQG 6 | EwJCUjEZMBcGA1UECAwQRGlzdHJpdG8gRmVkZXJhbDEcMBoGA1UECgwTRGVmYXVs 7 | dCBDb21wYW55IEx0ZDEUMBIGA1UEAwwLVFNFLUhPTU9MT0cwggEiMA0GCSqGSIb3 8 | DQEBAQUAA4IBDwAwggEKAoIBAQDz6/VNdq6i5s54T38V1n1xfWUjbyxLKnocuvKU 9 | wJdJIp0qbefD7jqIZ6PquPmPieUAg2XyFS9suiUxZXa8t6H8HNacqmqdGEje91i6 10 | 1Y6WLEOakVfG4kdtDgEnCI02cnJCHNCYa4Her74wxFTTNFUJWSZVc+bdMisUqc55 11 | U/kwKMg2lyfTFwogPKFN9vvlbBN4vnegN9vcvC5jkUqyF6qfDtBjNb4GeQH60YOP 12 | UjZEG7PkQXbt9pO/aw2d/SH1TTx80B3DFybAtZx0wS74mX7Xx/hYqk9OMRLPrj1S 13 | DA3mdKJcHiM1vuCOIqeny9p+3ZOaWPbTJUqNTZgrH0BzgRmzAgMBAAGjezB5MAkG 14 | A1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRp 15 | ZmljYXRlMB0GA1UdDgQWBBTj3cegMaXYVSzH/wat8Zjd5PkIzjAfBgNVHSMEGDAW 16 | gBSY3fjuu9NxOONh+aQeq5OjYC3tuzANBgkqhkiG9w0BAQsFAAOCAQEAKy8QSJK0 17 | dfWEeHu6cVVu0kJj7HfQwT0pi36HA9clWwocdbuddGcGKbW8rRUMC3xwW2vlyQzJ 18 | /DB7JxxJaTVrpnb1XLFS7dxBnctuGuec+ECUjh9T05T+SmUfCr5lpLRttm0bXYfF 19 | I1ec7/tf+PLBLlPLIxo1shXwxOwtxqTqKLE+tVCO6PTccN7VlArSqvyOcX0a5DZA 20 | +HRHuEWd+7TZvIuxGI9Lb1C2nFFKuYTLa738Q6AfqOdeKEVQkZ2/G4qKtbe+Dy/b 21 | +kI+e1NfpI9fBog+haZvcdc+j672aB5hM97t8rxg5EaVKWtHnBETgzZXKAVGXMOw 22 | lk7XwEZMNOEKLA== 23 | -----END CERTIFICATE----- 24 | -----BEGIN PRIVATE KEY----- 25 | MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDz6/VNdq6i5s54 26 | T38V1n1xfWUjbyxLKnocuvKUwJdJIp0qbefD7jqIZ6PquPmPieUAg2XyFS9suiUx 27 | ZXa8t6H8HNacqmqdGEje91i61Y6WLEOakVfG4kdtDgEnCI02cnJCHNCYa4Her74w 28 | xFTTNFUJWSZVc+bdMisUqc55U/kwKMg2lyfTFwogPKFN9vvlbBN4vnegN9vcvC5j 29 | kUqyF6qfDtBjNb4GeQH60YOPUjZEG7PkQXbt9pO/aw2d/SH1TTx80B3DFybAtZx0 30 | wS74mX7Xx/hYqk9OMRLPrj1SDA3mdKJcHiM1vuCOIqeny9p+3ZOaWPbTJUqNTZgr 31 | H0BzgRmzAgMBAAECggEBAK9ODT3AJ2Dims9y6vZJ8lwncBHYa7AV9i9B2Og5xkEE 32 | xIni9WgmhiDUw8UFbi7QPypwRUuIGE5/Ng3bS0v0elHUdBWikP8Ynf7JLBcTNugN 33 | JgUnojtJE2Z4YzGnfr374MxNI0n4Mh1Wl007PW+Rs/AFB3zw0KJ21OmD5OXkCTqn 34 | HZO/rRL6RQFiTAxgTB6eV6lrXlTrdXALPgLrgADA+13cRWmesM/rYYGBZJTv5aTt 35 | 5tGfm4YicPLeLx7C3fCF4ZSuTI+nhOn9B5xLvlbrgLxmOLevyvWX4DfAMKyXZ35w 36 | x1G5v3KiOsr62s6GPmgkUxB29zsfP8rfrCIyvONQpwkCgYEA+yKD3NOriDqS4ngc 37 | 5UYKRSA2RU8Z7wL1saiapACOrdbnr/N58SIU0LPm6Rr1yybaF5guNADRehm7DNfq 38 | OXIS3MOKP9y/77ivpl2+p3pXBv1mNqMd9ORa5Afp+T4ZhS5llvWWutoEoE7ehT8+ 39 | 5jDEaIzjgQVpjwLYvHAx2kaBx+0CgYEA+KWrk0rR0uSu37Vzg5CUZm7SQciexhs6 40 | FjC33Am0L2fOaFln0HylA9Q/Iqr+CMQ+AidwrfvFYxnu7laLiuVVRDEV5oUnmweO 41 | YThNtb97ZyxVPSsqxzpgxMfzAXdW0/mAbZVXYcTUEMUoMvIIK0eAZBnQDfcMbw/+ 42 | vJOklvSs9B8CgYEAq5NmMa3v6G/UQKO9YisbAyVBztJ/LluATvOZS2kSEdTcj8qx 43 | yjv1qqzumt4Phc8ye6I+FstkUp5XvCub28mC948k2gLQo1AzuV8czcF4yc7AUZ3Z 44 | 7qFBM7/wa5ewydvsDloVs+0V8gxQXQrbx1sUJTX0jQaMmudf+kZQ2QcIzfUCgYEA 45 | 0MmUfBcsf5ElQpZEDCrAYg8WoMSMhj9glDeOe8buNYxOJxND+C5iBggYh8zbiZL3 46 | mqlxlba/NYsWNa4YeKY/5gXtpOcUrbo3lW1I25+RSL5SSQ3RWv+rODHJ3OZP06lD 47 | bUEk4eT8SaS0L6tKrsTYi7WdHczf9PaSadj0MQn9nPMCgYEA10fjYNOi+ak/goMy 48 | oRvWdHeRBtH0FpIKYCz/PkM0OacLt7Tcoevm8YzDIJrLzkwsmz1RWjbsuFJQ2xBa 49 | LpNLHFNIssonxmDUG9gBzCLSndm9H+rlKKELRac4DyQ9mCqbaCfUQnZqbjLArtY5 50 | zF6RdIPtbw5xfchs2GbOKobCZg8= 51 | -----END PRIVATE KEY----- -------------------------------------------------------------------------------- /infra/docs/VideoTutoriais.md: -------------------------------------------------------------------------------- 1 | # Vídeo Tutoriais 2 | 3 | 4 | Os vídeos abaixo foram gravados por nossa equipe para auxiliar no entendimento do ecossistema desse projeto. 5 | 6 | Neles, citamos diversas dicas tanto do projeto em si, mas também de docker, infra e SUPER. 7 | Vale a pena gastar o tempo assistindo a todos eles principalmente se você é da área de infra, arquiteto, ou tenha pouco conhecimento no SUPER. 8 | 9 | Eles irão abrir a sua mente para um projeto mais amplo na entrada em produção. 10 | 11 | Por favor, leve em consideração que não somos editores profissinais de conteúdo, por essa razão encare os vídeos mais como um bate-papo entre *"técnicos que falam tecnicês"*. 12 | 13 | Assista-os de preferência na ordem disposta abaixo. 14 | 15 | ## Subir Infra Reduzida Rapidamente 16 | 17 | Neste vídeo demonstramos a subida do SUPER rapidamente com orientações básicas usando o arquivo default de configuração: 18 | - sobe o sei em localhost com https 19 | - Mostra a interface de estatísticas do balanceador 20 | - outras orientações básicas para rodar o projeto 21 | 22 | [Clique aqui](https://www.youtube.com/watch?v=FwPp9lZiHuM) para abrir o vídeo. 23 | 24 | 25 | ## Subir Infra Completa Rapidamente 26 | 27 | Aqui vamos demonstrar uma subida com todos os componentes disponíveis no projeto até a data de 15/05/2021. 28 | 29 | - Clona o projeto 30 | - Altera arquivo de ambiente com customizações 31 | - Sobe o SUPER com: 32 | - https 33 | - domain name de sua preferência 34 | - Nome e Sigla do Orgao de sua preferência 35 | - Descrição e Nome Complemento para o ambiente de sua preferência 36 | - balanceador com interface de estatísticas 37 | - memcached admin 38 | - solr admin 39 | - mailCatcher 40 | - phpldapadmin 41 | - dbadmin 42 | - todos os serviços sendo acessados na mesma url base (Domain Name) pelo balanceador mudando apenas o path ( Ex: https:///meusei.gov.br/haproxy, https:///meusei.gov.br/memcachedadmin, https:///meusei.gov.br/sei, etc) 43 | - muitas dicas e orientações 44 | 45 | [Clique aqui](https://www.youtube.com/watch?v=MpTLtDlSVLw) para abrir o vídeo. 46 | 47 | ## Subir Infra Reduzida Usando SqlServer ou Oracle 48 | 49 | O projeto aceita o uso do Mysql, SqlServer ou Oracle. Aqui demonstramos como subir o ambiente usando SqlServer e Oracle em conteineres. 50 | 51 | [Clique aqui](https://www.youtube.com/watch?v=IgEiR5CZEEs) para abrir o vídeo. 52 | 53 | ## Organização e Estruturação do Projeto 54 | 55 | Aqui falamos de aspectos técnicos diversos do projeto. Tecnologias e organização das informações. 56 | Importante assistir para entender o escopo geral dos ativos bem como a anatomia da solução entregue. 57 | 58 | [Clique aqui](https://www.youtube.com/watch?v=rczbANlWVRY) para abrir o vídeo. 59 | 60 | ## Subir Infra Reduzida com Algumas Customizações 61 | 62 | Aqui é uma subida mais demorada pois explicamos características pertinentes aos ambientes. 63 | - localhost com https 64 | - como mudar o nome do ambiente de localhost para outro Domain Name sem perder os dados cadastrados 65 | - Solr - administrar, forçar perda e recriar/reindexar 66 | - Scale da aplicação 67 | - outros 68 | 69 | [Clique aqui](https://www.youtube.com/watch?v=HjZfryu0sco) para abrir o vídeo. 70 | 71 | ## Subir Infra Completa com Customizações 72 | 73 | Complementando o vídeo anterior, vamos agora incrementar os componentes abrangendo todos eles. 74 | 75 | Passamos pela explicação técnica dos mesmos e vamos além explicando novos pontos e situações como: desativar o OpenLdap e voltar a config antiga automaticamente; como cadastrar usuários na árvore do Ldap; como destruir todo o ambiente e outros assuntos diversos importantes 76 | 77 | [Clique aqui](https://www.youtube.com/watch?v=m5wXBPDMVQQ) para abrir o vídeo. 78 | 79 | 80 | --- 81 | 82 | Voltar para [Readme Principal](../README.md) 83 | 84 | Voltar para [Readme Instruções](README.md) -------------------------------------------------------------------------------- /containers/app/app-ci/assets/scripts-e-automatizadores/openldap/sip-config-openldap.php: -------------------------------------------------------------------------------- 1 | abrirConexao(); 7 | 8 | $objServidorAutenticacaoDTO = new ServidorAutenticacaoDTO(); 9 | $objServidorAutenticacaoBD = new ServidorAutenticacaoBD(BancoSip::getInstance()); 10 | 11 | $objServidorAutenticacaoDTO = new ServidorAutenticacaoDTO(); 12 | $objServidorAutenticacaoDTO->setStrNome('MeuOpenLdap'); 13 | $qtd = $objServidorAutenticacaoBD->contar($objServidorAutenticacaoDTO); 14 | 15 | if($qtd){ 16 | echo "Servidor MeuOpenLdap ja cadastrado no SIP. Qualquer alteracao devera ser feita diretamente na tela do SIP\n"; 17 | echo "Caso tenha problema ao logar, como esquecimento de senha, sete a VAR OPENLDAP_DESLIGAR_NO_ORGAO_0=true e OPENLDAP_PRESENTE=false\n"; 18 | echo "Isso vai forcar o instalador a desligar o Ldap no Orgao 0\n"; 19 | 20 | }else{ 21 | 22 | $objServidorAutenticacaoBD = new ServidorAutenticacaoBD(BancoSip::getInstance()); 23 | $objServidorAutenticacaoDTO = new ServidorAutenticacaoDTO(); 24 | $objServidorAutenticacaoDTO->setNumIdServidorAutenticacao(null); 25 | $objServidorAutenticacaoDTO->setStrNome("MeuOpenLdap"); 26 | $objServidorAutenticacaoDTO->setStrStaTipo('LDAP'); 27 | $objServidorAutenticacaoDTO->setStrEndereco('openldap'); 28 | $objServidorAutenticacaoDTO->setNumPorta(389); 29 | $objServidorAutenticacaoDTO->setStrSufixo(null); 30 | $objServidorAutenticacaoDTO->setStrUsuarioPesquisa('cn=admin,dc=pen,dc=gov,dc=br'); 31 | $objServidorAutenticacaoDTO->setStrSenhaPesquisa(getenv('OPENLDAP_ADMIN_PASSWORD')); 32 | $objServidorAutenticacaoDTO->setStrContextoPesquisa('dc=pen,dc=gov,dc=br'); 33 | $objServidorAutenticacaoDTO->setStrAtributoFiltroPesquisa('uid'); 34 | $objServidorAutenticacaoDTO->setStrAtributoRetornoPesquisa('distinguishedName'); 35 | $objServidorAutenticacaoDTO->setNumVersao(3); 36 | $ret = $objServidorAutenticacaoBD->cadastrar($objServidorAutenticacaoDTO); 37 | 38 | echo "Servidor MeuOpenLdap Cadastrado no SIP com sucesso!!!\n"; 39 | 40 | echo "Vamos agora associar o servidor ao Orgao 0\n"; 41 | 42 | echo "Apagar associacoes do orgao 0\n"; 43 | 44 | $objRelOrgaoAutenticacaoDTO = new RelOrgaoAutenticacaoDTO(); 45 | $objRelOrgaoAutenticacaoDTO->retNumIdOrgao(); 46 | $objRelOrgaoAutenticacaoDTO->retNumIdServidorAutenticacao(); 47 | $objRelOrgaoAutenticacaoDTO->setNumIdOrgao(0); 48 | 49 | $objRelOrgaoAutenticacaoRN = new RelOrgaoAutenticacaoRN(); 50 | $r = $objRelOrgaoAutenticacaoRN->listar($objRelOrgaoAutenticacaoDTO); 51 | 52 | $objRelOrgaoAutenticacaoBD = new RelOrgaoAutenticacaoBD(BancoSip::getInstance()); 53 | for($i=0;$iexcluir($r[$i]); 55 | } 56 | 57 | echo "Cadastrar associcao\n"; 58 | 59 | 60 | $objServidorAutenticacaoDTO = new ServidorAutenticacaoDTO(); 61 | $objServidorAutenticacaoDTO->retNumIdServidorAutenticacao(); 62 | $objServidorAutenticacaoDTO->setStrNome('MeuOpenLdap'); 63 | 64 | $objServidorAutenticacaoBD = new ServidorAutenticacaoBD(BancoSip::getInstance()); 65 | $ret = $objServidorAutenticacaoBD->consultar($objServidorAutenticacaoDTO); 66 | 67 | $objRelOrgaoAutenticacaoBD = new RelOrgaoAutenticacaoBD(BancoSip::getInstance()); 68 | $objRelOrgaoAutenticacaoDTO = new RelOrgaoAutenticacaoDTO(); 69 | $objRelOrgaoAutenticacaoDTO->setNumIdOrgao(0); 70 | $objRelOrgaoAutenticacaoDTO->setNumIdServidorAutenticacao($ret->getNumIdServidorAutenticacao()); 71 | $objRelOrgaoAutenticacaoDTO->setNumSequencia(0); 72 | $ret = $objRelOrgaoAutenticacaoBD->cadastrar($objRelOrgaoAutenticacaoDTO); 73 | 74 | echo "Vamos agora ativar o Orgao Zero para autenticar\n"; 75 | 76 | $objOrgaoDTO = new OrgaoDTO(); 77 | $objOrgaoDTO->setNumIdOrgao(0); 78 | $objOrgaoDTO->setStrSinAutenticar('S'); 79 | $objOrgaoBD = new OrgaoBD(BancoSip::getInstance()); 80 | $objOrgaoBD->alterar($objOrgaoDTO); 81 | 82 | 83 | } 84 | 85 | ?> -------------------------------------------------------------------------------- /containers/app/app-base/assets/install.sh: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #!/bin/bash 5 | 6 | set -e 7 | 8 | yum clean all 9 | yum -y update 10 | yum -y install epel-release 11 | 12 | # Instalação dos componentes básicos do servidor web apache 13 | yum -y install \ 14 | httpd \ 15 | memcached \ 16 | openssl \ 17 | wget \ 18 | curl \ 19 | zip \ 20 | unzip \ 21 | gcc \ 22 | java-1.8.0-openjdk \ 23 | libxml2 \ 24 | cabextract \ 25 | xorg-x11-font-utils \ 26 | xorg-x11-fonts-75dpi \ 27 | fontconfig \ 28 | mod_ssl 29 | 30 | openssl req -newkey rsa:2048 -nodes -keyout /etc/pki/tls/private/localhost.key -x509 -days 365 -out /etc/pki/tls/certs/localhost.crt \ 31 | -subj "/C=BR/ST=Brasilia/L=Brasilia/O=TESTE/OU=MGI/CN=localhost" 32 | 33 | 34 | # Instalação do PHP e demais extenções necessárias para o projeto 35 | yum install -y yum-utils dnf-plugins-core 36 | yum install -y http://rpms.remirepo.net/enterprise/remi-release-8.rpm 37 | yum module reset php -y 38 | yum module enable php:remi-7.3 -y 39 | dnf config-manager --set-enabled powertools 40 | yum -y update 41 | 42 | # Instalação do PHP e demais extenções necessárias para o projeto 43 | yum -y install \ 44 | php php-common \ 45 | php-cli \ 46 | php-pear \ 47 | php-bcmath \ 48 | php-gd \ 49 | php-gmp \ 50 | php-imap \ 51 | php-intl \ 52 | php-ldap \ 53 | php-mbstring \ 54 | php-odbc \ 55 | php-pdo \ 56 | php-pecl-apcu \ 57 | php-pspell \ 58 | php-zlib \ 59 | php-snmp \ 60 | php-soap \ 61 | php-xml \ 62 | php-xmlrpc \ 63 | php-zts \ 64 | php-devel \ 65 | php-pecl-apcu-devel \ 66 | php-pecl-memcache \ 67 | php-calendar \ 68 | php-shmop \ 69 | php-intl \ 70 | php-mcrypt \ 71 | php-zip \ 72 | php-pecl-zip \ 73 | gearmand \ 74 | libgearman \ 75 | php-pecl-gearman \ 76 | cronie \ 77 | php-sodium \ 78 | git 79 | 80 | cd /tmp/assets/pacotes 81 | 82 | # Configuração do pacote de línguas pt_BR 83 | dnf install glibc-locale-source glibc-langpack-br -y 84 | localedef -c -i pt_BR -f ISO-8859-1 pt_BR.ISO-8859-1 85 | 86 | # Instalação do componentes UploadProgress 87 | tar -zxvf uploadprogress.tgz 88 | cd uploadprogress 89 | phpize 90 | ./configure --enable-uploadprogress 91 | make 92 | make install 93 | echo "extension=uploadprogress.so" > /etc/php.d/uploadprogress.ini 94 | cd - 95 | 96 | # wkhtml 97 | rpm -Uvh wkhtmltox-0.12.6.1-2.almalinux8.x86_64.rpm 98 | 99 | # fonts libraries 100 | rpm -Uvh msttcore-fonts-2.0-3.noarch.rpm 101 | 102 | if [ "$IMAGEM_APP_PACOTEMYSQL_PRESENTE" == "true" ]; then 103 | 104 | yum install -y mysql php-mysqli 105 | 106 | fi 107 | 108 | if [ "$IMAGEM_APP_PACOTESQLSERVER_PRESENTE" == "true" ]; then 109 | 110 | # Instalação dos componentes de conexão do SQL Server 111 | curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo 112 | ACCEPT_EULA=Y yum install -y msodbcsql17 113 | yum install -y libtool-ltdl-devel unixODBC unixODBC-devel php-pdo 114 | pecl channel-update pecl.php.net 115 | pecl install sqlsrv-5.10.1 pdo_sqlsrv-5.10.1 116 | printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php.d/20-sqlsrv.ini 117 | printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php.d/30-pdo_sqlsrv.ini 118 | 119 | # Ver issue #19 120 | mkdir /opt2 121 | mv /opt/microsoft /opt2 122 | ln -s /opt2/microsoft /opt/microsoft 123 | 124 | fi 125 | 126 | if [ "$IMAGEM_APP_PACOTEORACLE_PRESENTE" == "true" ]; then 127 | 128 | # ORACLE oci 129 | yum install -y libnsl 130 | yum install -y \ 131 | oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm \ 132 | oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm \ 133 | oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm 134 | 135 | echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf 136 | ldconfig 137 | 138 | # Install Oracle extensions 139 | yum install -y gcc gcc-c++ make php-devel php-pear systemtap-sdt-devel 140 | pecl channel-update pecl.php.net 141 | export PHP_DTRACE=yes && pecl install oci8-2.2.0 && unset PHP_DTRACE 142 | 143 | echo "extension=oci8.so" > /etc/php.d/oci8.ini 144 | 145 | fi 146 | 147 | cd - 148 | -------------------------------------------------------------------------------- /containers/app/app-ci/assets/conf/ConfiguracaoSEI.php: -------------------------------------------------------------------------------- 1 | array( 18 | 'URL' => getenv('APP_PROTOCOLO').'://'.getenv('APP_HOST').'/sei', 19 | 'Producao' => false, 20 | 'RepositorioArquivos' => '/sei/arquivos_externos_sei', 21 | 'Modulos' => array(/*novomodulo*/), 22 | ), 23 | 24 | /*extramodulesconfig*/ 25 | 26 | 'PaginaSEI' => array( 27 | 'NomeSistema' => 'SEI', 28 | 'NomeSistemaComplemento' => getenv('APP_NOMECOMPLEMENTO'), 29 | 'LogoMenu' => ''), 30 | 31 | 'SessaoSEI' => array( 32 | 'SiglaOrgaoSistema' => getenv('APP_ORGAO'), 33 | 'SiglaSistema' => 'SEI', 34 | 'PaginaLogin' => getenv('APP_PROTOCOLO').'://'.getenv('APP_HOST').'/sip/login.php', 35 | 'SipWsdl' => getenv('APP_PROTOCOLO').'://'.getenv('APP_HOST').'/sip/controlador_ws.php?servico=sip', 36 | 'ChaveAcesso' => getenv('APP_SEI_CHAVE_ACESSO'), 37 | 'https' => (getenv('APP_PROTOCOLO') == 'https' ? true : false)), 38 | 39 | 'BancoSEI' => array( 40 | 'Servidor' => getenv('APP_DB_HOST'), 41 | 'Porta' => getenv('APP_DB_PORTA'), 42 | 'Banco' => getenv('APP_DB_SEI_BASE'), 43 | 'Usuario' => getenv('APP_DB_SEI_USERNAME'), 44 | 'Senha' => getenv('APP_DB_SEI_PASSWORD'), 45 | 'UsuarioScript' => getenv('APP_DB_SEI_USERNAME'), 46 | 'SenhaScript' => getenv('APP_DB_SEI_PASSWORD'), 47 | 'Tipo' => getenv('APP_DB_TIPO')), //MySql, SqlServer, Oracle ou PostgreSql 48 | 49 | /* 50 | 'BancoAuditoriaSEI' => array( 51 | 'Servidor' => '[servidor BD]', 52 | 'Porta' => '', 53 | 'Banco' => '', 54 | 'Usuario' => '', 55 | 'Senha' => '', 56 | 'Tipo' => ''), //MySql, SqlServer, Oracle ou PostgreSql 57 | */ 58 | 59 | 'CacheSEI' => array('Servidor' => getenv('APP_MEMCACHED_HOST'), 60 | 'Porta' => '11211'), 61 | 62 | 'Federacao' => array( 63 | 'Habilitado' => false 64 | ), 65 | 66 | 'JODConverter' => array('Servidor' => 'http://jod:8080/converter/service'), 67 | 68 | 'Solr' => array( 69 | 'Servidor' => getenv('APP_SOLR_URL'), 70 | 'CoreProtocolos' => getenv('APP_SOLR_CORE_PROTOCOLOS'), 71 | 'TempoCommitProtocolos' => getenv('APP_SOLR_TEMPO_COMMIT_PROTOCOLOS'), 72 | 'CoreBasesConhecimento' => getenv('APP_SOLR_CORE_BASECONHECIMENTO'), 73 | 'TempoCommitBasesConhecimento' => getenv('APP_SOLR_TEMPO_COMMIT_BASECONHECIMENTO'), 74 | 'CorePublicacoes' => getenv('APP_SOLR_CORE_PUBLICACOES'), 75 | 'TempoCommitPublicacoes' => getenv('APP_SOLR_TEMPO_COMMIT_PUBLICACOES')), 76 | 77 | 78 | 79 | 'InfraMail' => array( 80 | 'Tipo' => getenv('APP_MAIL_TIPO'), //1 = sendmail (neste caso n�o � necess�rio configurar os atributos abaixo), 2 = SMTP 81 | 'Servidor' => getenv('APP_MAIL_SERVIDOR'), 82 | 'Porta' => getenv('APP_MAIL_PORTA'), 83 | 'Codificacao' => getenv('APP_MAIL_CODIFICACAO'), //8bit, 7bit, binary, base64, quoted-printable 84 | 'MaxDestinatarios' => getenv('APP_MAIL_MAXDESTINATARIOS'), //numero maximo de destinatarios por mensagem 85 | 'MaxTamAnexosMb' => getenv('APP_MAIL_MAXTAMANHOANEXOSMB'), //tamanho maximo dos anexos em Mb por mensagem 86 | 'Seguranca' => getenv('APP_MAIL_SEGURANCA'), //TLS, SSL ou vazio 87 | 'Autenticar' => getenv('APP_MAIL_AUTENTICAR'), //se true ent�o informar Usuario e Senha 88 | 'Usuario' => getenv('APP_MAIL_USUARIO'), 89 | 'Senha' => getenv('APP_MAIL_SENHA'), 90 | 'Protegido' => getenv('APP_MAIL_PROTEGIDO') //campo usado em desenvolvimento, se tiver um email preenchido entao todos os emails enviados terao o destinatario ignorado e substitu�do por este valor evitando envio incorreto de email 91 | ) 92 | ); 93 | } 94 | } 95 | ?> -------------------------------------------------------------------------------- /containers/app/app-dev/assets/scripts-e-automatizadores/ConfiguracaoSip.php: -------------------------------------------------------------------------------- 1 | array( 17 | 'URL' => getenv('HOST_URL').'/sip', 18 | 'Producao' => false, 19 | 'NumLoginSemCaptcha' => 3, 20 | 'TempoLimiteValidacaoLogin' => 60, 21 | 'Modulos' => array( 22 | //'ABCExemploIntegracao' => 'abc/exemplo', 23 | ), 24 | ), 25 | 26 | 'PaginaSip' => array( 27 | 'NomeSistema' => 'SIP', 28 | 'NomeSistemaComplemento' => '', 29 | ), 30 | 31 | 'SessaoSip' => array( 32 | 'SiglaOrgaoSistema' => 'ABC', 33 | 'SiglaSistema' => 'SIP', 34 | 'PaginaLogin' => getenv('SEI_HOST_URL') . '/sip/login.php', 35 | 'SipWsdl' => getenv('HOST_URL') . '/sip/controlador_ws.php?servico=sip', 36 | 'ChaveAcesso' => getenv('SIP_CHAVE_ACESSO'), //ATENCAO: gerar uma nova chave para o SIP após a instalação (ver documento de instalação) 37 | 'https' => false, 38 | ), 39 | 40 | 'BancoSip' => array( 41 | 'Servidor' => getenv('DATABASE_HOST'), 42 | 'Porta' => getenv('DATABASE_PORT'), 43 | 'Banco' => getenv('SIP_DATABASE_NAME'), 44 | 'Usuario' => getenv('SIP_DATABASE_USER'), 45 | 'Senha' => getenv('SIP_DATABASE_PASSWORD'), 46 | 'Tipo' => getenv('DATABASE_TYPE'), //MySql, SqlServer ou Oracle 47 | 'PesquisaCaseInsensitive' => false, 48 | ), 49 | 50 | // 'BancoAuditoriaSip' => array( 51 | // 'Servidor' => getenv('DATABASE_HOST'), 52 | // 'Porta' => getenv('DATABASE_PORT'), 53 | // 'Banco' => getenv('SIP_DATABASE_NAME'), 54 | // 'Usuario' => getenv('SIP_DATABASE_USER'), 55 | // 'Senha' => getenv('SIP_DATABASE_PASSWORD'), 56 | // 'Tipo' => getenv('DATABASE_TYPE'), //MySql, SqlServer ou Oracle 57 | // 'PesquisaCaseInsensitive' => false, 58 | // ), 59 | 60 | 'CacheSip' => array( 61 | 'Servidor' => 'memcached', 62 | 'Porta' => '11211', 63 | 'Timeout' => 2, 64 | 'Tempo' => 3600, 65 | ), 66 | 67 | 'InfraMail' => array( 68 | 'Tipo' => '2', //1 = sendmail (neste caso não é necessário configurar os atributos abaixo), 2 = SMTP 69 | 'Servidor' => 'smtp', 70 | 'Porta' => '1025', 71 | 'Codificacao' => '8bit', //8bit, 7bit, binary, base64, quoted-printable 72 | 'Autenticar' => false, //se true então informar Usuario e Senha 73 | 'Usuario' => '', 74 | 'Senha' => '', 75 | 'Seguranca' => '', //TLS, SSL ou vazio 76 | 'MaxDestinatarios' => 25, //numero maximo de destinatarios por mensagem 77 | 'MaxTamAnexosMb' => 15, //tamanho maximo dos anexos em Mb por mensagem 78 | 'Protegido' => '', //campo usado em desenvolvimento, se tiver um email preenchido entao todos os emails enviados terao o destinatario ignorado e substituído por este valor (evita envio incorreto de email) 79 | /* Abaixo chave opcional desativada com exemplo de preenchimento 80 | 'Dominios' => array( // Opcional. Permite especificar o conjunto de atributos acima individualmente para cada domínio de conta remetente. Se não existir um domínio mapeado então utilizará os atributos gerais da chave InfraMail. 81 | 'abc.jus.br' => array( 82 | 'Tipo' => '2', 83 | 'Servidor' => '10.1.3.12', 84 | 'Porta' => '25', 85 | 'Codificacao' => '8bit', 86 | 'Autenticar' => false, 87 | 'Usuario' => '', 88 | 'Senha' => '', 89 | 'Seguranca' => 'TLS', 90 | 'MaxDestinatarios' => 25, 91 | 'MaxTamAnexosMb' => 15, 92 | 'Protegido' => '', 93 | ), 94 | ), 95 | */ 96 | ), 97 | ); 98 | } 99 | } 100 | ?> -------------------------------------------------------------------------------- /infra/docs/duploSEI/duplosei.md: -------------------------------------------------------------------------------- 1 | # Como Subir 2 Instâncias do SUPER Independentes na Mesma VM/Máquina 2 | 3 | Siga esse tutorial para subir 2 Supers independentes na mesma VM. Cada um respondendo por um nome diferente. 4 | 5 | Importante seguir exatamente como está descrito inclusive obedecendo os nomes sugeridos. 6 | 7 | Uma vez que você subir da forma proposta e entender o contexto poderá modificar para o seu gosto. 8 | 9 | Verifique se não há nada rodando, ou outras instâncias que porventura vc testou nessa VM. 10 | 11 | ## Passo a Passo: 12 | 13 | Adicione isso ao seu /etc/hosts 14 | ``` 15 | 127.0.0.1 meusei1.com.br meusei2.com.br 16 | ``` 17 | crie uma pasta vazia e siga para ela 18 | ``` cd minhapasta ``` 19 | 20 | ``` git clone https://github.com/supergovbr/super-docker ``` 21 | 22 | ``` cd sei-docker/infra ``` 23 | 24 | ``` git checkout DuploSEI ``` 25 | 26 | ``` cd ../.. ``` 27 | 28 | ``` cp -R super-docker super-docker2 ``` 29 | 30 | ``` cd super-docker/infra ``` 31 | 32 | ``` vim envlocal.env ``` 33 | 34 | Encontre as linhas referentes e altere-as para exatamente esse valor: 35 | ``` 36 | export BALANCEADOR_PRESENTE=false 37 | export JOD_PRESENTE=false 38 | export APP_HOST=meusei1.com.br 39 | ``` 40 | 41 | Sobe logo o primeiro SEI 42 | ``` make setup ``` 43 | 44 | 45 | ``` 46 | cd .. 47 | cd super-docker2/infra 48 | ``` 49 | Encontre as linhas referentes e altere-as para exatamente esse valor: 50 | ``` 51 | export VOLUME_DB=local-storage-db2 52 | export VOLUME_DB_MOUNT=local-storage-db2 53 | export VOLUME_ARQUIVOSEXTERNOS=local-arquivosexternos-storage2 54 | export VOLUME_ARQUIVOSEXTERNOS_MOUNT=local-arquivosexternos-storage2 55 | export VOLUME_FONTES=local-fontes-storage2 56 | export VOLUME_FONTES_MOUNT=local-fontes-storage2 57 | export VOLUME_CERTS=local-certs-storage2 58 | export VOLUME_CERTS_MOUNT=local-certs-storage2 59 | export VOLUME_SOLR=local-volume-solr2 60 | export VOLUME_OPENLDAP_SLAPD=local-openldap-slapd-storage2 61 | export VOLUME_OPENLDAP_SLAPD_MOUNT=local-openldap-slapd-storage2 62 | export VOLUME_OPENLDAP_DB=local-openldap-db-storage2 63 | export VOLUME_OPENLDAP_DB_MOUNT=local-openldap-db-storage2 64 | export VOLUME_CONTROLADOR_INSTALACAO=local-controlador-instalacao-storage2 65 | export VOLUME_CONTROLADOR_INSTALACAO_MOUNT=local-controlador-instalacao-storage2 66 | export BALANCEADOR_PRESENTE=false 67 | export JOD_PRESENTE=false 68 | export APP_HOST=meusei2.com.br 69 | ``` 70 | 71 | ``` make criar_volumes ``` 72 | 73 | ``` make build_docker_compose ``` 74 | 75 | ``` cd orquestrators/docker-compose ``` 76 | 77 | ``` mkdir temp ``` 78 | 79 | ``` 80 | cd temp 81 | cp ../docker-compose.yml . 82 | ``` 83 | 84 | ``` docker-compose up -d ``` 85 | 86 | Espere um pouco para subir o segundo SEI. 87 | Neste momento vc terá 8 volumes e vários conteineres rodando 88 | 89 | Vamos agora subir um proxy para vc acessar os SEIs 90 | Crie uma pasta vazia nos seus projetos e siga para ela 91 | ``` 92 | mkdir ~/meuproxy 93 | cd ~/meuproxy 94 | ``` 95 | 96 | Copie o seguinte conteúdo para o arquivo docker-compose.yml dentro dessa nova pasta 97 | ``` 98 | version: '2' 99 | services: 100 | ha: 101 | image: processoeletronico/sei4-haproxydc:1.0.0 102 | environment: 103 | - EXTRA_FRONTEND_SETTINGS_80=acl is_root path -i /, acl is_sei1 hdr(host) -i meusei1.com.br, acl is_sei2 hdr(host) -i meusei2.com.br, redirect code 301 location http://meusei1.com.br/sei/ if is_root is_sei1, redirect code 301 location http://meusei2.com.br/sei/ if is_root is_sei2 104 | - EXTRA_FRONTEND_SETTINGS_443=acl is_root path -i /, acl is_sei1 hdr(host) -i meusei1.com.br, acl is_sei2 hdr(host) -i meusei2.com.br, redirect code 301 location https://meusei1.com.br/sei/ if is_root is_sei1, redirect code 301 location https://meusei2.com.br/sei/ if is_root is_sei2 105 | - CERT_FOLDER=/mycertexample 106 | - ADDITIONAL_SERVICES=docker-compose:app,temp:app 107 | ports: 108 | - 80:80 109 | - 443:443 110 | - 1936:1936 111 | networks: 112 | - docker-compose_default 113 | - temp_default 114 | volumes: 115 | - /var/run/docker.sock:/var/run/docker.sock 116 | networks: 117 | docker-compose_default: 118 | external: true 119 | temp_default: 120 | external: true 121 | ``` 122 | 123 | Suba o proxy 124 | ``` docker-compose up -d ``` 125 | 126 | Espere um pouquinho para o proxy subir. 127 | Acesse em: 128 | 129 | - localhost:1936 130 | Deve aparecer uma tela como abaixo: 131 | ![meuproxy](https://raw.githubusercontent.com/spbgovbr/sei-docker-binarios/main/docs/images/duplosei/haproxy.jpg) 132 | 133 | Verifique se os backends do proxy estao verdinhos. Sinal que subiu corretamente. Ver figura acima. 134 | 135 | - o primeiro SUPER estará disponível em: https://meusei1.com.br/ 136 | - o segundo SUPER estará disponível em: https://meusei2.com.br/ 137 | - conforme figura abaixo: 138 | ![seis](https://github.com/spbgovbr/sei-docker-binarios/raw/main/docs/images/duplosei/seisladoalado.jpg) 139 | 140 | 141 | ## Dúvidas 142 | 143 | Basta enviar para a área de issues do projeto. -------------------------------------------------------------------------------- /infra/orquestrators/rancher-kubernetes/templates/configmaps-template.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | data: 3 | APP_PROTOCOLO: "${APP_PROTOCOLO}" 4 | APP_HOST: "${APP_HOST}" 5 | APP_ORGAO: "${APP_ORGAO}" 6 | APP_ORGAO_DESCRICAO: "${APP_ORGAO_DESCRICAO}" 7 | APP_NOMECOMPLEMENTO: "${APP_NOMECOMPLEMENTO}" 8 | APP_MEMCACHED_HOST: "${APP_MEMCACHED_HOST}" 9 | APP_DB_TIPO: "${APP_DB_TIPO}" 10 | APP_DB_HOST: "${APP_DB_HOST}" 11 | APP_SOLR_URL: "${APP_SOLR_URL}" 12 | APP_SOLR_CORE_PROTOCOLOS: "${APP_SOLR_CORE_PROTOCOLOS}" 13 | APP_SOLR_TEMPO_COMMIT_PROTOCOLOS: "${APP_SOLR_TEMPO_COMMIT_PROTOCOLOS}" 14 | APP_SOLR_CORE_BASECONHECIMENTO: "${APP_SOLR_CORE_BASECONHECIMENTO}" 15 | APP_SOLR_TEMPO_COMMIT_BASECONHECIMENTO: "${APP_SOLR_TEMPO_COMMIT_BASECONHECIMENTO}" 16 | APP_SOLR_CORE_PUBLICACOES: "${APP_SOLR_CORE_PUBLICACOES}" 17 | APP_SOLR_TEMPO_COMMIT_PUBLICACOES: "${APP_SOLR_TEMPO_COMMIT_PUBLICACOES}" 18 | APP_MAIL_TIPO: "${APP_MAIL_TIPO}" 19 | APP_MAIL_SERVIDOR: "${APP_MAIL_SERVIDOR}" 20 | APP_MAIL_CODIFICACAO: "${APP_MAIL_CODIFICACAO}" 21 | APP_MAIL_MAXDESTINATARIOS: "${APP_MAIL_MAXDESTINATARIOS}" 22 | APP_MAIL_MAXTAMANHOANEXOSMB: "${APP_MAIL_MAXTAMANHOANEXOSMB}" 23 | APP_MAIL_PROTEGIDO: "${APP_MAIL_PROTEGIDO}" 24 | APP_FONTES_GIT_PATH: "${APP_FONTES_GIT_PATH}" 25 | APP_FONTES_GIT_CHECKOUT: "${APP_FONTES_GIT_CHECKOUT}" 26 | OPENLDAP_PRESENTE: "${OPENLDAP_PRESENTE}" 27 | OPENLDAP_ADMIN_PASSWORD: "${OPENLDAP_ADMIN_PASSWORD}" 28 | OPENLDAP_DESLIGAR_NO_ORGAO_0: "${OPENLDAP_DESLIGAR_NO_ORGAO_0}" 29 | SERVICO_PD_INSTALAR: "${SERVICO_PD_INSTALAR}" 30 | SERVICO_PD_SIGLA: "${SERVICO_PD_SIGLA}" 31 | SERVICO_PD_NOME: "${SERVICO_PD_NOME}" 32 | SERVICO_PD_OPERACOES: "${SERVICO_PD_OPERACOES}" 33 | MODULO_ESTATISTICAS_INSTALAR: "${MODULO_ESTATISTICAS_INSTALAR}" 34 | MODULO_ESTATISTICAS_VERSAO: "${MODULO_ESTATISTICAS_VERSAO}" 35 | MODULO_ESTATISTICAS_URL: "${MODULO_ESTATISTICAS_URL}" 36 | MODULO_ESTATISTICAS_SIGLA: "${MODULO_ESTATISTICAS_SIGLA}" 37 | MODULO_ESTATISTICAS_CHAVE: "${MODULO_ESTATISTICAS_CHAVE}" 38 | MODULO_WSSUPER_INSTALAR: "${MODULO_WSSUPER_INSTALAR}" 39 | MODULO_WSSUPER_VERSAO: "${MODULO_WSSUPER_VERSAO}" 40 | MODULO_WSSUPER_URL_NOTIFICACAO: "${MODULO_WSSUPER_URL_NOTIFICACAO}" 41 | MODULO_WSSUPER_ID_APP: "${MODULO_WSSUPER_ID_APP}" 42 | MODULO_WSSUPER_CHAVE: "${MODULO_WSSUPER_CHAVE}" 43 | MODULO_WSSUPER_TOKEN_SECRET: "${MODULO_WSSUPER_TOKEN_SECRET}" 44 | MODULO_RESPOSTA_INSTALAR: "${MODULO_RESPOSTA_INSTALAR}" 45 | MODULO_RESPOSTA_VERSAO: "${MODULO_RESPOSTA_VERSAO}" 46 | MODULO_RESPOSTA_SISTEMA_ID: "${MODULO_RESPOSTA_SISTEMA_ID}" 47 | MODULO_RESPOSTA_DOCUMENTO_ID: "${MODULO_RESPOSTA_DOCUMENTO_ID}" 48 | MODULO_GESTAODOCUMENTAL_INSTALAR: "${MODULO_GESTAODOCUMENTAL_INSTALAR}" 49 | MODULO_GESTAODOCUMENTAL_VERSAO: "${MODULO_GESTAODOCUMENTAL_VERSAO}" 50 | MODULO_LOGINUNICO_INSTALAR: "${MODULO_LOGINUNICO_INSTALAR}" 51 | MODULO_LOGINUNICO_VERSAO: "${MODULO_LOGINUNICO_VERSAO}" 52 | MODULO_LOGINUNICO_CLIENTID: "${MODULO_LOGINUNICO_CLIENTID}" 53 | MODULO_LOGINUNICO_SECRET: "${MODULO_LOGINUNICO_SECRET}" 54 | MODULO_LOGINUNICO_URLPROVIDER: "${MODULO_LOGINUNICO_URLPROVIDER}" 55 | MODULO_LOGINUNICO_REDIRECTURL: "${MODULO_LOGINUNICO_REDIRECTURL}" 56 | MODULO_LOGINUNICO_URLLOGOUT: "${MODULO_LOGINUNICO_URLLOGOUT}" 57 | MODULO_LOGINUNICO_SCOPE: "${MODULO_LOGINUNICO_SCOPE}" 58 | MODULO_LOGINUNICO_URLSERVICOS: "${MODULO_LOGINUNICO_URLSERVICOS}" 59 | MODULO_LOGINUNICO_URLREVALIDACAO: "${MODULO_LOGINUNICO_URLREVALIDACAO}" 60 | MODULO_LOGINUNICO_CIENTIDVALIDACAO: "${MODULO_LOGINUNICO_CIENTIDVALIDACAO}" 61 | MODULO_LOGINUNICO_SECRETVALIDACAO: "${MODULO_LOGINUNICO_SECRETVALIDACAO}" 62 | MODULO_LOGINUNICO_ORGAO: "${MODULO_LOGINUNICO_ORGAO}" 63 | MODULO_ASSINATURAVANCADA_INSTALAR: "${MODULO_ASSINATURAVANCADA_INSTALAR}" 64 | MODULO_ASSINATURAVANCADA_VERSAO: "${MODULO_ASSINATURAVANCADA_VERSAO}" 65 | MODULO_ASSINATURAVANCADA_CLIENTID: "${MODULO_ASSINATURAVANCADA_CLIENTID}" 66 | MODULO_ASSINATURAVANCADA_SECRET: "${MODULO_ASSINATURAVANCADA_SECRET}" 67 | MODULO_ASSINATURAVANCADA_URLPROVIDER: "${MODULO_ASSINATURAVANCADA_URLPROVIDER}" 68 | MODULO_ASSINATURAVANCADA_URL_SERVICOS: "${MODULO_ASSINATURAVANCADA_URL_SERVICOS}" 69 | MODULO_PEN_INSTALAR: "${MODULO_PEN_INSTALAR}" 70 | MODULO_PEN_VERSAO: "${MODULO_PEN_VERSAO}" 71 | MODULO_PEN_WEBSERVICE: "${MODULO_PEN_WEBSERVICE}" 72 | MODULO_PEN_CERTIFICADO_SENHA: "${MODULO_PEN_CERTIFICADO_SENHA}" 73 | MODULO_PEN_CERTIFICADO_BASE64: "${MODULO_PEN_CERTIFICADO_BASE64}" 74 | MODULO_PEN_GEARMAN_IP: "${MODULO_PEN_GEARMAN_IP}" 75 | MODULO_PEN_GEARMAN_PORTA: "${MODULO_PEN_GEARMAN_PORTA}" 76 | MODULO_PEN_QTD_WORKER_PROC: "${MODULO_PEN_QTD_WORKER_PROC}" 77 | MODULO_PEN_REPOSITORIO_ORIGEM: "${MODULO_PEN_REPOSITORIO_ORIGEM}" 78 | MODULO_PEN_TIPO_PROCESSO_EXTERNO: "${MODULO_PEN_TIPO_PROCESSO_EXTERNO}" 79 | MODULO_PEN_UNIDADE_GERADORA: "${MODULO_PEN_UNIDADE_GERADORA}" 80 | MODULO_PEN_UNIDADE_ASSOCIACAO_PEN: "${MODULO_PEN_UNIDADE_ASSOCIACAO_PEN}" 81 | MODULO_PEN_UNIDADE_ASSOCIACAO_SUPER: "${MODULO_PEN_UNIDADE_ASSOCIACAO_SUPER}" 82 | MODULO_PETICIONAMENTO_INSTALAR: "${MODULO_PETICIONAMENTO_INSTALAR}" 83 | MODULO_PETICIONAMENTO_VERSAO: "${MODULO_PETICIONAMENTO_VERSAO}" 84 | MODULO_PETICIONAMENTO_URL: "${MODULO_PETICIONAMENTO_URL}" 85 | kind: ConfigMap 86 | metadata: 87 | name: sei-app 88 | namespace: "${KUBERNETES_NAMESPACE}" -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SUPER-DOCKER 2 | 3 | 4 | ## O que é 5 | 6 | O Super-Docker é o projeto disponibilizado para provisionamento de ambientes do Super usando a tecnologia docker e os orquestradores docker-compose, cattle ou kubernetes. 7 | 8 | ## Para quem 9 | 10 | O projeto atende a qualquer dos profissionais que desejem subir uma instância do Super entre eles: 11 | - desenvolvedores 12 | - arquitetos 13 | - analistas de testes 14 | - analistas de segurança (para avaliação/mapeamento de eventuais vulnerabilidades) 15 | - profissionais de TI envolvidos nas atividades de dev e sustentação do Super 16 | 17 | ## Para que 18 | 19 | - desenvolvimento/debug do código-fonte do Super 20 | - desenvolvimento/debug do código-fonte dos módulos do Super 21 | - disponibilização de ambientes diversos para o Super: 22 | - teste 23 | - treinamento 24 | - avaliação 25 | - ambientar profissional de infra com os serviços/componentes necessários para a implantação e sustentação do Super 26 | 27 | # Organização 28 | 29 | Podemos dividir o projeto em 3 grandes áreas: 30 | 31 | - ### Dev 32 | 33 | Na pasta dev há um Automatizador (Makefile) pronto para subir uma instância do Super escolhendo a base de dados e com o xdebug habilitado. Apropriada para subir um ambiente local montando o código fonte do Super. Desta forma você pode usar o seu editor / debugger preferido na edição do código. 34 | 35 | Nessa modalidade o projeto disponibiliza para o desenvolvedor os seguintes componentes: 36 | - app (serviço apache para o Super) 37 | - database (mariadb, sqlserver ou oracle) 38 | - memcached 39 | - jod 40 | - solr 41 | - mailcatcher (servidor smtp e mailcatcher para visualizar os emails enviados) 42 | 43 | Para maiores informações, acesse a pasta dev e leia o Readme respectivo ou [clique aqui](dev/README.md) para abrir diretamente 44 | 45 | - ### Arquitetos e profissionais de infra 46 | 47 | Na pasta infra há um Automatizador (Makefile) pronto para que um profissional de infra suba rapidamente a estrutura completa do Super usando o docker-compose, com opçoes de: 48 | - openldap 49 | - simulador de servidor de email 50 | - solr admin 51 | - memcached admim 52 | - instalacao automática de módulos 53 | - orgao, siglas e descricoes do ambiente 54 | - http ou https, com cert proprio ou auto-assinado 55 | - entre outras customizações 56 | 57 | Usado para criar ambientes de teste, validação, treinamento, tanto para a área técnica quanto para a área negocial 58 | 59 | Há a possibilidade de subir toda a infra em uma única vm ou gerar as receitas kubernetes ou Cattle para rodar em seu cluster local 60 | 61 | Para maiores informações, acesse a pasta infra e leia o Readme respectivo ou [clique aqui](infra/README.md) para abrir diretamente 62 | 63 | - ### Containers 64 | 65 | Na pasta containers encontram-se as receitas para as imagens docker. Os conteineres já existem de forma pública para você rodar o projeto em sua máquina local ou infra. Não é necessário entrar aqui ou conhecer essa área para rodar o Super. 66 | 67 | Mas caso mesmo assim deseje buildar as imagens por conta própria, modificá-las ou usar o seu próprio registry; basta acessar essa pasta. Nela estão as receitas docker usadas, bem como as automatizações (Makefile) para criar seus próprios conteineres em seu próprio Docker Registry. 68 | 69 | Para maiores informações, acesse a pasta containers e leia o Readme respectivo ou [clique aqui](containers/README.md) para abrir diretamente 70 | 71 | ## Testes 72 | 73 | Caso faça alguma alteração no projeto, rode os testes propostos para garantir que pelo menos o básico está funcionando de acordo com o esperado. 74 | 75 | Dentro de cada grande área há uma pasta de testes. 76 | Nessas pastas ficam os testes automatizados para cada área: 77 | 78 | - **containers/tests**: existem diversos testes para os conteineres. 79 | 80 | Rode ``` make test-containers ``` para executar uma bateria com todos os subtestes envolvidos. Aqui ele vai criar os conteineres com a tag test e tentará fazer o push bem como outras operações previstas no makefile 81 | 82 | - **dev/tests**: aqui ele irá usar os modelos de envfiles fornecidos, subirá o Super para cada um deles e rodará testes de criacao de processo/documento para saber se está ou não funcionando. 83 | 84 | Rode ``` make tests-all-bases ``` para executar a bateria com todos os subtestes envolvidos. 85 | 86 | - **infra/tests**: existem diversos testes para a área de infra. Como são muitas possibilidades de customização esse teste é demorado. O automatizador vai subir e destruir o Super diversas vezes variando as formas e possibilidades de customização. 87 | 88 | Rode ``` make test_lineup_completa ``` para executar todos os subtestes envolvidos. Dependendo da necessidade pode executar os subtestes isoladamente, basta digitar ``` make help ``` para uma lista completa das opções disponíveis. 89 | 90 | 91 | 92 | # Pré-Requisitos 93 | 94 | Para utilizar esse projeto você precisa de: 95 | - código fonte do Super 96 | - docker 97 | - docker-compose 98 | 99 | # Origem 100 | 101 | Este projeto é a junção de dois outros projetos: 102 | - [Sei-Vagrant](https://github.com/spbgovbr/sei-vagrant) 103 | - [Sei-Docker](https://github.com/spbgovbr/sei-docker) 104 | 105 | 106 | # Dúvidas Sugestões Bugs ou Contribuição 107 | 108 | Dúvidas, sugestões ou reporte de bugs usar a parte de issues: https://github.com/supergovbr/super-docker/issues 109 | 110 | Para contribuir basta fazer o pull request. Aconselhável antes alinhar os requisitos com algum project owner. 111 | 112 | -------------------------------------------------------------------------------- /dev/README.md: -------------------------------------------------------------------------------- 1 | # SUPER-DOCKER 2 | 3 | ## DEV - Ambiente de Desenvolvimento 4 | 5 | Na pasta dev há um Automatizador (Makefile) pronto para subir uma instância do Super escolhendo a base de dados e com o xdebug habilitado. Apropriada para subir um ambiente local montando o código fonte do Super. Desta forma você pode usar o seu editor / debugger preferido na edição do código. 6 | 7 | Nessa modalidade o projeto disponibiliza para o desenvolvedor os seguintes componentes: 8 | - app (serviço apache para o Super) 9 | - database (mariadb, sqlserver ou oracle) 10 | - memcached 11 | - jod 12 | - solr 13 | - mailcatcher (servidor smtp e mailcatcher para visualizar os emails enviados) 14 | 15 | 16 | 17 | ## Pré-Requisitos 18 | 19 | Para utilizar esse projeto você precisa de: 20 | - código fonte do Super 21 | - docker 22 | - docker-compose 23 | 24 | ## Início Rápido 25 | 26 | Os comandos abaixo sobem o ambiente em mysql: 27 | 28 | ``` 29 | git clone https://github.com/supergovbr/super-docker 30 | cd dev 31 | export SUPER_PATH=~/super/FonteSuper 32 | make up 33 | ``` 34 | 35 | o comando ``` export SUPER_PATH=~/super/FonteSuper ``` deve apontar para o caminho do código fonte do SUPER (pasta onde encontra-se as pastas: sei sip infra) 36 | 37 | Após a finalização do make up você pode acessar o Super pelo seu browser através do seguinte endereço: 38 | 39 | - http://localhost:8000/sei 40 | - http://localhost:8000/sip 41 | 42 | Usuário e senha: teste 43 | 44 | 45 | 46 | ## Mais Orientações Básicas 47 | 48 | ### Sobre o arquivo env.env 49 | 50 | Nesse arquivo encontra-se as configurações que serão utilizadas pelo docker-compose para subir o Super. Caso o mesmo não exista será feita uma cópia do arquivo envs/env-mysql.env 51 | 52 | Caso deseje, por exemplo, subir o super com uma base diferente de mysql, basta rodar ``` make base=sqlserver config ``` para fazer a cópia do arquivo envs/env-sqlserver.env. O mesmo para ``` make base=oracle config ``` ou ``` make base=mysql config ``` 53 | 54 | Não esqueça de antes de alterar de base, rodar um make destroy para destruir o ambiente. 55 | 56 | ### Localização dos dados do banco de dados 57 | 58 | Os dados do banco de dados ficam em volumes docker de mesmo nome. 59 | Atenção, caso você execute make destroy os volumes também serão excluídos. Caso rode o make up novamente eles serão reconstruídos. 60 | 61 | ### Verificar localização do fonte do Super 62 | 63 | Você pode informar a localização do fonte tanto pelo arquivo env.env ou exportando a variável SUPER_PATH como indicado acima pelo Início Rápido 64 | 65 | ### Verificar se há portas ocupadas no host 66 | Antes de rodar, verifique se há algum serviço ocupando alguma das portas exigidas pelo docker-compose e desligue-o se for o caso: 67 | - 8000 (default para o Super) 68 | - 1080 serviço de smtp e mailcatcher 69 | - 11211 para o memcached 70 | - 3306, 1433 e 1521 para o banco, mysql, sqlserver e oracle respectivamente 71 | - 8983 para o solr 72 | 73 | ### Verificar comandos Make disponíveis 74 | 75 | rode ``` make help ``` para uma lista de todos os comandos disponíveis 76 | 77 | ### Comandos docker-compose 78 | 79 | o modo de utilização indicado é usando o comando make pois ele automatiza o processo de subir, parar e destruir o Super. 80 | 81 | Porém nada impede que se use os comandos existentes do docker-compose. 82 | 83 | Por ex: ``` docker-compose --env-file env.env logs -f ``` para exibir os logs de todos os serviços ou 84 | 85 | ``` docker-compose --env-file env.env logs -f httpd ``` para exibir os logs apenas do nó de aplicação 86 | 87 | 88 | ### Pasta tests 89 | 90 | Essa pasta é para quem for alterar algo no projeto. 91 | Ela vai rodar uma série de testes para garantir que o Makefile do projeto esteja correto. 92 | 93 | ``` make tests-all-bases ``` 94 | 95 | Vai subir o Super em todas as bases de dados disponíveis, tentar conectar no mesmo e rodar um teste simples em Selenium para criar processo e documentos. 96 | 97 | Devido a natureza da implementação docker, os testes em Selenium vão rodar apenas no linux quando se usa localhost. No MacOs por exemplo os testes não rodam. Portanto ao rodar os testes use o SO Linux. 98 | 99 | Mais sobre os testes [clique aqui](../README.md#testes) 100 | 101 | 102 | ## Informações Adicionais para Desenvolvedores 103 | 104 | O componente chamado db, apresentado logo após o provisionamento do ambiente, se refere ao serviço de banco de dados escolhido durante o provisionamento do ambiente, podendo ser o MySQL (padrão, Oracle ou SQLServer. A base poderá ser acesso por qualquer utilitário de conexão á banco de dados. Este serviço estará com os 2 bancos de dados utilizados pelo SEI (sei e sip) e poderá ser acessados com os seguintes usuários: 105 | 106 | ##### MySQL 107 | Usuário Root do MySQL: login:root / senha:P@ssword 108 | Usuário da Base de Dados do SEI: login: sei_user / senha: sei_user 109 | Usuário da Base de Dados do SIP: login: sip_user / senha: sip_user 110 | 111 | Ex: mysql -h 127.0.0.1 -u root -p sei 112 | 113 | ##### Oracle 114 | Usuário Root do Oracle: login:sys / senha:P@ssword 115 | Usuário de sistema do Oracle: login:system / senha:P@ssword 116 | Usuário da Base de Dados do SEI: login: sei_user / senha: sei_user 117 | Usuário da Base de Dados do SIP: login: sip_user / senha: sip_user 118 | 119 | Ex: sqlplus sys/P@ssword as sysdba 120 | 121 | ##### SQLServer 122 | Usuário Root do SQLServer: login:sa / senha:yourStrong(!)Password 123 | Usuário da Base de Dados do SEI: login: sei_user / senha: sei_user 124 | Usuário da Base de Dados do SIP: login: sip_user / senha: sip_user 125 | 126 | Ex: tsql -S 127.0.0.1 -U sa -P 'yourStrong(!)Password' 127 | 128 | 129 | * **Apache Solr** O Apache Solr também estará disponível para testes e poderá ser acessado pelo endereço: http://localhost:8983/solr 130 | 131 | * **Memcached** Servidor de cache utilizado pela aplicação SEI e SIP http://localhost:11211 132 | 133 | * **Serviço SMTP para visualizar e-mails enviados** O ambiente de desenvolvimento possui um serviço SMTP próprio para disparar os e-mails do sistema. Para visualizar os e-mails enviados acesse: http://localhost:1080 134 | 135 | -------------------------------------------------------------------------------- /dev/tests/Makefile: -------------------------------------------------------------------------------- 1 | SHELL := /bin/bash 2 | 3 | ifneq ("$(wildcard env-test.env)","") 4 | include env-test.env 5 | endif 6 | 7 | ISLINUX:=$(shell echo $$(uname | grep -i linux | wc -l)) 8 | CMDSELENIUMCHROMELOCAL=docker run -d --rm --name seleniumchrome -p 4444:4444 --network=host -v /dev/shm:/dev/shm selenium/standalone-chrome:4.0.0-rc-1-prerelease-20210618 9 | CMDSELENIUMTEST=docker run --rm -it -v "$$PWD"/Selenium/PythonExported:/t -w /t --network=host linhares/pytestseleniumdocker:latest bash -c "echo '127.0.0.1 seleniumchrome' >> /etc/hosts && pytest --disable-pytest-warnings -W ignore::DeprecationWarning -o junit_family=xunit2 --junitxml=/t/resultado.xml test_suiteBasics-executar.py" 10 | 11 | define MENSAGEM_TESTE_SELENIUM 12 | ***************************************************** 13 | ***************************************************** 14 | Vamos agora rodar um teste simples no Selenium para saber se estao de acordo: 15 | - login; 16 | - criacao de processo com anexo e doc interno; 17 | - logout 18 | ***************************************************** 19 | ***************************************************** 20 | 21 | endef 22 | export MENSAGEM_TESTE_SELENIUM 23 | 24 | define MENSAGEM_TESTE_ALL 25 | ***************************************************** 26 | ***************************************************** 27 | Vamos agora rodar um teste em todas as bases de dados. 28 | Para cada base de dados vamos: 29 | - copiar o env respectivo; 30 | - subir o projeto; 31 | - rodar teste funcional simples no selenium; 32 | - Destruir o ambiente 33 | 34 | Verifique antes de rodar se ha algo ja levantado pois o 35 | teste vai tentar criar os ambientes do zero 36 | ***************************************************** 37 | ***************************************************** 38 | 39 | endef 40 | export MENSAGEM_TESTE_ALL 41 | 42 | 43 | help: ## Mostra essa ajuda. Voce pode usar tab para completar os comandos 44 | @fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -e 's/##//' | sed -e 's|^\ ||' 45 | 46 | 47 | apagar_env: ## target de apoio para apagar arquivo env na origem 48 | @echo "Apagando arquivo env na origem" 49 | @if test -f ../env.env; then rm -rf env.env; fi; 50 | @echo "Copiando arquivo env $(BASE)" 51 | @cp ../envs/env-$(BASE).env ../ 52 | 53 | 54 | test_selenium_basico1: ## target de apoio roda um teste em selenium apontando para a instancia escolhida para criar processo com anexos 55 | 56 | @echo "$$MENSAGEM_TESTE_SELENIUM" 57 | 58 | @echo "Subindo SeleniumChrome..." 59 | 60 | @var=$$(echo $$(docker ps -a | grep "seleniumchrome")); if [ "$$var" != "" ]; then docker stop seleniumchrome; fi; 61 | 62 | ifeq ("$(ISLINUX)", "1") 63 | @echo "Subindo SeleniumChrome na rede do host" 64 | @$(CMDSELENIUMCHROMELOCAL) 65 | else 66 | @echo "Ambiente subiu com url localhost, pulando testes Selenium para quem nao usa linux. Recomendavel rodar esse teste em linux." 67 | endif 68 | 69 | @for i in {1..4}; do echo 'Tentando acessar SeleniumChrome...'; var=$$(echo $$(docker logs seleniumchrome | grep "Started Selenium Standalone")); if [ "$$var" != "" ]; then echo 'SeleniumChrome respondeu com sucesso....'; break; else echo 'Aguardando SeleniumChrome...'; fi; sleep 5; done; \ 70 | var=$$(echo $$(docker logs seleniumchrome | grep "Started Selenium Standalone")); if [ "$$var" = "" ]; then echo 'Selenium nao subiu. Saindo do teste'; exit 1; fi; 71 | 72 | @echo "Selenium no ar vamos rodar o teste..."; 73 | @rm -f Selenium/PythonExported/test_suiteBasics-executar.py && cp Selenium/PythonExported/test_suiteBasics.py Selenium/PythonExported/test_suiteBasics-executar.py 74 | @sed -i'' -e "s|<>|http|" Selenium/PythonExported/test_suiteBasics-executar.py 75 | @sed -i'' -e "s|<>|localhost:8000|" Selenium/PythonExported/test_suiteBasics-executar.py 76 | @sed -i'' -e "s|<>|teste|" Selenium/PythonExported/test_suiteBasics-executar.py 77 | 78 | ifeq ("$(ISLINUX)", "1") 79 | @echo "Subindo teste na rede do host" 80 | endif 81 | 82 | @$(CMDSELENIUMTEST) || true 83 | 84 | @echo ""; \ 85 | var=$$(grep "failure message" Selenium/PythonExported/resultado.xml); \ 86 | if [ "$$var" != "" ]; then echo 'Deu erro no teste Selenium, vamos tentar novamente em 20segs'; sleep 20; $(CMDSELENIUMTEST) || true; fi; 87 | 88 | @echo ""; \ 89 | var=$$(grep "failure message" Selenium/PythonExported/resultado.xml); \ 90 | if [ "$$var" != "" ]; then echo 'Deu erro novamente no teste Selenium, vamos tentar outra em 20segs'; sleep 20; $(CMDSELENIUMTEST) || true; fi; 91 | 92 | @echo "" 93 | @echo "Testes finalizados" 94 | @echo "Obrigado SeleniumChrome, mas vou te destruir..." 95 | @docker stop seleniumchrome 96 | 97 | 98 | @echo ""; \ 99 | var=$$(grep "failure message" Selenium/PythonExported/resultado.xml); \ 100 | if [ "$$var" != "" ]; then echo 'Deu erro no teste Selenium, verifique. Parando o restante dos testes...'; exit 1; fi; 101 | 102 | @echo ""; \ 103 | var=$$(grep "test setup failure" Selenium/PythonExported/resultado.xml); \ 104 | if [ "$$var" != "" ]; then echo 'Deu erro no teste Selenium, verifique. Parando o restante dos testes...'; exit 1; fi; 105 | 106 | 107 | tests-base: ## target de apoio roda o teste em determinada base de dados via parametro 108 | @echo "*****************************************************" 109 | @echo "Base de dados dessa execucao: $(BASE)" 110 | @echo "*****************************************************" 111 | make -C ../ destroy 112 | make -C ../ base=$(BASE) config 113 | sed -i'' -e "s|ENVIRONMENT_VERSION=.*|ENVIRONMENT_VERSION=test|g" ../env.env 114 | make -C ../ up 115 | make test_selenium_basico1 116 | make -C ../ destroy 117 | @echo "*****************************************************" 118 | @echo "Finalizado testes em ambiente na base: $(BASE)" 119 | @echo "*****************************************************" 120 | 121 | 122 | tests-all-bases: ## RODE ESSE TARGET PARA TESTAR TODA A STACK DO DEV 123 | @echo "$$MENSAGEM_TESTE_ALL" 124 | @echo "" 125 | make BASE=mysql tests-base 126 | make BASE=sqlserver tests-base 127 | make BASE=oracle tests-base 128 | @echo "*****************************************************" 129 | @echo "*****************************************************" 130 | @echo "TESTES FINALIZADOS" 131 | @echo "*****************************************************" 132 | @echo "*****************************************************" 133 | -------------------------------------------------------------------------------- /infra/orquestrators/rancher-kubernetes/templates/statefullsets-template.yaml: -------------------------------------------------------------------------------- 1 | # para facilitar o deploy em dev, vamos criar aqui o solr e o banco como deployments, em eventual prod crie-os 2 | # como statefulsets 3 | 4 | apiVersion: v1 5 | kind: Service 6 | metadata: 7 | name: db 8 | namespace: ${KUBERNETES_NAMESPACE} 9 | spec: 10 | clusterIP: None 11 | ports: 12 | - name: default 13 | port: 3306 14 | protocol: TCP 15 | targetPort: 3306 16 | selector: 17 | servico: db 18 | sessionAffinity: None 19 | type: ClusterIP 20 | 21 | --- 22 | 23 | 24 | apiVersion: apps/v1 25 | kind: Deployment 26 | metadata: 27 | name: db 28 | namespace: ${KUBERNETES_NAMESPACE} 29 | spec: 30 | replicas: 1 31 | revisionHistoryLimit: 10 32 | selector: 33 | matchLabels: 34 | servico: db 35 | strategy: 36 | type: Recreate 37 | template: 38 | metadata: 39 | labels: 40 | servico: db 41 | spec: 42 | containers: 43 | - image: ${DOCKER_IMAGE_BD} 44 | imagePullPolicy: Always 45 | name: db 46 | resources: 47 | limits: 48 | cpu: ${KUBERNETES_LIMITS_CPU_DB} 49 | memory: ${KUBERNETES_LIMITS_MEMORY_DB} 50 | requests: 51 | cpu: ${KUBERNETES_REQUEST_CPU_DB} 52 | memory: ${KUBERNETES_REQUEST_MEMORY_DB} 53 | stdin: true 54 | terminationMessagePath: /dev/termination-log 55 | terminationMessagePolicy: File 56 | tty: true 57 | volumeMounts: 58 | - mountPath: /var/lib/mysql 59 | name: vol1 60 | dnsPolicy: ClusterFirst 61 | initContainers: 62 | - command: 63 | - bash 64 | - -c 65 | - echo "Vamos verificar se existe uma pasta com os dados do mysql."; echo 66 | "Caso nao exista vamos criar..."; i=$(ls -A /t); if [[ "$(ls -A /t)" = "" ]]; then echo 67 | "Diretorio vazio, vamos copiar os dados do banco..."; cp -a /var/lib/mysql/* 68 | /t/ && echo "Dados copiados!"; else echo "Diretorio nao esta vazio. 69 | " ; echo "Arquivos encontrados"; i=$(ls -lha /t); echo $(ls -A /t); echo 70 | "Nao vamos alterar nada. " ; echo "Caso o banco nao suba, verifique se 71 | nesse dir existe um banco e que as permissoes do arquivo estejam com o mysql 72 | (id 999)" ; fi; exit 0 73 | image: ${DOCKER_IMAGE_BD} 74 | imagePullPolicy: Always 75 | name: db-init 76 | resources: 77 | limits: 78 | cpu: 100m 79 | memory: 64Mi 80 | requests: 81 | cpu: 100m 82 | memory: 64Mi 83 | stdin: true 84 | terminationMessagePath: /dev/termination-log 85 | terminationMessagePolicy: File 86 | tty: true 87 | volumeMounts: 88 | - mountPath: /t 89 | name: vol1 90 | restartPolicy: Always 91 | terminationGracePeriodSeconds: 60 92 | volumes: 93 | - name: vol1 94 | persistentVolumeClaim: 95 | claimName: vol-sei-db 96 | 97 | 98 | --- 99 | 100 | apiVersion: v1 101 | kind: Service 102 | metadata: 103 | name: solr 104 | namespace: ${KUBERNETES_NAMESPACE} 105 | spec: 106 | clusterIP: None 107 | ports: 108 | - name: default 109 | port: 8080 110 | protocol: TCP 111 | targetPort: 8080 112 | selector: 113 | servico: solr 114 | sessionAffinity: None 115 | type: ClusterIP 116 | 117 | 118 | --- 119 | 120 | apiVersion: apps/v1 121 | kind: Deployment 122 | metadata: 123 | name: solr 124 | namespace: ${KUBERNETES_NAMESPACE} 125 | spec: 126 | replicas: 1 127 | revisionHistoryLimit: 10 128 | selector: 129 | matchLabels: 130 | servico: solr 131 | strategy: 132 | type: Recreate 133 | template: 134 | metadata: 135 | labels: 136 | servico: solr 137 | spec: 138 | containers: 139 | - image: ${DOCKER_IMAGE_SOLR} 140 | imagePullPolicy: Always 141 | name: solr 142 | livenessProbe: 143 | failureThreshold: 3 144 | httpGet: 145 | path: /solr/admin/info/system 146 | port: 8983 147 | scheme: HTTP 148 | initialDelaySeconds: 20 149 | periodSeconds: 10 150 | successThreshold: 1 151 | timeoutSeconds: 10 152 | readinessProbe: 153 | failureThreshold: 3 154 | httpGet: 155 | path: /solr/admin/info/system 156 | port: 8983 157 | scheme: HTTP 158 | initialDelaySeconds: 20 159 | periodSeconds: 10 160 | successThreshold: 1 161 | timeoutSeconds: 10 162 | resources: 163 | limits: 164 | cpu: ${KUBERNETES_LIMITS_CPU_SOLR} 165 | memory: ${KUBERNETES_LIMITS_MEMORY_SOLR} 166 | requests: 167 | cpu: ${KUBERNETES_REQUEST_CPU_SOLR} 168 | memory: ${KUBERNETES_REQUEST_MEMORY_SOLR} 169 | stdin: true 170 | terminationMessagePath: /dev/termination-log 171 | terminationMessagePolicy: File 172 | tty: true 173 | volumeMounts: 174 | - mountPath: /dados 175 | name: vol1 176 | dnsPolicy: ClusterFirst 177 | initContainers: 178 | - command: 179 | - bash 180 | - -c 181 | - echo "Vamos verificar se existe uma pasta com os dados do solr."; echo 182 | "Caso nao exista vamos criar..."; if [[ "$(ls -A /t)" = "" ]]; then 183 | echo "Diretorio vazio, vamos copiar os dados do solr..."; cp -a /dados/* 184 | /t/ && echo "Dados copiados!"; else echo "Diretorio nao esta vazio. " ; 185 | echo "Arquivos encontrados"; echo $(ls -lha /t); echo "Nao vamos alterar 186 | nada. " ; echo "Caso o solr nao suba, verifique se nesse dir existe um 187 | solr e que as permissoes do arquivo estejam com o Solr (id 1000)" ; fi; exit 188 | 0 189 | image: ${DOCKER_IMAGE_SOLR} 190 | imagePullPolicy: Always 191 | name: solr-init 192 | resources: 193 | limits: 194 | cpu: 100m 195 | memory: 64Mi 196 | requests: 197 | cpu: 100m 198 | memory: 64Mi 199 | stdin: true 200 | terminationMessagePath: /dev/termination-log 201 | terminationMessagePolicy: File 202 | tty: true 203 | volumeMounts: 204 | - mountPath: /t 205 | name: vol1 206 | restartPolicy: Always 207 | terminationGracePeriodSeconds: 60 208 | volumes: 209 | - name: vol1 210 | persistentVolumeClaim: 211 | claimName: vol-sei-solr 212 | 213 | -------------------------------------------------------------------------------- /infra/docs/Instrucoes.md: -------------------------------------------------------------------------------- 1 | # Instruções Iniciais Básicas 2 | 3 | 4 | ## Pré-requisitos 5 | - linux ou MacOs 6 | - docker 7 | - docker-compose 8 | - o projeto usa também makefile e comandos como envsubst, portanto os pacotes para esses comandos devem estar instalados, geralmente eles já vem por default 9 | - e o principal: **Código Fonte do SUPER** 10 | 11 | *PS: versões antigas do docker ou docker-compose fatalmente irão dar erro* 12 | 13 | ## Como funciona esse projeto? 14 | 15 | Muito simples, ele é um automatizador de ambiente virtual docker. 16 | 1. Define-se parametros gerais no arquivo envlocal.env 17 | 2. Makefile cria os volumes docker necessários 18 | 3. Makefile cria a receita do orquestrador referente ao projeto 19 | 4. Makefile roda o orquestrador desejado 20 | 5. A partir dai vc pode usar o orquestrador para acompanhar a execução ou usar os próprios comandos incorporados ao Makefile para controlar o projeto 21 | 22 | ## Leia Isso Antes de Rodar 23 | 24 | Depois de clonar o projeto, vá até o dir raiz. Digite e leia o resultado dos seguintes comandos: 25 | ``` 26 | make 27 | ou 28 | make help 29 | ``` 30 | Vai mostrar a ajuda para cada comando make que você pode efetuar. 31 | 32 | Todas as configurações do SEI que irá subir, ficam no arquivo envlocal.env 33 | 34 | Inicialmente sugerimos que vc verifique a variável: 35 | LOCALIZACAO_FONTES_SUPER 36 | leia a orientação que ali aparece e posicione o código fonte no local adequado. 37 | 38 | **IMPORTANTE: A recomendação inicial é que você não seja um doido e já saia modificando o arquivo envlocal.env a revelia.** 39 | 40 | Suba primeiro com a sugestão ofertada. Depois usando o make, desligue o projeto e remova os volumes. Altere um parâmetro no envlocal.env e suba novamente. Teste as alterações e o resto do ambiente. Desligue e limpe os volumes novamente, altere os parâmetros e suba até compreender todo o ecossistema e definir o que você vai deixar rodando. 41 | 42 | Depois de subir em localhost e testar, pare o projeto, apague tudo com o comando make adequado; abra o envlocal.env novamente e altere ali a chave que indica qual o nome da url do SUPER e coloque a url desejada. Lembre q o seu DNS ou seu /etc/hosts devem apontar para a máquina onde vc está subindo o novo SUPER. 43 | 44 | Verifique se não há nada rodando na porta 80 ou 443 senao ele não irá subir. 45 | 46 | Para rodar todo o projeto com um único comando: 47 | ``` 48 | make setup 49 | ``` 50 | O make setup se desmembra em diversos outros comandos. Recomendado que vc os conheça para desenvolver um bom trabalho. 51 | 52 | Parar todo o projeto: 53 | ``` 54 | make clear 55 | ``` 56 | 57 | Limpar todos os volumes (aqui perde a persistência dos dados, cuidado): 58 | ``` 59 | make apagar_volumes 60 | ``` 61 | 62 | PS: Importante: Recomendamos sempre antes de rodar o make run ou make setup, caso tenha alterado alguma configuração no envlocal.env que rode antes o comando make clear. Isso é importante para você evitar ficar com serviços orfãos rodando e atrapalhando tudo. Isso acontece quando se altera o envlocal tirando serviços que antes estavam no ar. Não se preocupe pois o make clear não apaga dados, apenas conteineres e redes. 63 | 64 | 65 | 66 | ## Makefile 67 | 68 | Após posicionar corretamente o fonte do SUPER vc poderá usar o Makefile para montar a receita para o seu orquestrador preferido. Agora apenas está disponível o docker-compose. 69 | 70 | Vamos agora subir o SEI completo em 3 passos: 71 | 72 | - 1. Baixar/clonar o projeto do SUPER 73 | ``` 74 | git clone https://github.com/supergovbr/super-docker.git 75 | #vá para a pasta do projeto 76 | cd super-docker/infra 77 | ``` 78 | 79 | - 2. Posicionar o volume dos Fontes do SUPER 80 | ``` 81 | ver arquivo envlocal.env e posicionar de acordo 82 | ``` 83 | 84 | - 3. Subir o projeto 85 | ``` 86 | make setup 87 | ``` 88 | O make setup acima, vai ler o seu envlocal.env e vai montar um docker-compose.yml adequado para rodar o SUPER. 89 | A partir dai ele já vai baixar as imagens dos componentes necessários e rodar toda a infra disponibilizada. 90 | 91 | ## Comandos Adicionais 92 | 93 | Se você conhecer o docker-compose poderá usar seus conhecimentos para orquestrar o projeto a partir dele. 94 | O make cria o docker-compose.yml no diretorio orquestrator/docker-compose 95 | 96 | Ou vc pode usar o make como abaixo. 97 | Existem alguns comandos necessários, por exemplo para vc destruir tudo e começar do zero, caso encontre algum problema. 98 | 99 | Rodando make ou make help teremos a disposição os comandos existentes, leia cada um deles e tente entender o que cada um faz. Essa lista irá crescer ao longo do tempo: 100 | ``` 101 | ➜ sei-docker git:(master) make help 102 | help: Lista de comandos disponiveis e descricao. Voce pode usar TAB para completar os comandos 103 | criar_volumes: Cria todos os volumes necessarios ao projeto. As vezes eh necessario apagar os volumes antes, para apagar make apagar_volumes 104 | criar_volume_fontes: Cria o volume docker com os fontes que serao consumidos pelo projeto 105 | criar_volume_certs: Cria o volume docker com os certs que serao consumidos pelo projeto 106 | criar_volume_banco: Cria o volume docker com os fontes que serao consumidos pelo projeto 107 | criar_volume_arquivos_externos: Cria o volume docker para os arquivos externos 108 | criar_volume_solr: Cria o volume docker para os dados do solr 109 | criar_volume_openldap_slapd: Cria o volume docker para a base do openldap slapd 110 | criar_volume_openldap_db: Cria os volumes docker para a base do openldap db 111 | criar_volume_controlador_instalacao: Cria o volume para controlar a instalacao do SEI e modulos 112 | build_docker_compose: Construa o docker-compose.yml baseado no arquivo envlocal.env 113 | run: roda na sequencia build_docker_compose e up -d 114 | setup: executa criar_volumes e run na sequencia 115 | scale: escala os nohs de aplicacao do SEI para 2. Caso vc queira mais de 2 basta usar o comando make qtd=3 scale, substituindo o 3 pelo numero desejado, ou o comando docker-compose scale app=x na pasta orquestrators/docker-compose 116 | stop: docker-compose stop e docker-compose rm -f 117 | logs: docker-compose logs -f pressione ctrol+c para sair 118 | logs_app: docker-compose logs -f app pressione ctrol+c para sair 119 | logs_app-atualizador: docker-compose logs -f app-atualizador pressione ctrol+c para sair 120 | logs_balanceador: docker-compose logs -f balanceador pressione ctrol+c para sair 121 | logs_openldap: docker-compose logs -f openldap pressione ctrol+c para sair 122 | logs_solr: docker-compose logs -f solr pressione ctrol+c para sair 123 | clear: pahra o projeto e remove tds os conteineres, redes criados. Nao remove os volumes 124 | apagar_volumes: Apaga todos os volumes do projeto ATENCAO TODOS OS DADOS DE BASE E ARQUIVOS SERAO DELETADOS 125 | apagar_volume_fontes: Monte o volume docker com os fontes que serao consumidos pelo projeto 126 | apagar_volume_certs: Monte o volume docker com os fontes que serao consumidos pelo projeto 127 | apagar_volume_banco: Apagar volume do banco 128 | apagar_volume_arquivos_externos: Apagar volume Arquivos Externos 129 | apagar_volume_solr: Apagar volume Solr 130 | apagar_volume_openldap: Apagar volumes OpenLDAP 131 | apagar_volume_controlador_instalacao: Apagar volume controlador da instalacao 132 | ``` 133 | 134 | ## Vídeo Tutoriais 135 | 136 | - [Clique aqui](VideoTutoriais.md) para abrir a ajuda com os vídeos tutoriais 137 | 138 | --- 139 | 140 | ## Como subir 2 instâncias (2 SUPERs diferentes) na mesma vm 141 | 142 | Siga esse [tutorial aqui](duploSEI/duplosei.md) 143 | 144 | 145 | ## Testes do Desenvolvedor 146 | 147 | Leia [isso](../tests/README.md) 148 | 149 | --- 150 | Voltar para [Readme Principal](../README.md) -------------------------------------------------------------------------------- /infra/tests/Selenium/PythonExported/test_suiteBasics-original.py: -------------------------------------------------------------------------------- 1 | # Generated by Selenium IDE 2 | import pytest 3 | import time 4 | import json 5 | from selenium import webdriver 6 | from selenium.webdriver.common.by import By 7 | from selenium.webdriver.common.action_chains import ActionChains 8 | from selenium.webdriver.support import expected_conditions 9 | from selenium.webdriver.support.wait import WebDriverWait 10 | from selenium.webdriver.common.keys import Keys 11 | from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 12 | 13 | class TestSuiteBasics(): 14 | def setup_method(self, method): 15 | desired_capabilities = DesiredCapabilities.CHROME.copy() 16 | desired_capabilities['acceptInsecureCerts'] = True 17 | 18 | self.driver = webdriver.Remote(command_executor='http://seleniumchrome:4444/wd/hub', desired_capabilities=desired_capabilities) 19 | self.vars = {} 20 | 21 | def teardown_method(self, method): 22 | self.driver.quit() 23 | 24 | def wait_for_window(self, timeout = 2): 25 | time.sleep(round(timeout / 1000)) 26 | wh_now = self.driver.window_handles 27 | wh_then = self.vars["window_handles"] 28 | if len(wh_now) > len(wh_then): 29 | return set(wh_now).difference(set(wh_then)).pop() 30 | 31 | def test_loginBasico(self): 32 | self.driver.get("<>://<>/sip/login.php?sigla_orgao_sistema=ME&sigla_sistema=SEI&infra_url=L3NlaS8=") 33 | WebDriverWait(self.driver, 30).until(expected_conditions.element_to_be_clickable((By.ID, "txtUsuario"))) 34 | self.driver.find_element(By.ID, "txtUsuario").send_keys("teste") 35 | self.driver.find_element(By.ID, "pwdSenha").click() 36 | self.driver.find_element(By.ID, "pwdSenha").send_keys("<>") 37 | self.driver.find_element(By.ID, "Acessar").click() 38 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//div[@id=\'divControleProcessosConteudo\']/div[2]"))) 39 | elements = self.driver.find_elements(By.XPATH, "//div[@id=\'divControleProcessosConteudo\']/div[2]") 40 | assert len(elements) > 0 41 | self.driver.find_element(By.ID, "divInfraBarraLocalizacao").click() 42 | self.driver.find_element(By.LINK_TEXT, "Infra").click() 43 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//span[contains(.,\'Módulos\')]"))) 44 | self.driver.find_element(By.XPATH, "//span[contains(.,\'Módulos\')]").click() 45 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.ID, "divInfraBarraLocalizacao"))) 46 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//td[contains(.,\'Módulo de Estatisticas do SEI\')]"))) 47 | elements = self.driver.find_elements(By.XPATH, "//td[contains(.,\'Módulo de Estatisticas do SEI\')]") 48 | assert len(elements) > 0 49 | self.driver.find_element(By.XPATH, "//span[contains(.,\'Agendamentos\')]").click() 50 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//td[contains(.,\'MdEstatisticasAgendamentoRN :: coletarIndicadores\')]"))) 51 | elements = self.driver.find_elements(By.XPATH, "//td[contains(.,\'MdEstatisticasAgendamentoRN :: coletarIndicadores\')]") 52 | assert len(elements) > 0 53 | self.driver.find_element(By.XPATH, "//span[contains(.,\'Iniciar Processo\')]").click() 54 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.LINK_TEXT, "Arrecadação: Cobrança"))) 55 | self.driver.find_element(By.LINK_TEXT, "Arrecadação: Cobrança").click() 56 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.ID, "txtDescricao"))) 57 | self.driver.find_element(By.ID, "txtDescricao").click() 58 | self.driver.find_element(By.ID, "txtDescricao").send_keys("teste") 59 | self.driver.find_element(By.CSS_SELECTOR, "#divOptPublico .infraRadioLabel").click() 60 | self.driver.find_element(By.CSS_SELECTOR, "#divInfraBarraComandosInferior > #btnSalvar").click() 61 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrArvore\']"))) 62 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrVisualizacao\']"))) 63 | self.driver.switch_to.frame(1) 64 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//img[@alt=\'Incluir Documento\']"))) 65 | self.driver.find_element(By.XPATH, "//img[@alt=\'Incluir Documento\']").click() 66 | self.driver.find_element(By.LINK_TEXT, "Despacho").click() 67 | self.driver.find_element(By.CSS_SELECTOR, "#divOptPublico .infraRadioLabel").click() 68 | self.vars["window_handles"] = self.driver.window_handles 69 | self.driver.find_element(By.CSS_SELECTOR, "#divInfraBarraComandosInferior > #btnSalvar").click() 70 | self.vars["win1687"] = self.wait_for_window(2000) 71 | self.vars["root"] = self.driver.current_window_handle 72 | self.driver.switch_to.window(self.vars["win1687"]) 73 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//form[@id=\'frmEditor\']"))) 74 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//form[@id=\'frmEditor\']/div[2]/div[4]/div/div/iframe"))) 75 | time.sleep(2) 76 | self.driver.close() 77 | self.driver.switch_to.window(self.vars["root"]) 78 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrArvore\']"))) 79 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrVisualizacao\']"))) 80 | self.driver.switch_to.frame(1) 81 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//img[@alt=\'Incluir Documento\']"))) 82 | self.driver.find_element(By.XPATH, "//img[@alt=\'Incluir Documento\']").click() 83 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.LINK_TEXT, "Externo"))) 84 | self.driver.find_element(By.LINK_TEXT, "Externo").click() 85 | WebDriverWait(self.driver, 30).until(expected_conditions.element_to_be_clickable((By.ID, "selSerie"))) 86 | self.driver.find_element(By.ID, "selSerie").click() 87 | dropdown = self.driver.find_element(By.ID, "selSerie") 88 | dropdown.find_element(By.XPATH, "//option[. = 'Abaixo-Assinado']").click() 89 | WebDriverWait(self.driver, 30).until(expected_conditions.element_to_be_clickable((By.ID, "filArquivo"))) 90 | self.driver.find_element(By.ID, "txtDataElaboracao").click() 91 | self.driver.find_element(By.ID, "txtDataElaboracao").send_keys("03/09/2020") 92 | self.driver.find_element(By.CSS_SELECTOR, "#divOptNato .infraRadioLabel").click() 93 | self.driver.find_element(By.CSS_SELECTOR, "#divOptPublico .infraRadioLabel").click() 94 | self.driver.find_element(By.ID, "filArquivo").send_keys("teste.pdf") 95 | self.driver.find_element(By.CSS_SELECTOR, "#divInfraBarraComandosInferior > #btnSalvar > .infraTeclaAtalho").click() 96 | self.driver.switch_to.default_content() 97 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrArvore\']"))) 98 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrVisualizacao\']"))) 99 | self.driver.find_element(By.LINK_TEXT, "Menu").click() 100 | self.driver.find_element(By.XPATH, "//ul[@id=\'infraMenu\']/li[8]/a/span").click() 101 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//a[contains(.,\'99990\')]"))) 102 | elements = self.driver.find_elements(By.XPATH, "//a[contains(.,\'99990\')]") 103 | assert len(elements) > 0 104 | self.driver.find_element(By.CSS_SELECTOR, "#lnkSairSistema > .infraImg").click() 105 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.ID, "txtUsuario"))) 106 | elements = self.driver.find_elements(By.ID, "txtUsuario") 107 | assert len(elements) > 0 108 | 109 | -------------------------------------------------------------------------------- /infra/README.md: -------------------------------------------------------------------------------- 1 | # SUPER - Docker 2 | 3 | 4 | # Projeto de Infraestrutura sob Código para o SUPER 5 | 6 | Esse projeto altamente parametrizável permitirá ao administrador de infraestrutura subir um SUPER completo, com todos os componentes necessários para o seu uso imediato em ambiente de DTH. 7 | 8 | Nesse momento vamos focar o esforço para um ambiente de Desenvolvimento / Testes / Treinamento ou Primeira Homologação - DTH. 9 | 10 | **Não recomendado para produção.** 11 | 12 | Configurações e ajustes em produção deverão ser observadas todas as recomendações na documentação do TRF, do PEN e as melhores práticas de infraestrutura de TI comercialmente aceitas. Eventualmente dependendo das necessidades dos órgãos e priorizações alinhadas com a comunidade poderemos evoluir a entrega para algo mais próximo de produção. Porém importante frisar que os ativos de segurança, como firewall, filtro de conteúdo, backup entre outros ficam a cargo do órgão responsável. 13 | 14 | **Atenção** 15 | O código fonte do SEI é propriedade do TRF4. Sob nenhuma hipótese o mesmo deverá ser distribuído, emprestado ou salvo em qualquer lugar que não seja privativo da TI do orgão. 16 | 17 | Para maiores informações sobre o código fonte consulte o site do [processoeletronico.gov.br](http://processoeletronico.gov.br) 18 | 19 | ## Anatomia do Projeto Atualmente 20 | 21 | Segue a anatomia do projeto atualmente caso se deseje subir por completo. Cada computadorzinho ai é um conteiner docker e cada tamborzinho é um volume docker. Os links e acessos são responsabilidade do orquestrador escolhido: 22 | 23 | *Clique com o botão direito na figura -> copiar endereço da imagem; depois abra em uma nova aba do seu browser:* 24 | 25 | ![Anatomia do Projeto](https://github.com/spbgovbr/sei-docker-binarios/raw/main/docs/images/anatomia_01.jpeg) 26 | 27 | ## Kubernetes 28 | 29 | Além da infra acima em docker-compose existe uma receita para rodar um ambiente de dev em kubernetes. 30 | A receita kubernetes conta com os seguintes recursos: 31 | - **configmap** - mapeamento dos valores env do app 32 | - **secret** - segredos e senhas 33 | - **persistent volume claimns** - pontos de montagem para persistência 34 | - **job de instalacao inicial** - instalador inicial do sistema 35 | - **statefullsets** para o banco e solr 36 | - **deployments** para jod, memcached e sei-app 37 | - **ingress** com https 38 | - gera apenas para mysql 39 | 40 | Para gerar a receita kubernetes basta ajustar seu envfile com os valores corretos (url desejada para o sei, nome do orgao, etc). 41 | Em seguida veja tb no envfile os valores para o kubernetes referentes a namespace, classe do storage e tb os recursos que vc vai delegar para cada componente. 42 | 43 | Depois basta rodar `make kubernetes_montar_yaml` 44 | 45 | Ao publicar a receita atente-se para o fonte do SEI. Como o código fonte do SEI não é publico faz-se necessário mover manualmente os fontes para o pvc vol-sei-fontes 46 | 47 | ## Serviços que Apresentam Interface 48 | 49 | Através de um único comando provisiona-se os serviços listados abaixo. Cada serviço tem um nível de customização envolvido. Iremos entregando maior complexidade ao longo do tempo. 50 | 51 | *Clique com o ctrl pressionado (Mac Users com o CMD pressionado)* para abrir uma tela cheia com a interface gráfica do serviço 52 | 53 | *URLNAME é o nome que vc define para o seu ambiente no arquivo envlocal.env. Por ex:* **sei.treinamento.orgao.gov.br** 54 | 55 | ### Balanceador 56 | Interface de estatísticas do balanceador - Acessível com URLNAME/haproxy (usuário e senha: stats) 57 | ![Balanceador](https://github.com/spbgovbr/sei-docker-binarios/raw/main/docs/images/servicePictures/haproxy.jpg) 58 | 59 | ### SUPER: 60 | Acesse com URLNAME ou URLNAME/sei ou URLNAME/sip 61 | ![SUPER:](https://github.com/spbgovbr/sei-docker-binarios/raw/main/docs/images/servicePictures/super1.jpg) 62 | 63 | 64 | ### Memcached Admin 65 | Interface de administração e acompanhamento do Memcached. Acessível com URLNAME/memcachedadmin 66 | ![Memcached Admin](https://github.com/spbgovbr/sei-docker-binarios/raw/main/docs/images/servicePictures/memcachedadmin.jpg) 67 | 68 | ### Solr Admin 69 | Interface de Administração do Solr - acesse com URLNAME/solr 70 | ![Solr](https://github.com/spbgovbr/sei-docker-binarios/raw/main/docs/images/servicePictures/solradmin.jpg) 71 | 72 | ### Database Admin 73 | Adminer para administração simples do banco de dados. Acessível com URLNAME/dbadmin 74 | ![Database Admin](https://github.com/spbgovbr/sei-docker-binarios/raw/main/docs/images/servicePictures/dbadmin.jpg) 75 | 76 | ### Mail Catcher 77 | Interface para receber e visualizar e-mails em formato html. Acessível com URLNAME/mailadmin 78 | ![Mail Admin](https://github.com/spbgovbr/sei-docker-binarios/raw/main/docs/images/servicePictures/mailadmin.jpg) 79 | 80 | ### Ldap Admin 81 | Interface de administração do OpenLdap para cadastro de árvores de Departamentos e Usuários. Acessível com URLNAME/phpldapadmin 82 | ![PhpLdapAdmin](https://github.com/spbgovbr/sei-docker-binarios/raw/main/docs/images/servicePictures/phpldapadmin.jpg) 83 | 84 | 85 | 86 | 87 | **Todos os Servicos:** 88 | - **Balanceador** - além de fazer o proxy https para os serviços adicionais, escala o sei/sip em quantas instâncias se achar necessário 89 | - **Nó(s) de aplicação** - SEI/SIP com https auto escalável 90 | - **Memcached** - serviço de cache em memória RAM 91 | - **Administrador do Memcached** - Administração e acompanhamento do Memcached 92 | - **Solr** - indexador de palavras e termos 93 | - **Administrador do Solr** - Administração e acompanhamento do Solr 94 | - **Banco de Dados** - escolha mysql, sqlserver e Oracle 95 | - **Administrador do Banco de Dados** - Ferramenta adminer, para administrar os schemas, table structures ou simplesmente rodar queries diretamente no banco - ainda nao funciona para o Oracle apenas Mysql e SqlServer 96 | - **MailCatcher** - serviço para receber todos os emails enviados pelo SEI. Acompanha junto uma interface web para visualizar os emails sendo enviados. Ótimo para ambiente de teste ou treinamento de usuários 97 | - **JOD** - serviço para exportar docs do Office para PDF 98 | - **Openldap** - serviço para criar e administrar árvores de departamentos/grupos e usuários 99 | - **Administrador do Ldap** - serviço para administrar o openldap 100 | 101 | Cada serviço tem seu próprio nível de customização e o administrador poderá decidir por exemplo se deseja usar o banco de dados provisionado pelo projeto ou usar seu próprio banco de dados. 102 | O mesmo vale para qualquer outro serviço. 103 | 104 | **Volumes de Dados** 105 | 106 | - arquivos externos 107 | - certificados 108 | - solr-data 109 | - banco de dados 110 | - base de dados openldap 111 | - codigo fonte do SEI 112 | - controlador da instalação 113 | 114 | Alguns dos parâmetros externos que é possível informar ao rodar o projeto: 115 | 116 | - URLs de acesso para o SUPER e serviços 117 | - http/https 118 | - Certificados (usar um próprio ou mandar criar um auto-assinado) 119 | - Escolha da versão do SEI (inicialmente apenas SEI4) 120 | - Instalação de módulo e sua versão 121 | - Escolha do banco de dados desejado com a base de referência 122 | - além desses há dezenas de outros parâmetros já implementados para alterar o comportamento e sabor do ambiente 123 | 124 | ## Publicação e Orquestração 125 | 126 | Inicialmente a entrega vai focar em mono máquina. Mas está previsto no nosso roadmap entregar também a instalação em várias máquinas. Para isso vamos usar o Rancher/Cattle, Rancher/Kubernetes 127 | 128 | Além disso iremos publicar aqui a nossa esteira de testes em jenkins, que além de instalar um ambiente do zero com os módulos desejados, faz a execução dos testes funcionais que já escrevemos para alguns módulos, usando um cluster com SeleniumGrid. 129 | 130 | ## Instruções Gerais 131 | 132 | [Clique aqui](docs/README.md) para as instruções gerais, orientações iniciais e vídeo tutoriais 133 | 134 | ## Como Contribuir 135 | 136 | Use as issues do projeto para tirar dúvidas, solicitar funcionalidades, etc: https://github.com/spbgovbr/sei-docker/issues 137 | 138 | Caso você queira, pode fazer **pull requests** observando o seguinte: 139 | - seguir a "filosofia" docker 140 | - altamente desejável que possa ser aproveitado por toda a comunidade 141 | - se achar necessário, discuta antes na parte de issues as melhorias a serem implementadas 142 | 143 | ## Testes para o Desenvolvedor 144 | 145 | Caso desenvolva algo, não esqueça de rodar os testes para saber se não quebrou algo já existente. 146 | Maiores informações do teste: 147 | [tests/README.md](tests/README.md) 148 | -------------------------------------------------------------------------------- /infra/orquestrators/rancher-kubernetes/templates/deploys-svc-template.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: memcached 5 | namespace: ${KUBERNETES_NAMESPACE} 6 | spec: 7 | ports: 8 | - name: tcp 9 | port: 11211 10 | protocol: TCP 11 | targetPort: 11211 12 | selector: 13 | servico: memcached 14 | sessionAffinity: ClientIP 15 | sessionAffinityConfig: 16 | clientIP: 17 | timeoutSeconds: 86400 18 | type: ClusterIP 19 | 20 | --- 21 | 22 | apiVersion: apps/v1 23 | kind: Deployment 24 | metadata: 25 | name: memcached 26 | namespace: ${KUBERNETES_NAMESPACE} 27 | spec: 28 | progressDeadlineSeconds: 600 29 | replicas: 1 30 | revisionHistoryLimit: 10 31 | selector: 32 | matchLabels: 33 | servico: memcached 34 | strategy: 35 | rollingUpdate: 36 | maxSurge: 1 37 | maxUnavailable: 0 38 | type: RollingUpdate 39 | template: 40 | metadata: 41 | labels: 42 | servico: memcached 43 | spec: 44 | containers: 45 | - image: ${DOCKER_IMAGE_MEMCACHED} 46 | imagePullPolicy: Always 47 | name: memcached 48 | resources: 49 | limits: 50 | cpu: ${KUBERNETES_LIMITS_CPU_MEMCACHED} 51 | memory: ${KUBERNETES_LIMITS_MEMORY_MEMCACHED} 52 | requests: 53 | cpu: ${KUBERNETES_REQUEST_CPU_MEMCACHED} 54 | memory: ${KUBERNETES_REQUEST_MEMORY_MEMCACHED} 55 | stdin: true 56 | terminationMessagePath: /dev/termination-log 57 | terminationMessagePolicy: File 58 | tty: true 59 | dnsPolicy: ClusterFirst 60 | restartPolicy: Always 61 | terminationGracePeriodSeconds: 30 62 | 63 | 64 | --- 65 | 66 | apiVersion: v1 67 | kind: Service 68 | metadata: 69 | name: jod 70 | namespace: ${KUBERNETES_NAMESPACE} 71 | spec: 72 | clusterIP: None 73 | ports: 74 | - name: default 75 | port: 8080 76 | protocol: TCP 77 | targetPort: 8080 78 | selector: 79 | servico: jod 80 | sessionAffinity: None 81 | type: ClusterIP 82 | 83 | 84 | --- 85 | 86 | apiVersion: apps/v1 87 | kind: Deployment 88 | metadata: 89 | name: jod 90 | namespace: ${KUBERNETES_NAMESPACE} 91 | spec: 92 | progressDeadlineSeconds: 600 93 | replicas: 1 94 | revisionHistoryLimit: 10 95 | selector: 96 | matchLabels: 97 | servico: jod 98 | strategy: 99 | rollingUpdate: 100 | maxSurge: 25% 101 | maxUnavailable: 25% 102 | type: RollingUpdate 103 | template: 104 | metadata: 105 | labels: 106 | servico: jod 107 | spec: 108 | containers: 109 | - image: ${DOCKER_IMAGE_JOD} 110 | imagePullPolicy: Always 111 | name: jod 112 | resources: 113 | limits: 114 | cpu: ${KUBERNETES_LIMITS_CPU_JOD} 115 | memory: ${KUBERNETES_LIMITS_MEMORY_JOD} 116 | requests: 117 | cpu: ${KUBERNETES_REQUEST_CPU_JOD} 118 | memory: ${KUBERNETES_REQUEST_MEMORY_JOD} 119 | stdin: true 120 | terminationMessagePath: /dev/termination-log 121 | terminationMessagePolicy: File 122 | tty: true 123 | dnsPolicy: ClusterFirst 124 | restartPolicy: Always 125 | terminationGracePeriodSeconds: 30 126 | 127 | --- 128 | 129 | apiVersion: v1 130 | kind: Service 131 | metadata: 132 | name: sei-app 133 | namespace: ${KUBERNETES_NAMESPACE} 134 | spec: 135 | clusterIP: None 136 | ports: 137 | - name: https 138 | port: 443 139 | protocol: TCP 140 | targetPort: 443 141 | - name: http 142 | port: 80 143 | protocol: TCP 144 | targetPort: 80 145 | selector: 146 | servico: app 147 | sessionAffinity: None 148 | type: ClusterIP 149 | 150 | 151 | --- 152 | 153 | apiVersion: apps/v1 154 | kind: Deployment 155 | metadata: 156 | name: sei-app 157 | namespace: ${KUBERNETES_NAMESPACE} 158 | spec: 159 | progressDeadlineSeconds: 600 160 | replicas: 1 161 | revisionHistoryLimit: 10 162 | selector: 163 | matchLabels: 164 | servico: app 165 | strategy: 166 | rollingUpdate: 167 | maxSurge: 1 168 | maxUnavailable: 0 169 | type: RollingUpdate 170 | template: 171 | metadata: 172 | labels: 173 | servico: app 174 | spec: 175 | containers: 176 | - command: 177 | - /entrypoint.sh 178 | envFrom: 179 | - configMapRef: 180 | name: sei-app 181 | optional: false 182 | - secretRef: 183 | name: super-secret1 184 | optional: false 185 | image: ${DOCKER_IMAGE_APP} 186 | imagePullPolicy: Always 187 | name: sei-app 188 | livenessProbe: 189 | exec: 190 | command: 191 | - sh 192 | - -c 193 | - curl -s -L localhost/sei | grep frmLogin 194 | failureThreshold: 2 195 | initialDelaySeconds: 10 196 | periodSeconds: 10 197 | successThreshold: 1 198 | timeoutSeconds: 10 199 | readinessProbe: 200 | exec: 201 | command: 202 | - sh 203 | - -c 204 | - curl -s -L localhost/sei | grep frmLogin 205 | failureThreshold: 2 206 | initialDelaySeconds: 10 207 | periodSeconds: 10 208 | successThreshold: 1 209 | timeoutSeconds: 10 210 | resources: 211 | limits: 212 | cpu: ${KUBERNETES_LIMITS_CPU_APP} 213 | memory: ${KUBERNETES_LIMITS_MEMORY_APP} 214 | requests: 215 | cpu: ${KUBERNETES_REQUEST_CPU_APP} 216 | memory: ${KUBERNETES_REQUEST_MEMORY_APP} 217 | stdin: true 218 | terminationMessagePath: /dev/termination-log 219 | terminationMessagePolicy: File 220 | tty: true 221 | volumeMounts: 222 | - mountPath: /opt/ 223 | name: vol1 224 | - mountPath: /sei/arquivos_externos_sei/ 225 | name: vol2 226 | - mountPath: /sei/controlador-instalacoes 227 | name: vol3 228 | dnsPolicy: ClusterFirst 229 | restartPolicy: Always 230 | terminationGracePeriodSeconds: 30 231 | volumes: 232 | - name: vol1 233 | persistentVolumeClaim: 234 | claimName: vol-sei-fontes 235 | - name: vol2 236 | persistentVolumeClaim: 237 | claimName: vol-sei-arquivosexternos 238 | - name: vol3 239 | persistentVolumeClaim: 240 | claimName: vol-sei-controladorinstalacao 241 | 242 | --- 243 | 244 | apiVersion: apps/v1 245 | kind: Deployment 246 | metadata: 247 | name: sei-app-agendador 248 | namespace: ${KUBERNETES_NAMESPACE} 249 | spec: 250 | progressDeadlineSeconds: 600 251 | replicas: 1 252 | revisionHistoryLimit: 10 253 | selector: 254 | matchLabels: 255 | servico: app-agendador 256 | strategy: 257 | rollingUpdate: 258 | maxSurge: 1 259 | maxUnavailable: 0 260 | type: RollingUpdate 261 | template: 262 | metadata: 263 | labels: 264 | servico: app-agendador 265 | spec: 266 | containers: 267 | - command: 268 | - /entrypoint-agendador.sh 269 | envFrom: 270 | - configMapRef: 271 | name: sei-app 272 | optional: false 273 | - secretRef: 274 | name: super-secret1 275 | optional: false 276 | image: ${DOCKER_IMAGE_APP_AGENDADOR} 277 | imagePullPolicy: Always 278 | name: sei-app 279 | resources: 280 | limits: 281 | cpu: ${KUBERNETES_LIMITS_CPU_APP_AGENDADOR} 282 | memory: ${KUBERNETES_LIMITS_MEMORY_APP_AGENDADOR} 283 | requests: 284 | cpu: ${KUBERNETES_REQUEST_CPU_APP_AGENDADOR} 285 | memory: ${KUBERNETES_REQUEST_MEMORY_APP_AGENDADOR} 286 | stdin: true 287 | terminationMessagePath: /dev/termination-log 288 | terminationMessagePolicy: File 289 | tty: true 290 | volumeMounts: 291 | - mountPath: /opt/ 292 | name: vol1 293 | - mountPath: /sei/arquivos_externos_sei/ 294 | name: vol2 295 | - mountPath: /sei/controlador-instalacoes 296 | name: vol3 297 | dnsPolicy: ClusterFirst 298 | restartPolicy: Always 299 | terminationGracePeriodSeconds: 30 300 | volumes: 301 | - name: vol1 302 | persistentVolumeClaim: 303 | claimName: vol-sei-fontes 304 | - name: vol2 305 | persistentVolumeClaim: 306 | claimName: vol-sei-arquivosexternos 307 | - name: vol3 308 | persistentVolumeClaim: 309 | claimName: vol-sei-controladorinstalacao 310 | -------------------------------------------------------------------------------- /infra/tests/Selenium/PythonExported/test_suiteBasics.py: -------------------------------------------------------------------------------- 1 | # Generated by Selenium IDE 2 | import pytest 3 | import time 4 | import json 5 | from selenium import webdriver 6 | from selenium.webdriver.common.by import By 7 | from selenium.webdriver.common.action_chains import ActionChains 8 | from selenium.webdriver.support import expected_conditions 9 | from selenium.webdriver.support.wait import WebDriverWait 10 | from selenium.webdriver.common.keys import Keys 11 | from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 12 | 13 | class TestSuiteBasics(): 14 | def setup_method(self, method): 15 | desired_capabilities = DesiredCapabilities.CHROME.copy() 16 | desired_capabilities['acceptInsecureCerts'] = True 17 | 18 | self.driver = webdriver.Remote(command_executor='http://seleniumchrome:4444/wd/hub', desired_capabilities=desired_capabilities) 19 | self.vars = {} 20 | 21 | def teardown_method(self, method): 22 | self.driver.quit() 23 | 24 | def wait_for_window(self, timeout = 2): 25 | time.sleep(round(timeout / 1000)) 26 | wh_now = self.driver.window_handles 27 | wh_then = self.vars["window_handles"] 28 | if len(wh_now) > len(wh_then): 29 | return set(wh_now).difference(set(wh_then)).pop() 30 | 31 | def test_loginBasico(self): 32 | self.driver.get("<>://<>/sip/login.php?sigla_orgao_sistema=ME&sigla_sistema=SEI&infra_url=L3NlaS8=") 33 | WebDriverWait(self.driver, 30).until(expected_conditions.element_to_be_clickable((By.ID, "txtUsuario"))) 34 | self.driver.find_element(By.ID, "txtUsuario").send_keys("teste") 35 | self.driver.find_element(By.ID, "pwdSenha").click() 36 | self.driver.find_element(By.ID, "pwdSenha").send_keys("<>") 37 | self.driver.find_element(By.ID, "Acessar").click() 38 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//div[@id=\'divControleProcessosConteudo\']/div[2]"))) 39 | elements = self.driver.find_elements(By.XPATH, "//div[@id=\'divControleProcessosConteudo\']/div[2]") 40 | assert len(elements) > 0 41 | self.driver.find_element(By.LINK_TEXT, "Infra").click() 42 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//span[contains(.,\'Módulos\')]"))) 43 | self.driver.find_element(By.XPATH, "//span[contains(.,\'Módulos\')]").click() 44 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.ID, "divInfraBarraLocalizacao"))) 45 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//td[contains(.,\'Módulo de Estatisticas do SEI\')]"))) 46 | elements = self.driver.find_elements(By.XPATH, "//td[contains(.,\'Módulo de Estatisticas do SEI\')]") 47 | assert len(elements) > 0 48 | self.driver.find_element(By.XPATH, "//span[contains(.,\'Agendamentos\')]").click() 49 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//td[contains(.,\'MdEstatisticasAgendamentoRN :: coletarIndicadores\')]"))) 50 | elements = self.driver.find_elements(By.XPATH, "//td[contains(.,\'MdEstatisticasAgendamentoRN :: coletarIndicadores\')]") 51 | assert len(elements) > 0 52 | self.driver.find_element(By.XPATH, "//span[contains(.,\'Iniciar Processo\')]").click() 53 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.LINK_TEXT, "Arrecadação: Cobrança"))) 54 | self.driver.find_element(By.LINK_TEXT, "Arrecadação: Cobrança").click() 55 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.ID, "txtDescricao"))) 56 | self.driver.find_element(By.ID, "txtDescricao").click() 57 | self.driver.find_element(By.ID, "txtDescricao").send_keys("teste") 58 | self.driver.find_element(By.CSS_SELECTOR, "#divOptPublico .infraRadioLabel").click() 59 | self.driver.find_element(By.CSS_SELECTOR, "#divInfraBarraComandosInferior > #btnSalvar").click() 60 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrArvore\']"))) 61 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrVisualizacao\']"))) 62 | self.driver.switch_to.frame(1) 63 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//img[@alt=\'Incluir Documento\']"))) 64 | self.driver.find_element(By.XPATH, "//img[@alt=\'Incluir Documento\']").click() 65 | self.driver.find_element(By.LINK_TEXT, "Despacho").click() 66 | self.driver.find_element(By.CSS_SELECTOR, "#divOptPublico .infraRadioLabel").click() 67 | self.vars["window_handles"] = self.driver.window_handles 68 | self.driver.find_element(By.CSS_SELECTOR, "#divInfraBarraComandosInferior > #btnSalvar").click() 69 | self.vars["win1687"] = self.wait_for_window(5000) 70 | self.vars["root"] = self.driver.current_window_handle 71 | self.driver.switch_to.window(self.vars["win1687"]) 72 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//form[@id=\'frmEditor\']"))) 73 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//form[@id=\'frmEditor\']/div[2]/div[4]/div/div/iframe"))) 74 | time.sleep(2) 75 | self.driver.close() 76 | self.driver.switch_to.window(self.vars["root"]) 77 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrArvore\']"))) 78 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrVisualizacao\']"))) 79 | self.driver.switch_to.frame(1) 80 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//img[@alt=\'Incluir Documento\']"))) 81 | self.driver.find_element(By.XPATH, "//img[@alt=\'Incluir Documento\']").click() 82 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.LINK_TEXT, "Externo"))) 83 | self.driver.find_element(By.LINK_TEXT, "Externo").click() 84 | WebDriverWait(self.driver, 30).until(expected_conditions.element_to_be_clickable((By.ID, "selSerie"))) 85 | self.driver.find_element(By.ID, "selSerie").click() 86 | dropdown = self.driver.find_element(By.ID, "selSerie") 87 | dropdown.find_element(By.XPATH, "//option[. = 'Abaixo-Assinado']").click() 88 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.ID, "filArquivo"))) 89 | self.driver.find_element(By.ID, "txtDataElaboracao").click() 90 | self.driver.find_element(By.ID, "txtDataElaboracao").send_keys("03/09/2020") 91 | self.driver.find_element(By.CSS_SELECTOR, "#divOptNato .infraRadioLabel").click() 92 | self.driver.find_element(By.CSS_SELECTOR, "#divOptPublico .infraRadioLabel").click() 93 | self.driver.find_element(By.ID, "filArquivo").send_keys("teste.pdf") 94 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//form[@id=\'frmAnexos\']"))) 95 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrfrmAnexos\']"))) 96 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//form[@id=\'frmAnexos\']/div[2]/table/tbody/tr[1]/td[2]"))) 97 | self.driver.find_element(By.CSS_SELECTOR, "#divInfraBarraComandosInferior > #btnSalvar > .infraTeclaAtalho").click() 98 | self.driver.switch_to.default_content() 99 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrArvore\']"))) 100 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrVisualizacao\']"))) 101 | self.driver.find_element(By.XPATH, "//div[@id='divInfraBarraSistemaPadrao']/div/div/button").click() 102 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//ul[@id=\'infraMenu\']/li[8]/a/span"))) 103 | self.driver.find_element(By.XPATH, "//ul[@id=\'infraMenu\']/li[8]/a/span").click() 104 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//a[contains(.,\'99990\')]"))) 105 | elements = self.driver.find_elements(By.XPATH, "//a[contains(.,\'99990\')]") 106 | assert len(elements) > 0 107 | self.driver.find_element(By.XPATH, "//a[@id='lnkSairSistema'] | //a[@id='lnkInfraSairSistema']").click() 108 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.ID, "txtUsuario"))) 109 | elements = self.driver.find_elements(By.ID, "txtUsuario") 110 | assert len(elements) > 0 111 | 112 | -------------------------------------------------------------------------------- /dev/tests/Selenium/PythonExported/test_suiteBasics.py: -------------------------------------------------------------------------------- 1 | # Generated by Selenium IDE 2 | import pytest 3 | import time 4 | import json 5 | from selenium import webdriver 6 | from selenium.webdriver.common.by import By 7 | from selenium.webdriver.common.action_chains import ActionChains 8 | from selenium.webdriver.support import expected_conditions 9 | from selenium.webdriver.support.wait import WebDriverWait 10 | from selenium.webdriver.common.keys import Keys 11 | from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 12 | 13 | class TestSuiteBasics(): 14 | def setup_method(self, method): 15 | desired_capabilities = DesiredCapabilities.CHROME.copy() 16 | desired_capabilities['acceptInsecureCerts'] = True 17 | 18 | self.driver = webdriver.Remote(command_executor='http://seleniumchrome:4444/wd/hub', desired_capabilities=desired_capabilities) 19 | self.vars = {} 20 | 21 | def teardown_method(self, method): 22 | self.driver.quit() 23 | 24 | def wait_for_window(self, timeout = 2): 25 | time.sleep(round(timeout / 1000)) 26 | wh_now = self.driver.window_handles 27 | wh_then = self.vars["window_handles"] 28 | if len(wh_now) > len(wh_then): 29 | return set(wh_now).difference(set(wh_then)).pop() 30 | 31 | def test_loginBasico(self): 32 | self.driver.get("<>://<>/sip/login.php?sigla_orgao_sistema=ABC&sigla_sistema=SEI&infra_url=L3NlaS8=") 33 | WebDriverWait(self.driver, 30).until(expected_conditions.element_to_be_clickable((By.ID, "txtUsuario"))) 34 | self.driver.find_element(By.ID, "txtUsuario").send_keys("teste") 35 | self.driver.find_element(By.ID, "pwdSenha").click() 36 | self.driver.find_element(By.ID, "pwdSenha").send_keys("<>") 37 | self.driver.find_element(By.ID, "Acessar").click() 38 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//div[@id=\'divControleProcessosConteudo\']/div[2]"))) 39 | elements = self.driver.find_elements(By.XPATH, "//div[@id=\'divControleProcessosConteudo\']/div[2]") 40 | assert len(elements) > 0 41 | self.driver.find_element(By.LINK_TEXT, "Infra").click() 42 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//span[contains(.,\'Módulos\')]"))) 43 | self.driver.find_element(By.XPATH, "//span[contains(.,\'Módulos\')]").click() 44 | #WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.ID, "divInfraBarraLocalizacao"))) 45 | #WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//td[contains(.,\'Módulo de Estatisticas do SEI\')]"))) 46 | #elements = self.driver.find_elements(By.XPATH, "//td[contains(.,\'Módulo de Estatisticas do SEI\')]") 47 | #assert len(elements) > 0 48 | #self.driver.find_element(By.XPATH, "//span[contains(.,\'Agendamentos\')]").click() 49 | #WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//td[contains(.,\'MdEstatisticasAgendamentoRN :: coletarIndicadores\')]"))) 50 | #elements = self.driver.find_elements(By.XPATH, "//td[contains(.,\'MdEstatisticasAgendamentoRN :: coletarIndicadores\')]") 51 | #assert len(elements) > 0 52 | self.driver.find_element(By.XPATH, "//span[contains(.,\'Iniciar Processo\')]").click() 53 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.LINK_TEXT, "Arrecadação: Cobrança"))) 54 | self.driver.find_element(By.LINK_TEXT, "Arrecadação: Cobrança").click() 55 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.ID, "txtDescricao"))) 56 | self.driver.find_element(By.ID, "txtDescricao").click() 57 | self.driver.find_element(By.ID, "txtDescricao").send_keys("teste") 58 | self.driver.find_element(By.CSS_SELECTOR, "#divOptPublico .infraRadioLabel").click() 59 | self.driver.find_element(By.CSS_SELECTOR, "#divInfraBarraComandosInferior > #btnSalvar").click() 60 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrArvore\']"))) 61 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrVisualizacao\']"))) 62 | self.driver.switch_to.frame(1) 63 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//img[@alt=\'Incluir Documento\']"))) 64 | self.driver.find_element(By.XPATH, "//img[@alt=\'Incluir Documento\']").click() 65 | self.driver.find_element(By.LINK_TEXT, "Despacho").click() 66 | self.driver.find_element(By.CSS_SELECTOR, "#divOptPublico .infraRadioLabel").click() 67 | self.vars["window_handles"] = self.driver.window_handles 68 | self.driver.find_element(By.CSS_SELECTOR, "#divInfraBarraComandosInferior > #btnSalvar").click() 69 | self.vars["win1687"] = self.wait_for_window(5000) 70 | self.vars["root"] = self.driver.current_window_handle 71 | self.driver.switch_to.window(self.vars["win1687"]) 72 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//form[@id=\'frmEditor\']"))) 73 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//form[@id=\'frmEditor\']/div[2]/div[4]/div/div/iframe"))) 74 | time.sleep(2) 75 | self.driver.close() 76 | self.driver.switch_to.window(self.vars["root"]) 77 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrArvore\']"))) 78 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrVisualizacao\']"))) 79 | self.driver.switch_to.frame(1) 80 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//img[@alt=\'Incluir Documento\']"))) 81 | self.driver.find_element(By.XPATH, "//img[@alt=\'Incluir Documento\']").click() 82 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.LINK_TEXT, "Externo"))) 83 | self.driver.find_element(By.LINK_TEXT, "Externo").click() 84 | WebDriverWait(self.driver, 30).until(expected_conditions.element_to_be_clickable((By.ID, "selSerie"))) 85 | self.driver.find_element(By.ID, "selSerie").click() 86 | dropdown = self.driver.find_element(By.ID, "selSerie") 87 | dropdown.find_element(By.XPATH, "//option[. = 'Abaixo-Assinado']").click() 88 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.ID, "filArquivo"))) 89 | self.driver.find_element(By.ID, "txtDataElaboracao").click() 90 | self.driver.find_element(By.ID, "txtDataElaboracao").send_keys("03/09/2020") 91 | self.driver.find_element(By.CSS_SELECTOR, "#divOptNato .infraRadioLabel").click() 92 | self.driver.find_element(By.CSS_SELECTOR, "#divOptPublico .infraRadioLabel").click() 93 | self.driver.find_element(By.ID, "filArquivo").send_keys("teste.pdf") 94 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//form[@id=\'frmAnexos\']"))) 95 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrfrmAnexos\']"))) 96 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//form[@id=\'frmAnexos\']/div[2]/table/tbody/tr[1]/td[2]"))) 97 | self.driver.find_element(By.CSS_SELECTOR, "#divInfraBarraComandosInferior > #btnSalvar > .infraTeclaAtalho").click() 98 | self.driver.switch_to.default_content() 99 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrArvore\']"))) 100 | WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//iframe[@id=\'ifrVisualizacao\']"))) 101 | self.driver.find_element(By.XPATH, "//div[@id='divInfraBarraSistemaPadrao']/div/div/button").click() 102 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//ul[@id=\'infraMenu\']/li[8]/a/span"))) 103 | self.driver.find_element(By.XPATH, "//ul[@id=\'infraMenu\']/li[8]/a/span").click() 104 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.XPATH, "//a[contains(.,\'99990\')]"))) 105 | elements = self.driver.find_elements(By.XPATH, "//a[contains(.,\'99990\')]") 106 | assert len(elements) > 0 107 | self.driver.find_element(By.XPATH, "//a[@id='lnkSairSistema'] | //a[@id='lnkInfraSairSistema']").click() 108 | WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_element_located((By.ID, "txtUsuario"))) 109 | elements = self.driver.find_elements(By.ID, "txtUsuario") 110 | assert len(elements) > 0 111 | 112 | -------------------------------------------------------------------------------- /containers/tests/Makefile: -------------------------------------------------------------------------------- 1 | SHELL := /bin/bash 2 | 3 | ifneq ("$(wildcard envcontainers-test.env)","") 4 | include envcontainers-test.env 5 | endif 6 | 7 | 8 | CONTAINERS_LIST=base-centos7 base-rockylinux8 memcached jod mailcatcher base-mariadb10.5 mariadb10.5 base-sqlserver2017 sqlserver2017 base-oracle11g oracle11g solr8.2.0 base-app app-dev app-ci app-ci-agendador 9 | 10 | help: ## Mostra essa ajuda. Voce pode usar tab para completar os comandos 11 | @fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -e 's/##//' | sed -e 's|^\ ||' 12 | 13 | 14 | getenv-test: ## target de apoio para copiar o envcontainers-teste.env a partir do modelo 15 | @cp -f envcontainers-test.env.modelo envcontainers-test.env 16 | @echo "Arquivo envcontainers-test.env criado com valores default."; 17 | @echo "Abra o arquivo e faca as alteracoes."; 18 | 19 | 20 | envcontainers-test.env: ## target de apoio para verificar se existe o arquivo envcontainers-test.env 21 | @echo "Arquivo env nao encontrado para os testes nas operacoes de containeres." 22 | @echo "Ha um arquivo modelo (envcontainers-test.env.modelo) que vc pode usar para preencher com suas informacoes." 23 | @echo "Basta rodar make getenv-test" 24 | @echo "Em seguida, altere nesse arquivo as informacoes para os testes no seu ambiente" 25 | exit 1 26 | 27 | 28 | verificar-arquivo-env-containers: ## target de apoio para verificar se existe um arquivo no diretorio containers e parar a execucao 29 | @if test -f ../envcontainers.env; then \ 30 | echo "Um arquivo envcontainers.env foi encontrado em ../"; \ 31 | echo "Apague esse arquivo antes de prosseguir, pois o teste usa o seu env proprio (envcontainers-test.env)"; \ 32 | exit 1; \ 33 | fi 34 | 35 | 36 | ## verificar-test-envs: target de apoio que roda na sequencia envcontainers-test.env verificar-arquivo-env-containers 37 | verificar-test-envs: envcontainers-test.env verificar-arquivo-env-containers 38 | 39 | 40 | ## containers-erase: target de apoio apaga todos os conteineres 41 | containers-erase: verificar-test-envs 42 | @echo "Vamos tentar apagar todos os conteineres locais com o registry $(DOCKER_REGISTRY) com a tag $(DOCKER_CONTAINER_VERSAO_PRODUTO)" 43 | @echo "" 44 | @make -C ../ DOCKER_REGISTRY=$(DOCKER_REGISTRY) DOCKER_CONTAINER_VERSAO_PRODUTO=$(DOCKER_CONTAINER_VERSAO_PRODUTO) erase-conteiners-local 45 | @echo "" 46 | @echo "Imagens apagadas. Vamos verificar se as imagens nao se encontram presentes" 47 | @for i in $(CONTAINERS_LIST); \ 48 | do \ 49 | echo "Verificando se a imagem: $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO) existe"; \ 50 | if test -z "$$(docker images -q $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO))"; then \ 51 | echo "ok! Imagem $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO) nao existe."; \ 52 | else \ 53 | echo "Falha: $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO) continua existindo"; \ 54 | exit 1; \ 55 | fi; \ 56 | done 57 | 58 | ## containers-build: target de apoio constroi todos os conteineres usando a tag test 59 | containers-build: verificar-test-envs 60 | @echo "Vamos tentar buildar todos os conteineres usando o registry $(DOCKER_REGISTRY) com a tag $(DOCKER_CONTAINER_VERSAO_PRODUTO)" 61 | @echo "" 62 | @make -C ../ DOCKER_REGISTRY=$(DOCKER_REGISTRY) DOCKER_CONTAINER_VERSAO_PRODUTO=$(DOCKER_CONTAINER_VERSAO_PRODUTO) IMAGEM_BASE_CENTOS=$(IMAGEM_BASE_CENTOS) IMAGEM_BASE_CENTOS_VERSAO=$(IMAGEM_BASE_CENTOS_VERSAO) IMAGEM_BASE_ROCKYLINUX=$(IMAGEM_BASE_ROCKYLINUX) IMAGEM_BASE_ROCKYLINUX_VERSAO=$(IMAGEM_BASE_ROCKYLINUX_VERSAO) IMAGEM_BASE_MARIADB=$(IMAGEM_BASE_MARIADB) IMAGEM_BASE_MARIADB_VERSAO=$(IMAGEM_BASE_MARIADB_VERSAO) IMAGEM_BASE_SQLSERVER=$(IMAGEM_BASE_SQLSERVER) IMAGEM_BASE_SQLSERVER_VERSAO=$(IMAGEM_BASE_SQLSERVER_VERSAO) IMAGEM_BASE_ORACLE=$(IMAGEM_BASE_ORACLE) IMAGEM_BASE_ORACLE_VERSAO=$(IMAGEM_BASE_ORACLE_VERSAO) IMAGEM_BASE_APP=$(IMAGEM_BASE_APP) IMAGEM_BASE_APP_VERSAO=$(IMAGEM_BASE_APP_VERSAO) IMAGEM_BASE_APP_AGENDADOR=$(IMAGEM_BASE_APP_AGENDADOR) IMAGEM_BASE_APP_AGENDADOR_VERSAO=$(IMAGEM_BASE_APP_AGENDADOR_VERSAO) IMAGEM_BASE_PHPMEMCACHEDADMIN=$(IMAGEM_BASE_PHPMEMCACHEDADMIN) IMAGEM_BASE_PHPMEMCACHEDADMIN_VERSAO=$(IMAGEM_BASE_PHPMEMCACHEDADMIN_VERSAO) IMAGEM_BASE_OPENLDAP=$(IMAGEM_BASE_OPENLDAP) IMAGEM_BASE_OPENLDAP_VERSAO=$(IMAGEM_BASE_OPENLDAP_VERSAO) IMAGEM_BASE_HAPROXY=$(IMAGEM_BASE_HAPROXY) IMAGEM_BASE_HAPROXY_VERSAO=$(IMAGEM_BASE_HAPROXY_VERSAO) GITUSER_REPO_MODULOS=$(GITUSER_REPO_MODULOS) GITPASS_REPO_MODULOS=$(GITPASS_REPO_MODULOS) build-conteiners 63 | @echo "" 64 | @echo "Imagens criadas. Vamos verificar se as imagens encontram-se presentes" 65 | @for i in $(CONTAINERS_LIST); \ 66 | do \ 67 | echo "Verificando se a imagem: $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO) existe"; \ 68 | if test -z "$$(docker images -q $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO))"; then \ 69 | echo "Falha: $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO) nao existe"; \ 70 | exit 1; \ 71 | else \ 72 | echo "ok! Imagem $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO) existe."; \ 73 | fi; \ 74 | done 75 | 76 | 77 | ## containers-publish: target de apoio publica todos os conteineres usando a tag test 78 | containers-publish: verificar-test-envs 79 | @echo "Vamos tentar publicar todos os conteineres usando o registry $(DOCKER_REGISTRY) com a tag $(DOCKER_CONTAINER_VERSAO_PRODUTO)" 80 | @echo "" 81 | @make -C ../ DOCKER_REGISTRY=$(DOCKER_REGISTRY) DOCKER_CONTAINER_VERSAO_PRODUTO=$(DOCKER_CONTAINER_VERSAO_PRODUTO) publish-containers 82 | @echo "" 83 | @echo "ok! Imagens publicadas." 84 | 85 | 86 | 87 | ## containers-download: target de apoio faz o pull em todos os conteineres 88 | containers-download: verificar-test-envs 89 | @echo "Vamos agora tentar fazer o download das imagens de teste" 90 | @for i in $(CONTAINERS_LIST); \ 91 | do \ 92 | echo "Baixando a imagem: $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO)"; \ 93 | docker pull $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO); \ 94 | done 95 | @echo "Imagens baixadas. Vamos verificar se as imagens encontram-se presentes" 96 | @for i in $(CONTAINERS_LIST); \ 97 | do \ 98 | echo "Verificando se a imagem: $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO) existe"; \ 99 | if test -z "$$(docker images -q $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO))"; then \ 100 | echo "Falha: $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO) nao existe"; \ 101 | exit 1; \ 102 | else \ 103 | echo "ok! Imagem $(DOCKER_REGISTRY)/$$i:$(DOCKER_CONTAINER_VERSAO_PRODUTO) existe."; \ 104 | fi; \ 105 | done 106 | 107 | 108 | ## test-containers: RODE ESSE TARGET PARA TESTAR TODA A STACK DE CRIACAO PUBLICACAO DOWNLOAD E ERASE 109 | test-containers: verificar-test-envs 110 | @echo "Vamos iniciar a bateria de testes relacionada aos conteineres (erase, build, push e pull)" 111 | @echo "***********************************************************************************" 112 | @echo "Erase******************************************************************************" 113 | @echo "***********************************************************************************" 114 | make containers-erase 115 | @echo "***********************************************************************************" 116 | @echo "Build******************************************************************************" 117 | @echo "***********************************************************************************" 118 | make containers-build 119 | @echo "***********************************************************************************" 120 | @echo "Push*******************************************************************************" 121 | @echo "***********************************************************************************" 122 | make containers-publish 123 | @echo "***********************************************************************************" 124 | @echo "Erase Novamente********************************************************************" 125 | @echo "***********************************************************************************" 126 | make containers-erase 127 | @echo "***********************************************************************************" 128 | @echo "Download **************************************************************************" 129 | @echo "***********************************************************************************" 130 | make containers-download 131 | @echo "***********************************************************************************" 132 | @echo "Erase Novamente********************************************************************" 133 | @echo "***********************************************************************************" 134 | make containers-erase 135 | @echo "***********************************************************************************" 136 | @echo "Bateria de testes relacionadas aos conteineres finalizada**************************" 137 | @echo "***********************************************************************************" 138 | -------------------------------------------------------------------------------- /containers/solr/assets/solr8sei/sei-cores-8.2.0/sei-bases-conhecimento/conf/schema.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 55 | 56 | 57 | 58 | 60 | 61 | 62 | 63 | 66 | 67 | 68 | 69 | 72 | 73 | 74 | 83 | 84 | 85 | 88 | id 89 | 90 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | --------------------------------------------------------------------------------