Observação:

Implante a Próxima Nuvem no Ampere A1 no Oracle Cloud Infrastructure

Neste tutorial, você instalará o Nextcloud, a popular plataforma de colaboração de código aberto no Oracle Cloud Infrastructure (OCI). Você usará uma única instância de computação Ampere A1 para o servidor Nextcloud. Você também deverá executar Nextcloud como um conjunto de contêineres, usando o Podman. O Podman é um mecanismo de contêiner para gerenciar e executar contêineres usando os padrões da Open Container Initiative. Ele oferece total compatibilidade de API com o Docker e atua como uma eliminação na substituição do comando docker. No entanto, oferece alguns benefícios em comparação com o Docker, que inclui uma arquitetura sem daemon, suporte para contêineres sem raiz e suporte a cgroupsv2.

Nextcloud oferece imagens de contêineres docker que suportam a arquitetura Arm. A próxima nuvem também requer um banco de dados, para o qual podemos usar o MySQL ou MariaDB. Para implantações mais escaláveis, você pode considerar o uso do serviço de banco de dados MySQL no OCI, o que facilita a escalabilidade, o backup e o gerenciamento do banco de dados MySQL.

Os dados criados em um contêiner não são persistidos, e a Próxima Nuvem requer armazenamento persistente para armazenar os arquivos dos quais fazemos upload e para o estado interno. Para persistir nos dados, podemos usar volumes usando o serviço OCI Block Storage. Um volume é um dispositivo de armazenamento criado e gerenciado pelo Podman. Os volumes são criados diretamente usando o comando podman volume ou durante a criação do contêiner.

Para ativar a interface do usuário baseada na Web Nextcloud e os serviços, precisamos fazer as alterações necessárias na lista de segurança da Rede do OCI para permitir o tráfego.

Com esses componentes, temos uma topologia básica para nossa implantação.

Arquitetura

Descrição da ilustração arch.png

Introdução

Objetivos

Neste tutorial, você vai:

Pré-requisitos

  1. Uma Conta no Cloud do Oracle Free Tier (Trial), Paga ou LiveLabs
  2. Familiaridade com a console do OCI
  3. Visão Geral do Networking
  4. Familiaridade com Compartimentos
  5. Conhecimento conceitual básico de contêineres e Podman

Configurar seu Ambiente

Comece iniciando o ambiente de nuvem Oracle que será usado para criar e implantar seu aplicativo Java EE. Esse ambiente estará contido em um Compartimento da nuvem, e a comunicação dentro do Compartimento será por meio de uma VCN (Rede Virtual na Nuvem). O Compartimento e a VCN isolarão e protegerão o ambiente geral. Você implantará a instância de computação Ampere A1 para hospedar o servidor do Nextcloud. Quando a instância de computação for criada, você configurará políticas de acesso para expor o aplicativo e instalar o Nextcloud em sua instância.

Configuração Básica da Infraestrutura do OCI

  1. Abra o menu de navegação. Em Governança e Administração, vá para Identidade e clique em Compartimentos. Nesta tela, você verá uma lista de compartimentos. Clique em Criar Compartimento.

  2. Informe o seguinte:

    • Nome: Informe "AppDev".
    • Descrição: Informe uma descrição (necessária), por exemplo: "AppDev compartimento para o tutorial introdutório". Evite digitar informações confidenciais.
    • Compartimento Pai: Selecione o compartimento no qual você deseja que este compartimento reside. O padrão é o compartimento (ou tenancy) raiz.
    • Clique em Criar Compartimento.
    • Seu compartimento é exibido na lista.

