Implantar o Contêiner do Docker do Oracle App Gateway

O App Gateway pode ser implantado usando o OVA ou o Docker. Saiba como implantar o contêiner do Docker do Oracle App Gateway.

Pré-requisitos

  • Faça download da imagem do docker do App Gateway. Abra o menu de navegação e selecione Identidade e Segurança. Em Identidade, selecione Domínios. Clique no nome do domínio de identidades no qual deseja trabalhar. Talvez você precise alterar o compartimento para localizar o domínio desejado. Em seguida, clique em Definições e, em seguida, em Downloads.
  • Crie um arquivo de wallet contendo o ID do Cliente e o Segredo do Cliente do App Gateway que foi criado na Console de Administração. Nomeie o arquivo da wallet cwallet.sso e copie-o para a pasta local para que o contêiner possa aceitar o arquivo. Observação: É possível fazer download da ferramenta de wallet na Console do serviço IAM. Na Console do IAM, expanda a Gaveta de Navegação, selecione Definições e, em seguida, selecione Downloads.
  • Instale o Docker (Comando: $ yum install docker-engine).
  • Adicione o usuário atual ao grupo do Docker (Comando: $ sudo usermod -a -G docker $USER).

Extrair a Imagem do Docker

Se a imagem do Docker estiver no formato .tar.gz, use os comandos a seguir para extrair a imagem para poder criar o contêiner.
  1. Carregue o arquivo .tar.gz para o registro local do Docker. Comando: $ docker load -i <.tar.gz file>
  2. Verifique se você vê a imagem no registro local do Docker. Comando: $ docker images

Criar o Contêiner do App Gateway

Definir as Variáveis de Ambiente do App Gateway

Para executar o contêiner do Docker do App Gateway, as variáveis de ambiente a seguir devem ser definidas no arquivo appgateway-env. Importante: Nenhuma validação é executada nesses valores. Se você configurar valores inválidos, a criação do contêiner do Docker do App Gateway falhará.

  • CG_APP_TENANT=<tenant name>
  • IDCS_INSTANCE_URL=<idcs instance url>. O URL exigido para acessar a instância do serviço IAM.
  • NGINX_DNS_RESOLVER=<resolver ip>. Configure o servidor de nomes encontrado no arquivo /etc/resolv.conf. O valor padrão é 127.0.0.1.

Executar o Docker

Use o comando a seguir para executar o Docker.
Nota

A pasta local é montada como volume e pode ser acessada no contêiner do Docker.

O arquivo da wallet (que contém o ID do Cliente e o Segredo do Cliente) que você criou como pré-requisito (cwallet.sso) deve ser copiado para a pasta local, para que o contêiner possa fazer referência ao arquivo.

$ docker run -it -d 
--name <container name> 
--env-file <path to env file>  
--env HOST_MACHINE=`hostname -f` 
--volume <local folder>/cwallet.sso:/usr/local/nginx/conf/cwallet.sso
--net=host/<User-defined bridge name> <image name>

Exemplo de Contêiner com Rede Host sem Mapeamento de Porta

Veja a seguir um exemplo de Rede Host sem mapeamento de porta. Isso só se aplica a números de porta maiores que 1024.
Observação

Se o número da porta configurado para o host do App Gateway for menor que 1024, use Redes com Pontes para o Docker com o mapeamento de porta. Veja o exemplo de comando Redes com Pontes com Mapeamento de Porta abaixo para executar o contêiner do Docker.
$ docker run -it -d  
--name appgateway 
--env-file appgateway-env 
--env HOST_MACHINE=`hostname -f` 
--volume /opt/appgateway/cwallet.sso:/usr/local/nginx/conf/cwallet.sso  
--net=host opc-delivery.docker.acme.com/idcs/appgateway:RELEASE-BUILDNUMBER

Exemplo de Redes com Pontes com Mapeamento de Porta

Veja a seguir um exemplo de Redes com Pontes com mapeamento de porta (80 a 65535).

Pré-requisito: Antes de usar a configuração de Rede Ponte, adicione/atualize iptables para true, no arquivo /etc/docker/daemon.json. Isso permite que o daemon do Docker edite as regras de filtragem de iptables necessárias para o mapeamento de porta.

$ docker run -it -p 80:9000  -d  
--name appgateway 
--env-file /home/<username>/dev/appgateway_pool/appgateway_env --env HOST_MACHINE=`hostname -f`
--volume /opt/appgateway/cwallet.sso:/usr/local/nginx/conf/cwallet.sso   
--net=bridge-net  idcs.docker.acme.com/idcs/appgateway: RELEASE-BUILDNUMBER

Observação: O Docker atualiza internamente o iptables/firewalld com as rotas da porta, quando o comando acima é executado.

Etapas Adicionais do Contêiner

Se o host estiver configurado como HTTPS, as etapas extras a seguir serão necessárias para copiar os certificados para o contêiner.
  1. Os certificados SSL configurados devem ser copiados para o local especificado em Propriedades Adicionais. Vá para Segurança, Gateways de Aplicativo, <Gateway>, Hosts, Propriedades Adicionais e anote o local.
  2. Execute comandos como os seguintes. Observação: O local do certificado depende do local especificado no Host de Gateways de Aplicativo.
    $ docker cp deploy/docker/nginx/build/test-config/certs/my-appgateway.cert appgateway:/scratch/docker/cloudgate/certs/my-appgateway.cert
    $ docker cp deploy/docker/nginx/build/test-config/certs/my-appgateway.key appgateway:/scratch/docker/cloudgate/certs/my-appgateway.key

Saiba Mais

  • Como sei se meu contêiner foi criado com sucesso?

    Execute o comando: $ docker ps -a e certifique-se de que o STATUS seja Ativo na lista correspondente ao nome do contêiner.

  • Se o STATUS do contêiner mostrar encerrado, como verifico os logs para determinar por que o contêiner foi encerrado?

    Execute o comando: $ docker logs <container name>. Esse comando imprime as mensagens de log, que contêm as mensagens de log impressas pelo App Gateway.

  • Como editar o arquivo cloudgate.config dentro do contêiner?

    Execute o comando: $ docker exec -it <container name> bash.

    Execute esse comando para acessar o contêiner se ele estiver em execução com um shell Bash. Uma vez dentro do contêiner, você pode editar os arquivos usando o editor Nano.

  • Podemos imprimir os logs de acesso no formato JSON?

    Sim, você pode imprimir os logs de acesso no formato JSON. Adicione as linhas abaixo ao arquivo /usr/local/nginx/conf/nginx.conf, dentro de um bloco HTTP, e reinicie o App Gateway.
    log_format jsonf escape=json '{"remote_addr": "$remote_addr", "remote_user":
          "$remote_user", "time": [$time_local], "request": "$request", "status": $status,
          "body_bytes_sent": $body_bytes_sent, "http_referer": "$http_referer", "user_agent":
          "$http_user_agent", "x_forwarded_for": "$http_x_forwarded_for"}'; access_log                    
          /usr/local/nginx/logs/access.log jsonf;

    Observação: Você pode editar os campos JSON desejados removendo ou adicionando a variável NGINX.