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
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
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
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.
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.
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!