<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Carlos Henrique</title>
    <description>The latest articles on DEV Community by Carlos Henrique (@carloshendvpm).</description>
    <link>https://dev.to/carloshendvpm</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1086395%2Fadf717af-af67-46dc-a7cf-b87c64b537c7.png</url>
      <title>DEV Community: Carlos Henrique</title>
      <link>https://dev.to/carloshendvpm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/carloshendvpm"/>
    <language>en</language>
    <item>
      <title>Hosting a Static Website on Amazon S3 – A Step-by-Step Guide 🚀</title>
      <dc:creator>Carlos Henrique</dc:creator>
      <pubDate>Fri, 21 Feb 2025 14:38:50 +0000</pubDate>
      <link>https://dev.to/carloshendvpm/hosting-a-static-website-on-amazon-s3-a-step-by-step-guide-4oe2</link>
      <guid>https://dev.to/carloshendvpm/hosting-a-static-website-on-amazon-s3-a-step-by-step-guide-4oe2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hosting a Static Website on Amazon S3 – A Step-by-Step Guide&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Many times, we need to host a simple website, whether for a portfolio, a landing page, or a static project. Instead of investing in complex servers, Amazon S3 offers a practical and cost-effective solution for this need. In just a few steps, we can configure an S3 bucket to serve a static website accessible via the internet.  &lt;/p&gt;

&lt;p&gt;In this tutorial, I will walk you through the step-by-step configuration process.  &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Amazon S3?
&lt;/h2&gt;

&lt;p&gt;Amazon S3 (Simple Storage Service) is a cloud-based object storage service provided by AWS. It allows you to store and retrieve any amount of data at any time, ensuring high durability, availability, and scalability. S3 is widely used for backups, content distribution, and simple, efficient static website hosting.  &lt;/p&gt;