Criar uma Instância de Computação A1 Ampere

  1. Para criar uma instância de computação Ampere A1, use o menu de navegação no canto superior esquerdo da Console e vá para Computação > Instâncias.

  2. Abra o fluxo de criação da instância.

    1. Verifique se você está no Compartimento AppDev
    2. Clique em Criar Instância.
  3. Na página de criação de instância, você criará a nova instância com os novos recursos de rede, como VCN (Virtual Cloud Network), Gateway de Internet (IG) e muito mais.

    1. Dê à instância o nome Nextcloud
    2. Atualize a seleção da Imagem para usar o Oracle Linux 8 ou mais recente
    3. Clique no botão Alterar Forma para ver as formas de computação disponíveis.

     Criar Instância

    Descrição da ilustração 03_create_instance02.png

  4. Configure a imagem para sua instância.

    1. Clique no botão Alterar Imagem para ver as imagens do SO disponíveis.
    2. Escolha Oracle Linux 8 ou mais recente.

    Escolha o Oracle Linux 8

    Descrição da ilustração 03_create_instance02_1.png

  5. Configure os recursos para sua instância.

    1. Escolha o processador baseado no Ampere Arm na opção da série de formas.
    2. Escolha a forma VM.Standard.A1.Flex na lista de formas com processadores baseados no Ampere Arm. As formas Ampere A1 são flexíveis e você pode modificar o número de núcleos e a quantidade de memória. Escolha 1 núcleo e 6 GB de memória para a VM.

    Escolher Forma

    Descrição da ilustração 04_create_instance03.png

  6. Escolha suas opções de rede. Crie uma nova VCN e sub-rede para sua próxima implantação na nuvem. Certifique-se de designar um endereço IP público à sua instância.

  7. Gere e faça download do par de chaves SSH. Essa etapa é opcional, mas altamente recomendada para manutenção e atualizações posteriores. Você também poderá trazer sua chave pública se já tiver um par de chaves que gostaria de usar. Se você quiser saber como gerar chaves SSH, siga as instruções no tutorial Gerar chaves SSH.

    Opções de rede

    Descrição da ilustração 06_create_instance05.png

  8. Clique em Criar para criar os recursos de rede e iniciar a instância de computação. iniciar instância

    Descrição da ilustração 07_create_instance06.png

Expor Portas do Aplicativo a Usuários

Para que os aplicativos fiquem acessíveis pela Internet, você precisa abrir as portas que nosso aplicativo usará. Nesta seção, você configurará listas de segurança em sua rede na nuvem e regras de firewall na sua instância de computação para permitir que seus aplicativos enviem e recebam tráfego.

Configurar a Rede Virtual na Nuvem (VCN)

Uma lista de segurança atua como um firewall virtual para uma instância, com regras de entrada e saída que especificam os tipos de tráfego de entrada e saída permitidos. Listas de segurança, conforme configuradas no nível da sub-rede, que aplica as regras de segurança a todos os elementos de rede dessa sub-rede. Sua rede vem com uma lista de segurança padrão, que contém um conjunto inicial de regras. A lista de segurança padrão permite que você estabeleça conexão com sua instância usando SSH e, para sua instância, faça chamadas de rede de saída para qualquer destino.

  1. Navegue na página de detalhes da instância criada. Compute > Instâncias > Clique na instância que você criou
  2. Navegue até a sub-rede à qual sua instância está anexada, clicando na sub-rede selecionar sub-rede

    Descrição da ilustração 01_setup_network_01.png

  3. Na sub-rede, selecione a lista de segurança padrão
  4. Clique em "Adicionar Regra de Entrada" para adicionar uma nova regra para permitir o tráfego de entrada que corresponda às regras.
  5. Adicione uma regra de entrada para permitir tráfego de entrada na porta 8080
    1. Defina o CIDR de Origem como 0.0.0.0/0. Isso permite o tráfego de entrada de todas as origens.
    2. Defina o Intervalo de Portas de Destino como 8080. Isso define o destino apenas como porta 8080. Agora a regra permite que o tráfego de todas as origens use a porta 8080. É isso que precisamos, para que nosso aplicativo possa ser acessado de qualquer lugar.
    3. Forneça uma descrição. regra de entrada de configuração

      Descrição da ilustração 01_setup_network_04.png

Configurar Instância

As regras do firewall controlam o tráfego de entrada/saída de uma instância. Você configura regras de firewall diretamente na instância e fornece um nível adicional de segurança.

  1. Navegue na página de detalhes da instância criada. Compute > Instâncias > Clique na instância que você criou
  2. Copie o endereço IP público da sua instância.
  3. Faça log-in na instância usando SSH. Use a chave que você gerou ou forneceu durante a etapa de criação da instância. O nome de usuário padrão para instâncias que usam o sistema operacional Oracle Linux é opc.
  4. Execute os comandos de configuração do firewall. Isso modifica o firewall na própria instância para expor a porta 8080 e aceitar tráfego de entrada.

    sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
    sudo firewall-cmd --reload
    

Implantar Próxima Nuvem no Ampere A1

Agora você pode executar o Nextcloud na plataforma de computação Ampere A1 como uma implantação de contêiner. Você também usará as novas ferramentas de contêiner, como Podman, incluídas no Oracle Linux 8. O Podman oferece um utilitário leve para executar e gerenciar contêineres compatíveis com o Open Container Initiative (OCI). Uma implantação de Podman pode reutilizar imagens de contêiner existentes. O podman não requer um daemon em execução e permite que os contêineres sejam iniciados e executados sem permissões root. Para saber mais sobre o Podman no Oracle Linux, visite a documentação oficial

