<?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: Wesley Gonçalves </title>
    <description>The latest articles on DEV Community by Wesley Gonçalves  (@wesleyotio).</description>
    <link>https://dev.to/wesleyotio</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%2F905847%2F9bd687fb-1aea-41b3-a577-c933ee708229.JPG</url>
      <title>DEV Community: Wesley Gonçalves </title>
      <link>https://dev.to/wesleyotio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wesleyotio"/>
    <language>en</language>
    <item>
      <title>PHP sem nada de Xampp e com muito Xdebug no Windows</title>
      <dc:creator>Wesley Gonçalves </dc:creator>
      <pubDate>Sat, 08 Jun 2024 15:39:15 +0000</pubDate>
      <link>https://dev.to/wesleyotio/php-sem-nada-de-xampp-e-com-muito-xdebug-no-windows-opa</link>
      <guid>https://dev.to/wesleyotio/php-sem-nada-de-xampp-e-com-muito-xdebug-no-windows-opa</guid>
      <description>&lt;p&gt;Uma coisa que já é sabida há um bom tempo é que NÃO precisamos usar o Xampp para montarmos um bom ambiente de desenvolvimento, mas voce pode argumentar que o próprio site oficial do PHP na &lt;a href="https://www.php.net/manual/pt_BR/install.windows.php" rel="noopener noreferrer"&gt;Instalação no Windows&lt;/a&gt; recomenda fazer uso dele por ser mais pratico, concordo totalmente com essa afirmativa, mas o problema é que além de PHP são instalados outra ruma de tranqueiras que são desnecessárias. Caso queira entender o motivo dessas ferramentas serem desnecessárias minha sugestão é assistir o video do Vinícius Dias de nome: &lt;a href="https://www.youtube.com/watch?v=XgJbv1itIOE" rel="noopener noreferrer"&gt;XAMPP: Por Que Este Não Deve Ser seu Ambiente de Desenvolvimento&lt;/a&gt;. Chega de conversa fiada e vamos para a configuração.&lt;/p&gt;

&lt;h1&gt;
  
  
  Índice
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Instalando O PHP no Windows&lt;/li&gt;
&lt;li&gt;Instalando o Xdebug&lt;/li&gt;
&lt;li&gt;VScode e suas extensões&lt;/li&gt;
&lt;li&gt;Usando o SQLite&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Instalando O PHP no Windows
&lt;/h1&gt;

&lt;p&gt;Para instalar o PHP no windows basta somente 3 passos, primeiro que vamos baixar os arquivos zipados no linK: &lt;a href="https://windows.php.net/download/" rel="noopener noreferrer"&gt;PHP para windows&lt;/a&gt;, importante mencionar que talvez seja necessário instalar o &lt;strong&gt;Visual C++ Redistributable for Visual Studio&lt;/strong&gt;, verifique antes no seu windows ele está instalado, caso contrário basta baixar neste link: &lt;a href="https://aka.ms/vs/16/release/VC_redist.x64.exe" rel="noopener noreferrer"&gt;Visual C++ Redistributable&lt;/a&gt;, instalação padrão do windows, faz &lt;em&gt;next&lt;/em&gt; até aparecer o &lt;em&gt;finish&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;O próprio site explica as diferenças entre as versões disponíveis, para este exemplo vou usar o &lt;strong&gt;PHP 8.2 (8.2.19)&lt;/strong&gt; com a versão &lt;strong&gt;VS16 x64 Thread Safe (2024-May-08 07:21:58)&lt;/strong&gt;, para a gente vamos somente baixar o arquivo .ZIP como mostrado na figura.&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%2Fsiibuayp9tr4vmyxnw9y.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%2Fsiibuayp9tr4vmyxnw9y.png" alt="Image description" width="568" height="597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feito isso, vamos agora descompactar a o zip, mas antes crie um diretório na raiz do disco C do windows, vai ficar assim &lt;strong&gt;"C:\php"&lt;/strong&gt;. depois da árdua tarefa descompactar um arquivo, agora entre na pasta e encontrará de cara os arquivos &lt;strong&gt;&lt;em&gt;php.ini-development&lt;/em&gt;&lt;/strong&gt;  e &lt;strong&gt;&lt;em&gt;php.ini-production&lt;/em&gt;&lt;/strong&gt; , faça uma copia do arquivo &lt;strong&gt;&lt;em&gt;php.ini-development&lt;/em&gt;&lt;/strong&gt; e renomeia para ficar somente &lt;strong&gt;php.ini&lt;/strong&gt; o resultado final vai ser como o da imagem.&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%2F6mitro35clthwz2h17ea.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%2F6mitro35clthwz2h17ea.png" alt="Image description" width="362" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estamos quase lá, falta agora nossas variáveis de ambiente, pesquise no menu iniciar do windows por &lt;em&gt;Editar as variáveis de ambiente&lt;/em&gt;.&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%2Fvlriyjgwjyhhpb8gx8tf.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%2Fvlriyjgwjyhhpb8gx8tf.png" alt="Image description" width="775" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora clicando em &lt;em&gt;variáveis de ambiente&lt;/em&gt;, vamos ter a seguinte tela.&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%2Feg2dmkpzz9lijfvgt76y.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%2Feg2dmkpzz9lijfvgt76y.png" alt="Image description" width="607" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Edite a variável &lt;strong&gt;Path&lt;/strong&gt; e nela coloque o caminho da pasta do php: &lt;strong&gt;"C:\php"&lt;/strong&gt;, seu PHP está instalado no windows, para verificar de fato se deu bom na instalação abra seu terminal e digite: &lt;strong&gt;&lt;em&gt;php -v&lt;/em&gt;&lt;/strong&gt; e o resultado é para ser.&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%2Fv6gg4ua4cw9c65zyqrl6.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%2Fv6gg4ua4cw9c65zyqrl6.png" alt="Image description" width="729" height="114"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com isso você já pode fazer fazer seus programas com o PHP, mas aqui a gente quer colocar um ambiente de desenvolvimento arretado, então vamos configurar o gerenciador de pendencias do PHP o &lt;a href="https://getcomposer.org" rel="noopener noreferrer"&gt;commposer&lt;/a&gt; e nossa ferramenta de debug o &lt;a href="https://xdebug.org" rel="noopener noreferrer"&gt;Xdebug&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para instalar o composer basta fazer o &lt;a href="https://getcomposer.org/download/" rel="noopener noreferrer"&gt;baixar o executável&lt;/a&gt; e mais uma vez basta fazer &lt;strong&gt;&lt;em&gt;next&lt;/em&gt;&lt;/strong&gt; e depois &lt;strong&gt;&lt;em&gt;finish&lt;/em&gt;&lt;/strong&gt;. Se tudo estiver ocorrido como o desejado validamos rodando o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o resultado deve ser esse.&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%2F1txy69jfdd86lbb1kz47.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%2F1txy69jfdd86lbb1kz47.png" alt="Image description" width="542" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com isso temos nosso PHP e composer devidamente instalado, agora vamos para nossa ferramenta de depuração.&lt;/p&gt;

&lt;h1&gt;
  
  
  Instalando o Xdebug
&lt;/h1&gt;

&lt;p&gt;Caso não conheça o essa ferramenta incrível, minha sugestão é fazer uma lida rápida na &lt;a href="https://xdebug.org/docs/all_settings" rel="noopener noreferrer"&gt;Documentação do Xdebug&lt;/a&gt;, aqui vou fazer a instalação e uma configuração básica que tenho usado no em meu ambiente local.&lt;/p&gt;

&lt;p&gt;Primeiro vamos baixar a dll do Xdebug para windows, acessando o &lt;a href="https://xdebug.org/download#releases" rel="noopener noreferrer"&gt;link&lt;/a&gt;, agora tenha atenção para que a versão selecionada seja compatível com a versão de PHP usada no Windows.&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%2Fa19v5xu83l5ic7rkfcv2.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%2Fa19v5xu83l5ic7rkfcv2.png" alt="Image description" width="800" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Selecionada a versão correta, descompacte e mude o nome para &lt;strong&gt;php_xdebug.dll&lt;/strong&gt;, em seguida adicione a extensão em &lt;em&gt;C:\php\ext&lt;/em&gt;. Feito isso temos a extensão pronta, mas ainda precisamos habilitar para uso, fazemos isso editando o arquivo &lt;em&gt;php.ini&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Pesquise dentro do &lt;em&gt;php,ini&lt;/em&gt; por &lt;strong&gt;&lt;em&gt;zend_extension=&lt;/em&gt;&lt;/strong&gt; , provavelmente você irá encontrar algo desse tipo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;;zend_extension=opcache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Duplique a linha e modifique para que fique agora assim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;;zend_extension=opcache
zend_extension=xdebug
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basicamente o que estamos fazendo é &lt;strong&gt;habilitar/ativar&lt;/strong&gt; o uso da extensão para nosso PHP local, mas só isso não é suficiente, precisamos acionar algumas coisas para deixar o Xdebug zero bala para o desenvolvimento. Ainda no arquivo &lt;em&gt;php.ini&lt;/em&gt; role até o final do arquivo e acrescente o seguinte bloco.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Xdebug]
xdebug.mode=debug,develop //controla quais recursos do Xdebug estão habilitados
xdebug.client_host=localhost //Configura o host ao qual o Xdebug conecta ao iniciar uma conexão de depuração.
xdebug.start_with_request=trigger // depuração de etapas 
xdebug.idekey=VSCODE //chave IDE que o Xdebug deve passar para o cliente ou proxy
xdebug.client_port=9003  // A porta à qual o Xdebug tenta se conectar no host remoto
xdebug.var_display_max_children=128 //Controla a quantidade de filhos do array e as propriedades do objeto são mostradas quando as variáveis ​​são exibidas com var_dump()
xdebug.filename_format=...%s%a // determina o formato com o qual o Xdebug renderiza nomes de arquivos em rastreamentos de pilha HTML
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essas são as configurações que julgo serem suficientes para quem tá começando, mas caso queira entrar mais a fundo leia a documentação das &lt;a href="https://xdebug.org/docs/all_settings" rel="noopener noreferrer"&gt;configurações do Xdebug&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para saber de maneira bem simples se o Xdebug foi ativado corretamente é via comando, basta abrir o terminal e fazer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php -i
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado será gigante, mas o mais importante é procurar pelo Xdebug, que deve aparecer assim.&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%2Fklj5legbt0ws5pt1oogu.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%2Fklj5legbt0ws5pt1oogu.png" alt="Image description" width="800" height="719"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para finalizar essa parte, precisamos só de mais um detalhe, uma extensão para nosso navegador seja ele o &lt;a href="https://addons.mozilla.org/pt-BR/firefox/addon/xdebug-helper-for-firefox/" rel="noopener noreferrer"&gt;Firefox&lt;/a&gt; ou &lt;a href="https://chromewebstore.google.com/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc" rel="noopener noreferrer"&gt;Chrome&lt;/a&gt;, na extensão clique que opções e a tela apresentada será esta.&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%2Fxndwops1lqfc4uflf1i7.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%2Fxndwops1lqfc4uflf1i7.png" alt="Image description" width="630" height="747"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pronto em &lt;strong&gt;IDE key&lt;/strong&gt; deixe os parâmetros como na imagem &lt;strong&gt;Other&lt;/strong&gt; e &lt;strong&gt;&lt;em&gt;VSCODE&lt;/em&gt;&lt;/strong&gt;, acredito que deva ter notado que esse é o mesmo valor que colocamos em nosso &lt;strong&gt;&lt;em&gt;xdebug.idekey&lt;/em&gt;&lt;/strong&gt;, agora lembre de deixar a extensão sempre ativada quando estiver depurando seu código PHP.&lt;/p&gt;

&lt;h1&gt;
  
  
  VScode e suas extensões
&lt;/h1&gt;

