Pular para o conteúdo principal

Instalação do GrantID em Ubuntu Server

Siga estes passos para instalar uma instância on-premises do GrantID em um Ubuntu Server.

dica

Antes de começar, certifique-se de ter concluído os passos descritos em Planejamento antes da instalação

Pré-requisitos​

Instale o ASP.NET Core Runtime 8.0​

info

Essas instruções pressupõem que você está autenticado como root. Se não estiver, execute sudo su - antes de continuar!

Siga as instruções abaixo, de acordo com a versão do seu Ubuntu, para:

  1. Registrar a chave da Microsoft e adicionar o repositório de pacotes (só é preciso fazer isso em versões anteriores à 22.04, e uma única vez por máquina)
  2. Instalar o pacote aspnetcore-runtime-8.0

Ubuntu 22.04 ou mais recente​

apt-get update
apt-get install aspnetcore-runtime-8.0

Ubuntu 20.04 (LTS)​

curl -O https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
apt-get update
apt-get install aspnetcore-runtime-8.0

Teste a instalação​

Para testar a instalação, execute:

dotnet --list-runtimes

A saída esperada é semelhante a:

Microsoft.AspNetCore.App 8.0.* [*/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 8.0.* [*/dotnet/shared/Microsoft.NETCore.App]
dica

Para outras versões do sistema operacional e métodos alternativos de instalação do ASP.NET Core Runtime, veja esta página

Instale o Nginx​

observação

Se você preferir usar o Apache em vez do Nginx, veja este artigo.

Instale o Nginx (se ainda não estiver instalado):

apt-get install nginx

Teste se o Nginx está em execução:

curl -I http://localhost/

Verifique as primeiras linhas da saída, que devem ser semelhantes a:

HTTP/1.1 200 OK
Server: nginx/...
...

Desabilite o site padrão do Nginx:

rm /etc/nginx/sites-enabled/default

Instale o GrantID​

O GrantID é composto de três componentes:

  • Identity Service: contém a lógica de negócio e encapsula o acesso ao banco de dados
  • Auth Server: acessado pelos usuários finais durante logins, redirecionamentos e cadastros
  • Console: permite que os administradores gerenciem o sistema

Primeiro, faremos uma configuração inicial e, depois, instalaremos cada componente.

Configuração inicial​

Baixe e extraia o pacote de distribuição em um diretório próprio e entre nele:

curl -O https://cdn.lacunasoftware.com/grantid/grantid-5.5.0.tar.gz
tar -xzf grantid-5.5.0.tar.gz --one-top-level
cd grantid-5.5.0

Crie um usuário local para executar os componentes:

mkdir /var/grantid
useradd --system --home-dir /var/grantid grantid
chown grantid:grantid /var/grantid
chmod 750 /var/grantid

Crie a pasta que vai conter os binários de cada componente e copie os arquivos binários para ela:

mkdir /usr/share/grantid
cp -r components/* /usr/share/grantid/
chmod -R a=,u+rwX,go+rX /usr/share/grantid
observação

Os binários dos componentes podem ser lidos por qualquer usuário e só podem ser alterados pelo root. Isso significa que o usuário da aplicação (grantid) pode ler os arquivos, mas não alterá-los (isso é intencional).

Crie a pasta que vai conter os arquivos de configuração e copie para ela os modelos de arquivos de configuração:

mkdir /etc/grantid
cp config-templates/* /etc/grantid/
chown -R root:grantid /etc/grantid
chmod -R a=,u+rwX,g+rX /etc/grantid
observação

Os arquivos de configuração só podem ser lidos por membros do grupo grantid e só podem ser alterados pelo root. Isso é importante para proteger contra acesso não autorizado as informações sensíveis armazenadas nos arquivos de configuração.

Gere um certificado autoassinado para assinar os JSON Web Tokens. Informe os dados abaixo e pressione ENTER nas demais perguntas. Evite usar diacríticos ("acentos", como á, ã, ç etc.).

  • Country Name: informe o código de duas letras do seu país, por exemplo BR
  • State or Province Name: informe o nome do estado da sua organização, por exemplo Sao Paulo
  • Organization Name: informe o nome da sua organização, por exemplo Patorum Inc
  • Common Name: informe o nome da sua instância do GrantID, por exemplo Patorum ID
openssl genrsa -out key.pem 2048
openssl req -x509 -new -days 36500 -key key.pem -out cert.pem

Junte a chave e o certificado em um único arquivo PFX. Quando for pedida uma senha, basta pressionar ENTER duas vezes.

openssl pkcs12 -export -in cert.pem -inkey key.pem -out /etc/grantid/issuer.pfx

Faça uma limpeza:

chown root:grantid /etc/grantid/issuer.pfx
chmod 640 /etc/grantid/issuer.pfx
rm key.pem cert.pem

Gere uma chave usada para cifrar os "tokens" enviados por e-mail:

openssl rand -base64 -out /etc/grantid/temp-token-key 32
chown root:grantid /etc/grantid/temp-token-key
chmod 640 /etc/grantid/temp-token-key

Edite o arquivo de configuração comum:

nano /etc/grantid/common.json

Preencha as seguintes configurações:

  • Seção Application

  • Seção PkiSuite

    • SdkLicense: sua licença do PKI SDK, no formato Base64
    • WebLicense: sua licença do componente Web PKI no formato binário (Base64). Obrigatória se você pretende habilitar o login com certificados X.509.
observação

Como mencionado na seção de planejamento, o ideal é ter um certificado SSL válido para os domínios. Se você ainda não tiver um certificado, use URLs com http:// acima e defina UseSSL como false.

Identity Service​

Agora, vamos instalar o componente Identity Service. Edite o arquivo de configuração:

nano /etc/grantid/identity-service.json

Preencha as seguintes configurações:

  • Seção ConnectionStrings

  • Seção SMS: configura o envio de SMS. A configuração Type define qual provedor deve ser usado, e as demais configurações dependem do provedor escolhido:

    • Twilio
      • Type: defina como Twilio para enviar mensagens SMS pela Twilio
      • MessageFrom: o número de telefone do remetente fornecido pela Twilio (ex.: +12125550000)
      • AccountSid: o SID da conta, fornecido pela Twilio
      • AuthToken: o token de autenticação, fornecido pela Twilio
    • TotalVoice
      • Type: defina como TotalVoice para enviar mensagens SMS pela TotalVoice
      • AccessToken: o token de acesso, fornecido pela TotalVoice (ex.: 0123456789abcdef0123456789abcdef)
    • Simulador (apenas para fins de depuração)
      • Type: defina como Simulator para simular o envio de mensagens SMS (em vez de enviá-las, apenas registra no log as mensagens que seriam enviadas)
observação

Se você não pretende configurar o envio de SMS agora, desabilite a verificação de telefone dos usuários do console editando o arquivo de configuração comum common.json: na seção Application, defina RequirePhoneVerification como false.

  • Seção Email: configura o envio de e-mails por SMTP
    • ServerHost: nome do host do servidor SMTP
    • Username e Password: se o servidor SMTP exigir autenticação, defina estas configurações
    • SenderAddress: endereço de e-mail a ser usado como remetente (campo from)
    • SenderName: nome a ser usado como nome do remetente (opcional)
    • EnableSsl: por padrão, a comunicação SMTP é feita com SSL. Para desabilitar o SSL, defina esta configuração como false
    • ServerPort: por padrão, a comunicação SMTP é feita pela porta 587. Defina esta configuração para usar uma porta diferente
    • Support: endereço exibido no rodapé dos e-mails enviados, por exemplo support@patorum.com
    • LogoUrl (opcional): URL pública da imagem usada no cabeçalho dos e-mails enviados. Se omitida, é usado o logotipo do GrantID.
observação

Se você não pretende configurar o envio de e-mails agora, desabilite a verificação de e-mail dos usuários do console editando o arquivo de configuração comum common.json: na seção Application, defina RequireEmailVerification como false.

Crie o serviço e, em seguida, habilite-o e inicie-o:

cp service-defs/grantid-identity-service.service /etc/systemd/system/
systemctl enable grantid-identity-service
systemctl start grantid-identity-service
systemctl status grantid-identity-service

A saída esperada é semelhante a:

* grantid-identity-service.service - GrantID Identity Service
Loaded: loaded (/etc/systemd/system/grantid-identity-service.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-01-21 14:45:34 UTC; 3h 46min ago
Main PID: 776 (dotnet)
Tasks: 26 (limit: 3527)
CGroup: /system.slice/grantid-identity-service.service
└─776 /usr/bin/dotnet Grant.Id.Service.dll

Jan 21 14:45:34 ubuntu1804 systemd[1]: Started GrantID Identity Service.
Jan 21 14:45:44 ubuntu1804 grantid[776]: Signing certificate PFX path: '/etc/grantid/grantid.pfx', password: ''
Jan 21 14:45:44 ubuntu1804 grantid[776]: Audit is enabled
Jan 21 14:45:50 ubuntu1804 grantid[776]: Hosting environment: Linux
Jan 21 14:45:50 ubuntu1804 grantid[776]: Content root path: /usr/share/grantid/identity-service
Jan 21 14:45:50 ubuntu1804 grantid[776]: Now listening on: http://localhost:5010
Jan 21 14:45:50 ubuntu1804 grantid[776]: Application started. Press Ctrl+C to shut down.

Se necessário, reinicie o serviço: systemctl restart grantid-identity-service. Se algo parecer errado, verifique os logs: journalctl -u grantid-identity-service

observação

Se os logs mostrarem uma exceção informando que an error occurred during the pre-login handshake ou que the remote certificate was rejected, adicione ;TrustServerCertificate=True à sua connection string no arquivo /etc/grantid/identity-service.json como solução de contorno

Para testar se o serviço está em execução, execute:

curl http://localhost:5010/api/version

A versão do componente deve ser exibida.

observação

O componente Identity Service não precisa ser acessível publicamente. Se as suas aplicações não chamam as APIs do GrantID diretamente, você pode pular o restante desta seção e ir para a instalação do Auth Server

Crie um arquivo de configuração de site para o componente:

nano /etc/nginx/sites-available/grantid-identity-service

Digite o seguinte, substituindo a entrada server_name pelo seu domínio da API:

server {
listen 80;
listen 443 ssl; # comment if you don't have an SSL certificate yet

# Replace with your API domain
server_name api.id.patorum.com;

# Path of the SSL certificate and key (comment if you don't have an SSL certificate yet)
ssl_certificate /etc/ssl/certs/grantid.pem;
ssl_certificate_key /etc/ssl/private/grantid.key;

location / {
proxy_pass http://localhost:5010;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Habilite o site:

ln -sf /etc/nginx/sites-available/grantid-identity-service /etc/nginx/sites-enabled/grantid-identity-service

Teste a configuração do Nginx e recarregue-a:

nginx -t
nginx -s reload

Teste o site (substitua api.id.patorum.com pelo seu domínio da API):

curl -H "Host: api.id.patorum.com" http://localhost/

Auth Server​

Agora, vamos instalar o componente Auth Server.

observação

Normalmente, o Auth Server não precisa de nenhuma configuração adicional, então não há nada a preencher em /etc/grantid/auth-server.log

Crie o serviço e, em seguida, habilite-o e inicie-o:

cp service-defs/grantid-auth-server.service /etc/systemd/system/
systemctl enable grantid-auth-server
systemctl start grantid-auth-server
systemctl status grantid-auth-server

A saída esperada é semelhante a:

* grantid-auth-server.service - GrantID Auth Server
Loaded: loaded (/etc/systemd/system/grantid-auth-server.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-01-21 14:45:35 UTC; 4h 28min ago
Main PID: 868 (dotnet)
Tasks: 24 (limit: 3527)
CGroup: /system.slice/grantid-auth-server.service
└─868 /usr/bin/dotnet Grant.Id.AuthServer.dll

Jan 21 14:45:35 ubuntu1804 systemd[1]: Started GrantID Auth Server.
Jan 21 14:45:44 ubuntu1804 grantid[868]: Signing certificate PFX path: '/etc/grantid/grantid.pfx', password: ''
Jan 21 14:45:47 ubuntu1804 grantid[868]: Hosting environment: Linux
Jan 21 14:45:47 ubuntu1804 grantid[868]: Content root path: /usr/share/grantid/auth-server
Jan 21 14:45:47 ubuntu1804 grantid[868]: Now listening on: http://[::]:5011
Jan 21 14:45:47 ubuntu1804 grantid[868]: Application started. Press Ctrl+C to shut down.

Se necessário, reinicie o serviço: systemctl restart grantid-auth-server

Para testar se o serviço está em execução, execute:

curl -H "X-Forwarded-Proto: https" http://localhost:5011/

O código-fonte de um documento HTML deve ser exibido.

Crie um arquivo de configuração de site para o componente:

nano /etc/nginx/sites-available/grantid-auth-server

Digite o seguinte, substituindo a entrada server_name pelos seus domínios base e de login:

server {
listen 80;
listen 443 ssl; # comment if you don't have an SSL certificate yet

# Replace with your base domain and your login domain
server_name id.patorum.com login.id.patorum.com;

# Path of the SSL certificate and key (comment if you don't have an SSL certificate yet)
ssl_certificate /etc/ssl/certs/grantid.pem;
ssl_certificate_key /etc/ssl/private/grantid.key;

location / {
proxy_pass http://localhost:5011;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffer_size 16k;
proxy_busy_buffers_size 16k;
}
}

Habilite o site:

ln -sf /etc/nginx/sites-available/grantid-auth-server /etc/nginx/sites-enabled/grantid-auth-server

Teste a configuração do Nginx e recarregue-a:

nginx -t
nginx -s reload

Teste o site (substitua id.patorum.com pelo seu domínio base):

curl -H "Host: id.patorum.com" http://localhost/

Console​

Agora, vamos instalar o componente Console.

observação

Normalmente, o Console não precisa de nenhuma configuração adicional, então não há nada a preencher em /etc/grantid/console.log

Crie o serviço e, em seguida, habilite-o e inicie-o:

cp service-defs/grantid-console.service /etc/systemd/system/
systemctl enable grantid-console
systemctl start grantid-console
systemctl status grantid-console

A saída esperada é semelhante a:

* grantid-console.service - GrantID Console
Loaded: loaded (/etc/systemd/system/grantid-console.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-01-21 19:25:56 UTC; 13s ago
Main PID: 28519 (dotnet)
Tasks: 24 (limit: 3527)
CGroup: /system.slice/grantid-console.service
└─28519 /usr/bin/dotnet Grant.Id.Console.dll

Jan 21 19:25:56 ubuntu1804 systemd[1]: Started GrantID Console.
Jan 21 19:25:57 ubuntu1804 grantid[28519]: info: Grant.Id.Console.Startup[0]
Jan 21 19:25:57 ubuntu1804 grantid[28519]: Console has started.
Jan 21 19:25:57 ubuntu1804 grantid[28519]: Hosting environment: Linux
Jan 21 19:25:57 ubuntu1804 grantid[28519]: Content root path: /usr/share/grantid/console
Jan 21 19:25:57 ubuntu1804 grantid[28519]: Now listening on: http://[::]:5012
Jan 21 19:25:57 ubuntu1804 grantid[28519]: Application started. Press Ctrl+C to shut down.

Se necessário, reinicie o serviço: systemctl restart grantid-console

Para testar se o serviço está em execução, execute:

curl -H "X-Forwarded-Proto: https" http://localhost:5012/

O código-fonte de um documento HTML deve ser exibido.

Crie um arquivo de configuração de site para o componente:

nano /etc/nginx/sites-available/grantid-console

Digite o seguinte, substituindo a entrada server_name pelo seu domínio do console:

server {
listen 80;
listen 443 ssl; # comment if you don't have an SSL certificate yet

# Replace with your console domain
server_name console.id.patorum.com;

# Path of the SSL certificate and key (comment if you don't have an SSL certificate yet)
ssl_certificate /etc/ssl/certs/grantid.pem;
ssl_certificate_key /etc/ssl/private/grantid.key;

location / {
proxy_pass http://localhost:5012;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Habilite o site:

ln -sf /etc/nginx/sites-available/grantid-console /etc/nginx/sites-enabled/grantid-console

Teste a configuração do Nginx e recarregue-a:

nginx -t
nginx -s reload

Teste o site (substitua console.id.patorum.com pelo seu domínio do console):

curl -H "Host: console.id.patorum.com" http://localhost/

Pós-instalação​

Siga os passos em Procedimento pós-instalação do GrantID para concluir a instalação.

Ver em Markdown