Como implantar o Apache Airflow no Vultr usando o Anaconda – SitePoint


Neste artigo, vamos implantar um aplicativo de fluxo de ar em um ambiente do CONDA e proteger o aplicativo usando o NGINX e solicitar o certificado SSL da Let’s Encrypt.

Fluxo de ar é uma ferramenta popular que podemos usar para definir, agendar e monitorar nossos fluxos de trabalho complexos. Podemos criar gráficos acíclicos direcionados (DAGs) para automatizar tarefas em nossas plataformas de trabalho e, sendo o fluxo de ar aberto, o fluxo de ar tem uma comunidade para fornecer suporte e melhorar continuamente.

Este é um artigo patrocinado da Vultr. A Vultr é a maior plataforma de computação em nuvem de capital privado do mundo. A favorita dos desenvolvedores, a Vultr atendeu a mais de 1,5 milhão de clientes em 185 países com soluções flexíveis, escaláveis ​​e globais de nuvem, GPU em nuvem, metal nu e armazenamento em nuvem. Saiba mais sobre Vultr.

Implantando um servidor no Vultr

Vamos começar implantando um servidor Vultr com o aplicativo da Anaconda Marketplace.

  1. Inscreva -se e faça login no Portal do cliente Vultr.

  2. Navegue até a página de produtos.

  3. Selecione Calcular No menu lateral.

  4. Clique Implantar servidor.

  5. Selecione Compute em nuvem como o tipo de servidor.

  6. Escolha um Localização.

  7. Selecione Anaconda Entre as aplicações de mercado.

    Seleção de aplicativos do Vultr Anaconda Marketplace

  8. Escolha um Plano.

  9. Selecione mais recursos conforme necessário na seção “Recursos adicionais”.

  10. Clique no Implantar agora botão.

    Botão de implantação do servidor Vultr

Criando um banco de dados gerenciado pela Vultr

Depois de implantar um servidor Vultr, a seguir, implantaremos um banco de dados PostGresql gerenciado pelo Vultr. Também criaremos dois novos bancos de dados em nossa instância de banco de dados que serão usados ​​para se conectar ao nosso aplicativo Airflow mais tarde no blog.

  1. Abra o Portal do cliente Vultr.

  2. Clique no Produtos grupo de menu e navegue para Bancos de dados Para criar um banco de dados gerenciado do PostgreSQL.

    Botão de menu de produtos de banco de dados VULTR

  3. Clique Adicionar bancos de dados gerenciados.

  4. Selecione PostGresql com a versão mais recente como mecanismo de banco de dados.

    Seleção Postgresql gerenciada por Vultr

  5. Selecione Configuração do servidor e Localização do servidor.

  6. Escreva a Rótulo para o serviço.

    Botão de rótulo Bated Database

  7. Clique Implantar agora.

    Botão de implantação do banco de dados gerenciado Vultr

  8. Depois que o banco de dados for implantado, selecione Usuários e bancos de dados.

    Usuários de banco de dados gerenciados da Vultr e seção de banco de dados

  9. Clique Adicione novo banco de dados.

  10. Digite um nome, clique Adicionar banco de dados e nomear airflow-pgsql.

  11. Repita as etapas 9 e 10 para adicionar outro banco de dados no mesmo banco de dados gerenciado e nomeie -o airflow-celery.

Introdução com conda e fluxo de ar

Agora que criamos uma instância do PostGresql gerenciada pelo Vultr, usaremos o servidor Vultr para criar um ambiente do CONDA e instalar as dependências necessárias.

  1. Verifique a versão CONDA:

  2. Crie um ambiente de conda:

    $ conda create -n airflow python=3.8
  3. Ative o ambiente:

  4. Instale o Redis Server:

    (airflow) $ apt install -y redis-server
  5. Ativar o servidor Redis:

    (airflow) $ sudo systemctl enable redis-server
  6. Verifique o status:

    (airflow) $ sudo systemctl status redis-server

    Verificação de status do servidor Redis

  7. Instale o Python Package Manager:

    (airflow) $ conda install pip
  8. Instale as dependências necessárias:

    (airflow) $ pip install psycopg2-binary virtualenv redis
  9. Instale o fluxo de ar no ambiente do CONDA:

    (airflow) $ pip install "apache-airflow(celery)==2.8.1" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.8.1/constraints-3.8.txt"