&lt;p&gt;Para ser mais direto e não deixar o tutorial mais longo que o necessário, vai nas extensões do VSCODE e digita php, para inicio instala somente  &lt;strong&gt;&lt;em&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client" rel="noopener noreferrer"&gt;PHP Intelephense&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=xdebug.php-debug" rel="noopener noreferrer"&gt;PHP Debug&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;em&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=zobo.php-intellisense" rel="noopener noreferrer"&gt;PHP IntelliSense&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;.&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%2Fdbazotmbtjdh2e5ctw6m.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%2Fdbazotmbtjdh2e5ctw6m.png" alt="Image description" width="313" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com tudo devidamente instalado vamos no menu lateral e clicamos no ícone de depuração ou simplesmente o comando (&lt;strong&gt;Ctrl + Shift + D&lt;/strong&gt;) provavelmente você verá algo como demonstrado na imagem a seguir.&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%2Fpqc267l79ftbuh0n53bs.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%2Fpqc267l79ftbuh0n53bs.png" alt="Image description" width="367" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basta agora clicar em &lt;strong&gt;&lt;em&gt;create a launch.json file&lt;/em&gt;&lt;/strong&gt; e escolha a opção PHP que o próprio VScode vai se virar para criar uma configuração para ti, aqui ele gerou isso aqui pra mim.&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="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;"0.2.0"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"configurations"&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;"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;"Listen for Xdebug"&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;"php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"launch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9003&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;"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;"Launch currently open script"&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;"php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"launch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"program"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${file}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"cwd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${fileDirname}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;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;"runtimeArgs"&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="s2"&gt;"-dxdebug.start_with_request=yes"&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;"env"&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;"XDEBUG_MODE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"debug,develop"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"XDEBUG_CONFIG"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"client_port=${port}"&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;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;"Launch Built-in web server"&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;"php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"launch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"runtimeArgs"&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="s2"&gt;"-dxdebug.mode=debug"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"-dxdebug.start_with_request=yes"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"-S"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"localhost:0"&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;"program"&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;"cwd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${workspaceRoot}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9003&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"serverReadyAction"&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;"pattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Development Server &lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;(http://localhost:([0-9]+)&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;) started"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"uriFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:%s"&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;"openExternally"&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;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;Para nossas necessidades atuais, basta selecionar a opção &lt;em&gt;Listen for Xdebug&lt;/em&gt; para iniciar o processo de depuração, vamos fazer assim,  crie um diretório na raiz do sistema e em seguida um arquivo &lt;em&gt;index.php&lt;/em&gt;, como mostrado na imagem.&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%2F49gy0de166q2hny40t4n.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%2F49gy0de166q2hny40t4n.png" alt="Image description" width="590" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O diretório vendor e os arquivos composer.json e composer.lock aparecem quando instalamos dependências em nosso projeto, mas para seu exemplo não ligue para eles.&lt;/p&gt;

&lt;p&gt;Em seu terminal navegue até o diretório que onde o arquivo &lt;em&gt;index.php&lt;/em&gt; está localizado e basta rodar o seguinte comando para inicializar o servidor do PHP.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-S&lt;/span&gt; localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado será esse aqui.&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%2Ftnaqf8c4812vl1x98poc.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%2Ftnaqf8c4812vl1x98poc.png" alt="Image description" width="800" height="46"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No navegador acesse por &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt; e o resultado esperado deve ser.&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%2Fnto15p328syrulvnqrb9.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%2Fnto15p328syrulvnqrb9.png" alt="Image description" width="419" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nosso sistema está rodando perfeitamente bem e sem nada relacionado a XAMPP, viu nem foi tão difícil assim, agora para fechar de fato essa parte, vamos testar no Xdebug. Aqui eu coloquei um &lt;em&gt;breackpoint&lt;/em&gt; na linha 2 em seguida inicializamos o debug do VCcode e damos um F5 na pagina &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;&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%2F8ykvuzbckzqod0xyncmv.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%2F8ykvuzbckzqod0xyncmv.png" alt="Image description" width="601" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se para ti apareceu uma imagem semelhante a que temos acima, podemos ter certeza que nosso ambiente com servidor local de PHP e ferramenta de depuração estão prontos para desenvolvimento.&lt;/p&gt;

&lt;h1&gt;
  
  
  Usando o SQLite
&lt;/h1&gt;

&lt;p&gt;Para incio de conversa precisamos fazer a instalação do &lt;strong&gt;sqllite&lt;/strong&gt;, acessando o &lt;a href="https://www.sqlite.org/download.html" rel="noopener noreferrer"&gt;link&lt;/a&gt;, selecione a  terceira opção.&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%2Feix5kyuulb0s2rtfqmw2.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%2Feix5kyuulb0s2rtfqmw2.png" alt="Image description" width="800" height="74"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Semelhante a instalação do PHP, criamos um diretório na raiz do sistema de nome &lt;strong&gt;sqlite&lt;/strong&gt; em seguida descompacte os arquivos nesta pasta e agora basta editar o PATH e apresentar a rota do diretório &lt;strong&gt;C:\sqlite&lt;/strong&gt;. Para validar se está tudo funcionando bem basta rodar o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sqlite3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F83sdu1odqri0faez3fkd.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%2F83sdu1odqri0faez3fkd.png" alt="Image description" width="642" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Precisamos agora fazer um ajuste em nosso &lt;strong&gt;php.ini&lt;/strong&gt; para suportar o sqlite, então edite o arquivo para que fique com as extensões habilitadas como demonstrado a seguir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;extension=pdo_sqlite
extension=sqlite3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vamos criar um "projeto" usando para demonstrar o funcionamento do PHP com um banco de dados, fizemos uso do SQLite pelo simples fato de que ele cria somente um arquivo onde fica toda a estrutura necessária para nossas chamadas SQL.&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%2F7oswy56py5st20g0lkcs.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%2F7oswy56py5st20g0lkcs.png" alt="Image description" width="214" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nosso &lt;strong&gt;index.php&lt;/strong&gt; vai ficar assim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="k"&gt;__DIR__&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/../vendor/autoload.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Database\Config&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Database\SQLiteConnection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$connection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SQLiteConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Config&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;PATH_TO_SQLITE_FILE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$pdo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$connection&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;openConnect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Conectado com sucesso ao banco de dados SQLite."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\PDOException&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Erro de conexão: "&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\Exception&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Erro: "&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O arquivo &lt;strong&gt;config.php&lt;/strong&gt; será responsável por registrar a localização do arquivo do banco.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Database&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Config&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;


    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;PATH_TO_SQLITE_FILE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="k"&gt;__DIR__&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'\db\phpsqlite.db'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E por ultimo o &lt;strong&gt;SQLiteConnection.php&lt;/strong&gt; fica responsável por estabelecer a conexão de fato com o SQlite.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Database&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;PDOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SQLiteConnection&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nv"&gt;$pdo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nv"&gt;$pathToSQLiteFile&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$pathToSQLiteFile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;file_exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$pathToSQLiteFile&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Arquivo de banco de dados não encontrado: "&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$pathToSQLiteFile&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;pdo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\PDO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"sqlite:"&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$pathToSQLiteFile&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;pathToSQLiteFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$pathToSQLiteFile&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;openConnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;pdo&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
              &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;pdo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\PDO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"sqlite:"&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;pathToSQLiteFile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="no"&gt;\PDO&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ATTR_PERSISTENT&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
                &lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;pdo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;PDOException&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;

            &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;"Error in open DB:  "&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getPDO&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;pdo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Antes de testar, vamos criar o arquivo para nosso banco de dados, tá mais para um tamborete de dados, navegue até o diretório de seu projeto e execute o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sqlite3 database/db/phpsqlite.db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora no shell do SQLite vamos criar uma tabela de exemplo e assim é criado nosso arquivo de banco de dados.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;INTEGER&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;em seguida rode o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;.exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Antes de fazer o nosso teste de conexão com o banco precisamos fazer o mapeamento de nossos aquivos via composer, para isso basta criar o arquivo composer.json na raiz do projeto ele 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;"autoload"&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;"psr-4"&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;"App\\"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"public/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Database\\"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"database/"&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer  dump-autoload  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se tudo estiver ocorrido como o esperado, teremos a saída&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Generating autoload files
Generated autoload files  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;depois disso essa será a organização de seu diretó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%2F9t83y3iis8p59rdc3ea6.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%2F9t83y3iis8p59rdc3ea6.png" alt="Image description" width="193" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;agora finalmente chegamos ao fim, navegue até o diretório &lt;strong&gt;"C:\project-php\public"&lt;/strong&gt; e execute o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-S&lt;/span&gt; localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;em seu navegador o resultado deve ser este:&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%2F1robupzx2elfmvqjqvrv.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%2F1robupzx2elfmvqjqvrv.png" alt="Image description" width="314" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora, você tem um ambiente de desenvolvimento devidamente configurado, para uma leitura complementar ficar o link do &lt;a href="http://br.phptherightway.com" rel="noopener noreferrer"&gt;PHP do jeito certo&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>php</category>
      <category>beginners</category>
      <category>vscode</category>
      <category>windows</category>
    </item>
    <item>
      <title>Configurando WSL2 com Intellij</title>
      <dc:creator>Wesley Gonçalves </dc:creator>
      <pubDate>Tue, 26 Sep 2023 23:25:04 +0000</pubDate>
      <link>https://dev.to/wesleyotio/configurando-wsl2-com-intellij-2pl7</link>
      <guid>https://dev.to/wesleyotio/configurando-wsl2-com-intellij-2pl7</guid>
      <description>&lt;p&gt;Neste breve tutorial faremos uma configuração para instalação da IDE &lt;a href="https://www.jetbrains.com" rel="noopener noreferrer"&gt;Intellij&lt;/a&gt; no WSL2 usando o &lt;a href="https://ubuntu.com/wsl" rel="noopener noreferrer"&gt;Ubuntu-20.04&lt;/a&gt;, caso nunca tenha feito a instalação desta distro no seu WSL2 minha sugestão é começar &lt;a href="https://github.com/Wesleyotio/config-wsl-with-ubuntu-zsh" rel="noopener noreferrer"&gt;Configurando o WSL com o Ubuntu&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Depois de ter realizado a configuração mencionada estaremos prontos para dar inicio, importante também enfatizar que esse tutorial foi inspirado pelo video &lt;a href="https://www.youtube.com/watch?v=v-e8MRhNkmU" rel="noopener noreferrer"&gt;instalando o Intellij dentro do wsl2&lt;/a&gt; do canal &lt;a href="https://www.youtube.com/@codaram" rel="noopener noreferrer"&gt;CodaRAM&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Índice
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Instalando uma interface gráfica no WSL&lt;/li&gt;
&lt;li&gt;Instalando a IDE pelo JetBrains Toolbox App&lt;/li&gt;
&lt;li&gt;
Instalando o JAVA e o Maven

&lt;ul&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Maven&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Configurando o JAVA e o Maven no Intellij&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Instalando uma interface gráfica no WSL
&lt;/h2&gt;

&lt;p&gt;Sim, meu camarada é possível instalar uma interface gráfica para seu WSL2, fazemos isto rodando o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nautilus &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Instalando a IDE pelo JetBrains Toolbox App
&lt;/h2&gt;

&lt;p&gt;Basicamente vamos baixar o &lt;a href="https://www.jetbrains.com/toolbox-app/" rel="noopener noreferrer"&gt;toolbox APP&lt;/a&gt; e fazer a instalação no WSL2, o interessante aqui é que você pode ter todas a ferramentas deles dentro do WSl, mas neste caso estamos focados no &lt;a href="https://www.java.com" rel="noopener noreferrer"&gt;JAVA&lt;/a&gt;, com já citado a ferramenta vai ficar instalada dentro do WSL então baixe o arquivo da extensão &lt;strong&gt;.tar.gz&lt;/strong&gt; usando sua interface do windows encontre o diretório da distro.&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%2F0xltypiaafjq49eux9mb.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%2F0xltypiaafjq49eux9mb.png" alt="Image description" width="163" height="102"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dentro do diretório da distro jogue onde quiser o arquivo, lembre que depois de descompactado e instalado ele não terá mais utilidade.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo tar&lt;/span&gt; &lt;span class="nt"&gt;-xzf&lt;/span&gt; &amp;lt;nome-do-arquivo&amp;gt;.tar.gz &lt;span class="nt"&gt;-C&lt;/span&gt; /opt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito isso agora temos o arquivo descompactado na pasta &lt;code&gt;/opt&lt;/code&gt; navegue até esta pasta e encontre o diretório &lt;strong&gt;com mesmo nome do arquivo&lt;/strong&gt; descompactado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /opt

&lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;nome-do-arquivo&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste diretório roda o comando para iniciar a instalação de fato do tool box.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./jetbrains-toolbox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se tudo estiver saindo como o esperado teremos a seguinte tela.&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%2Fe9vwkyss5anz234evna7.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%2Fe9vwkyss5anz234evna7.png" alt="Image description" width="382" height="863"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No meu caso já tenho instalado o Intellij IDEA Community, mas posso atualiza-lo ou instalar qualquer outras ferramentas. Feito isso, temos que fazer nossa IDE ficar acessível para o windows usando os seguintes comandos.&lt;/p&gt;

&lt;p&gt;navegamos até o diretório e executamos um &lt;code&gt;ls&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;cd&lt;/span&gt; ~/.local/share/applications
  &lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;strong&gt;resultado&lt;/strong&gt; é algo parecido com as linhas apresentadas abaixo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jetbrains-idea-ce-566a045c.desktop  
jetbrains-toolbox.desktop  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora executamos o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo cp&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;.desktop /usr/share/applications
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se tudo estiver certo temos a seguinte imagem aparecendo no seu menu do windows, permitindo abrir o Intellij Community de dentro do WSL2&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%2F9tgainpkod1mtfhct3hm.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%2F9tgainpkod1mtfhct3hm.png" alt="Image description" width="136" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalando o JAVA e o Maven
&lt;/h2&gt;

&lt;p&gt;Para instalar o &lt;a href="https://www.java.com/" rel="noopener noreferrer"&gt;JAVA&lt;/a&gt; e o &lt;a href="https://maven.apache.org" rel="noopener noreferrer"&gt;Maven&lt;/a&gt; no Linux Ubuntu é simples, inicialmente vamos executar os seguintes comandos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java
&lt;/h3&gt;

&lt;p&gt;Para atualizar o sistema&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instalando o JRE(Java Runtime Environment)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;default-jre
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verificando se a instalação está correta&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;java &lt;span class="nt"&gt;-version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A resposta deve ser algo como&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openjdk version "11.0.20.1" 2023-08-24

OpenJDK Runtime Environment (build 11.0.20.1+1-post-Ubuntu-0ubuntu120.04)

OpenJDK 64-Bit Server VM (build 11.0.20.1+1-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto, de maneira semelhante temos que vamos instalar o JDK(Java Development Kit)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;default-jdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verificando se a instalação está correta&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;javac &lt;span class="nt"&gt;-version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E sua resposta deve ser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;javac 11.0.20.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Maven
&lt;/h3&gt;

&lt;p&gt;Observe que para o Maven fazemos também 3 passos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;maven
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verificando se a instalação está correta&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mvn &lt;span class="nt"&gt;-version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E sua resposta deve ser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.20.1, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "5.15.90.1-microsoft-standard-wsl2", arch: "amd64", family: "unix"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configurando o JAVA e o Maven no Intellij
&lt;/h2&gt;

&lt;p&gt;Temos IDE, Linguagem de programação e gerenciador de pacotes em pleno funcionamento o que nos falta agora é fazer Nossa IDE reconhecer a localização do Java e do repositório do Maven o &lt;code&gt;.M2&lt;/code&gt;  &lt;/p&gt;

&lt;p&gt;Com sua IDE aberta digite o comando &lt;code&gt;Ctrl + Alt + s&lt;/code&gt; para abrir as configurações, procure por &lt;code&gt;Build, Execution, Development &amp;gt; Build Tools &amp;gt; Maven&lt;/code&gt; e preencha os campos com os seguintes valores.&lt;/p&gt;

&lt;p&gt;Maven home path: &lt;code&gt;/usr/share/maven&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;User settings... &lt;code&gt;/home/&amp;lt;seuUsuario&amp;gt;/.m2/settings.xml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Local repository... &lt;code&gt;/home/&amp;lt;seuUsuario&amp;gt;/.m2/repository&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para terminar procure por  &lt;code&gt;Build, Execution, Development &amp;gt; Build Tools &amp;gt; Maven &amp;gt; Runner&lt;/code&gt; e no campo do JRE coloque &lt;/p&gt;

&lt;p&gt;JRE: &lt;code&gt;/usr/lib/jvm/java-1.11.0-openjdk-amd64&lt;/code&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;OBS:&lt;/strong&gt; Pode ser que quando você precisar instalar novos pacotes do Maven a IDE tenha algum problema e não deixe realizar o update, para esse caso verifique qual usuário é dono da pasta no diretório do usuário usando o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se o diretório &lt;code&gt;.m2&lt;/code&gt; estiver com o usuário &lt;code&gt;root&lt;/code&gt; então mude para o seu pelo comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; seuUsuario:seuUsuario .m2  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora sua IDE consegue atualizar sem problemas. &lt;/p&gt;

</description>
      <category>java</category>
      <category>tutorial</category>
      <category>wsl2</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Configurando Alpine Linux, tmux e neovim no WSL2 - parte 1</title>
      <dc:creator>Wesley Gonçalves </dc:creator>
      <pubDate>Thu, 08 Jun 2023 19:14:24 +0000</pubDate>
      <link>https://dev.to/wesleyotio/configurando-alpine-linux-tmux-e-neovim-no-wsl2-parte-1-11ai</link>
      <guid>https://dev.to/wesleyotio/configurando-alpine-linux-tmux-e-neovim-no-wsl2-parte-1-11ai</guid>
      <description>&lt;p&gt;Configurando o WSL2 com Alpine Linux&lt;/p&gt;

&lt;p&gt;Neste tutorial usaremos a &lt;a href="https://www.alpinelinux.org" rel="noopener noreferrer"&gt;Alpine Linux&lt;/a&gt; dentro do WSL2, caso nunca tenha configurado o wsl2 em sua maquina deixo esse outro tutorial &lt;a href="https://dev.to/wesleyotio/configurando-o-wsl-com-o-ubuntu-2204-zsh-527o"&gt;Configurando o WSL com o Ubuntu 22.04 + ZSH&lt;/a&gt; para que tenha por onde começar, aqui vou considerar que já tenha WSL2 funcionando plenamente em sua maquina.&lt;/p&gt;

&lt;p&gt;Escolhi essa distro por querer uma distro diferente da minha principal o &lt;a href="https://manjaro.org/download/" rel="noopener noreferrer"&gt;Manjaro Linux&lt;/a&gt;, que também tenho um &lt;a href="https://dev.to/wesleyotio/configurando-o-manjaro-linux-4p6g"&gt;tutorial de instalação&lt;/a&gt; e experimentar o famoso &lt;a href="https://github.com/neovim" rel="noopener noreferrer"&gt;neovim&lt;/a&gt; como ferramenta de desenvolvimento.&lt;/p&gt;

&lt;h1&gt;
  
  
  Índice
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Configurando o WSL2 com Alpine Linux&lt;/li&gt;
&lt;li&gt;Índice&lt;/li&gt;
&lt;li&gt;
Instalando o Alpine Linux no WSL2

&lt;ul&gt;
&lt;li&gt;Instalando o básico&lt;/li&gt;
&lt;li&gt;Criando um usuário não root&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

Nerd Fonts

&lt;ul&gt;
&lt;li&gt;powerlevel10k&lt;/li&gt;
&lt;li&gt;plugins zsh&lt;/li&gt;
&lt;li&gt;zsh-autosuggestions&lt;/li&gt;
&lt;li&gt;zsh-syntax-highlighting&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

Docker

&lt;ul&gt;
&lt;li&gt;Iniciando o docker&lt;/li&gt;
&lt;li&gt;ALIAS&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Instalando o Alpine Linux no WSL2
&lt;/h1&gt;

&lt;p&gt;Importante lembar que por padrão o Alpine Linux não é suportado pelo WSL2, por isso usaremos o de um projeto da &lt;a href="https://github.com/yuk7" rel="noopener noreferrer"&gt;yuk7&lt;/a&gt; que criou um modelo simples e fácil de ser seguido ela tem projetos para as distros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/yuk7/ArchWSL" rel="noopener noreferrer"&gt;ArchWSL&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/yuk7/AlpineWSL" rel="noopener noreferrer"&gt;AlpineWSL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aqui deixo o link com a &lt;a href="https://wsldl-pg.github.io/docs/Using-wsldl/#distros" rel="noopener noreferrer"&gt;lista das distros&lt;/a&gt; que fazem parte deste projeto usando wsl2 diferentes da base do Linux Ubuntu.&lt;/p&gt;

&lt;p&gt;Seguindo as recomendações do link basta baixar o arquivo descompactar onde achar melhor, eu fiz no diretório raiz. Agora dentro da pasta descompactada execute o terminal como Administrador do sistema e execute o seguinte comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;.&lt;span class="se"&gt;\ &lt;/span&gt;Alpine.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito isso o Alpine Linux será instalado no WSL2, agora feche o terminal e abrindo novamente você verá o sistema instalado, quando tiver feito isso estará logado como root do sistema e daqui a pouco resolvemos isso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalando o básico
&lt;/h2&gt;

&lt;p&gt;Uma coisa interesante sobre o alpine  é que ele vem sem nada praticamente, precisamos instalar tudo e vamos ao comando pra isso, mas antes vou deixar a &lt;a href="https://pt.linux-console.net/?p=2606#gsc.tab=0" rel="noopener noreferrer"&gt;lista de comandos do alpine&lt;/a&gt; para que possa entender como manipular o sistema.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apk add zsh curl wget git htop nano doas neofetch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse pacote de instalações estamos colocando o zsh que será nosso shell padrão do sistema, mas antes disso vamos criar nosso usuário nào root do sistema. &lt;/p&gt;

&lt;h2&gt;
  
  
  Criando um usuário não root
&lt;/h2&gt;

&lt;p&gt;Precisamos criar o usuário com sua respectiva senha, vamos precisar conceder para ele o uso de comandos de root e para isso temos que instalar e configurar sudo e fazemos isso pelo comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apk add &lt;span class="nb"&gt;sudo 
&lt;/span&gt;&lt;span class="nv"&gt;NEWUSER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'&amp;lt;username&amp;gt;'&lt;/span&gt; 
adduser &lt;span class="nt"&gt;-g&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NEWUSER&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nv"&gt;$NEWUSER&lt;/span&gt; 
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NEWUSER&lt;/span&gt;&lt;span class="s2"&gt; ALL=(ALL) ALL"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /etc/sudoers.d/&lt;span class="nv"&gt;$NEWUSER&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;0440 /etc/sudoers.d/ &lt;span class="nv"&gt;$NEWUSER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;agora adicionamos nosso usuário ao grupo wheel pelo comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'%wheel ALL=(ALL) ALL'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /etc/sudoers.d/wheel 
adduser NEWUSER wheel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Legal, mas ainda não estamos usando o zsh e toda vez que entramos no sistema estamos como root. Para corrigir isso precisamos primeiro editar nosso arquivo &lt;strong&gt;&lt;em&gt;passwd&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano etc/passwd  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;do resultado apresentado só é importante a primeira e ultima linha como exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root:x:0:0:root:/root:/bin/ash
&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt;
username:x:1000:1000:wesleyotio:/home/username:/bin/ash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;agora só mudamos de /ash pra /zsh e salvamos o arquivo, feche o terminal e abra novamente. O zsh estará em pleno funcionamento. Agora execute o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;whoami&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;se sua resposta for &lt;strong&gt;&lt;em&gt;root&lt;/em&gt;&lt;/strong&gt; é pelo fato de que o alpine ainda não está configurado para iniciar a partir de seu usuário criado, para corrigir isso feche o terminal e execute novamente a pasta descompactada do alpine linux como administrador e nela execute o seguinte comando passando o nome do seu usuário&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;.&lt;span class="se"&gt;\ &lt;/span&gt;Alpine.exe config &lt;span class="nt"&gt;--default-user&lt;/span&gt; &amp;lt;username&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;agora quando iniciamos o sistema o comando &lt;strong&gt;whoami&lt;/strong&gt; deve apresentar o nome de seu usuário. &lt;/p&gt;

&lt;h1&gt;
  
  
  Nerd Fonts
&lt;/h1&gt;

&lt;p&gt;Antes de deixar nosso terminal bonito como fizemos no &lt;a href="https://github.com/Wesleyotio/config-wsl-with-ubuntu-zsh" rel="noopener noreferrer"&gt;Configurando o WSL com o Ubuntu 22.04 + ZSH&lt;/a&gt; vamos instalar uma fonte do tipo &lt;a href="https://www.nerdfonts.com" rel="noopener noreferrer"&gt;nerd fonts&lt;/a&gt;, aqui deixo os links da que tenho usado para você baixar e instalar em seu sistema.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Regular.ttf&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Bold.ttf&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Italic.ttf&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Bold Italic.ttf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feito isso agora abra novamente o terminal e em configurações -&amp;gt; padrões -&amp;gt; fonts selecione &lt;em&gt;MesloLGS NF&lt;/em&gt; .&lt;/p&gt;

&lt;h2&gt;
  
  
  powerlevel10k
&lt;/h2&gt;

&lt;p&gt;Tudo isso foi necessário para agora instalar o &lt;a href="https://github.com/romkatv/powerlevel10k" rel="noopener noreferrer"&gt;powerlevel10k&lt;/a&gt; que é um tema para o shell ZSH e deixar nosso terminal mais bonito e performático quando somado aos plugins. Eu sugiro que use a instalação manual que tem certeza de funcionar.&lt;br&gt;
Fazendo uso da instalação manual usamos o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'source ~/powerlevel10k/powerlevel10k.zsh-theme'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feche o terminal e abra novamente, assim você inicia a configuração do tema, siga as instruções e customize seu terminal da forma que mais te agrada. Caso queira mudar o estilo apresentado basta usar o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  p10k configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e fazer o processo novamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  plugins zsh
&lt;/h2&gt;

&lt;p&gt;Bonito o terminal já está, mas precisamos deixar performático e para isso vamos usar os seguintes plugins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;zsh-autosuggestions&lt;/li&gt;
&lt;li&gt;zsh-syntax-highlighting&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  zsh-autosuggestions
&lt;/h3&gt;

&lt;p&gt;Esse plugin é responsável por usar nosso histórico de comandos para sugerir qual proximo comando você deseja usar e autocompleta o comado quando usamos TAB ou seta direita. Para instalar executamos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora adicionamos os caminho do plugin em nosso arquivo &lt;code&gt;/.zshrc&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feche e abar novamente o terminal para usar o plugin&lt;/p&gt;

&lt;h3&gt;
  
  
  zsh-syntax-highlighting
&lt;/h3&gt;

&lt;p&gt;Esse plugin é responsável dar realce/cores nos comandos, diretórios e arquivos no sistema no terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"source &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="p"&gt;(q-)PWD&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZDOTDIR&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para ativar o plugin em nosso Shell executamos o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;source&lt;/span&gt; ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Docker
&lt;/h1&gt;

&lt;p&gt;Agora vamos pra instalação que deu mais trabalho para realizar, vale lembrar que estou usando WSL2 com docker nativo rodando na própria distro linux. Então caso seja usuário do &lt;strong&gt;&lt;a href="https://www.docker.com/products/docker-desktop/" rel="noopener noreferrer"&gt;docker desktop&lt;/a&gt;&lt;/strong&gt; acho que este passo não seja necessário. Esses dois artigos aqui me ajudaram muito nessa configuração.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/bowmanjd/install-docker-on-windows-wsl-without-docker-desktop-34m9"&gt;Install Docker on Windows (WSL) without Docker Desktop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.appsloveworld.com/docker/100/87/docker-in-wsl2-alpine-without-docker-desktop" rel="noopener noreferrer"&gt;DOCKER IN WSL2 ALPINE WITHOUT DOCKER DESKTOP-DOCKER&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inicialmente atualizamos o sistema pelo comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apk upgrade &lt;span class="nt"&gt;-U&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;agora instalamos o docker&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apk add docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;feito isso vamos adicionar nosso usuário ao grupo docker para não ser necessário usar &lt;strong&gt;sudo docker&lt;/strong&gt; toda vez que quisermos usa-lo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;addgroup &lt;span class="nv"&gt;$USER&lt;/span&gt; docker  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;precisamos definir um ID para nosso grupo docker que deve ser um valor acima de 1000 e menor que 65534, para ver quais ids já estão atribuídos a grupos use o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;getent group | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;: &lt;span class="nt"&gt;-f3&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'^[0-9]{4}'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;escolhido o ID agora podemos atribuir ao grupo docker de duas maneiras usando o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'s/^\(docker:x\):[^:]\+/\1:&amp;lt;ID&amp;gt;/'&lt;/span&gt; /etc/group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ou caso tenha instalado o shadow&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apk add shadow
&lt;span class="nb"&gt;sudo &lt;/span&gt;groupmod &lt;span class="nt"&gt;-g&lt;/span&gt; &amp;lt;ID&amp;gt; docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto temos o docker instalado em sua distro&lt;/p&gt;

&lt;h2&gt;
  
  
  Iniciando o docker
&lt;/h2&gt;

&lt;p&gt;No alpine Linux foi bem tenso até encontrar uma configuração que fizesse isso funcionar corretamente, foi aí que encontrei o comando que adiciona o serviço do docker a execução padrão&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rc-update add docker default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora para iniciar o docker temos que fazer o comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;openrc default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;para finalizar a execução do docker usamos o mesmo comando do ubuntu&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;service docker stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;se desejar iniciar novamente usamos o mesmo comando do ubuntu também&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;service docker start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;o problema é que para executar o serviço pela primeira vez somos obrigados a usar o &lt;strong&gt;sudo openrc default&lt;/strong&gt; a solução para esse impasse é usar ALIAS&lt;/p&gt;

&lt;h3&gt;
  
  
  ALIAS
&lt;/h3&gt;

&lt;p&gt;Alias são  apelidos que damos aos nossos comando de terminal com objetivo de torna-los mais simples e para isso precisamos editar o nosso arquivo &lt;code&gt;.zshrc&lt;/code&gt; ou criar um arquivo &lt;code&gt;.zshrc_aliases&lt;/code&gt;  em separado somente com seus alias. Vou optar pela segunda opção pois em uma nova instalação do sistema teremos somente que referenciar o arquivo novamente.&lt;/p&gt;

&lt;p&gt;Iniciemos editando nosso arquivo &lt;code&gt;.zshrc&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo  &lt;/span&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nesse arquivo vamos adicionar o caminho, caso exista, para nosso arquivo de aliases&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; ~/.zshrc_aliases &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
      &lt;span class="nb"&gt;.&lt;/span&gt; ~/.zshrc_aliases
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;agora vamos criar nosso aquivo de aliases e adicionar nossos apelidos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano ~/.zshrc_aliases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meu arquivo ficou assim, defini &lt;strong&gt;docker-init&lt;/strong&gt; para toda vez que iniciar os sistema e precisar ligar o docker&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#Config for Docker&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;docker-init&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'sudo openrc default'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;docker-start&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'sudo service docker start'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;docker-stop&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'sudo service docker stop'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;agora para garantir o funcionamento usamos o comando &lt;strong&gt;source&lt;/strong&gt; para recarregar nossos arquivos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc_aliases
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;para realizar a testagem basta executar&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-init
docker run --rm hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se sua saída obtiver o &lt;strong&gt;Hello from dorcker!&lt;/strong&gt; sua configuração está completa. Na parte 2 realizaremos a configuração do Tmux e neovim&lt;/p&gt;

</description>
      <category>linux</category>
      <category>tutorial</category>
      <category>neovim</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Xdebug em Docker usando VScode</title>
      <dc:creator>Wesley Gonçalves </dc:creator>
      <pubDate>Tue, 02 May 2023 01:25:08 +0000</pubDate>
      <link>https://dev.to/wesleyotio/xdebug-em-docker-usando-vscode-31im</link>
      <guid>https://dev.to/wesleyotio/xdebug-em-docker-usando-vscode-31im</guid>
      <description>&lt;h1&gt;
  
  
  Configurando Xdebug em containers Docker
&lt;/h1&gt;

&lt;p&gt;Realizar debugs em código PHP pode ser uma tarefa ardua muitas vezes, mas ferramentas como o &lt;a href="https://xdebug.org" rel="noopener noreferrer"&gt;Xdebug&lt;/a&gt; podem tornar esse trabalho mais fácil uma vez que permite realizar o monitoramento da aplicação durante o desenvolvimento diminuindo a propagação de erros para a produção.&lt;/p&gt;

&lt;h2&gt;
  
  
  Indice
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;DockerFile e docker-compose&lt;/li&gt;
&lt;li&gt;VsCode&lt;/li&gt;
&lt;li&gt;Logs&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  DockerFile e docker-compose
&lt;/h1&gt;

&lt;p&gt;Inicialmente é importante entender a nossa estrutura dentro do diretório &lt;strong&gt;.docker&lt;/strong&gt;, nele temos os arquivos e configuração do servidor web(NGIN-X), banco de dados(MySQL) e do PHP. Esses arquivos serão copiados para dentro dos containers da aplicação.&lt;br&gt;
 ## PHP&lt;br&gt;
 Aqui temos a configuração necessária para habilitar o Xdebug no container.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;xdebug&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;zend_extension&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;extensions&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;zts&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;20210902&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;xdebug&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt; &lt;span class="c1"&gt;//instala a extensão caso o docker não funcione&lt;/span&gt;
    &lt;span class="n"&gt;xdebug&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt; &lt;span class="c1"&gt;// modo de execusão do xdebug&lt;/span&gt;
    &lt;span class="n"&gt;xdebug&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start_with_request&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;trigger&lt;/span&gt; &lt;span class="c1"&gt;// faz o rastreamento de função, depuração e coleta de estatísticas de lixo. &lt;/span&gt;
    &lt;span class="n"&gt;xdebug&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;idekey&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;VSCODE&lt;/span&gt; &lt;span class="c1"&gt;// id para identificar nossa aplicação   &lt;/span&gt;
    &lt;span class="n"&gt;xdebug&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client_host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;internal&lt;/span&gt; &lt;span class="c1"&gt;// conecta nosso host ao host do docker&lt;/span&gt;
    &lt;span class="n"&gt;xdebug&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;logs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;xdebug&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="c1"&gt;// salva os logs durante a execução &lt;/span&gt;
    &lt;span class="n"&gt;xdebug&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client_port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;9003&lt;/span&gt; &lt;span class="c1"&gt;// porta usada para transmissão das informações &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como o parâmetro &lt;strong&gt;&lt;em&gt;xdebug.start_with_request&lt;/em&gt;&lt;/strong&gt; está como trigger ela precisa da extensão &lt;a href="https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc" rel="noopener noreferrer"&gt;Xdebug helper&lt;/a&gt; no navegador para que toda Url acessada dispare o monitoramento do xdebug. Também é necessário configurar no Xdebug helper uma chave que identifica a IDE que estamos utilizando. Ao selecionar as &lt;strong&gt;&lt;em&gt;preferências&lt;/em&gt;&lt;/strong&gt;  sua chave deve ser a mesma que está escrita em &lt;strong&gt;&lt;em&gt;xdebug.idekey&lt;/em&gt;&lt;/strong&gt; você encontrará a seguinte imagem.&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%2F3hbbmmwngktnrald8q4b.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%2F3hbbmmwngktnrald8q4b.png" alt="Image description" width="570" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker-compose
&lt;/h2&gt;

&lt;p&gt;Em seu arquivo com &lt;code&gt;docker-compose.yml&lt;/code&gt; garanta que o serviço que esteja rodando o PHP tenha essa configuração.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;extra_hosts:
      - &lt;span class="s2"&gt;"host.docker.internal:host-gateway"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso dá a certeza que seu host do sistema tenha acesso ao que é processado nos containers, essas informações estarão disponíveis para consulta em sua IDE.   &lt;/p&gt;

&lt;h1&gt;
  
  
  VsCode
&lt;/h1&gt;

&lt;p&gt;Agora no VScode precisamos habilitar a extensão &lt;a href="https://marketplace.visualstudio.com/items?itemName=xdebug.php-debug" rel="noopener noreferrer"&gt;PHP Xdebug&lt;/a&gt; quando for executada pela primeira vez ela irá criar um diretório de nome &lt;strong&gt;.vscode&lt;/strong&gt; e dentro dele um arquivo de nome &lt;strong&gt;&lt;em&gt;launch.json&lt;/em&gt;&lt;/strong&gt; é neste arquivo que é dado o caminho das pedras para o vscode acessar as informações/logs gerados pelo Xdebug&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;"configurations"&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;"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;"Listen for Xdebug"&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="s2"&gt;"php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"launch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"hostname"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.0.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//aqui&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;temos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;garantia&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;estamos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;acessando&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;da&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;aplicação&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"log"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9003&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="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;mesma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;definida&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;xdebug.client_port&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"pathMappings"&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;"/var/www"&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="s2"&gt;"${workspaceFolder}"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//rota&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;onde&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;nosso&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;projeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;se&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;encontra&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;dentro&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;container&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;"xdebugSettings"&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;"max_children"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"max_data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"show_hidden"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&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;p&gt;Con toda essa estrutura montada agora temos que testar se nossa configuração funciona, para isso criamos um diretório de nome &lt;strong&gt;public&lt;/strong&gt; com um arquivo ***index.php e dentro dele o seguinte código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt; &lt;span class="nb"&gt;phpinfo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="k"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao rodar seu projeto no local você terá todas as informações sobre o comportamento do xdebug como mostrado na imagem a seguir.&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%2Fxzgo7ja6m2wmv2htagvi.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%2Fxzgo7ja6m2wmv2htagvi.png" alt="Image description" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se nenhuma mensagem de erro dentro de diagnostic log for apresentada então sua configuração de completa e agora pode se garantir debugando seu projeto.&lt;/p&gt;

&lt;h1&gt;
  
  
  Logs
&lt;/h1&gt;

&lt;p&gt;Criamos também diretórios de nome &lt;strong&gt;storage/logs&lt;/strong&gt; somente com o objetivo de armazenar todos os logs criados pelo xdebug durante o processo de debug.&lt;/p&gt;

&lt;h1&gt;
  
  
  Algumas referências
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Wesleyotio/config-xdebug-in-docker/tree/main" rel="noopener noreferrer"&gt;Repositório para teste&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=kbq3FJOYmQ0&amp;amp;list=LL&amp;amp;index=7&amp;amp;t=788s" rel="noopener noreferrer"&gt;XDebug e Docker - Configurar PHPStorm e VSCode para funcionar com XDebug usando Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/getjv/xdebug-3-docker-laravel-vscode-52bi"&gt;Xdebug 3, Docker, Laravel, VScode&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>php</category>
      <category>tutorial</category>
      <category>docker</category>
      <category>debug</category>
    </item>
    <item>
      <title>Configurando o WSL com o Ubuntu 22.04 + ZSH</title>
      <dc:creator>Wesley Gonçalves </dc:creator>
      <pubDate>Sat, 18 Feb 2023 20:27:23 +0000</pubDate>
      <link>https://dev.to/wesleyotio/configurando-o-wsl-com-o-ubuntu-2204-zsh-527o</link>
      <guid>https://dev.to/wesleyotio/configurando-o-wsl-com-o-ubuntu-2204-zsh-527o</guid>
      <description>&lt;p&gt;O WSL é uma excelente alternativa para desenvolvedores que querem possuir todas as vantagens do Windows e ainda manter toda a produtividade que o ambiente Linux pode oferecer.&lt;/p&gt;

&lt;p&gt;Esta postagem é uma versão customizada do artigo da &lt;a href="https://fullcycle.com.br" rel="noopener noreferrer"&gt;Fullcycle&lt;/a&gt; que está nesse link: &lt;a href="https://github.com/codeedu/wsl2-docker-quickstart" rel="noopener noreferrer"&gt;Guia rápido do WSL2 + Docker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Também vou deixar o aqui os videos do youtube  e postagens que me ajudaram a fazer esta configuração.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=g4HKttouVxA&amp;amp;list=LL&amp;amp;index=113&amp;amp;t=4402s" rel="noopener noreferrer"&gt;A forma mais produtiva para utilizar Docker no Windows e WSL2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=a49gYcBwITc&amp;amp;list=LL&amp;amp;index=112&amp;amp;t=7661s" rel="noopener noreferrer"&gt;Ambiente perfeito de Docker com VSCode e WSL2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=sjrW74Hx5Po" rel="noopener noreferrer"&gt;O Melhor Setup Dev com Arch e WSL2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@gutoinfo.ribeiro/instalando-e-configurando-o-zsh-no-ubuntu-20-04-4ef8a2499ed5" rel="noopener noreferrer"&gt;Instalando e Configurando o ZSH no Ubuntu 20.04&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Índice
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Configurando o WSL com o Ubuntu 22.04 + ZSH&lt;/li&gt;
&lt;li&gt;Índice&lt;/li&gt;
&lt;li&gt;
Instalando o WSL2

&lt;ul&gt;
&lt;li&gt;Para Windows 11&lt;/li&gt;
&lt;li&gt;Para Windows 10&lt;/li&gt;
&lt;li&gt;Configuração de recursos de maquina no WSL&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Escolhendo uma distro Linux&lt;/li&gt;

&lt;li&gt;Usando docker nativo&lt;/li&gt;

&lt;li&gt;Habilitando o VScode&lt;/li&gt;

&lt;li&gt;

ZSH

&lt;ul&gt;
&lt;li&gt;Nerds Fonts&lt;/li&gt;
&lt;li&gt;powerlevel10k&lt;/li&gt;
&lt;li&gt;plugins zsh&lt;/li&gt;
&lt;li&gt;zsh-autosuggestions&lt;/li&gt;
&lt;li&gt;zsh-syntax-highlighting&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Instalando o WSL2
&lt;/h1&gt;

&lt;p&gt;Antes de iniciar a instalação do WSL2 propriamente dita acredito que valha muito a pena instalar antes o &lt;a href="https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701?hl=pt-br&amp;amp;gl=br" rel="noopener noreferrer"&gt;windows terminal&lt;/a&gt; por ser um emulador de terminal melhorar muito nossa produtividade alem de ser altamente customizável. Pode ser encontrado diretamente na Microsoft Store procurando por &lt;strong&gt;windows terminal&lt;/strong&gt;, também será mostrado o windows terminal preview que é a versão beta que recebe as atualizações mais recentes.&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%2Fikc6g19tz8upf7tbs63x.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%2Fikc6g19tz8upf7tbs63x.png" alt="Image description" width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora que temos o windows terminal instalado podemos executa-lo em modo &lt;strong&gt;administrador&lt;/strong&gt;, de acordo com a documentação mais atualizada, você deve rodar o  comando.&lt;/p&gt;

&lt;h2&gt;
  
  
  Para Windows 11
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wsl &lt;span class="nt"&gt;--install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O processo pode ser um pouco demorado e por padrão no windows 11 a distro Ubuntu é instalada, para especificar qual distro você deseja instalar primeiro precisa listar as disponíveis usando o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wsl &lt;span class="nt"&gt;--list&lt;/span&gt; &lt;span class="nt"&gt;--online&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o &lt;strong&gt;resultado&lt;/strong&gt; apresentado no terminal será este:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; NAME               FRIENDLY NAME
Ubuntu             Ubuntu
Debian             Debian GNU/Linux
kali-linux         Kali Linux Rolling
SLES-12            SUSE Linux Enterprise Server v12
SLES-15            SUSE Linux Enterprise Server v15
Ubuntu-18.04       Ubuntu 18.04 LTS
Ubuntu-20.04       Ubuntu 20.04 LTS
Ubuntu-22.04       Ubuntu 22.04 LTS
OracleLinux_8_5    Oracle Linux 8.5
OracleLinux_7_9    Oracle Linux 7.9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Escolhida a distro executamos o comando com o nome igual ao apresentado na lista acima.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; wsl &lt;span class="nt"&gt;--install&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; Ubuntu-22.04 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Para Windows 10
&lt;/h2&gt;

&lt;p&gt;Aqui as etapas mudam um pouco, inicialmente vamos rodar o seguinte comando para habilitar o WSL, sempre em modo &lt;strong&gt;administrador&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em seguida habilitamos a virtualização&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em seguida &lt;strong&gt;reiniciamos&lt;/strong&gt; o sistema.&lt;/p&gt;

&lt;p&gt;Agora precisamos baixar o &lt;a href="https://learn.microsoft.com/pt-br/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package" rel="noopener noreferrer"&gt;pacote de atualização&lt;/a&gt; do kernel do linux e executa-lo. Com a instalação concluída com sucesso vamos tornar a versão do WSL2 como a padrão.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wsl &lt;span class="nt"&gt;--set-default-version&lt;/span&gt; 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configuração de recursos de maquina no WSL
&lt;/h2&gt;

&lt;p&gt;Em termos de recurso o WSL é um lobo feroz, podendo consumir por padrão os seguintes números.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quase totalmente o processamento disponível&lt;/li&gt;
&lt;li&gt;80% da memória RAM&lt;/li&gt;
&lt;li&gt;25% do SWAP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para limitar esse consumo basta criar o arquivo &lt;strong&gt;.wslconfig&lt;/strong&gt; em sua pasta raiz do usuário &lt;strong&gt;C:\Users\nameuser&lt;/strong&gt; como demostrado a seguir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;wsl2]
&lt;span class="nv"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3GB
&lt;span class="nv"&gt;processors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4
&lt;span class="nv"&gt;swap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4GB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Escolhendo uma distro Linux
&lt;/h1&gt;

&lt;p&gt;Abra a &lt;a href="https://aka.ms/wslstore" rel="noopener noreferrer"&gt;Microsoft store&lt;/a&gt; e escolha sua distro.&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%2Fccxt5yxs56qngacgby4z.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%2Fccxt5yxs56qngacgby4z.png" alt="Image description" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Selecione a que mais te agradar clique em instalar, nesse caso selecionaremos a 22.04 LTS&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%2F51yktdaoz26zxfvdvumf.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%2F51yktdaoz26zxfvdvumf.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Terminada a instalação da distro ao inicia-la teremos a seguinte imagem solicitando a criação de um usuário para o sistema. Com isso temos certeza que nosso WSL2 está funcionando plenamente.&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%2Fv5a4o7562hjrdbnjdold.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%2Fv5a4o7562hjrdbnjdold.png" alt="Image description" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com sua conta criada com sucesso está será sua visualização, agora oficialmente você é um usuário do Linux no Windows. Parabéns!!!&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%2Fsto0fktw2saw1sgc6013.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%2Fsto0fktw2saw1sgc6013.png" alt="Image description" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PS:&lt;/strong&gt; Caso nenhuma das distro apresentadas seja do seu agrado é possível instalar qualquer distro, mas como o foco aqui é no Ubuntu deixo somente o link para quem quiser se aventurar. &lt;a href="https://learn.microsoft.com/pt-br/windows/wsl/use-custom-distro" rel="noopener noreferrer"&gt;Importar qualquer distribuição do Linux a ser usada com o WSL&lt;/a&gt;   &lt;/p&gt;

&lt;h1&gt;
  
  
  Usando docker nativo
&lt;/h1&gt;

&lt;p&gt;Além de reduzir o consumo de recursos drasticamente em relação ao docker desktop temos o controle total dentro do Linux não dependendo de um terceiro. Neste &lt;a href="https://docs.docker.com/engine/install/" rel="noopener noreferrer"&gt;link&lt;/a&gt; é explicado como fazer a instalação em outras distros Linux fora o Ubuntu.&lt;/p&gt;

&lt;p&gt;Inicialmente temos que remover todas as versões antigas, mas isso é só mais uma garantia do que uma necessidade uma vez que estamos instalando o sistema&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get remove docker docker-engine docker.io containerd runc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No meu caso a saída foi essa pois a distro já tinha docker e docker-engine instaladas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package &lt;span class="s1"&gt;'docker.io'&lt;/span&gt; is not installed, so not removed
E: Unable to locate package docker
E: Unable to locate package docker-engine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora faremos a atualização do sistema seguida da ativação dos pacotes com HTTPS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    ca-certificates &lt;span class="se"&gt;\&lt;/span&gt;
    curl &lt;span class="se"&gt;\&lt;/span&gt;
    gnupg &lt;span class="se"&gt;\&lt;/span&gt;
    lsb-release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Concluída essa etapa vamos habilitar o docker para uso no Ubuntu&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; 0755 &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/apt/keyrings
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /etc/apt/keyrings/docker.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para configurar o repositório usamos o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"deb [arch=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;dpkg &lt;span class="nt"&gt;--print-architecture&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
  &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsb_release &lt;span class="nt"&gt;-cs&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; stable"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rodamos a atualização mais uma vez.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estamos quase lá, só falta realizar a instalação do pacote de fato usando comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deu certo! agora você possui o docker instalado, precisamos habilitar nosso usuário para a ferramenta.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora ligamos o docker usando o comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;service docker start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;OBS:&lt;/strong&gt; sempre use o comando acima para iniciar/ligar o docker no wsl.&lt;/p&gt;

&lt;p&gt;E testamos usando o comando de hello world do docker&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Habilitando o VScode
&lt;/h1&gt;

&lt;p&gt;Eu vou admitir que esteja usando o VScode, mas caso esteja usando outra IDE vou deixar o &lt;a href="https://github.com/codeedu/wsl2-docker-quickstart#1---instalar-o-docker-com-docker-engine-docker-nativo" rel="noopener noreferrer"&gt;link&lt;/a&gt; do tutorial da fullcycle que explica como fazer isso, show! No VScode basta realizar a instalação do pacote de extensões &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack" rel="noopener noreferrer"&gt;Remote Development&lt;/a&gt;, feito isso você verá o ícone do pacote no canto inferior esquerdo do VScode, clicando lá essa será a imagem.&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%2F2ca450721ckbrtohlalq.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%2F2ca450721ckbrtohlalq.png" alt="Image description" width="747" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Selecione a segunda opção para selecionar em qual distro instalada no WSL deseja que o VScode seja usada e pronto agora temos a IDE funcionado dentro do Linux via WSL2. E agora no canto inferior esquerdo temos indicando nossa distro instalada como no exemplo da imagem abaixo.&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%2Fsa3482qty76mqx0bye2g.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%2Fsa3482qty76mqx0bye2g.png" alt="Image description" width="173" height="28"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OBS:&lt;/strong&gt; Para abrir a IDE no WSL basta dar o comando&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;code .&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
 E na primeira vez que fizer isso ele fara um download e instalação da versão mais recente, também é importante mencionar que algumas de suas extensões terão que ser instaladas novamente.   &lt;/p&gt;
&lt;h1&gt;
  
  
  ZSH
&lt;/h1&gt;

&lt;p&gt;Por padrão temos o &lt;strong&gt;bash&lt;/strong&gt; como shell instalado no ubuntu, mas para caso queira listar todos os shells disponíveis basta usar o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo cat&lt;/span&gt; /etc/shells
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado é uma saída como essa.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# /etc/shells: valid login shells&lt;/span&gt;
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iniciamos atualizando o sistema&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito isso fazemos a instalação do &lt;strong&gt;zsh&lt;/strong&gt; pelo comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;zsh &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;OBS:&lt;/strong&gt; o “-y” no final do comando é para não ter confirmação antes da instalação.&lt;/p&gt;

&lt;p&gt;Para verificar a versão instalada  usamos o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zsh &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Antes de definir o zsh como shell padrão temos que saber onde o arquivo binário se encontra usando o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;whereis zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa é a saída apresentada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zsh: /usr/bin/zsh /usr/lib/x86_64-linux-gnu/zsh /etc/zsh /usr/share/zsh /usr/share/man/man1/zsh.1.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto agora que temos o caminho basta executar&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-s&lt;/span&gt; /usr/bin/zsh &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;whoami&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito isso, feche o terminal e abra novamente e para ter certeza que está usando o ZSH execute.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$SHELL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sua saída será o caminho do binário do shell padrão, no nosso caso.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/usr/bin/zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Nerds Fonts
&lt;/h2&gt;

&lt;p&gt;Antes de seguir com nossa configuração precisamos instalar uma fonte do tipo &lt;a href="https://www.nerdfonts.com" rel="noopener noreferrer"&gt;nerd fonts&lt;/a&gt; que nada mais são fonts que possuem ícones incorporados, então vamos fazer o download de uma delas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Regular.ttf&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Bold.ttf&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Italic.ttf&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Bold Italic.ttf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feito isso agora instale as fontes e feche e abra novamente o terminal e em configurações -&amp;gt; padrões -&amp;gt; fonts selecione &lt;em&gt;MesloLGS NF&lt;/em&gt;. Nas configurações do vscode escreva  &lt;strong&gt;&lt;em&gt;terminal.integrated.fontFamily&lt;/em&gt;&lt;/strong&gt; e selecione a mesma fonte.&lt;/p&gt;

&lt;p&gt;O terminal integrado do VScode que roda no WSL não vai reconhecer essa font, pois a IDE está rodando no linux e a font está somente no windows, para corrigir isso vamos fazer assim.&lt;/p&gt;

&lt;p&gt;Criamos a pasta onde nossa font vão ficar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo mkdir&lt;/span&gt;  /usr/share/fonts/meslolgsnf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora copiamos nossas fonts para este diretório, mas para localizar nossas fonts baixadas no windows a partir do wsl fazemos acesso ao diretório  &lt;strong&gt;&lt;em&gt;/mnt/c&lt;/em&gt;&lt;/strong&gt; que nada mais é do que nosso disco C:/ visto a partir do Linux. Basta agora navegar pelos diretórios até onde fica os arquivos das fonts, no meu caso ficou assim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;cd&lt;/span&gt; /mnt/c/Users/&amp;lt;nome_usuario&amp;gt;/Downloads
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora copiamos &lt;strong&gt;&lt;em&gt;cada uma&lt;/em&gt;&lt;/strong&gt; das fonts pelo comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo cp &lt;/span&gt;MesloLGS&lt;span class="se"&gt;\ &lt;/span&gt;NF&lt;span class="se"&gt;\ &lt;/span&gt;Italic.ttf /usr/share/fonts/meslolgsnf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tudo isso foi necessário para agora instalar o &lt;a href="https://github.com/romkatv/powerlevel10k" rel="noopener noreferrer"&gt;powerlevel10k&lt;/a&gt; que é um tema para o shell ZSH e deixar nosso terminal mais bonito e performático quando somado aos plugins.&lt;/p&gt;

&lt;h2&gt;
  
  
  powerlevel10k
&lt;/h2&gt;

&lt;p&gt;Fazendo uso da instalação manual usamos o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  git clone &lt;span class="nt"&gt;--depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'source ~/powerlevel10k/powerlevel10k.zsh-theme'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feche o terminal e abra novamente, assim você inicia a configuração do tema, siga as instruções e customize seu terminal da forma que mais te agrada. Caso queira mudar o estilo apresentado basta usar o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  p10k configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e fazer o processo novamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  plugins zsh
&lt;/h2&gt;

&lt;p&gt;Bonito o terminal já está, mas precisamos deixar performático, pra isso vamos usar os seguintes plugins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;zsh-autosuggestions&lt;/li&gt;
&lt;li&gt;zsh-syntax-highlighting&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  zsh-autosuggestions
&lt;/h3&gt;

&lt;p&gt;Esse plugin é responsável por usar nosso histórico de comandos para sugerir qual próximo comando você deseja usar e auto completa o comado quando usamos TAB ou seta direita. Para instalar executamos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora adicionamos os caminho do plugin em nosso arquivo &lt;code&gt;/.zshrc&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feche e abar novamente o terminal para usar o plugin&lt;/p&gt;

&lt;h3&gt;
  
  
  zsh-syntax-highlighting
&lt;/h3&gt;

&lt;p&gt;Esse plugin é responsável dar realce/cores nos comandos, diretórios e arquivos no sistema no terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"source &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="p"&gt;(q-)PWD&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZDOTDIR&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para ativar o plugin em nosso Shell executamos o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;source&lt;/span&gt; ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E é isso seu ambiente está totalmente pronto! Boa sorte!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>tutorial</category>
      <category>wsl</category>
      <category>programming</category>
    </item>
    <item>
      <title>Uma abordagem para o Laravel Horizon</title>
      <dc:creator>Wesley Gonçalves </dc:creator>
      <pubDate>Fri, 20 Jan 2023 02:39:50 +0000</pubDate>
      <link>https://dev.to/wesleyotio/uma-abordagem-para-o-laravel-horizon-4n91</link>
      <guid>https://dev.to/wesleyotio/uma-abordagem-para-o-laravel-horizon-4n91</guid>
      <description>&lt;p&gt;Se sua aplicação Laravel faz uso de filas e do &lt;a href="https://redis.io/docs/about/" rel="noopener noreferrer"&gt;redis&lt;/a&gt;, acrescentar o &lt;a href="https://laravel.com/docs/master/horizon" rel="noopener noreferrer"&gt;Laravel Horizon&lt;/a&gt; pode ser uma opção interessante para trazer mais performasse e melhorar o gerenciamento dos jobs processados em sua aplicação.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OBS:&lt;/strong&gt; Nesta abordagem fizemos uso do Laravel 6.0 e Horizon 3.7.2&lt;/p&gt;

&lt;h2&gt;
  
  
  Dividir para conquistar
&lt;/h2&gt;

&lt;p&gt;Ninguém melhor que você para saber quais filas possuem um  maior fluxo de entrada e quais possuem maior processamento, mas caso não tenha essa informação isso é só mais um motivo para usar o horizon, uma vez que ele gera métricas que são apresentadas em um dashboard simples e intuitivo.&lt;/p&gt;

&lt;p&gt;Para tirar o máximo de proveito do balanceamento do horizon é necessário agrupar suas filas da melhor forma possível, caso ainda não tenha entendido bem como esse balanceamento funciona sugiro que leia esse artigo do &lt;a href="https://medium.com/@zechdc/laravel-horizon-number-of-workers-and-job-execution-order-21b9dbec72d7" rel="noopener noreferrer"&gt;Zechariah Campbell&lt;/a&gt; que explica de maneira bem detalhada.&lt;/p&gt;

&lt;p&gt;Acredito que o auto balanceamento seja o modelo ideal para sistemas em que as filas tem picos de processamento em certos momentos do dia, assim mais processos são destinados para a fila com mais jobs em espera afim de zera ou deixa o número de jobs em espera próximo aos das demais filas.&lt;/p&gt;

&lt;p&gt;Por padrão nosso arquivo &lt;strong&gt;&lt;em&gt;config/horizon.php&lt;/em&gt;&lt;/strong&gt; o array de environments tem um formato semelhante ao da imagem a seguir.&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%2Fhc41qfvrwqkfu1l3wpxo.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%2Fhc41qfvrwqkfu1l3wpxo.png" alt="Image description" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se por exemplo as filas &lt;strong&gt;&lt;em&gt;books&lt;/em&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;em&gt;images&lt;/em&gt;&lt;/strong&gt; consomem muito tempo de processamento e possuem 500 jobs em espera e as demais filas estão zeradas, ambas terão mais processos para despacharem seus jobs. Em um dado momento a fila &lt;strong&gt;&lt;em&gt;import&lt;/em&gt;&lt;/strong&gt;, que consome pouco tempo de processamento, tem um pico e fica com 3000 jobs em espera, neste momento parte dos processos sao descolocados para &lt;strong&gt;&lt;em&gt;import&lt;/em&gt;&lt;/strong&gt; afim de reduzi-la o quanto antes.&lt;/p&gt;

&lt;p&gt;O problema na situação é que o balanceamento tornará a execução das filas &lt;strong&gt;&lt;em&gt;books&lt;/em&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;em&gt;images&lt;/em&gt;&lt;/strong&gt; mais lento ainda por ter que deslocar processos para a fila &lt;strong&gt;&lt;em&gt;import&lt;/em&gt;&lt;/strong&gt;. Para resolver isso devemos dividir nosso supervisor-1 em dois, um responsável por executar os jobs das filas com tempo de processamento e quantidade elementos em espera menor e outro com as filas de maior tempo de processamento e quantidades de jobs em espera, como mostrado na imagem a seguir.&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%2Fyo79nj2dhocik59cbhs6.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%2Fyo79nj2dhocik59cbhs6.png" alt="Image description" width="800" height="690"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesse novo modelo as filas &lt;strong&gt;&lt;em&gt;default&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;mail&lt;/em&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;em&gt;import&lt;/em&gt;&lt;/strong&gt; terão pelo menos um processo cada e a soma de todos os processos em todas as filas é de no máximo quatro, aqui também definimos o timeout para estas filas que é de 240 segundos com tolerância de 3 tentativas antes de falha. Essa estrutura garante que o balanceamento irá distribuir os processos disponíveis, de acordo com a necessidade, somente as filas descritas.&lt;/p&gt;

&lt;p&gt;As demais filas terão mais processos disponíveis com maior timeout, evitando que o balanceamento tire processos de quem já não tem tanto processamento e as filas tenham muitos jobs em estado espera comprometendo o funcionamento da aplicação.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Definindo o a conexão com o Redis&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;O arquivo &lt;strong&gt;&lt;em&gt;queue.php&lt;/em&gt;&lt;/strong&gt; é responsável por definir como o dever ser a conexão do banco de dados com as filas no Laravel, neste arquivo definimos como o Redis deve se conectar as filas monitoradas no Horizon, o arquivo terá o seguinte formato. Observe que no paramentro &lt;strong&gt;&lt;em&gt;retry_after&lt;/em&gt;&lt;/strong&gt; defini quanto tempo a conexão ficará aberta.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="s1"&gt;'connections'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="c1"&gt;//outras conexões&lt;/span&gt;
    &lt;span class="s1"&gt;'redis'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'driver'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'redis'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'connection'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'default'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'queue'&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'default'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'retry_after'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  O poder das tags
&lt;/h2&gt;

&lt;p&gt;De todas a vantagens apresentadas pelo uso do Laravel Horizon, para mim a melhor de todas é o uso de tags de monitoramento. Com elas podemos supervisionar a fila, o job e o model que foram executados permitindo saber qual teve sucesso ou falha, numero de execuções e a qual fila pertence aquele job.&lt;/p&gt;

&lt;p&gt;Por padrão o Horizon atribui uma tag para cada job que recebe um model, por exemplo se temos a fila import que é responsável por adicionar novos livros ao sistema, para cada livro inserido na fila o cria a seguinte tag &lt;strong&gt;'App/Book:id'&lt;/strong&gt; onde &lt;strong&gt;id&lt;/strong&gt; indica o índice do livro em sua tabela no banco de dados. &lt;/p&gt;

&lt;p&gt;Essa comportamento tem seu valor, mas somente em sistemas  onde toda fila recebe um model especifico, para casos mais complexos eu prefiro criar tags manualmente, pois assim é possível ter uma visão ampla do funcionamento das filas/jobs e encontrar falhas em um curto prazo.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Uma abordagem para tags&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Para criar tags manualmente em cada job você deve criar uma função publica de nome &lt;strong&gt;&lt;em&gt;tags&lt;/em&gt;&lt;/strong&gt; que deve retornar um array de strings, isso mesmo um job pode possuir uma ou mais tags, tornando sua busca mais ampla.&lt;/p&gt;

&lt;p&gt;Imagine que em um sistema de biblioteca exista um job de nome &lt;strong&gt;&lt;em&gt;SendReturnAlert&lt;/em&gt;&lt;/strong&gt; responsável por enviar um email de alerta pra que os usuários que tenham que devolver livros nos próximos 3 dias sua função construtora teria o seguinte formato.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$bookId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$userId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;bookId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$bookId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O padrão que uso no array de tags é colocar o nome do job como primeiro elemento seguido dos ids dos models associados e colocar nome da fila que job é processado por ultimo, para este exemplo teremos o seguinte resultado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'SendReturnAlert'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'User:'&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'Book:'&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;bookId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'default'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A partir de agora dentro do Horizon podemos pesquisar jobs processados com exito ou não que tenham sua origem no job &lt;strong&gt;&lt;em&gt;SendReturnAlert&lt;/em&gt;&lt;/strong&gt;, no usuário, no livro ou na fila. Assim em caso de falha podemos identificar se problema tem origem na escrita do job, em algum dado do usuário, em alguma informação do livro ou na fila.    &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Usando commands&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Em muitas situações precisamos reprocessar jobs falhados, na própria interface do laravel horizon é possível fazer a ação manualmente, o que não é muito viável, mas pode resolver casos muito pontuais. Uma abordagem um pouco mais pratica e de fácil implementação é criar um &lt;a href="https://laravel.com/docs/6.x/artisan#writing-commands" rel="noopener noreferrer"&gt;&lt;strong&gt;Command&lt;/strong&gt;&lt;/a&gt; que acesse todos os jobs falhados e faça o reprocessamento.&lt;/p&gt;

&lt;p&gt;Algo que não foi mencionado aqui e precisa ser explicado é quanto a persistência dos dados armazenado no horizon,  no arquivo &lt;strong&gt;&lt;em&gt;config/horizon.php&lt;/em&gt;&lt;/strong&gt; quanto tempos ficará arquivado os jobs recentes, completados, falhados recentemente, falhados e monitorados. Temos a seguinte configuração padrão do sistema.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="s1"&gt;'trim'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;'recent'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'completed'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'recent_failed'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'failed'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'monitored'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O número aqui representa a duração em &lt;strong&gt;minutos&lt;/strong&gt; e pode ser customizado de acordo com a necessidade de sua aplicação, mas é importante que você saiba que quanto maior for esse valor, maior será o tamanho ocupado pelo disco do redis. Em casos estouro o horizon para de funcionar imediatamente comprometendo todo o funcionamento das filas e consequentemente da aplicação.&lt;/p&gt;

&lt;p&gt;Com o command criado mudamos sua assinatura para receber como parâmetro opcional o nome do job que queremos reprocessar, assim quando executamos o command sem ele &lt;strong&gt;todos&lt;/strong&gt; os jobs falhados serão reprocessados. Essa versão foi criada a partir do post do &lt;a href="https://kodeas.medium.com/programatically-retrying-failed-jobs-in-horizon-8acad3695b38" rel="noopener noreferrer"&gt;Kodeas&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt; &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$signature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'horizon:retry-failed-jobs {jobName?}'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em nossa função construtora recebemos &lt;strong&gt;JobRepository&lt;/strong&gt; como parâmetro, que nada mais é que a interface criada pelo Laravel Horizon para acessar todas as informações dos jobs processados por Horizon, este é o resultado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;JobRepository&lt;/span&gt; &lt;span class="nv"&gt;$jobs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;parent&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;jobs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$jobs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fazendo uso da interface obtemos o array de todos os jobs falhados e a partir daí podemos ter informações especificas de cada job como seu id, nome, fila que foi processado, data que foi falhado. Fica a seu critério escolher filtrar os jobs, aqui fiz preferencia por nome caso seja passado como parâmetro.&lt;/p&gt;

&lt;p&gt;Também fazemos uso da classe &lt;strong&gt;RetryFailedJob&lt;/strong&gt; para reprocessar o job falhado a partir de seu id e da função &lt;strong&gt;deleteFailed&lt;/strong&gt; para remover o job falhado como demonstrado no código a seguir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$jobName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'jobName'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$failedJobs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;jobs&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getFailed&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;


    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$jobName&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$failedJobs&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$failedJob&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"/&lt;/span&gt;&lt;span class="nv"&gt;$jobName&lt;/span&gt;&lt;span class="s2"&gt;/i"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$failedJob&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

                &lt;span class="nv"&gt;$id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$failedJob&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RetryFailedJob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
                &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;jobs&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;deleteFailed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; 
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$failedJobs&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$failedJob&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="nv"&gt;$id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$failedJob&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RetryFailedJob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;jobs&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;deleteFailed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;        
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>php</category>
      <category>laravel</category>
      <category>tutorial</category>
      <category>queues</category>
    </item>
    <item>
      <title>Configurando o Manjaro Linux</title>
      <dc:creator>Wesley Gonçalves </dc:creator>
      <pubDate>Wed, 12 Oct 2022 21:46:10 +0000</pubDate>
      <link>https://dev.to/wesleyotio/configurando-o-manjaro-linux-4p6g</link>
      <guid>https://dev.to/wesleyotio/configurando-o-manjaro-linux-4p6g</guid>
      <description>&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%2F7s93qlkwdsg12q1rxfw0.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%2F7s93qlkwdsg12q1rxfw0.png" alt="Image description" width="800" height="157"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Guia de configuração para distro Manjaro
&lt;/h2&gt;

&lt;p&gt;Atualmente estou utilizando esta distro e para auxiliar desenvolvedores, inclusive eu, na configuração deste ambiente e pra você que achou isso perdido na internet e não quer perder tempo segue o índice pra pular pro que realmente importa. 👇&lt;/p&gt;

&lt;p&gt;Índice&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Instalação do S.O

&lt;ul&gt;
&lt;li&gt;Site oficial&lt;/li&gt;
&lt;li&gt;Xfce,KDE,Gnome...&lt;/li&gt;
&lt;li&gt;Usando o Rufus&lt;/li&gt;
&lt;li&gt;Instalando o manjaro&lt;/li&gt;
&lt;li&gt;Pos-instalação do manjaro&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Conhecendo os gerenciadores de pacotes

&lt;ul&gt;
&lt;li&gt;Pacman&lt;/li&gt;
&lt;li&gt;Yay&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configurando o terminal e o VScode

&lt;ul&gt;
&lt;li&gt;Zsh&lt;/li&gt;
&lt;li&gt;Oh-my-zsh&lt;/li&gt;
&lt;li&gt;plugins&lt;/li&gt;
&lt;li&gt;Vscode&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Extras&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Instalação do S.O
&lt;/h2&gt;

&lt;p&gt;Acessando o site oficial do &lt;a href="https://manjaro.org/download/" rel="noopener noreferrer"&gt;manjaro&lt;/a&gt; você poderá escolher qual das interfaces gráficas do S.O deseja utilizar, para a maquina que configurei estou usando XFCE, mas o sistema possui tres oficiais XFCE,KDE e Gnome.&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%2F8uyvg4456fvr0gese7rs.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%2F8uyvg4456fvr0gese7rs.png" alt="Image description" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se você preferir existem varias opções desenvolvidas pela própria comunidade escolha a que melhor te agrada.&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%2Fgithub.com%2FWesleyotio%2Fmymanjaroconfig%2Ftree%2Fmain%2Fimages%2Fmanjaro_comunidade.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%2Fgithub.com%2FWesleyotio%2Fmymanjaroconfig%2Ftree%2Fmain%2Fimages%2Fmanjaro_comunidade.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Escolhida sua interface agora vamos baixar a ISO diretamente ou via torrent caso sua internet seja muito lenta. Download concluído é hora de usar um programa para deixar nosso pendrive bootável, se estiver usando Windows eu aconselho usar o &lt;a href="https://rufus.ie/pt_BR/" rel="noopener noreferrer"&gt;rufus&lt;/a&gt; por ser muito simples e rápido.&lt;/p&gt;

&lt;p&gt;Como o objetivo desse manual não é focar na instalação e configuração inicial do S.O vai aqui dois videos do canal &lt;a href="https://www.youtube.com/channel/UCEf5U1dB5a2e2S-XUlnhxSA" rel="noopener noreferrer"&gt;Diolinux&lt;/a&gt; que mostra a instalação e apresentação inicial do sistema.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Mylcz7zSgS8&amp;amp;t=819s" rel="noopener noreferrer"&gt;Instalação do manjaro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=fCoHdnKhNuw&amp;amp;t=746s" rel="noopener noreferrer"&gt;Pós-instalação do manjaro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Gerenciadores de pacotes
&lt;/h2&gt;

&lt;p&gt;Vou supor que tenha visto os videos acima e agora vou tentar explicar como funcionam os gerenciadores de pacotes do Manjaro.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pacman
&lt;/h3&gt;

&lt;p&gt;Aqui vou somente apresentar como é usado para esta configuração, mas vou deixar aqui o &lt;a href="https://wiki.archlinux.org/title/Pacman_(Portugu%C3%AAs)" rel="noopener noreferrer"&gt;link&lt;/a&gt; para você ler e entender melhor o funcionamento deste gerenciador, segue alguns exemplos.&lt;/p&gt;

&lt;p&gt;Para mostra a lista de opções.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; pacman &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Temos como resultado estes comandos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uso:  pacman &amp;lt;operação&amp;gt; &lt;span class="o"&gt;[&lt;/span&gt;...]
operações:
    pacman &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;-h&lt;/span&gt; &lt;span class="nt"&gt;--help&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
    pacman &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;-V&lt;/span&gt; &lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
    pacman &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;-D&lt;/span&gt; &lt;span class="nt"&gt;--database&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &amp;lt;opções&amp;gt; &amp;lt;pacote&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&amp;gt;&lt;/span&gt;
    pacman &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="nt"&gt;--files&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;    &lt;span class="o"&gt;[&lt;/span&gt;opções] &lt;span class="o"&gt;[&lt;/span&gt;arquivo&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)]&lt;/span&gt;
    pacman &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;-Q&lt;/span&gt; &lt;span class="nt"&gt;--query&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;    &lt;span class="o"&gt;[&lt;/span&gt;opções] &lt;span class="o"&gt;[&lt;/span&gt;pacote&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)]&lt;/span&gt;
    pacman &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="nt"&gt;--remove&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;   &lt;span class="o"&gt;[&lt;/span&gt;opções] &amp;lt;pacote&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&amp;gt;&lt;/span&gt;
    pacman &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;-S&lt;/span&gt; &lt;span class="nt"&gt;--sync&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;     &lt;span class="o"&gt;[&lt;/span&gt;opções] &lt;span class="o"&gt;[&lt;/span&gt;pacote&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)]&lt;/span&gt;
    pacman &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;-T&lt;/span&gt; &lt;span class="nt"&gt;--deptest&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;  &lt;span class="o"&gt;[&lt;/span&gt;opções] &lt;span class="o"&gt;[&lt;/span&gt;pacote&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)]&lt;/span&gt;
    pacman &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;-U&lt;/span&gt; &lt;span class="nt"&gt;--upgrade&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;  &lt;span class="o"&gt;[&lt;/span&gt;opções] &amp;lt;arquivo&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para detalhar cada opção basta fazer como o exemplo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; pacman &lt;span class="nt"&gt;-S&lt;/span&gt; &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instalando um pacote.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; pacman &lt;span class="nt"&gt;-S&lt;/span&gt; nome_do_pacote
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se quisermos a versão mais atualizada do discord este será o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; pacman &lt;span class="nt"&gt;-Syu&lt;/span&gt; discord
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste ponto vale a pena explicar o que cada flag realiza&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;-S: Instalar &lt;/li&gt;
&lt;li&gt;-y: Baixa os pacotes novos do servidor&lt;/li&gt;
&lt;li&gt;-u  atualiza os pacotes instalados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No caso este pacote já se encontra atualizado em sua versão mais recente e aqui é solicitado reinstalação, como mostrado na figura a seguir.&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%2F2zx193axxxw0zejf3ekp.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%2F2zx193axxxw0zejf3ekp.png" alt="Image description" width="589" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Yay
&lt;/h3&gt;

