Instalação do GrantID em Ubuntu Server
Siga estes passos para instalar uma instância on-premises do GrantID em um Ubuntu Server.
Antes de começar, certifique-se de ter concluído os passos descritos em Planejamento antes da instalação
Pré-requisitos
-
Ubuntu Server (qualquer versão ainda suportada pelo fabricante; recomendamos a versão LTS mais recente)
-
Licença do PKI SDK (no formato Base64)
-
Licença do Web PKI (formato Base64/binário) -- necessária apenas para o login com certificado
-
Entradas de DNS criadas previamente para os domínios mencionados na seção de planejamento
-
Connection string para um banco de dados SQL Server ou PostgreSQL criado previamente
Instale o ASP.NET Core Runtime 8.0
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:
- 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)
- 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]
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
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
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
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
- ProductName: o nome da sua instância do GrantID, por exemplo Patorum ID
- AuthServerUrl: URL pública do componente Auth Server, hospedado no domínio base, por exemplo https://id.patorum.com
- ConsoleUrl: URL pública do componente Console, hospedado no domínio do console, por exemplo https://console.id.patorum.com
- UseSSL: se as URLs públicas vão usar HTTPS (preencha de acordo com as URLs anteriores)
-
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.
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
- DefaultConnection: connection string do banco de dados (veja como preparar o banco de dados)
-
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
Twiliopara 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
- Type: defina como
- TotalVoice
- Type: defina como
TotalVoicepara enviar mensagens SMS pela TotalVoice - AccessToken: o token de acesso, fornecido pela TotalVoice (ex.: 0123456789abcdef0123456789abcdef)
- Type: defina como
- Simulador (apenas para fins de depuração)
- Type: defina como
Simulatorpara simular o envio de mensagens SMS (em vez de enviá-las, apenas registra no log as mensagens que seriam enviadas)
- Type: defina como
- Twilio
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.
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
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.
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.
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.
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.