Instale as Ferramentas de Contêiner

Assim que a instância tiver sido criada com o Oracle Linux 8.x, podemos instalar o pacote container-tools para preparar nossa instância com as ferramentas necessárias para implantar cargas de trabalho em contêiner.

  1. Faça log-in na instância usando SSH. Use a chave que você gerou ou forneceu durante a etapa de criação da instância. O nome de usuário padrão para instâncias em execução no sistema operacional Oracle Linux é opc.

  2. Instale o módulo container-tools que utiliza todas as ferramentas necessárias para trabalhar com contêineres.

    sudo dnf module install container-tools:ol8
    
    sudo dnf install git
    

Criar uma Definição de Pod

Podman pode gerenciar grupos de contêineres chamados Pods. Formalmente, pods são um grupo de um ou mais contêineres que compartilham os mesmos namespaces de rede, pid e ipc. Esse conceito foi introduzido inicialmente pelo projeto Kubernetes, e os pods Podman são muito semelhantes aos Pods do Kubernetes.

Em muitos aspectos, um pod se comporta como um host virtual no qual os serviços dentro de cada contêiner são executados. Isso significa que cada contêiner pode acessar os serviços um no outro contêiner como se estivessem em execução no mesmo host. A execução de contêineres dessa forma pode remover muita complexidade em torno da rede e facilitar a limitação da exposição pública de portas que se destinam apenas a uso por serviços dentro do próprio aplicativo.

Os pods são uma ótima maneira de gerenciar contêineres relacionados, como quando um aplicativo é composto de vários contêineres. Neste tutorial, você implantará Nextcloud as a Pod. Os contêineres necessários para NextCloud estão contidos no nosso Pod e iniciados e interrompidos juntos. A primeira etapa do gerenciamento de nosso aplicativo como Pod é criar uma definição de pod vazia.

Criar um Pod com o comando abaixo

podman pod create --hostname nextcloud --name nextcloud --publish 8080:80 --infra-image k8s.gcr.io/pause:3.1
  1. podman pod create - cria um pod.
  2. --hostname nextcloud - define o nome do host do pod como nextcloud
  3. --name nextcloud - define o nome do pod como nextcloud
  4. --publish 8080:80 - publique a porta 80 no pod para a porta 8080 no host.

Definir Volumes de Armazenamento

Agora que o pod é definido, também devemos definir algumas opções de armazenamento antes de preencher o Pod com nossos contêineres. Os contêineres usam camadas de contêineres graváveis por padrão para todos os arquivos criados em um contêiner. Isso significa que os arquivos e dados criados pelos processos em um contêiner não são persistidos e são perdidos quando o contêiner é removido ou encerrado. Isso também dificulta o compartilhamento dos dados entre contêineres. Os volumes são a forma preferida de persistir os dados criados por contêineres. Elas podem ser consideradas como abstrações de armazenamento para locais de armazenamento na máquina host, mas gerenciadas independentemente do ciclo de vida do contêiner. Eles também facilitam o compartilhamento de dados entre contêineres montando-os simultaneamente em vários contêineres.

Com base nas recomendações da Próxima Nuvem, usamos 3 volumes para gerenciar dados.

  1. O volume chamado nextcloud-appdata armazenará o estado do aplicativo principal para a próxima nuvem

  2. O volume chamado nextcloud-files armazenará os arquivos submetidos a upload e criados por usos.

  3. O volume chamado nextcloud-db armazenará os arquivos de banco de dados do banco de dados MySQL.

    podman volume create nextcloud-appdata 
    podman volume create nextcloud-files
    podman volume create nextcloud-db
    

Executar o MySQL Database

Agora você pode iniciar o banco de dados para a Próxima Nuvem com o volume anexado. O contêiner do banco de dados é iniciado no pod que já foi criado. O banco de dados usado por Nextcloud é o MySQL, e aqui o estamos executando como um contêiner no pod. Para uma implantação mais robusta e totalmente gerenciada, você pode substituir esse contêiner pelo serviço de banco de dados MySQL do OCI.

O comando para iniciar o banco de dados é mostrado abaixo e cada uma das opções é explicada.

Observação: Assegure-se de fornecer senhas fortes para as variáveis MYSQL_PASSWORD e MYSQL_ROOT_PASSWORD abaixo.

