Requisitos

Embora a documentação não limite a instalação aos recursos citados abaixo, recomendamos que a instalação seja realizada com:

Requisitos Hardware (Mínimo para ambiente de produção):

  • 02 vCPU
  • 04 GB RAM
  • 80 GB HDD (Thin Provision)

Sistema Operacional:

  • CentOS / RHEL 7
  • Debian

Instalação e Configuração de um Docker Engine CE

Docker CE provê uma ótima ferramenta de automatização de instalação através de um script de instalação. Para utiliza-la basta seguir os seguintes passos:

Instalando o Docker Engine

Baixe o script no servidor e o execute com privilégios de usuário root para realizar a instalação:

# curl -fsSL https://get.docker.com -o get-docker.sh
# sh get-docker.sh

Habilitando Serviço

Habilite o serviço Docker com o comando:

# systemctl enable docker.service

E inicie o serviço com o comando:

# systemctl start docker.service

Credenciais da API

A comunicação com os componentes da solução é realizada através da API do Docker Engine CE. Por esse motivo, credenciais devem ser criadas para garantir o acesso somente de pessoas autorizadas.

Para isso, crie um diretório que será utilizado para armazenar os arquivos do certificado digital e as credenciais que serão utilizadas na comunicação com o servidor.

$ mkdir /certs

Em seguida utilize o comando htpasswd, através do comando abaixo substituindo USERNAME e PASSWORD por suas credenciais:

$ htpasswd -bn USERNAME PASSWORD > /certs/htpasswd
Importante!

O comando htpasswd pode ser instalado da seguinte forma em seus respectivos Sistemas Operacionais:

CentOS/RHEL 7:
yum install httpd-tools

Debian:
apt-get install apache2-utils

Certificados Digitais

Para garantir a segurança da comunicação entre o Docker Host, a PanOps e usuários da aplicação, um certificado SSL deve ser utilizado. Caso sua organização não possua um certificado válido, você pode optar por gerar um novo auto-assinado ou utilizar os certificados da Let`s Encrypt

Importante!

Antes de continuar, escolha o nome do servidor - DN (Distinguished Name) - com o qual o servidor será publicado. Esse nome será usado nos certificados e caso haja divergências haverá falhas de confiança na comunicação.

Se houver necessidade de trocar o DN de um servidor, execute novamente os passos a partir daqui.

Nova Versão de SSL

openssl req -subj "/commonName=*.domain.com/" -x509 -nodes -days 730 -newkey rsa:2048 -keyout server-key.pem -out server-cert.pem

Gerar Certificado Auto-assinado

Navegue para a pasta criada no passo anterior:

$ cd /certs/

Gere a chave da CA interna, uma senha deverá ser informada:

$ openssl genrsa -aes256 -out ca-key.pem 4096
Generating RSA private key, 4096 bit long modulus
............................................................++
............................................................++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:
Verifying - Enter pass phrase for ca-key.pem:

Gere o arquivo PEM da CA interna utilizando a senha criada no passo anterior e responda as informações solicitadas:

$ openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
Enter pass phrase for ca-key.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:País
State or Province Name (full name) []:Estado
Locality Name (eg, city) [Default City]:Cidade
Organization Name (eg, company) [Default Company Ltd]:Empresa
Organizational Unit Name (eg, section) []:Tecnologia
Common Name (eg, your name or your server's hostname) []:terminal.empresa.com.br
Email Address []:contato@empresa.com.br

Agora que sua CA já possui os certificados, gere um certificado para o servidor:

$ openssl genrsa -out server-key.pem 4096
Generating RSA private key, 4096 bit long modulus
............................................................++
............................................................++
e is 65537 (0x10001)

Em seguida gere uma requisição assinatura passando o DNS que será utilizado para o host:

$ openssl req -subj "/CN=terminal.empresa.com.br" \
 -sha256 -new -key server-key.pem -out server.csr

Especifique o nome DNS e endereços IP que serão utilizados permitidas para conexões TLS:

$ echo subjectAltName = DNS:terminal.empresa.com.br,IP:10.10.10.20,IP:127.0.0.1 > extfile.cnf

Habilite o uso de chave extentida para autenticação do servidor:

$ echo extendedKeyUsage = serverAuth >> extfile.cnf

E por fim assine o certificado do servidor:

$ openssl x509 -req -days 365 -sha256 -in server.csr \
  -CA ca.pem -CAkey ca-key.pem -CAcreateserial \
  -out server-cert.pem -extfile extfile.cnf

Signature ok
subject=/CN=terminal.empresa.com.br
Getting CA Private Key
Enter pass phrase for ca-key.pem:

Habilitando a API

Após executar os passos anteriores, você deve possuir os seguintes arquivos na pasta /certs/ antes de prosseguir:

  • htpasswd - Arquivo com usuários e senhas da API.
  • server-cert.pem - Nome do arquivo do certificado digital.
  • server-key.pem - Nome do arquivo da chave do certificado digital.

Em seguida execute o seguinte comando:

$ docker run \
  -d \
  -v /var/run/docker.sock:/tmp/docker.sock \
  -v /certs/:/mnt/ \
  -e CERT=server-cert.pem \
  -e KEY=server-key.pem \
  -p 2376:2376 \
  --name docker-api \
  --restart=always \
  panops/docker-api
Importante!

Caso deseje customizar a porta da API para seu ambiente, troque o parâmetro -p 2376:2376 para -p {PORT}:2376, onde deve ser uma porta livre no servidor

Você poderá checar se o comando anterior foi efetivado com o comando abaixo:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
123456789abc        panops/docker-api   "nginx -g 'daemon of…"   9 seconds ago       Up 8 seconds        80/tcp, 0.0.0.0:2376->2376/tcp   docker-api

Ou acessando através do seu navegador:

https://ENDEREÇO_DO_SEU_SERVIDOR:2376/_ping

As credenciais criadas no item Credencias da API, serão solicitadas.

Importante!

Caso haja algum erro nas credenciais, tente refazer o arquivo /certs/htpasswd e em seguida remova o container anterior com o comando docker rm -f docker-api e recrie com o comando citado anteriormente. O processo também é valido para troca de credencias da API.

Testando Acesso à API

Após concluir os itens anteriores, você poderá testar o acesso através da URL: https://ENDEREÇO_DO_SEU_SERVIDOR:2376/_ping, uma página com a palavra OK deve ser exibida.

Importante!

No caso de certificado auto-assinado por uma CA inválida, cada usuário deve aceitar o certificado em suas exceções para o devido funcionamento do Terminal PanOps

Firewall do Servidor

O Docker Engine CE interage diretamente com o daemon do iptables (firewalld). Por essa razão o serviço do Firewall(firewalld) precisa estar em execução e não deve ser parado!

© 2024, Panops Solutions | Todos os direitos reservados.