&lt;p&gt;Até onde eu vi a principal diferença entre o pacman e Yay se deve ao fato de de yay conseguir fazer a instalação de pacotes oficiais da distro quanto de pacotes da comunidade chamados de AUR, mais uma vez segue o &lt;a href="https://github.com/Jguer/yay" rel="noopener noreferrer"&gt;link&lt;/a&gt; do projeto e a seguir os passos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; pacman &lt;span class="nt"&gt;-S&lt;/span&gt; &lt;span class="nt"&gt;--needed&lt;/span&gt; git base-devel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É uma boa usar a pasta /tmp somente para baixar o bin para instalação pois posteriormente esse arquivo sâo será mais usado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; /tmp
 git clone https://aur.archlinux.org/yay.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora entramos na pasta do projeto e executamos o comando de instalação&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;yay
 makepkg &lt;span class="nt"&gt;-si&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com a instalação concluída pode usar mesma sintaxe do pacman que funciona de boas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configurando o terminal e o VScode
&lt;/h2&gt;

&lt;p&gt;Agora chegamos na parte mais legal e que me deu mais trabalho até agora. A ideia é deixa nosso terminal mais "bonitinho" com algumas informações relevantes e bem performático. Para isso vamos começar instalando o &lt;a href="https://www.zsh.org" rel="noopener noreferrer"&gt;zsh&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Primeiro verificamos qual o SHELL estamos usando no momento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$SHELL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;provavelmente essa será sua resposta&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/usr/bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso indica que nosso SHELL padrão é o bash, agora vamos instalar o zsh usando pacman ou yay você que escolhe.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito isso, voce pode nota que o zsh não é iniciado imediatamente para isso precisamos torna-lo nosso SHELL padrão, mas antes vamos listas todos os SHELLs instalados na maquina.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;chsh &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Teremos alguma resposta semelhante a esta.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/bin/sh
/bin/bash
/bin/zsh
/usr/bin/zsh
/usr/bin/git-shell
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E por fim usamos o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;chsh &lt;span class="nt"&gt;-s&lt;/span&gt; caminho_do_shell_escolhido
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora que temos o zsh instalado vamos deixa-lo "bonitinho", pra isso precisamos de fontes que suportem ícones. Eu uso a &lt;strong&gt;MesloLGS&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Wesleyotio/mymanjaroconfig/blob/main/fonts/MesloLGS/MesloLGS%20NF%20Bold%20Italic.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Bold Italic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Wesleyotio/mymanjaroconfig/blob/main/fonts/MesloLGS/MesloLGS%20NF%20Bold.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Bold&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Wesleyotio/mymanjaroconfig/blob/main/fonts/MesloLGS/MesloLGS%20NF%20Italic.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Italic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Wesleyotio/mymanjaroconfig/blob/main/fonts/MesloLGS/MesloLGS%20NF%20Regular.ttf" rel="noopener noreferrer"&gt;MesloLGS NF Regular&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com as fontes baixadas agora vc deve criar um diretório com essa fonte no diretório de fontes do sistema.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir &lt;/span&gt;meslolgs /usr/share/fonts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora no diretório onde se encontram as fonts basta copiar para a pasta recém criada&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;nome_fonte /usr/share/fonts/meslolgs 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;OBS:&lt;/strong&gt; Os emojis não são apresentados corretamente nesta distro, para corrigir isso basta executar o seguinte comando no terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yay -S noto-fonts-emoji
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verifique se a fonte está ativa procurando por ela em qualquer editor de texto, você provavelmente verá algo como a imagem a seguir.&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%2F1bgtfs1t3h1vrozk5vrq.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%2F1bgtfs1t3h1vrozk5vrq.png" alt="Image description" width="713" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora damos inicio a instalação do framework que gerencia as configurações do Zsh o famoso &lt;a href="https://ohmyz.sh" rel="noopener noreferrer"&gt;Oh-My-Zsh&lt;/a&gt; aqui também deixo o &lt;a href="https://medium.com/tech-notes-and-geek-stuff/install-zsh-on-arch-linux-manjaro-and-make-it-your-default-shell-b0098b756a7a" rel="noopener noreferrer"&gt;link&lt;/a&gt; de um dos artigos que me ajudaram a fazer essa configuração.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OBS:&lt;/strong&gt; O comando a seguir só ira funcionar se antes você possui o git e o wget instalados, caso não tenha use estes scripts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;yay &lt;span class="nt"&gt;-Syu&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; git
&lt;span class="nb"&gt;sudo &lt;/span&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; wget
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para verificar se tudo deu certo mesmo basta averiguar as versões dos pacotes instalados.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git &lt;span class="nt"&gt;--version&lt;/span&gt;
wget &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para realizar a instalação basta executar o script&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;wget &lt;span class="nt"&gt;-O-&lt;/span&gt; https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vamos a instalacao dos plugins que tornarão nosso zsh realmente poderoso.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;zsh-z&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Permite que consultemos rapidamente diretórios acessados com frequência ou recentemente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; git clone https://github.com/agkozak/zsh-z &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-z
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;zsh-autosuggestions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Tendo como base nosso historico de uso do terminal esse plugin sugere qual comando estamos querendo executar e com um seta direita ele escreve o comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;zsh-syntax-highlighting&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Torna o terminal interativo permitindo destaque aos comandos executados pelo Zsh enquanto eles são digitados&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-syntax-highlighting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora com nossos plugins instalados precisamos ativa-los, para isso precisamos editar o arquivo de configuração do Oh-my-zsh.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basta adicionar o nome dos plugins instalados, salvar e reiniciar o terminal. O seu deve ficar assim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
  git

  zsh-z

  zsh-autosuggestions

  zsh-syntax-highlighting

  &lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para finalizarmos a instalação do terminal vamos instalar  e configurar o &lt;a href="https://github.com/romkatv/powerlevel10k" rel="noopener noreferrer"&gt;powerlevel10k&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/romkatv/powerlevel10k.git &lt;span class="nv"&gt;$ZSH_CUSTOM&lt;/span&gt;/themes/powerlevel10k

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Editamos novamente arquivo de configuração do Oh-my-zsh.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E alteramos o valor da linha ZSH_THEME&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;ZSH_THEME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"powerlevel10k/powerlevel10k"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao reiniciarmos o terminal o powerlevl10k pede que você configure sua aparência, nesse momento se você não possuir nenhuma Nerd Fonts instalada os ícones não serão reconhecidos no sistema.&lt;br&gt;
Quando desejar mudar novamente a aparência do tema execute o script.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; p10k configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora seguimos para a instalação do VScode, vamos usar nesse caso novamente o o gerenciador de pacotes yay, pois o pacote usado pertence a comunidade do AUR do &lt;a href="https://aur.archlinux.org/packages/visual-studio-code-bin" rel="noopener noreferrer"&gt;Arch linux&lt;/a&gt; a instalação  é semelhante ao a do yay.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /tmp
git clone https://aur.archlinux.org/visual-studio-code-bin.git
&lt;span class="nb"&gt;cd &lt;/span&gt;visual-studio-code-bin
makepkg &lt;span class="nt"&gt;-si&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora temos o VScode instalado, mas nosso terminal integrado está reconhecendo nossas fontes então precisamos configurar isso. Então em &lt;strong&gt;configurações&lt;/strong&gt; digite &lt;em&gt;terminal.fontfamily&lt;/em&gt; você verá a fonte usada no momento, basta mudar para nossa fonte baixada e seu ambiente está pronto.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Extras
&lt;/h2&gt;

