<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Renan Botasse - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Renan Botasse - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Mon, 25 May 2026 04:46:49 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/author/renan/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Como fazer o deploy de uma aplicação em Node.js – do servidor à produção ]]>
                </title>
                <description>
                    <![CDATA[ Neste tutorial, vamos aprender tudo que é preciso para fazer o deploy de uma aplicação em Node para um servidor de produção. Para começar, vamos alugar um servidor na Digital Ocean. Depois disso, vamos configurar o servidor, fazer a conexão, instalar o Nginx e configurá-lo, extrair ou criar nossa aplicação ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-fazer-o-deploy-de-uma-aplicacao-em-node-js-do-servidor-a-producao/</link>
                <guid isPermaLink="false">640466277d24e505217385a2</guid>
                
                    <category>
                        <![CDATA[ Node.js ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Renan Botasse ]]>
                </dc:creator>
                <pubDate>Mon, 24 Apr 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/603a54d9a675540a22924662.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/deploy-nodejs-app-server-to-production/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Deploy a Node.js App – From Server Setup to Production</a>
      </p><p>Neste tutorial, vamos aprender tudo que é preciso para fazer o deploy de uma aplicação em Node para um servidor de produção.</p><p>Para começar, vamos alugar um servidor na Digital Ocean. Depois disso, vamos configurar o servidor, fazer a conexão, instalar o Nginx e configurá-lo, extrair ou criar nossa aplicação do Node.js e executá-la como um processo.</p><p>Como você pode ver, há muito para ser feito e teremos várias opções. Então, vamos começar.</p><p>Você deve ter algum conhecimento básico de como o Terminal funciona e já ter trabalhado com Vi/Vim antes de iniciar o tutorial. Se você não estiver familiarizado com os comandos básicos, eu recomendo ler sobre eles. </p><p>Eu vou executar os comandos em um MacOS. Se você quiser seguir esse tutorial em um Windows, &nbsp;pode usar o Powershell ou algum tipo de emulador para Unix.</p><p>Embora eu esteja usando o Node.js como uma plataforma para o nosso exemplo de aplicação, muitas etapas são iguais para qualquer tipo de aplicação para a web.</p><h2 id="por-que-a-digital-ocean"><strong>Por que a Digital Ocean?</strong></h2><p>Eu escolhi a Digital Ocean pois é barata e a interface é muito fácil de usar, comparada a outras, como a da AWS. Além disso, junto com o pacote para estudantes do GitHub, você recebe US$ 100 de crédito. Desse modo, você não terá que pagar por nada durante alguns meses. É o ideal para um projeto ou um curso.</p><p>Ela posssui um conceito chamado <em>Droplets</em>, que é basicamente a sua parte do servidor. Você pode pensar no servidor como um apartamento em que você pode alugar um quarto. </p><p><em>Droplets</em> funcionam com a ajuda de máquinas virtuais que rodam dentro do servidor. Portanto um Droplet é a sua máquina virtual dentro do servidor dividido. Por ser uma máquina virtual, sua CPU e memória são compartilhados e podem ser facilmente aumentados. Isso pode ser feito através de um investimento em dinheiro junto ao provedor.</p><h2 id="como-criar-um-projeto-na-digital-ocean"><strong>Como criar um projeto na Digital Ocean</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-3.png" class="kg-image" alt="image-3" width="203" height="178" loading="lazy"></figure><p>Assumindo que você já se inscreveu e está logado na Digital Ocean, o primeiro passo é criar o projeto que conterá nosso <em>Droplets</em>. &nbsp;Clique no botão "New Project" no menu do lado esquerdo. Ele vai pedir que você dê um nome para o seu projeto.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/Screen-Shot-2021-02-22-at-13.35.06.png" class="kg-image" alt="Screen-Shot-2021-02-22-at-13.35.06" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/Screen-Shot-2021-02-22-at-13.35.06.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/Screen-Shot-2021-02-22-at-13.35.06.png 995w" width="995" height="785" loading="lazy"></figure><p>Coloque o nome que você quiser. Ele também vai perguntar se você quer mover algum recurso, mas por enquanto apenas clique em Skip (Ignorar). Mais tarde, nós vamos criar o <em>droplet</em>.</p><h2 id="como-criar-um-droplet-no-digital-ocean"><strong>Como criar um <em>droplet </em>no Digital Ocean</strong></h2><p>Vamos criar nosso <em>droplet </em>clicando no botão "Get Started" (Iniciar).</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-4-1024x593.png" class="kg-image" alt="image-4-1024x593" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/image-4-1024x593.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/image-4-1024x593.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-4-1024x593.png 1024w" width="1024" height="593" loading="lazy"></figure><p>Após clicar no botão, ele vai pedir para escolhermos uma imagem para a máquina virtual.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/Screen-Shot-2021-02-22-at-13.12.43-1024x567.png" class="kg-image" alt="Screen-Shot-2021-02-22-at-13.12.43-1024x567" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/Screen-Shot-2021-02-22-at-13.12.43-1024x567.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/Screen-Shot-2021-02-22-at-13.12.43-1024x567.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/Screen-Shot-2021-02-22-at-13.12.43-1024x567.png 1024w" width="1024" height="567" loading="lazy"><figcaption>Como selecionar uma imagem</figcaption></figure><p>Nesta parte, eu selecionei Ubuntu 20.04 pois é a versão mais atual e "LTS" no momento em que estava escrevendo. LTS significa "Long Term Support" (suporte de longo prazo), sendo a versão segura mais atual. É melhor usar a versão LTS para os projetos, porque isso garante que o provedor dará suporte e poderá ser mantida por muito tempo. Assim, você não terá problemas a longo prazo.</p><p>Eu escolhi o Ubuntu e recomendo a sua utilização, já que é o sistema Linux mais comum. Isso significa que também é o mais fácil para encontrar soluções para suas perguntas no futuro. </p><p>Você pode optar por ter uma CPU dedicada, se precisar. Se estiver criando uma startup ou qualquer tipo de negócio, eu recomento da leitura deste <a href="https://www.digitalocean.com/docs/droplets/resources/choose-plan/">artigo</a> (texto em inglês), que contém detalhes sobre como escolher a melhor opção para você.</p><p>Nesse caso, eu selecionei a opção mais barata.</p><p>Em seguida, você deve selecionar a região do <em>datacenter</em>. Você deve escolher a mais perto de você para diminuir o <em>delay</em> da rede.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-2-1024x519.png" class="kg-image" alt="image-2-1024x519" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/image-2-1024x519.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/image-2-1024x519.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-2-1024x519.png 1024w" width="1024" height="519" loading="lazy"><figcaption>Como selecionar um <em>datacenter</em></figcaption></figure><p>Em seguida, selecione "SSH Keys" como forma de autenticação, pois é a opção mais segura.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-5-1024x459.png" class="kg-image" alt="image-5-1024x459" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/image-5-1024x459.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/image-5-1024x459.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-5-1024x459.png 1024w" width="1024" height="459" loading="lazy"><figcaption>Método de autenticação</figcaption></figure><p>Para se conectar ao servidor, será preciso gerar uma nova chave SSH no seu próprio dispositivo e adicioná-la a Digital Ocean.</p><h2 id="como-gerar-uma-chave-ssh"><strong>Como gerar uma chave SSH</strong></h2><p>Eu vou gerar a chave através do meu macOS. Se você estiver usando o Windows, você pode verificar <a href="https://phoenixnap.com/kb/generate-ssh-key-windows-10">este artigo</a> (texto em inglês). Abra o terminal e crie uma pasta SSH:</p><pre><code>cd ~/.ssh</code></pre><p>Para criar sua chave SSH:</p><pre><code>ssh-keygen</code></pre><p>Se o seu computador disser que não reconhece esse comando, você deve instalá-lo através do brew.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-7-1024x140.png" class="kg-image" alt="image-7-1024x140" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/image-7-1024x140.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/image-7-1024x140.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-7-1024x140.png 1024w" width="1024" height="140" loading="lazy"></figure><p>Ele vai pedir que você nomeie o arquivo e acrescente uma senha. Não digite o seu nome. Apenas aperter Enter e continue com as definições padrão. Os arquivos devem ser gerados. Eu nomeei o meu como digital-ocean-ssh. Não se confunda com isso.</p><pre><code>❯ lsid_dsa      id_rsa      known_hosts</code></pre><p>Nossa chave pública é <code>id_dsa</code> e <code>id_rsa</code> é a nossa chave privada. Se você esquecer qual é a privada, você sempre pode fazer um print delas.</p><h2 id="como-adicionar-sua-chave-ssh-na-digital-ocean"><strong>Como adicionar sua chave SSH na Digital Ocean</strong></h2><p>Agora, vamos copiar nossa chave pública e fazer o upload dela na Digital Ocean. Assim, eles saberão qual é a chave usada para nossa autenticação.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-9-1024x149.png" class="kg-image" alt="image-9-1024x149" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/image-9-1024x149.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/image-9-1024x149.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-9-1024x149.png 1024w" width="1024" height="149" loading="lazy"></figure><p>Copie toda a chave, incluindo a parte ssh-rsa.</p><p>Clique em "New SSH Key":</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-10.png" class="kg-image" alt="image-10" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/image-10.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-10.png 645w" width="645" height="330" loading="lazy"></figure><p>Cole a chave na caixa de texto que aparece depois que você clica no botão. Desse modo, você verá sua chave SSH.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-11.png" class="kg-image" alt="image-11" width="455" height="231" loading="lazy"></figure><h2 id="como-conectar-ao-servidor"><strong>Como conectar ao servidor</strong></h2><p>Vamos usar o terminal para conectar ao nosso servidor através do SSH. Você também pode dar uma olhada no <em>Termius</em> para uma interface mais agradável, se você quiser.</p><p>Execute este comando no seu terminal após substituir IP_ADDRESS pelo IP do seu servidor (você pode procurar no painel da Digital Ocean).</p><pre><code>ssh root@IP_ADDRESS</code></pre><p>Se tudo der certo, agora, você deve estar no terminal do servidor. Estamos conectados ao servidor. Se você tiver qualquer tipo de erro, pode fazer o debug executando o comando com "-v" ou "-vv".</p><h2 id="como-configurar-o-seu-servidor"><strong>Como configurar o seu servidor</strong></h2><p>Precisamos fazer uma configuração inicial do servidor antes de fazer o <em>deploy </em>da aplicação no Node.</p><h3 id="atualize-o-software"><strong>Atualize o software</strong></h3><p>Precisamos fazer a atualização do software do servidor para ter certeza de que está com a versão mais recente.</p><p>Muitos servidores são vulneráveis a ataques, pois estão usando versões antigas do software, com vulnerabilidades já conhecidas. Os invasores buscam por vulnerabilidades no software e tentam explorar isso para ter acesso ao seu servidor.</p><p>Você pode atualizar o seu Ubuntu usando o comando <strong><strong>"apt update"</strong>.</strong></p><pre><code>apt updateHit:1 https://repos.insights.digitalocean.com/apt/do-agent main InReleaseGet:2 http://mirrors.digitalocean.com/ubuntu focal InRelease [265 kB]      Hit:3 http://mirrors.digitalocean.com/ubuntu focal-updates InRelease                Get:4 http://security.ubuntu.com/ubuntu focal-security InRelease [109 kB]Hit:5 http://mirrors.digitalocean.com/ubuntu focal-backports InReleaseFetched 374 kB in 1s (662 kB/s)                          Reading package lists... DoneBuilding dependency tree       Reading state information... Done96 packages can be upgraded. Run 'apt list --upgradable' to see them.</code></pre><p>Se a mensagem estiver dizendo "96 packages can be upgraded", significa que ainda não houve a instalação dos pacotes, apesar de eles terem sido encontrados para atualizar.</p><p>Para efetivar a atualização com a instalação dos pacotes encontrados, execute o comando:</p><pre><code>apt upgrade</code></pre><p>Digite "y" quando solicitado e isso fará a atualização do software.</p><h3 id="criando-um-usu-rio"><strong>Criando um usuário</strong></h3><p>Estamos conectados ao servidor como um usuário <em>root</em> (usuário com mais privilégios). Ser o usuário <em>root </em>pode ser perigoso e pode nos expor a mais vulnerabilidades.</p><p>Portanto, devemos criar um usuário para não executar os comandos como <em>root</em>. Substitua <code>$username</code> abaixo com o nome de usuário da sua preferência.</p><pre><code>whoamiroot</code></pre><pre><code>adduser $username</code></pre><p>Você vai criar uma senha para o usuário. Depois disso, ele fará várias perguntas. Para pular isso, digite "y" até que ele termine.</p><p>O novo usuário foi criado, mas ainda precisamos adicionar o novo usuário ao grupo "sudo" para que ele possa executar qualquer tipo de ação necessária.</p><pre><code>usermod -aG sudo $USERNAME</code></pre><p>Adicionamos o usuário ao grupo com o comando <code>-aG</code> (grupo a ser adicionado). Também devemos adicioná-lo ao grupo <code>sudo</code>.</p><p>Ainda estamos no usuário <em>root</em>. Então, vamos mudar para nosso novo usuário. Para isso, podemos usar o comando <code>su</code> (usuário a ser usado).</p><pre><code>su $USERNAME</code></pre><p>Após, se você executar o comando <code><strong><strong>whoami</strong></strong></code>, você deve ver o seu nome de usuário. Você pode verificar a existência do grupo <code>sudo</code>, através do seguinte comando:</p><pre><code>sudo cat /var/log/auth.log</code></pre><p>Apenas superusuários podem ver esse arquivo. A máquina pedirá a sua senha após executar o comando.</p><h3 id="copie-a-chave-ssh"><strong>Copie a chave SSH</strong></h3><p>Após criar o usuário, ainda devemos habilitar seu login através do SSH.</p><p>Portanto, devemos copiar a chave pública (criada anteriomente) e colá-la na pasta SSH desse usuário para que o SSH possa saber qual chave ele deve aceitar para autenticar esse usuário.</p><pre><code>mkdir -p ~/.ssh</code></pre><p>O comando <code>-p</code> cria um diretório, caso ele não exista.</p><pre><code>vi ~/.ssh/authorized_keys</code></pre><p>Temos que usar o vi ou vim para criar o arquivo chamado <strong><strong><code>authorized_keys</code></strong></strong>.</p><p>Copie a chave pública (arquivo <code>id_dsa</code>) e pressione "i" para ir para o modo de edição. Cole a chave no arquivo com CMD + V.</p><p>Pressione Esc para sair do modo de edição, digite <strong><strong>:wq</strong></strong> para salvar e sair.</p><p>Se tiver algum problema usando Vim/Vi, &nbsp;você pode dar uma olhada em algum dos<a href="https://www.freecodecamp.org/news/how-not-to-be-afraid-of-vim-anymore-ec0b7264b0ae/"> vários tutoriais</a> (texto em inglês) que explicam como eles funcionam.</p><h3 id="conecte-ao-servidor-com-o-novo-usu-rio"><strong>Conecte ao servidor com o novo usuário</strong></h3><p>Agora, devemos ser capazes de conectar ao servidor sem nenhum problema. Você pode usar o seguinte comando para conectar (mas lembre-se de alterar o <code>IP_ADDRESS</code> para o seu nome de usuário).</p><pre><code>ssh $USERNAME@IP_ADDRESS</code></pre><p>Se você tiver algum problema, pode excluir o <em>droplet </em>e iniciar novamente. Isso não deve tomar muito tempo, já que fazer o <em>debug</em> do servidor pode ser muito difícil.</p><h3 id="como-desabilitar-o-login-do-root"><strong>Como desabilitar o login do <em>root</em></strong></h3><p>Uma boa prática de segurança é desabilitar o login através do usuário root.</p><p>Para não termos problemas de permissão no futuro, é indicado alterar a permissão do arquivo.</p><pre><code>chmod 644 ~/.ssh/authorized_keys</code></pre><p>Agora abra o arquivo <code>sshd_config</code>:</p><pre><code>sudo vi /etc/ssh/sshd_config</code></pre><p>Encontre a linha abaixo e modifique <code>no</code> para <code>yes</code>. Isso deve ser feito através do Vim/Vi.</p><pre><code>PermitRootLogin no</code></pre><p>Salve e saia do Vim/Vi.</p><h2 id="como-instalar-o-node-js-e-o-git"><strong>Como instalar o Node.js e o Git</strong></h2><p>Agora, podemos seguir com a instalação do Node.js e do Git:</p><pre><code>sudo apt install nodejs npm</code></pre><pre><code>sudo apt install git</code></pre><p>Estamos prontos para criar nossa aplicação em Node e executá-la. Você pode extrair o seu projeto do Node do GitHub ou criar um projeto em Node aqui apenas para testar se funciona.</p><p>Vá para o diretório de sua escolha e crie o arquivo <strong><strong>"app.js"</strong></strong>:</p><pre><code>sudo vi app.js</code></pre><p>Você pode colar o seguinte texto em seu arquivo <strong><strong>app.js</strong></strong>:</p><pre><code>const express = require('express');const app = express();const port = 3000;app.get('/', (req, res) =&gt; {        res.send('Hello World');});app.listen(port, () =&gt; console.log(`Example app listening on port ${port}!`));</code></pre><p>Agora, execute isso com o comando:</p><pre><code>node app.js</code></pre><p>Você deve ser a seguinte mensagem no seu terminal: "Example app listening on port 3000!"</p><p>Podemos confirmar se está funcionando através de uma requisição:</p><pre><code>GET http://IP_ADDRESS:3000/</code></pre><p>Envie essa requisição de um client HTTP com o Postman ou de seu navegador. Você deve receber a seguinte mensagem: "Hello World".</p><p>Neste ponto, você deve ter percebido que alguma coisa está errada. Usuários comuns não sabem enviar uma requisição através da porta 3000.</p><p>Devemos redirecionar as requisições enviadas pelo nosso IP que chegam ao servidor para a Porta 3000. Podemos fazer isso com a ajuda do Nginx.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-16.png" class="kg-image" alt="image-16" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/image-16.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-16.png 762w" width="762" height="212" loading="lazy"></figure><h2 id="como-instalar-e-configurar-o-nginx"><strong>Como instalar e configurar o Nginx</strong></h2><p>Vamos usar o Nginx para fazer um proxy reverso para redirecionar as requisições para a nossa aplicação do Node.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-14-1024x531.png" class="kg-image" alt="image-14-1024x531" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/image-14-1024x531.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/image-14-1024x531.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-14-1024x531.png 1024w" width="1024" height="531" loading="lazy"><figcaption>Nginx como proxy reverso</figcaption></figure><p>Vamos instalar o Nginx:</p><pre><code>sudo apt install nginx</code></pre><p>Iniciando o serviço Nginx:</p><pre><code>sudo service nginx start</code></pre><p>Podemos testar enviando uma requisição ao nosso servidor através do navegador. Digite o endereço de IP do servidor em seu navegador e você deverá receber a seguinte mensagem:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-15-1024x231.png" class="kg-image" alt="image-15-1024x231" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/image-15-1024x231.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/image-15-1024x231.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-15-1024x231.png 1024w" width="1024" height="231" loading="lazy"></figure><p>É importante saber que o servidor do Nginx é executado do endereço <strong><strong>"/var/www/html"</strong></strong> por padrão e que você pode encontrar esse arquivo HTML nesse diretório.</p><p>Eu também aconselho a você criar uma pasta dentro de "/var/www", chamar a aplicação e mover a sua aplicação em Node para essa pasta, facilitando sua localização.</p><h3 id="como-configurar-o-proxy-reverso-do-nginx"><strong>Como configurar o proxy reverso do Nginx</strong></h3><p>Vamos editar a configuração do arquivo Nginx para configurar o proxy reverso:</p><pre><code>sudo vi /etc/nginx/sites-available/default</code></pre><p>Nesse arquivo, você deve encontrar o local/bloco e editá-lo da seguinte maneira:</p><pre><code>location / {                # First attempt to serve request as file, then                # as directory, then fall back to displaying a 404.                proxy_pass http://127.0.0.1:3000/;        }</code></pre><p>O <code>proxy_pass</code> faz o proxy da solicitação para uma porta específica. Vamos dar à porta o endereço em que nossa aplicação de Node está executando.</p><p>Agora, vamos reiniciar o Nginx para que as alterações tenham efeito:</p><pre><code>sudo service nginx reload</code></pre><p>Após essa etapa, devemos ser capazes de ver a mensagem quando enviamos a requisição ao servidor. </p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/Screen-Shot-2021-02-24-at-01.10.33-1024x67.png" class="kg-image" alt="Screen-Shot-2021-02-24-at-01.10.33-1024x67" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/Screen-Shot-2021-02-24-at-01.10.33-1024x67.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/Screen-Shot-2021-02-24-at-01.10.33-1024x67.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/Screen-Shot-2021-02-24-at-01.10.33-1024x67.png 1024w" width="1024" height="67" loading="lazy"></figure><p>Parabéns, nós completamos o mínimo de passos para fazer o <em>deploy </em>de uma aplicação em Node. Eu aconselho, no entanto, a concluir a parte de bônus, pois acredito que seja muito importante. Se você não conseguir ver a mensagem <code>Hello World!</code>, pode verificar se a sua aplicação e se o Nginx estão sendo executados e reiniciá-los.</p><h2 id="como-executar-sua-aplica-o-como-um-processo"><strong>Como executar sua aplicação como um processo</strong></h2><p>Não queremos ter que iniciar nossa aplicação manualmente todas as vezes que algo der errado e ele travar. Nós queremos que ela reinicie sozinha. Além disso, sempre que o servidor iniciar, a aplicação também deve iniciar.</p><p>Para fazer isso, podemos usar o PM2. Vamos instalá-lo e configurá-lo.</p><pre><code>sudo npm i -g pm2</code></pre><p>Estamos instalando o pm2 de modo global, usando a opção "-g". Isso faz com que ele seja acessível a todas as pastas.</p><pre><code>pm2 start app.js</code></pre><p>Isso garante que a aplicação será reiniciada se ocorrer algum erro.</p><p>Salve a lista de processos.</p><pre><code>pm2 save</code></pre><p>Também precisamos convertê-lo em um <em>daemon </em>que execute sempre que o sistemar iniciar:</p><pre><code>pm2 startup systemd</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-17.png" class="kg-image" alt="image-17" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/image-17.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image-17.png 834w" width="834" height="291" loading="lazy"></figure><p>Para lembrar, neste tutorial, estou usando os comandos para Ubuntu. Se você estiver usando outra distribuição do Linux, você deve substituir o comando <code>systemd</code>.</p><p>Podemos confirmar que está reiniciando o servidor corretamente enviando uma solicitação sem executar <code>app.js</code> manualmente:</p><pre><code>sudo reboot</code></pre><p>Depois de enviar a requisição, como fizemos anteriormente, você deve ver a mensagem <code>"Hello World!"</code>.</p><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Neste tutorial, começamos do zero, alugamos um servidor, conectamos a ele e o configuramos para a nossa aplicação do Node.js na porta 80.</p><p>Se você acompanhou e conseguiu concluir todas as etapas, parabéns! Você pode se orgulhar, pois não foi um tutorial fácil. Espero que você tenha aprendido muito. Agradeço pelo seu tempo.</p><p>Estou planejando explorar mais este tópico conectando o servidor ao domínio e, em seguida, conectando-o ao CircleCI para integração contínua. Também vou mostrar quais são as etapas necessárias para preparar sua aplicação em Node.js/React para produção. Este artigo já ficou longo. Então, esses tópicos estão reservados para outro artigo. 🙂</p><p>Se você gostou da leitura e quer se manter informado sobre futuros artigos do autor, pode se inscrever no <a href="https://erinc.io/">blog pessoal dele</a>. Se estiver interessado, lá você verá as publicações mais antigas do autor, que costuma escrever sobre desenvolvimento para a web.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como usar o Nodemailer para enviar e-mails do seu servidor do Node.js ]]>
                </title>
                <description>
                    <![CDATA[  O Nodemailer [https://nodemailer.com/about/] é um módulo do Node.js que permite enviar e-mails para o seu servidor com facilidade. Quando você quiser se comunicar com seus usuários ou apenas ser notificado quando algo der errado, uma das opções para fazer isso seria usando o e-mail. Existem muitos artigos explicando como ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-usar-o-nodemailer-para-enviar-emails-do-seu-servidor-do-node-js/</link>
                <guid isPermaLink="false">63d7bda4b42da706e17c2fa9</guid>
                
                    <category>
                        <![CDATA[ Node.js ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Renan Botasse ]]>
                </dc:creator>
                <pubDate>Mon, 20 Mar 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/600efb510a2838549dcb7595.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/use-nodemailer-to-send-emails-from-your-node-js-server/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Use Nodemailer to Send Emails from Your Node.js&nbsp;Server</a>
      </p><p></p><p>O <a href="https://nodemailer.com/about/" rel="noopener">Nodemailer</a> é um módulo do Node.js que permite enviar e-mails para o seu servidor com facilidade. Quando você quiser se comunicar com seus usuários ou apenas ser notificado quando algo der errado, uma das opções para fazer isso seria usando o e-mail.</p><p>Existem muitos artigos explicando como usar o mínimo necessário do Nodemailer, mas esse artigo não é um deles. Aqui, eu vou te mostrar o modo mais comum de praticar o envio de e-mails do seu <em>back-end</em> do Node.js usando o Nodemailer e o Gmail.</p><h2 id="como-come-ar-com-o-nodemailer"><strong>Como começar com o Nodemailer</strong></h2><p>Primeiro, vamos precisar preparar o nosso Node.js usando o Express. Para ter certeza de que você possui o Node e o npm instalado, execute o seguinte comando:</p><pre><code class="language-bash">node -v 
npm -v</code></pre><p>Se os dois comandos mostrarem suas versões, você pode continuar. Do contrário, instale o que estiver faltando.</p><p>Crie um diretório para o seu projeto. Usaremos <strong><strong>nodemailerProject</strong></strong>.</p><pre><code class="language-bash">mkdir nodemailerProject</code></pre><p>Vá para o diretório criado e execute o seguinte comando:</p><pre><code class="language-bash">npm init</code></pre><p>Isso inicializará o nosso projeto com um arquivo <strong><strong>pacakge.json</strong></strong>.</p><p>A seguir, vamos instalar o Express, usando:</p><pre><code>npm install express</code></pre><p>Dependendo de qual arquivo você apontou como ponto de entrada (o padrão seria <code>index.js</code>), abra e cole o seguinte código:</p><figure class="kg-card kg-code-card"><pre><code class="language-node">const express = require('express')
const app = express()
const port = 3000


app.listen(port, () =&gt; {
  console.log(`nodemailerProject is listening at http://localhost:${port}`)
})</code></pre><figcaption>index.js</figcaption></figure><p>Acima, você tem o necessário para iniciar um servidor simples usando o Express. Você pode vê-lo funcionando executando o comando abaixo:</p><pre><code class="language-bash">node index.js</code></pre><h3 id="como-instalar-o-nodemailer"><strong>Como instalar o Nodemailer</strong></h3><p>Instale o Nodemailer usando o seguinte comando:</p><pre><code class="language-bash">npm install nodemailer</code></pre><p>A API do Nodemailer é bem simples. Faça o seguinte:</p><ol><li>Crie um objeto <strong><strong>Transporter</strong></strong></li><li>Crime um objeto <strong><strong>MailOptions</strong></strong></li><li>Use o método <strong><strong>Transporter.sendMai</strong>l</strong></li></ol><p>Para criar o objeto <code>Transporter</code>, devemos fazer o seguinte:</p><pre><code class="language-node">let transporter = nodemailer.createTransport({
      service: 'gmail',
      auth: {
        type: 'OAuth2',
        user: process.env.MAIL_USERNAME,
        pass: process.env.MAIL_PASSWORD,
        clientId: process.env.OAUTH_CLIENTID,
        clientSecret: process.env.OAUTH_CLIENT_SECRET,
        refreshToken: process.env.OAUTH_REFRESH_TOKEN
      }
    });</code></pre><blockquote>✋ Preste atenção, pois além do usuário e das chaves de acesso, que são suas próprias credenciais da sua conta do gmail, outras três chaves deverão ser recuperadas após configurar o OAuth.</blockquote><p>Assim como dissemos no começo do artigo, usaremos o Gmail para enviar e-mails. Como você deve ter imaginado, o Gmail possui um alto nível de segurança quando o assunto é enviar e-mails para/pela conta do usuário.</p><p>Existem inúmeras formas para superarmos esses obstáculos (algumas melhores que outras). A solução que escolhemos torna necessário configurar um projeto no <strong><strong>Google Cloud Platform</strong></strong>. Precisamos fazer isso para poder ter credenciais para segurança do <em>OAuth </em>habilitada pelo Gmail.</p><blockquote>Se você quiser ler mais sobre a complexidade de usar o Gmail com o nodemailer, vá <a href="https://nodemailer.com/usage/using-gmail/" rel="noopener">aqui</a> (documentação em inglês).</blockquote><p>O próximo passo requer algumas configurações em vez de código, portanto preparem-se.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/image-297.png" class="kg-image" alt="image-297" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/03/image-297.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/03/image-297.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/03/image-297.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/03/image-297.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1125" loading="lazy"><figcaption>Foto criada por <a href="https://unsplash.com/@d_mccullough?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Daniel McCullough</a>, extraída do <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure><h2 id="configura-es-do-google-cloud-platform"><strong>Configurações do <strong>Google Cloud Platform</strong></strong></h2><p>Se você não tem uma conta no <a href="https://console.cloud.google.com/home" rel="noopener">Google Cloud Platform</a>, crie uma, pois é um pré-requisito. Possuindo a conta, crie um projeto clicando na seta do menu que fica no canto superior esquerdo.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_a4fnFLNMoTtLJuqsKilVnA.png" class="kg-image" alt="1_a4fnFLNMoTtLJuqsKilVnA" width="526" height="44" loading="lazy"></figure><p>Selecione a opção <em>New Project</em>:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_HNwUG3wPdbrwc3JB5D7_tg.png" class="kg-image" alt="1_HNwUG3wPdbrwc3JB5D7_tg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/03/1_HNwUG3wPdbrwc3JB5D7_tg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_HNwUG3wPdbrwc3JB5D7_tg.png 924w" width="924" height="61" loading="lazy"></figure><p>Na próxima janela, teremos que dar um nome ao nosso projeto. Escolha o que você quiser. Continuaremos usando <strong><strong>NodemailerProject</strong></strong>. Na propriedade <em>location</em>, você pode manter <em>No organization</em>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_TRlA6RBLCCCSMQ5R4di27A.png" class="kg-image" alt="1_TRlA6RBLCCCSMQ5R4di27A" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/03/1_TRlA6RBLCCCSMQ5R4di27A.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_TRlA6RBLCCCSMQ5R4di27A.png 689w" width="689" height="491" loading="lazy"></figure><p>Deve levar alguns segundos para o projeto estar pronto para ser usado. Quando estiver, será possível ver a seguinte janela:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_FT9MhBZyU4cZd4Qg6zeFag.png" class="kg-image" alt="1_FT9MhBZyU4cZd4Qg6zeFag" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/03/1_FT9MhBZyU4cZd4Qg6zeFag.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_FT9MhBZyU4cZd4Qg6zeFag.png 1000w" width="1000" height="481" loading="lazy"></figure><p>Abra o menu de navegação clicando nos três pontos no canto superior esquerdo e selecione <strong><strong><em>APIs and Services</em>:</strong></strong></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_qPaPpPadHQLdKCQbhjND7Q.png" class="kg-image" alt="1_qPaPpPadHQLdKCQbhjND7Q" width="317" height="52" loading="lazy"></figure><p>Para habilitar a utilização do Nodemailer no Gmail, teremos que usar o OAuth2. Se você não estiver familiarizado com o OAuth, ele é um protocolo de autenticação. Eu não vou ser muito específico aqui, pois não é necessário. Se, no entanto, você quiser entender mais sobre isso, pode acessar <a href="https://oauth.net/2/" rel="noopener">aqui</a> (documentação do OAuth em inglês).</p><p>Primeiro, vamos configurar a nossa tela de consentimento do OAuth (em inglês, <em>OAuth Consent Screen</em>):</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_W2oeT1KmJXpwSQlIMIVo5w.png" class="kg-image" alt="1_W2oeT1KmJXpwSQlIMIVo5w" width="306" height="364" loading="lazy"></figure><p>Se você não for um membro do G-Suite, a única opção disponível será <em>External </em>em <em>User Type</em>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_l_GrPVtXODPS0GXKLMdWYA.png" class="kg-image" alt="1_l_GrPVtXODPS0GXKLMdWYA" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/03/1_l_GrPVtXODPS0GXKLMdWYA.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_l_GrPVtXODPS0GXKLMdWYA.png 861w" width="861" height="575" loading="lazy"></figure><p>Após clicar em <em>Create</em>, a próxima janela vai exigir o preenchimento das informações da aplicação (ou do servidor):</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_reZ04hUX4jh1IzLGh7vCFA.png" class="kg-image" alt="1_reZ04hUX4jh1IzLGh7vCFA" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/03/1_reZ04hUX4jh1IzLGh7vCFA.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_reZ04hUX4jh1IzLGh7vCFA.png 780w" width="780" height="675" loading="lazy"></figure><p>Preencha com o seu e-mail no campo <em>User support email</em> e no campo de informações de contato do desenvolvedor. Clicando em <em>Save and Continue</em>, será apresentada a fase <em>Scopes</em> dessa configuração. Pule essa fase, já que não é relevante para nós. A seguir, entramos na fase <em>Test Users</em>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_Jms50wZ5mVmUyOaiVF7b4w.png" class="kg-image" alt="1_Jms50wZ5mVmUyOaiVF7b4w" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/03/1_Jms50wZ5mVmUyOaiVF7b4w.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_Jms50wZ5mVmUyOaiVF7b4w.png 891w" width="891" height="735" loading="lazy"></figure><p>Aqui, se adicione como usuário e clique em <em>Save and continue</em>.</p><h2 id="como-configurar-o-oauth"><strong>Como configurar o <strong>OAuth </strong></strong></h2><p>Nesta fase, vamos criar as credenciais do OAuth para serem usadas com o Nodemailer. Vá até a aba <em>Credentials, </em>acima de <em>OAuth Consent Screen</em>. Clique no sinal de mais (➕) do texto <strong><strong><em>Create Credentials</em></strong> </strong>e escolha <strong><em>OAuth Client ID</em></strong>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/01/1_h0nME2ccR7HPjKmz_DMZRw.png" class="kg-image" alt="1_h0nME2ccR7HPjKmz_DMZRw" width="600" height="400" loading="lazy"></figure><p>No item <em><strong>Application type</strong></em>, escolha <strong><strong><em>Web Application</em></strong></strong>:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_72Em-VS-fdM2WCwOA6zcfg.png" class="kg-image" alt="1_72Em-VS-fdM2WCwOA6zcfg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/03/1_72Em-VS-fdM2WCwOA6zcfg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_72Em-VS-fdM2WCwOA6zcfg.png 699w" width="699" height="539" loading="lazy"></figure><p>Na seção <strong><strong><em>Authorized Redirect URIs</em></strong></strong>, não se esqueça de adicionar o "OAuth2 Playground" (<a href="https://developers.google.com/oauthplayground/" rel="nofollow noopener">https://developers.google.com/oauthplayground</a>), já que vamos usá-lo para pegar uma das chaves mencionadas anteriormente neste artigo.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_ywIcOlqA5DHdsPaSNnjJ9Q.png" class="kg-image" alt="1_ywIcOlqA5DHdsPaSNnjJ9Q" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/03/1_ywIcOlqA5DHdsPaSNnjJ9Q.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_ywIcOlqA5DHdsPaSNnjJ9Q.png 668w" width="668" height="202" loading="lazy"></figure><p>Após clicar em <em>Create</em>, você receberá o seu <em>Client id</em> e o segredo do <em>client</em>. Mantenha-os e nunca os exponha sob qualquer condição ou formato.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/image-298.png" class="kg-image" alt="image-298" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/03/image-298.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/03/image-298.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/03/image-298.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/03/image-298.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1325" loading="lazy"><figcaption>Foto criada por <a href="https://unsplash.com/@welipower?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Power Lai</a>, extraída do <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure><h3 id="mantenha-o-seu-token-do-oauth-atualizado"><strong>Mantenha o seu token do <strong>OAuth </strong>atualizado</strong></h3><p>Para manter o seu token atualizado, o qual usaremos para transportar o objeto no Nodemailer, vamos precisar acessar o "OAuth2 Playground". Aprovamos esse "URI" para esse propósito específico em um momento anterior. </p><p>1. Clique no ícone de engrenagem à direita (que é a configuração do OAuth2) e marque a caixa para usar sua própria credencial do OAuth2 (em inglês, <em><strong>Use your own oAuth credentials</strong></em>):</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_Kbg3RnTBNkDd_RQ0zn59mQ.png" class="kg-image" alt="1_Kbg3RnTBNkDd_RQ0zn59mQ" width="559" height="680" loading="lazy"></figure><p>2. Do lado esquerdo, você verá uma lista de serviços. Role para baixo até ver <em><strong>Gmail API v1</strong></em>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/01/1_BppvkU1r4JzZ6j6FvC2qNw.png" class="kg-image" alt="1_BppvkU1r4JzZ6j6FvC2qNw" width="600" height="400" loading="lazy"></figure><p>3. Clique em <strong><strong><em>Authorize APIs</em></strong>.</strong></p><p>Você será apresentado a uma tela para fazer login em qualquer uma de suas contas do Gmail. Escolha aquela que você listou como um usuário de teste (na fase <em><strong>Test Users</strong></em>, anteriormente).</p><p>4. A próxima tela informará que o Google ainda não verificou essa aplicação, mas isso está ok, já que nós não a enviamos para verificação. Clique em <em><strong>Continue</strong></em>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_rL0tNdaZqOyIg6aCp4IR3g.png" class="kg-image" alt="1_rL0tNdaZqOyIg6aCp4IR3g" width="566" height="385" loading="lazy"></figure><p>5. Na próxima janela, será perguntado se você quer conceder permissão ao seu projeto para interagir com a sua conta do Gmail. Dê a permissão clicando em <em><strong>Allow</strong></em>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_y0TUXbtC_oUaB6KoGlURbQ.png" class="kg-image" alt="1_y0TUXbtC_oUaB6KoGlURbQ" width="409" height="291" loading="lazy"></figure><p>6. Feito isso, você será redirecionado de volta para o OAuth Playground e poderá ver que há um código de autorização no menu à esquerda. Clique no botão azul &nbsp;"<strong><strong>Exchange authorization code for tokens</strong></strong>" (em português, <em>troca de autorização de código para tokens</em>).</p><p>Os campos para o token de atualização e para o token de acesso serão preenchidos.</p><h2 id="de-volta-ao-servidor"><strong>De volta ao servidor</strong></h2><p>Depois de fazer todas essas configurações, podemos retornar à nossa aplicação e inserir todos os dados na criação do transportador. Para manter todas as suas credenciais privadas, você pode usar o pacote <code>dotenv</code>. Não se esqueça de adicionar o arquivo <code>.env</code> que você criará no <code>.gitignore</code>.</p><p>Então, agora, temos o seguinte:</p><pre><code class="language-node">let transporter = nodemailer.createTransport({
      service: 'gmail',
      auth: {
        type: 'OAuth2',
        user: process.env.MAIL_USERNAME,
        pass: process.env.MAIL_PASSWORD,
        clientId: process.env.OAUTH_CLIENTID,
        clientSecret: process.env.OAUTH_CLIENT_SECRET,
        refreshToken: process.env.OAUTH_REFRESH_TOKEN
      }
    });</code></pre><p>Em seguida, criamos o objeto <code>mailOptions</code>, que contém os detalhes de para onde enviar o e-mail e com quais dados.</p><pre><code class="language-node">let mailOptions = {
      from: tomerpacific@gmail.com,
      to: tomerpacific@gmail.com,
      subject: 'Nodemailer Project',
      text: 'Hi from your nodemailer project'
    };</code></pre><p>Esse objeto pode ter muito mais campos e até mesmo vários destinatários, mas não entraremos nesses detalhes aqui. </p><p>Finalmente, usaremos o método sendMail:</p><pre><code class="language-node">transporter.sendMail(mailOptions, function(err, data) {
      if (err) {
        console.log("Error " + err);
      } else {
        console.log("Email sent successfully");
      }
    });</code></pre><p>Execute sua aplicação e verá na sua caixa de entrada que recebeu um novo e-mail. </p><p>Este artigo foi inspirado em um projeto que criei usando o Nodemailer. Se você quiser conferir, acesse-o <a href="https://github.com/TomerPacific/ProjectChecker">aqui</a>.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