Conectando fluxo de ar com banco de dados gerenciado Vultr

Depois de preparar o ambiente, agora vamos conectar nosso aplicativo de fluxo de ar com os dois bancos de dados que criamos anteriormente em nossa instância do banco de dados e fazer as alterações necessárias na configuração do fluxo de ar para tornar nosso aplicativo pronto para produção.

  1. Defina a variável de ambiente para conexão com o banco de dados:

    (airflow) $ export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN="postgresql://user:password@hostname:port/db_name"

    Certifique -se de substituir o userAssim, passwordAssim, hostnamee port com os valores reais na seção Detalhes da conexão, selecionando o airflow-pgsql banco de dados. Substitua o db_name com airflow-pgsql.

    Seleção de credencial de banco de dados Airflow-PGSQL

  2. Inicialize o banco de dados de metadados.

    Devemos inicializar um banco de dados de metadados para o fluxo de ar para criar tabelas e esquemas necessários que armazenam informações como DAGs e informações relacionadas aos nossos fluxos de trabalho:

    (airflow) $ airflow db init
  3. Abra o arquivo de configuração do fluxo de ar:

    (airflow) $ sudo nano ~/airflow/airflow.cfg
  4. Role para baixo e mude o executor:

    executor = CeleryExecutor
  5. Vincular o banco de dados PostGresql gerenciado pelo Vultr e altere o valor de sql_alchemy_conn:

    sql_alchemy_conn = "postgresql://user:password@hostname:port/db_name"

    Certifique -se de substituir o userAssim, passwordAssim, hostnamee porta com os valores reais na seção Detalhes da conexão, selecionando o airflow-pgsql banco de dados. Substitua o db_name com airflow-pgsql.

  6. Role para baixo e altere o trabalhador e acione as portas de log:

    worker_log_server_port = 8794
    trigger_log_server_port = 8795
  7. Mude o broker_url:

    broker_url = redis://localhost:6379/0
  8. Remova o # e mude o result_backend:

    result_backend = db+postgresql://user:password@hostname:port/db_name

    Certifique -se de substituir o userAssim, passwordAssim, hostnamee port com os valores reais na seção Detalhes da conexão, selecionando o airflow-celery banco de dados. Substitua o db_name com airflow-celery.

    Seleção de credenciais de banco de dados de fluxo de fluxo de ar

  9. Salvar e sair do arquivo.

  10. Crie um usuário do fluxo de ar:

    (airflow) $ airflow users create \n    --username admin \n    --firstname Peter \n    --lastname Parker \n    --role Admin \n    --email spiderman@superhero.org

    Certifique -se de substituir todos os valores variáveis ​​pelos valores reais.

    Digite uma senha quando solicitado a defini -la para o usuário enquanto acessa o painel.

Daemonizando o aplicativo de fluxo de ar

Agora, vamos daemonizar nosso aplicativo de fluxo de ar para que ele seja executado em segundo plano e continue a funcionar de forma independente, mesmo quando fechamos o terminal e logot.