podman run --detach --pod=nextcloud \
--env MYSQL_DATABASE=nextcloud \
--env MYSQL_USER=nextcloud \
--env MYSQL_PASSWORD=NEXTCLOUD_PASSWORD \
--env MYSQL_ROOT_PASSWORD=MYSQL_ROOT_PASSWORD \
--volume nextcloud-db:/var/lib/mysql:Z \
--restart on-failure \
--name nextcloud-db \
mysql/mysql-server:8.0 
  1. podman run - o comando de execução informa ao podman para executar um comando em um contêiner com os parâmetros fornecidos. O comando a ser executado normalmente é definido na própria imagem.
  2. --detach - Modo desanexado: execute o contêiner no plano de fundo e imprima o novo ID do contêiner.
  3. --pod=nextcloud - Execute o contêiner em um pod existente. Aqui escolhemos executar o contêiner no pod que criamos anteriormente para Nextcloud
  4. --env - Define variáveis de ambiente arbitrárias. Essas variáveis de ambiente podem ser acessadas pelos processos em execução no contêiner.
  5. --volume nextcloud-db:/var/lib/mysql:Z - monta o volume chamado nextcloud-db no local /var/lib/mysql, o local padrão dos arquivos de dados do MySQL. A opção Z informa ao Podman para rotular o conteúdo com um label privado não compartilhado.
  6. --restart on-failure - Reinicie a política a ser seguida quando os contêineres sairem. Aqui o contêiner será reiniciado quando ele falhar. Uma falha é quando o processo no contêiner existe com um status de existência diferente de zero.
  7. --name nextcloud-db - designa o nome nextcloud-db ao contêiner.
  8. mysql/mysql-server:8.0 - a imagem a ser executada para criar o contêiner

Como você está executando o contêiner no modo desanexado, o Podman o iniciará em segundo plano e sairá. Para ver o status da inicialização e dos logs, você pode executar o comando a seguir. Pressione Ctrl+C para parar de seguir os logs.

podman logs -f nextcloud-db

Implementar próxima nuvem

Agora você pode implantar o Nextcloud como outro contêiner no mesmo pod. Os parâmetros são semelhantes ao comando anterior e, aqui, você está informando os detalhes de conectividade do banco de dados que o Nextcloud deve usar.

Observação: Certifique-se de que os valores das variáveis MYSQL_DATABASE, MYSQL_USER e MYSQL_PASSWORD sejam os mesmos fornecidos quando você iniciou o banco de dados. Certifique-se de atualizar os valores de NEXTCLOUD_ADMIN_USER e NEXTCLOUD_ADMIN_PASSWORD à sua escolha.

podman run --detach --pod=nextcloud \
  --env MYSQL_HOST=127.0.0.1 \
  --env MYSQL_DATABASE=nextcloud \
  --env MYSQL_USER=nextcloud \
  --env MYSQL_PASSWORD=NEXTCLOUD_PASSWORD \
  --env NEXTCLOUD_ADMIN_USER=NC_ADMIN \
  --env NEXTCLOUD_ADMIN_PASSWORD=NC_PASSWORD \
  --env NEXTCLOUD_TRUSTED_DOMAINS=<your public IP> \
  --volume nextcloud-appdata:/var/www/html:Z \
  --volume nextcloud-files:/var/www/html/data:Z \
  --restart on-failure \
  --name nextcloud-app \
  docker.io/library/nextcloud:21
  1. --env MYSQL_HOST=127.0.0.1 - Como tanto o banco de dados quanto o aplicativo estão no mesmo pod, o aplicativo pode acessar o contêiner do banco de dados usando 127.0.0.1, como se ambos estivessem em execução no mesmo host.
  2. --env NEXTCLOUD_TRUSTED_DOMAINS=<your public IP> - Os domínios confiáveis são um recurso de segurança usado pelo Nextcloud e você precisa fornecer a lista de todos os domínios em que o Nextcloud pode ser acessado. Nesse caso, será o endereço IP público da instância, pois é aí que esperaremos que a Nextcloud seja executada.

Para ver os logs de inicialização que você pode usar:

podman logs -f nextcloud-app

Quando a inicialização estiver concluída, você poderá navegar até http://<your_public_ip>:8080 para acessar seu servidor Nextcloud. Use os valores fornecidos para NEXTCLOUD_ADMIN_USER e NEXTCLOUD_ADMIN_PASSWORD para fazer log-in.

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.