---
title: "Instalação do GrantID em Rocky Linux"
description: "Instalação do GrantID on-premises em Rocky Linux 8.x ou mais recente: pré-requisitos como licenças, entradas de DNS e banco de dados e, em seguida, o Nginx."
canonical: "https://docs.lacunasoftware.com/articles/grant-id/on-premises/linux/install-rocky"
locale: "pt-BR"
product: "GrantID"
last_updated: "2026-10-12"
---

# Instalação do GrantID em Rocky Linux

Siga estes passos para instalar uma instância [on-premises](https://docs.lacunasoftware.com/articles/grant-id/on-premises) do [GrantID](https://docs.lacunasoftware.com/articles/grant-id) em Rocky Linux.

> **Dica**
>
> Antes de começar, certifique-se de ter concluído os passos descritos em [Planejamento antes da instalação](https://docs.lacunasoftware.com/articles/grant-id/on-premises#planejamento-antes-da-instalação)

## Pré-requisitos

* Rocky Linux 8.x ou 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](https://docs.lacunasoftware.com/articles/grant-id/on-premises#planejamento-antes-da-instalação)
* **Connection string** para um [banco de dados SQL Server ou PostgreSQL criado previamente](https://docs.lacunasoftware.com/articles/grant-id/on-premises/prepare-database)

## Instale o Nginx

> **Observação**
>
> Se você preferir usar o Apache em vez do Nginx, [veja este artigo](https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-2.2#configure-apache).

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

```sh
yum install nginx
systemctl enable nginx.service
systemctl start nginx.service
```

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

```sh
curl -I http://localhost/
```

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

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

Edite a configuração do Nginx:

```sh
nano /etc/nginx/nginx.conf
```

Remova ou comente (com `#`s) toda a seção `server`, localizada logo abaixo da cláusula `include /etc/nginx/conf.d/*.conf;`. Depois de
comentar a seção, o arquivo de configuração deve ficar semelhante a este:

```nginx
...

http {
    ...

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

#    server {
#        listen       80 default_server;
#        listen       [::]:80 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

    ...
}
```

## 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:

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

Crie um usuário local para executar os componentes:

```sh
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:

```sh
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:

```sh
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*

```sh
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.

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

Faça uma limpeza:

```sh
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:

```sh
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:

```sh
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](https://docs.lacunasoftware.com/articles/grant-id/on-premises#planejamento-antes-da-instalação), por exemplo *https://id.patorum.com*
  * **ConsoleUrl**: URL pública do componente Console, hospedado no [domínio do console](https://docs.lacunasoftware.com/articles/grant-id/on-premises#planejamento-antes-da-instalação), 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.

> **Observação**
>
> Como mencionado na [seção de planejamento](https://docs.lacunasoftware.com/articles/grant-id/on-premises#planejamento-antes-da-instalação), 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:

```sh
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](https://docs.lacunasoftware.com/articles/grant-id/on-premises/prepare-database))

* 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](https://www.twilio.com/)
    * **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](https://totalvoice.com.br/)
    * **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:

```sh
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:

```text
* 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:

```sh
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](https://docs.lacunasoftware.com/articles/grant-id/on-premises/linux/install-rocky#auth-server)

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

```sh
nano /etc/nginx/conf.d/grantid-identity-service.conf
```

Digite o seguinte, substituindo a entrada `server_name` pelo seu [domínio da API](https://docs.lacunasoftware.com/articles/grant-id/on-premises#planejamento-antes-da-instalação):

```nginx
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;
    }
}
```

Permita que os serviços façam requisições de rede:

```sh
setsebool -P httpd_can_network_connect on
```

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

```sh
nginx -t
nginx -s reload
```

Teste o site (substitua *api.id.patorum.com* pelo seu [domínio da API](https://docs.lacunasoftware.com/articles/grant-id/on-premises#planejamento-antes-da-instalação)):

```sh
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:

```sh
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:

```text
* 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:

```sh
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:

```sh
nano /etc/nginx/conf.d/grantid-auth-server.conf
```

Digite o seguinte, substituindo a entrada `server_name` pelos seus [domínios base e de login](https://docs.lacunasoftware.com/articles/grant-id/on-premises#planejamento-antes-da-instalação):

```nginx
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;
    }
}
```

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

```sh
nginx -t
nginx -s reload
```

Teste o site (substitua *id.patorum.com* pelo seu [domínio base](https://docs.lacunasoftware.com/articles/grant-id/on-premises#planejamento-antes-da-instalação)):

```sh
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:

```sh
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:

```text
* 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:

```sh
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:

```sh
nano /etc/nginx/conf.d/grantid-console.conf
```

Digite o seguinte, substituindo a entrada `server_name` pelo seu [domínio do console](https://docs.lacunasoftware.com/articles/grant-id/on-premises#planejamento-antes-da-instalação):

```nginx
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;
    }
}
```

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

```sh
nginx -t
nginx -s reload
```

Teste o site (substitua *console.id.patorum.com* pelo seu [domínio do console](https://docs.lacunasoftware.com/articles/grant-id/on-premises#planejamento-antes-da-instalação)):

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

## Pós-instalação

Siga os passos em [Procedimento pós-instalação do GrantID](https://docs.lacunasoftware.com/articles/grant-id/on-premises/post-install) para concluir a instalação.