&lt;p&gt;A partir daqui segue as configurações/aplicações que fazem parte de minha rotina.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker
&lt;/h3&gt;

&lt;p&gt;Aqui eu usei o &lt;strong&gt;pacman&lt;/strong&gt; mas deixo o &lt;a href="https://wiki.archlinux.org/title/docker" rel="noopener noreferrer"&gt;link&lt;/a&gt; pra quem quiser usar o yay.&lt;/p&gt;

&lt;p&gt;Instalação&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para inicializar ou desligar use&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker.service
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl stop docker.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use esse comando para verificar o docker está ativo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso queria iniciar o docker junto com sua maquina sempre use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  OpenVPN
&lt;/h3&gt;

&lt;p&gt;Este tópico foi criado para demonstrar um caso especifico onde a conexão com a VPN acontece, mas o usuário perde o acesso a internet.&lt;/p&gt;

&lt;p&gt;Antes de iniciar, instale os softwares &lt;code&gt;openvpn&lt;/code&gt; e &lt;code&gt;NetworkManager-OpenVPN&lt;/code&gt; pelo pacman ou yay pelo comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; networkmanager-openvpn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; openvpn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto, a partir de agora vou considerar que possui um arquivo de configuração da vpn &lt;code&gt;myvpn.ovpn&lt;/code&gt; junto de um usuário e senha.&lt;br&gt;
Copie o arquivo de configuração para o diretório da mostrado pelo comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo cp&lt;/span&gt; /caminho/para/o/arquivo/myvpn.opvpn /etc/openvpn/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora edit o arquivo usando o nano&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/openvpn/myvpn.opvpn 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;edit a linha que contêm &lt;code&gt;auth-user-pass&lt;/code&gt; para ficar assim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;auth-user-pass /etc/openvpn/mycredentials.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;em seguida crie o arquivo no diretório especificado no comando anterior e coloque seu usuário e senha&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;user
password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto, agora use o seguinte comando para testar sua conexão&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;openvpn /etc/openvpn/myconfig.opvpn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito isso observe se consegue ter conexão com a internet, se sim então seu arquivo de configuração está correto e você poderá fazer também na interface gráfica. Caso o acesso a internet não esteja funcionando observe se sua saída tem algo parecido como esse apresentado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;2023-03-26 00:37:20 &lt;span class="o"&gt;[&lt;/span&gt;NEW-OPENVPN] Peer Connection Initiated with &lt;span class="o"&gt;[&lt;/span&gt;AF_INET]10.10.10.10:1194
2023-03-26 00:37:24 Options error: Cannot &lt;span class="nb"&gt;set &lt;/span&gt;comp-lzo to &lt;span class="s1"&gt;'yes'&lt;/span&gt;, allow-compression is &lt;span class="nb"&gt;set &lt;/span&gt;to &lt;span class="s1"&gt;'no'&lt;/span&gt;
2023-03-26 00:37:24 TUN/TAP device tun0 opened
2023-03-26 00:37:24 net_iface_mtu_set: mtu 1500 &lt;span class="k"&gt;for &lt;/span&gt;tun0
2023-03-26 00:37:24 net_iface_up: &lt;span class="nb"&gt;set &lt;/span&gt;tun0 up
2023-03-26 00:37:24 net_addr_v4_add: 15.15.18.2/24 dev tun0
2023-03-26 00:37:24 Initialization Sequence Completed
2023-03-26 00:37:33 write to TUN/TAP : Invalid argument &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;fd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;-1&lt;/span&gt;,code&lt;span class="o"&gt;=&lt;/span&gt;22&lt;span class="o"&gt;)&lt;/span&gt;
2023-03-26 00:37:43 write to TUN/TAP : Invalid argument &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;fd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;-1&lt;/span&gt;,code&lt;span class="o"&gt;=&lt;/span&gt;22&lt;span class="o"&gt;)&lt;/span&gt;
2023-03-26 00:37:53 write to TUN/TAP : Invalid argument &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;fd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;-1&lt;/span&gt;,code&lt;span class="o"&gt;=&lt;/span&gt;22&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para casos como mostrado acima o problema acontece pelo fato do servidor Openvpn está habilitado para permitir compressão, mas o seu cliente está configurado para desativar a compressão. Para corrigir esse problema basta editar seu arquivo &lt;strong&gt;myconfig.opvpn&lt;/strong&gt; e adicionar a seguinte linha&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;comp-lzo &lt;span class="nb"&gt;yes&lt;/span&gt; //ou comp-lzo no caso seu servidor não tenha habilitado compressão
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora repita o processo e a conexão estará funcionando corretamente.&lt;br&gt;
Para realizar o mesmo processo pela interface gráfica basta fazer os seguintes passos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clique com o botão direito no ícone de sua rede ativa.&lt;/li&gt;
&lt;li&gt;Navegue pelo menu &lt;strong&gt;Conexões VPN&lt;/strong&gt; &amp;gt; &lt;strong&gt;Configurar VPN&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Clique no ícone &lt;strong&gt;+&lt;/strong&gt; para adicionar uma nova conexão&lt;/li&gt;
&lt;li&gt;Selecione a opção &lt;strong&gt;&lt;em&gt;Importar uma configuração de VPN salva&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Selecione  seu arquivo &lt;strong&gt;myconfig.opvpn&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Adicione seu usuário e senha, salve e sua VPN está pronta para conexão no menu  &lt;strong&gt;Conexões VPN&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>tutorial</category>
      <category>linux</category>
      <category>zsh</category>
      <category>vscode</category>
    </item>
  </channel>
</rss>