Essas etapas também nos ajudarão a criar um serviço persistente para os trabalhadores do Scheduler, Scheduler e Celery.

  1. Veja o airflow caminho:

    (airflow) $ which airflow

    Copie e cole o caminho para a área de transferência.

  2. Crie um arquivo de serviço de servidor da Web para fluxo de ar:

    (airflow) $ sudo nano /etc/systemd/system/airflow-webserver.service
  3. Cole as configurações de serviço no arquivo.

    airflow webserver é responsável por fornecer uma interface de usuário baseada na Web que nos permitirá interagir e gerenciar nossos fluxos de trabalho. Essas configurações farão um serviço em execução para o nosso servidor da web do fluxo de ar:

    (Unit)
    Description="Airflow Webserver"
    After=network.target
    
    (Service)
    User=example_user
    Group=example_user
    ExecStart=/home/example_user/.local/bin/airflow webserver
    
    (Install)
    WantedBy=multi-user.target

    Certifique -se de substituir User e Group com os detalhes da conta de usuário do sudo sem raios, e substitua o ExecStart Caminho com o caminho real do fluxo de ar, incluindo o binário executável que copiamos anteriormente na área de transferência.

  4. Salve e feche o arquivo.

  5. Ative o airflow-webserver Serviço, para que o servidor da web inicie automaticamente durante o processo de inicialização do sistema:

    (airflow) $ systemctl enable airflow-webserver
  6. Inicie o serviço:

    (airflow) $ sudo systemctl start airflow-webserver
  7. Certifique -se de que o serviço esteja em funcionamento:

    (airflow) $ sudo systemctl status airflow-webserver

    Nossa saída deve aparecer como a foto abaixo.

    Verificação de status do serviço de fluxo de ar-fluxo de ar

  8. Crie um arquivo de serviço de aipo do fluxo de ar:

    (airflow) $ sudo nano /etc/systemd/system/airflow-celery.service
  9. Cole as configurações de serviço no arquivo.

    airflow celery worker Inicia um trabalhador de aipo. O aipo é uma fila de tarefas distribuídas que nos permitirá distribuir e executar tarefas em vários trabalhadores. Os trabalhadores se conectam ao nosso servidor Redis para receber e executar tarefas:

    (Unit)
    Description="Airflow Celery"
    After=network.target
    
    (Service)
    User=example_user
    Group=example_user
    ExecStart=/home/example_user/.local/bin/airflow celery worker
    
    (Install)
    WantedBy=multi-user.target

    Certifique -se de substituir User e Group com os detalhes da conta de usuário do sudo sem raios, e substitua o ExecStart Caminho com o caminho real do fluxo de ar, incluindo o binário executável que copiamos anteriormente na área de transferência.

  10. Salve e feche o arquivo.

  11. Ative o airflow-celery serviço:

    (airflow) $ sudo systemctl enable airflow-celery
  12. Inicie o serviço:

    (airflow) $ sudo systemctl start airflow-celery
  13. Certifique -se de que o serviço esteja em funcionamento:

    (airflow) $ sudo systemctl status airflow-celery
  14. Crie um arquivo de serviço do Airflow Scheduler:

    (airflow) $ sudo nano /etc/systemd/system/airflow-scheduler.service
  15. Cole as configurações de serviço no arquivo.

    airflow scheduler é responsável pelo agendamento e acionamento dos DAGs e das tarefas definidas nelas. Ele também verifica o status de DAGs e tarefas periodicamente:

    (Unit)
    Description="Airflow Scheduler"
    After=network.target
    
    (Service)
    User=example_user
    Group=example_user
    ExecStart=/home/example_user/.local/bin/airflow scheduler
    
    (Install)
    WantedBy=multi-user.target

    Certifique -se de substituir User e Group com os detalhes da conta de usuário do sudo sem raios, e substitua o ExecStart Caminho com o caminho real do fluxo de ar, incluindo o binário executável que copiamos anteriormente na área de transferência.

  16. Salve e feche o arquivo.

  17. Ative o airflow-scheduler serviço:

    (airflow) $ sudo systemctl enable airflow-scheduler
  18. Inicie o serviço:

    (airflow) $ sudo systemctl start airflow-scheduler
  19. Certifique -se de que o serviço esteja em funcionamento:

    (airflow) $ sudo systemctl status airflow-scheduler

    Nossa saída deve aparecer assim na foto abaixo.

    Verificação de status do serviço de fluxo de fluxo aéreo

Configurando o nginx como um proxy reverso

