- Versão atual: 1.8
É possível subir a aplicação por meio do Docker. Dentre as vantagens estão:
- A ausência da necessidade de uma configuração do IIS;
- Uma menor intervenção manual para a realização das configurações;
- A ausência da necessidade de possuir licenças para o Windows Server para rodar a aplicação;
- A ausência da obrigatoriedade de configurar um servidor SQL Server para ambiente de homologação. O docker-compose utiliza o SQL Server 2019 para Linux, oficialmente suportado para a Microsoft, no modo de avaliação. Atente-se que a utilização em produção exige uma licença válida, mas a configuração disponibilizada pemite a realização de testes e da homologação do sistema.
- A possibilidade de configuração por variáveis de ambiente no docker-compose no lugar de alterar arquivos
.json
.
-
Caso ainda não tenha configurado o banco de dados para o sistema recomendamos que siga os passos 1 e 2 contidos no link a seguir: Criação e carga inicial do BD do sistema
-
Caso queira subir um banco em docker préconfigurado ao invés de utilizar um SQL já existente, siga os passos contidos no título: Utilizar e configurar banco de dados docker(Opcional)
Em uma máquina que tenha o Docker e o docker-compose instalados, baixe o código. Esse passo pode ser via git
git clone https://github.com/spbgovbr/Sistema_Programa_de_Gestao_Susep.git
Após clonar o repositório, acesse a pasta do projeto pelo terminal
cd Sistema_Programa_de_Gestao_Susep
Realize o checkout da branch docker
git checkout docker-codigo-fonte
Agora é o momento de parametrizar os arquivos de configuração para o seu ambiente
As variáveis do Sistema podem ser alteradas nos arquivos docker/api-gateway.env
e docker/web-api.env
para refletir as configurações específicas de cada orgão.
Para utilizar um servidor de banco de dados SQL Server com a devida licença, será necessário alterar a configuração do banco.
Acesse o arquivo docker/web-api.env
e edite a seguinte linha:
# Configurações de banco de dados
ConnectionStrings__DefaultConnection=Server=db,1433;Database=master;User Id=sa;Password=P1ssw@rd;
Acesse o arquivo docker/web-api.env
e edite as seguintes linhas conforme sua configuração de e-mail:
# Configurações de e-mail - Exemplo: Ministério da Economia
emailOptions__EmailRemetente=no-reply@me.gov.br
emailOptions__NomeRemetente=Programa de Gestão - ME
emailOptions__SmtpServer=smtp.me.gov.br
emailOptions__Port=25
Acesse o arquivo docker/web-api.env
e edite as seguintes linhas conforme a configuração do LDAP do órgão:
# LDAP
# -> URL do Servidor LDAP
ldapOptions__Configurations__0__Url=
# -> Porta do Servidor LDAP
ldapOptions__Configurations__0__Port=389
# -> DN do usuário de serviço que será utilizado para autenticar no LDAP"
ldapOptions__Configurations__0__BindDN=CN=Fulano de tal,CN=Users,DC=orgao
# -> Senha do usuário de serviço que será utilizado para autenticar no LDAP
ldapOptions__Configurations__0__BindPassword=
# -> DC que será utilizado para chegar à base de usuários no LDAP
ldapOptions__Configurations__0__SearchBaseDC=CN=Users,DC=orgao
# -> Consulta a ser aplicada no LDAP para encontrar os usuários
ldapOptions__Configurations__0__SearchFilter=(&(objectClass=user)(objectClass=person)(sAMAccountName={0}))
# -> Campo do LDAP em que será encontrado o CPF do usuário
ldapOptions__Configurations__0__CpfAttributeFilter=
# -> Campo do LDAP em que será encontrado o e-mail do usuário
ldapOptions__Configurations__0__EmailAttributeFilter=
Obs: Note que é possível definir mais de uma configuração. Basta copiar as linhas e trocar __n__
por __n+1__
nas linhas novas (ex: __0__
-> __1__
).
- O login só ocorrerá adequadamente caso exista um usuário na tabela
[dbo].[Pessoa]
com o CPF e o email igual ao usuário do LDAP; - Caso seja consultado uma pessoa que não exista na base do LDAP, o
api-gateway
retornará um erro500
e nada será exibido para o usuário peloweb-app
. No response você poderá ver uma mensagem comoSystem.Threading.Tasks.TaskCanceledException: A task was canceled.
; - Por algum motivo desconhecido, em alguns casos é necessário pressionar o botão de
Entrar
duas vezes; - A aplicação possui usuários de teste para simplificar o processo de homologação. Você pode ver a lista completa dos usuários que não necessitam de senha. Caso utilize em produção, não execute o script
install/4. Inserir dados de teste - Opcional.sql
. Caso não sejam retirados, estes usuários poderão serem utilizados por pessoas má-intensionadas como backdook.
Por fim, execute o seguinte comando para subir a aplicação
docker compose -f docker/docker-compose.yml up -d
Pronto, a aplicação está acessível no endereço http://localhost. Porém você não irá conseguir se logar se não configurar o LDAP e se não inserir as pessoas na tabela de pessoas. Mesmo se utilizar os usuários testes da lista completa dos usuários que não necessitam de senha os mesmo devem estar na tabela de pessoas com seus respectivos CPFs
Para refletir alterações nas configurações, após realizá-las, execute
docker compose -f docker/docker-compose.yml down
docker compose -f docker/docker-compose.yml up -d
Execute o seguinte comando
docker compose -f docker/docker-compose.yml ps -a
Os 4 containers devem estar ativos.
Name Command State Ports
---------------------------------------------------------------------------
docker_api-gateway_1 dotnet Susep.SISRH.ApiGate ... Up
docker_traefik_1 /entrypoint.sh --providers ... Up 80/tcp, ...
docker_web-api_1 dotnet Susep.SISRH.WebApi.dll Up
docker_web-app_1 dotnet Susep.SISRH.WebApp.dll Up
Caso nenhum dos três relacionados ao dotnet subirem (web-app
, web-api
, gateway
), provavelmente o usuário dos containers não tem permissão o suficiente para subir o processo e utilizar a porta 80. Esse erro foi detectado no CentOs, mas não ocorre no Debian e nem no Ubuntu. A forma que sabemos até o momento de "contornar" esse problema é dizer que o usuário root que irá rodar esse processo. Altere o docker-compose adicionando o seguinte:
web-api:
image: ghcr.io/spbgovbr/sistema_programa_de_gestao_susep/sgd:v1.8
+ user: 0:0
...
api-gateway:
image: ghcr.io/spbgovbr/sistema_programa_de_gestao_susep/sgd:v1.8
+ user: 0:0
...
web-app:
image: ghcr.io/spbgovbr/sistema_programa_de_gestao_susep/sgd:v1.8
+ user: 0:0
Atente-se que o yml é sensível a identação e que foi utilizado espaço como identação.
Obs: Este passo só é necessário caso você utilize o banco de dados configurado no docker-compose.sqlserver-homologacao.yml
. Caso você decida utilizar outro banco de dados (por exemplo, um banco SQL Server com licença), naturalmente você deverá executar todos os scripts do banco definidos como obrigatório.
Edite o arquivo install/4. Inserir dados de teste - Opcional.sql
, conforme desejado.
Caso não seja detectada a existência do banco programa_gestao
, ele será criado e os scripts .sql
serão executados, conforme definido em docker-compose.sqlserver-homologacao.yml
. Os registros do banco são persistidos na pasta docker/volume
por meio de volume docker (bind mount). Caso seja detectado a existência do banco programa_gestao
, nenhum script será executado, mesmo que você adicione um novo script sql na lista de volumes.
Se por ventura você editar os arquivos sql
, eles somente serão automaticamente executados caso você exclua a pasta docker/volume/mssql/
. Entretanto, isto acarretará na perda de todos os dados. Caso você venha de uma versão anterior (a partir da 1.7), e queira manter os dados que existiam anteriormente, execute os eventuais novos scripts em sql manualmente.
Para utilizar o servidor de banco de dados SQL Server dockerizado, utilize as configurações já preenchidas no arquivos docker/web-api.env
:
# Configurações de banco de dados
ConnectionStrings__DefaultConnection=Server=db,1433;Database=master;User Id=sa;Password=P1ssw@rd;
Execute o comando para subir o banco de dados de homologação em docker
# Obs: Execute DEPOIS do docker/docker-compose.yml
docker compose -f docker/docker-compose.sqlserver-homologacao.yml up -d
Caso você deseje fazer o build local ao invés de utilizar a imagem preparada:
docker build -f docker/Dockerfile -t susep .
Lembre-se de alterar o docker-compose.yml
para utilizar susep
no lugar da imagem oficial.
Observações:
- O processo de criação de imagem compila o código disponibilizado. Entretanto, são utilizadas algumas
dlls
previamente compiladas; - Deve ser possível utilizar a mesma solução em servidores Windows, caso ele esteja configurado para rodar imagens Linux. Porém, o desempenho possivelmente será ligeiramente inferior do que se configurar diretamente com IIS. Não foi testado;
- A Microsoft também disponibiliza imagens docker nativas para Windows. Porém, até o momento, não foram geradas imagens nativas.
- A aplicação provavelmente deve funcionar em máquinas Mac, mas também não foi testado.