&lt;p&gt;S3 stores data in buckets, which function like "folders" in the cloud. Each bucket can contain individual files (objects) such as images, documents, and web pages. When enabling static hosting, S3 serves these files directly over the internet without the need for traditional servers.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages and Disadvantages of Amazon S3
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Advantages:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low Cost:&lt;/strong&gt; You only pay for storage and data transfer, with no fixed costs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High Availability:&lt;/strong&gt; AWS's robust infrastructure ensures reliable access to the site.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; Can handle a high number of requests without the need to configure additional servers.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy Configuration:&lt;/strong&gt; Your website can be live in just a few steps without requiring web servers.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration with Other AWS Tools:&lt;/strong&gt; Such as CloudFront for CDN and Route 53 for custom domains.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;❌ Disadvantages:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Support for Dynamic Applications:&lt;/strong&gt; S3 is only suitable for static websites (HTML, CSS, and plain JavaScript).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission Management:&lt;/strong&gt; You need to configure permissions correctly to ensure public access to the site.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unfriendly Default URL:&lt;/strong&gt; The link generated by S3 can be long and complex, requiring a custom domain for better user experience.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Native HTTPS:&lt;/strong&gt; To enable HTTPS, you need to configure Amazon CloudFront or another CDN service.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 1: Creating an S3 Bucket
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Log in to the AWS Management Console.
&lt;/li&gt;
&lt;li&gt;Go to the S3 service.
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Create bucket&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Choose a unique name for your bucket (e.g., mywebsite-example).
&lt;/li&gt;
&lt;li&gt;Select a region close to your target audience.
&lt;/li&gt;
&lt;li&gt;Uncheck the &lt;strong&gt;Block all public access&lt;/strong&gt; option to allow your site to be publicly accessible.
&lt;/li&gt;
&lt;li&gt;Confirm the settings and click &lt;strong&gt;Create bucket&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Step 2: Enabling Static Website Hosting
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In S3, click on the bucket you created.
&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Properties&lt;/strong&gt; tab.
&lt;/li&gt;
&lt;li&gt;Scroll down to &lt;strong&gt;Static website hosting&lt;/strong&gt; and click &lt;strong&gt;Edit&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Enable&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Index document&lt;/strong&gt; field, enter &lt;code&gt;index.html&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save changes&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This makes S3 serve &lt;code&gt;index.html&lt;/code&gt; as the homepage of your site.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Making Files Public
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;Permissions&lt;/strong&gt; tab of your bucket.
&lt;/li&gt;
&lt;li&gt;Scroll to &lt;strong&gt;Bucket policy&lt;/strong&gt; and click &lt;strong&gt;Edit&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Paste the following policy to allow public access:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3:GetObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::mywebsite-example/*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Replace &lt;code&gt;mywebsite-example&lt;/code&gt; with your bucket name.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save changes&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, anyone can access your bucket’s files via HTTP.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Uploading Your Files
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;Objects&lt;/strong&gt; tab in S3.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Upload&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Select your website files (&lt;code&gt;index.html&lt;/code&gt;, &lt;code&gt;styles.css&lt;/code&gt;, etc.).
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Upload&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Step 5: Accessing Your Website
&lt;/h2&gt;

&lt;p&gt;After completing the steps above, your website will be available at a link similar to:  &lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://mywebsite-example.s3-website-us-east-1.amazonaws.com&lt;/code&gt;  &lt;/p&gt;

&lt;p&gt;Replace &lt;code&gt;mywebsite-example&lt;/code&gt; and the region as needed.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Now your website is live! To make access more professional, you can configure CloudFront as a CDN and use a custom domain with Route 53.  &lt;/p&gt;

&lt;p&gt;If you enjoyed this tutorial, feel free to leave a comment. If you have any suggestions, I’d love to discuss them here! 🚀  &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>aws</category>
      <category>s3</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Hospedando seu site estático no Amazon S3 🚀</title>
      <dc:creator>Carlos Henrique</dc:creator>
      <pubDate>Fri, 21 Feb 2025 14:33:50 +0000</pubDate>
      <link>https://dev.to/carloshendvpm/hospedando-seu-site-estatico-no-amazon-s3-4c22</link>
      <guid>https://dev.to/carloshendvpm/hospedando-seu-site-estatico-no-amazon-s3-4c22</guid>
      <description>&lt;p&gt;Muitas vezes, precisamos hospedar um site simples, seja para um portfólio, uma landing page ou um projeto estático. Em vez de investir em servidores complexos, o Amazon S3 oferece uma solução prática e de baixo custo para essa necessidade. Com poucos passos, podemos configurar um bucket no S3 para servir um site estático acessível via internet.&lt;/p&gt;

&lt;p&gt;Neste tutorial, vou explorar com vocês o processo de configuração passo a passo.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o Amazon S3?
&lt;/h2&gt;

&lt;p&gt;O Amazon S3 (Simple Storage Service) é um serviço de armazenamento de objetos na nuvem oferecido pela AWS. Ele permite armazenar e recuperar qualquer quantidade de dados a qualquer momento, garantindo alta durabilidade, disponibilidade e escalabilidade. O S3 é amplamente utilizado para armazenar backups, distribuir conteúdo e hospedar sites estáticos de maneira simples e eficiente.&lt;/p&gt;

&lt;p&gt;O S3 armazena dados em buckets, que funcionam como "pastas" na nuvem. Cada bucket pode conter arquivos individuais (objetos), como imagens, documentos e páginas web. Ao ativar a hospedagem estática, o S3 passa a servir esses arquivos diretamente pela internet, sem necessidade de servidores tradicionais.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vantagens e Desvantagens do Amazon S3
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Vantagens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Baixo Custo: Você paga apenas pelo armazenamento e transferência de dados, sem custos fixos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Alta Disponibilidade: Infraestrutura robusta da AWS garante acesso confiável ao site.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escalabilidade: Capaz de lidar com um grande número de acessos sem a necessidade de configurar servidores adicionais.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fácil Configuração: Em poucos passos, seu site pode estar no ar sem necessidade de servidores web.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integração com Outras Ferramentas AWS: Como CloudFront para CDN e Route 53 para domínios personalizados.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;❌ Desvantagens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sem Suporte para Aplicações Dinâmicas: O S3 é adequado apenas para sites estáticos (HTML, CSS, JavaScript puro).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gerenciamento de Permissões: É necessário configurar corretamente as permissões para garantir acesso público ao site.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;URL Padrão Pouco Amigável: O link gerado pelo S3 pode ser longo e complexo, sendo necessário um domínio personalizado para melhorar a experiência do usuário.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sem HTTPS Nativo: Para ter HTTPS, é necessário configurar o Amazon CloudFront ou outro serviço de CDN.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Passo 1: Criando um Bucket no S3
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Acesse o AWS Management Console.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vá para o serviço S3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clique em Criar bucket.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwfou5bjolmr7a25iyjp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwfou5bjolmr7a25iyjp.png" alt="Criar bucket" width="800" height="41"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escolha um nome único para o bucket (ex:meusite-exemplo).&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75lc077cg25b1chgtl9n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75lc077cg25b1chgtl9n.png" alt="Nome bucket" width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escolha uma região próxima ao seu público-alvo.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F00vfs60k2fhi2i4lrey2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F00vfs60k2fhi2i4lrey2.png" alt="Regiao" width="408" height="54"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Desmarque a opção "Bloquear todo o acesso público" para permitir que seu site seja acessado publicamente.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wuv9lpl7o91m8gls2nk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wuv9lpl7o91m8gls2nk.png" alt="Bloquear acesso publico" width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Confirme a configuração e clique em Criar bucket.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Passo 2: Habilitando o Bucket para Hospedagem de Site Estático
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;No S3, clique no bucket que você criou.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vá para a aba Propriedades.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Role até a seção Hospedagem de site estático e clique em Editar.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ikhluz2dy797iuo1nhk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ikhluz2dy797iuo1nhk.png" alt="Hospedagem estatico" width="800" height="128"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Selecione a opção Habilitar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No campo Documento de índice, insira index.html.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68avu3gzumpwdetownyq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68avu3gzumpwdetownyq.png" alt="S3 bucket static site" width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clique em Salvar alterações.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Isso fará com que o S3 trate index.html como a página inicial do seu site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 3: Tornando os Arquivos Públicos
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Vá para a aba Permissões do bucket.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Role até Política do bucket e clique em Editar.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs6bf4v2fkxixswmb23hk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs6bf4v2fkxixswmb23hk.png" alt="Politicas do bucket" width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cole a seguinte política para permitir acesso público:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3:GetObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::meusite-exemplo/*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Substitua meusite-exemplo pelo nome do seu bucket.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clique em Salvar alterações.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora, qualquer pessoa poderá acessar os arquivos do seu bucket via HTTP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 4: Fazendo o Upload dos Arquivos
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Volte para a aba Objetos no S3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clique em Fazer upload.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Selecione os arquivos do seu site (index.html, styles.css, etc.).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clique em Fazer upload.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv9btgjyoxyickb9tw04w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv9btgjyoxyickb9tw04w.png" alt="Fazer upload" width="800" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 5: Acessando o Site
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Após seguir os passos acima, seu site estará disponível em um link semelhante a:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;http://meusite-exemplo.s3-website-us-east-1.amazonaws.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Substitua meusite-exemplo e a região conforme necessário.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1g8w2fpq6b0a19op2nhp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1g8w2fpq6b0a19op2nhp.png" alt="site exemplo" width="800" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Considerações Finais
&lt;/h2&gt;

&lt;p&gt;Agora seu site está no ar! Para tornar o acesso mais profissional, você pode configurar um CloudFront para CDN e usar um domínio personalizado com o Route 53.&lt;/p&gt;

&lt;p&gt;Se você gostou deste tutorial, pode comentar e se tiver sugestões vou adorar discutir sobre aqui nos comentários! 🚀&lt;/p&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>cloud</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Publishing a Private Package on GitHub Packages</title>
      <dc:creator>Carlos Henrique</dc:creator>
      <pubDate>Thu, 12 Sep 2024 00:13:06 +0000</pubDate>
      <link>https://dev.to/carloshendvpm/publishing-a-private-package-on-github-packages-23bf</link>
      <guid>https://dev.to/carloshendvpm/publishing-a-private-package-on-github-packages-23bf</guid>
      <description>&lt;p&gt;Recently at work, I encountered the need to publish a package privately. After evaluating some options, I realized that the best way to do this was by using GitHub Packages.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is GitHub Packages?
&lt;/h3&gt;

&lt;p&gt;GitHub Packages allows you to store packages of various types (such as npm, Maven, Docker, etc.) directly on GitHub. You can make them public or private, depending on your project’s needs. You can learn more &lt;a href="https://github.com/features/packages" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Setting up the project and requirements
&lt;/h3&gt;

&lt;p&gt;First, you need to have a repository on GitHub where your package will be stored. To ensure the package is private, make sure the repository is private.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Creating your package
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Creating the &lt;code&gt;package.json&lt;/code&gt;:
Replace &lt;code&gt;&amp;lt;your-user-or-organization&amp;gt;&lt;/code&gt; with the desired user or organization.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init &lt;span class="nt"&gt;--scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;@&amp;lt;your-user-or-organization&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will generate a &lt;code&gt;package.json&lt;/code&gt; file with the &lt;code&gt;name&lt;/code&gt; field already formatted with the scope. Using my GitHub profile as an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@carloshendvpm/my-package"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"My private package on GitHub Packages"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Configuring the registry for GitHub Packages
&lt;/h3&gt;

&lt;p&gt;Now, you need to ensure that npm knows you want to publish this package to GitHub Packages, not to the public npm registry. To do this, add the &lt;code&gt;publishConfig&lt;/code&gt; field to your &lt;code&gt;package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"publishConfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"registry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://npm.pkg.github.com/"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells npm to use GitHub Packages as the publication destination. Your &lt;code&gt;package.json&lt;/code&gt; should now look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@carloshendvpm/my-package"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"module"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com/carloshendvpm/my-package.git"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publishConfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"registry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://npm.pkg.github.com/"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Using GitHub Actions to publish the package
&lt;/h3&gt;

&lt;p&gt;Create a directory named &lt;code&gt;.github/workflows&lt;/code&gt; inside your project. Inside the &lt;code&gt;workflows&lt;/code&gt; directory, create a file named &lt;code&gt;publish.yml&lt;/code&gt; with the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Publish package to GitHub Packages&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;release&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;published&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
      &lt;span class="na"&gt;packages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;20.x'&lt;/span&gt;
          &lt;span class="na"&gt;registry-url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://npm.pkg.github.com'&lt;/span&gt;
          &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;@carloshendvpm'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install dependencies&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Publish package&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm publish --access restricted&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;NODE_AUTH_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This action will only be executed when a new release is created. You can modify this behavior as per your preferences. I’ve also used the &lt;code&gt;workflow_dispatch&lt;/code&gt; event, which allows you to manually trigger the action from GitHub's interface. It's important to note that the &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; is automatically generated by GitHub. You can learn more about it &lt;a href="https://docs.github.com/en/actions/security-guides/automatic-token-authentication" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Creating the new release
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9c0ztpe4rna3oiu80wi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9c0ztpe4rna3oiu80wi.png" alt="New release github" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fill in the tag information and create the new release. This will trigger the action to execute.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Using the package in your projects
&lt;/h3&gt;

&lt;p&gt;Before installing the package, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create a personal access token on GitHub. This token will allow you to authenticate with the GitHub API and install your package. Go to &lt;strong&gt;Settings / Developer Settings / Personal Access Tokens&lt;/strong&gt; and generate a new token with read permissions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the project where the package will be used, create a &lt;code&gt;.npmrc&lt;/code&gt; file in the root directory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the following configuration to your &lt;code&gt;.npmrc&lt;/code&gt; file, replacing &lt;code&gt;&amp;lt;GITHUB_TOKEN&amp;gt;&lt;/code&gt; with the token you generated:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//npm.pkg.github.com/:_authToken=&amp;lt;GITHUB_TOKEN&amp;gt;
@organizationName:registry=https://npm.pkg.github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Now, you can install the package in your project using:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Via &lt;code&gt;package.json&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"@carloshendvpm/my-package"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Via terminal:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @carloshendvpm/my-package@1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;I hope this was helpful in some way. Soon, I plan to share a complete guide on creating a package using the Svelte Library. If you have any suggestions or notice any mistakes, feel free to comment or correct me. German version soon...&lt;/p&gt;

</description>
      <category>npm</category>
      <category>github</category>
      <category>githubactions</category>
    </item>
    <item>
      <title>Como publicar um package npm de forma privada utilizando Github Packages</title>
      <dc:creator>Carlos Henrique</dc:creator>
      <pubDate>Thu, 12 Sep 2024 00:05:16 +0000</pubDate>
      <link>https://dev.to/carloshendvpm/como-publicar-um-package-npm-de-forma-privada-utilizando-github-packages-2l5n</link>
      <guid>https://dev.to/carloshendvpm/como-publicar-um-package-npm-de-forma-privada-utilizando-github-packages-2l5n</guid>
      <description>&lt;p&gt;Recentemente, no meu trabalho, me deparei com a seguinte necessidade: publicar um pacote de maneira privada. Depois de avaliar algumas possibilidades, percebi que a melhor forma de fazer isso seria utilizando o GitHub Packages.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que é o GitHub Packages?
&lt;/h3&gt;

&lt;p&gt;O GitHub Packages permite que você armazene pacotes de diferentes tipos (como npm, Maven, Docker, etc.) diretamente no GitHub. Você pode torná-los públicos ou privados, dependendo da necessidade do seu projeto. Você pode conferir mais informações &lt;a href="https://github.com/features/packages" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 1: Configurando o projeto e necessidades
&lt;/h3&gt;

&lt;p&gt;Primeiro, é necessário que você tenha um repositório no GitHub onde o seu pacote será armazenado. Para garantir que o pacote seja privado, certifique-se de que o repositório é privado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 2: Criando o seu pacote
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Criando o &lt;code&gt;package.json&lt;/code&gt;:
Substitua &lt;code&gt;&amp;lt;seu-usuario-ou-organizacao&amp;gt;&lt;/code&gt; pelo usuário ou organização desejada.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init &lt;span class="nt"&gt;--scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;@&amp;lt;seu-usuario-ou-organizacao&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso vai gerar um &lt;code&gt;package.json&lt;/code&gt; com o campo &lt;code&gt;name&lt;/code&gt; já formatado com o escopo. Utilizando o meu perfil do GitHub como exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@carloshendvpm/meu-pacote"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Meu pacote privado no GitHub Packages"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Passo 3: Configurando o registro para GitHub Packages
&lt;/h3&gt;

&lt;p&gt;Agora, é preciso garantir que o npm saiba que você deseja publicar esse pacote no GitHub Packages, e não no registro público do npm. Para isso, adicione o campo &lt;code&gt;publishConfig&lt;/code&gt; ao seu &lt;code&gt;package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"publishConfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"registry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://npm.pkg.github.com/"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso informa ao npm que ele deve usar o GitHub Packages como destino de publicação. O seu &lt;code&gt;package.json&lt;/code&gt; deve ficar assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@carloshendvpm/meu-pacote"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"module"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com/carloshendvpm/meu-pacote.git"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publishConfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"registry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://npm.pkg.github.com/"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Passo 4: Utilizando GitHub Actions para publicar o pacote
&lt;/h3&gt;

&lt;p&gt;Crie um diretório chamado &lt;code&gt;.github/workflows&lt;/code&gt; dentro do seu projeto. E, dentro do diretório &lt;code&gt;workflows&lt;/code&gt;, crie um arquivo &lt;code&gt;publish.yml&lt;/code&gt; com o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Publish package to GitHub Packages&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;release&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;published&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
      &lt;span class="na"&gt;packages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;20.x'&lt;/span&gt;
          &lt;span class="na"&gt;registry-url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://npm.pkg.github.com'&lt;/span&gt;
          &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;@carloshendvpm'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install dependencies&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Publish package&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm publish --access restricted&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;NODE_AUTH_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa action será executada na adição de uma nova release. Isso pode ser alterado de acordo com sua preferência. Além disso, utilizei o &lt;code&gt;workflow_dispatch&lt;/code&gt;, que permite executar essa action diretamente da interface do GitHub, manualmente. É importante salientar que o &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; é gerado automaticamente pelo GitHub. Você pode conferir mais sobre isso &lt;a href="https://docs.github.com/pt/actions/security-for-github-actions/security-guides/automatic-token-authentication" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 5: Criar a nova release
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9c0ztpe4rna3oiu80wi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9c0ztpe4rna3oiu80wi.png" alt="Github Nova release" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Preencha as informações de tag e crie a nova release. Isso acionará a execução da action.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 6: Usando o pacote nos seus projetos
&lt;/h3&gt;

&lt;p&gt;Antes de instalar o pacote, siga estas etapas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Crie um token de acesso pessoal no GitHub para autenticação com a API do GitHub e instalação do seu pacote. Vá em &lt;strong&gt;Configurações / Configurações de Desenvolvedor / Token de Acesso Pessoal&lt;/strong&gt; e gere um novo token com a permissão de leitura.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No projeto onde o pacote será utilizado, crie um arquivo chamado &lt;code&gt;.npmrc&lt;/code&gt; na raiz do projeto.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adicione a seguinte configuração no seu arquivo &lt;code&gt;.npmrc&lt;/code&gt;, substituindo &lt;code&gt;&amp;lt;GITHUB_TOKEN&amp;gt;&lt;/code&gt; pelo token gerado anteriormente:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//npm.pkg.github.com/:_authToken=&amp;lt;GITHUB_TOKEN&amp;gt;
@organizationName:registry=https://npm.pkg.github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Agora, você já pode instalar o pacote no seu projeto utilizando:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Via &lt;code&gt;package.json&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"@carloshendvpm/meu-pacote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Via terminal:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @carloshendvpm/meu-pacote@1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Espero ter ajudado de alguma forma. Em breve, pretendo trazer um tutorial completo sobre a criação de um package utilizando a Svelte Library. Se tiver alguma sugestão, não hesite em comentar ou me corrigir caso tenha notado algum erro.&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubactions</category>
      <category>npm</category>
    </item>
  </channel>
</rss>