Criamos serviços persistentes para o aplicativo de fluxo de ar, então agora vamos configurar Nginx Como proxy reverso para aprimorar a segurança e a escalabilidade de nosso aplicativo, seguindo as etapas descritas abaixo.

  1. Faça login no Portal do cliente Vultr.

  2. Navegue até o Produtos página.

  3. No menu lateral, expanda o Rede Desça e selecione Dns.

  4. Clique no Adicionar domínio botão no centro.

  5. Siga o procedimento de configuração para adicionar seu nome de domínio selecionando o endereço IP do seu servidor.

  6. Defina os seguintes nomes de host como os servidores de nomes primários e secundários do seu domínio com o seu registrador de domínio:

    • ns1.vultr.com
    • ns2.vultr.com
  7. Instale o nginx:

    (airflow) $ apt install nginx
  8. Verifique se o servidor nginx está em funcionamento:

    (airflow) $ sudo systemctl status nginx
  9. Criar um novo arquivo de configuração do host virtual nginx no sites-available diretório:

    (airflow) $ sudo nano /etc/nginx/sites-available/airflow.conf
  10. Adicione as configurações ao arquivo.

    Essas configurações direcionarão o tráfego em nosso aplicativo do domínio real para o servidor de back -end em http://127.0.0.1:8080 Usando um passe de proxy:

    server {
    
        listen 80;
        listen (::):80;
        server_name airflow.example.com;
    
        location / {
            proxy_pass http://127.0.0.1:8080;  
        }
    
    }

    Certifique -se de substituir airflow.example.com Com o domínio real, adicionamos no painel Vultr.

  11. Salve e feche o arquivo.

  12. Vincular o arquivo de configuração ao sites-enabled diretório para ativar o arquivo de configuração:

    (airflow) $ sudo ln -s /etc/nginx/sites-available/airflow.conf /etc/nginx/sites-enabled/
  13. Verifique a configuração para erros:

    (airflow) $ sudo nginx -t

    Nossa saída deve aparecer assim na foto abaixo.

    Verificação de configuração do nginx

  14. Reinicie o nginx para aplicar alterações:

    (airflow) $ sudo systemctl reload nginx
  15. Permitir a porta HTTP 80 Através do firewall para todas as conexões de entrada:

    (airflow) $ sudo ufw allow 80/tcp
  16. Permitir a porta HTTPS 443 Através do firewall para todas as conexões de entrada:

    (airflow) $ sudo ufw allow 443/tcp
  17. Recarregue as regras do firewall para salvar alterações:

    (airflow) $ sudo ufw reload

Aplicando Let’s Crypt Certificados SSL no aplicativo de fluxo de ar

O último passo é aplicar um Vamos criptografar O certificado SSL para o nosso aplicativo de fluxo de ar para que se torne muito mais seguro e salve nosso aplicativo de ataques indesejados.

  1. Usando Snap, instale o certificado CertBot Let’s Encrypt Client:

    (airflow) $ snap install --classic certbot
  2. Obtenha um novo certificado SSL para nosso domínio:

    (airflow) $ certbot --nginx -d airflow.example.com

    Certifique -se de substituir airflow.example.com com nosso nome de domínio real.
    E quando solicitado, digite um endereço de e -mail e pressione Y aceitar os termos let’s criptografar.

  3. Teste que o Certificado SSL renova automaticamente após a expiração.

    A renovação automática garante que nossos certificados SSL estejam atualizados, reduzindo o risco de expiração do certificado e mantendo a segurança de nosso aplicativo:

    (airflow) $ certbot renew --dry-run
  4. Use um navegador da web para abrir nosso aplicativo de fluxo de ar: https://airflow.example.com.

    Quando solicitado, digite o nome de usuário e a senha que criamos anteriormente.

    Login do painel de fluxo de ar

    Ao acessar o painel, todos os DAGs serão visíveis fornecidos por padrão.

    Painel de fluxo de ar

Conclusão

Neste artigo, demonstramos como criar ambientes do CONDA, implantar um aplicativo Airflow pronto para produção e melhorar o desempenho e a segurança de um aplicativo.



Source link