<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Selfhost on Crimideias do caioau</title>
    <link>https://caioau.net/tags/selfhost/</link>
    <description>Recent content in Selfhost on Crimideias do caioau</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>pt-br</language>
    <copyright>This site is licensed under a CC-BY-SA 4.0 licence</copyright>
    <lastBuildDate>Tue, 07 May 2024 08:00:00 -0300</lastBuildDate><atom:link href="https://caioau.net/tags/selfhost/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Slides: Primeiros passos com self-hosting (cryptorave 2024)</title>
      <link>https://caioau.net/blog/cr2024-intro-selfhosting/</link><category>cryptorave</category>
		  <category>slides</category>
		  <category>devops</category>
		  <category>raspberry-pi</category>
		  <category>selfhost</category>
		  <category>linux</category>
		  <category>docker</category>
		  <category>ansible</category>
		  <category>security</category>
		  <category>monitoramento</category>
		  
      <pubDate>Tue, 07 May 2024 08:00:00 -0300</pubDate>
      
      <guid>https://caioau.net/blog/cr2024-intro-selfhosting/</guid><description>&lt;p&gt;Atividade realizada dia 11 maio 2024, na &lt;a href=&#34;https://2024.cryptorave.org/&#34;&gt;cryptorave&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Palestra baseada no texto &lt;a href=&#34;https://caioau.net/blog/selfhosting/&#34;&gt;Primeiros passos com self-hosting&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;slides-intro-selfhosting_11maio2024.pdf&#34;&gt;slides&lt;/a&gt; (&lt;a href=&#34;https://gitlab.com/caioau/caioau.gitlab.io/-/tree/master/static/blog/cr2024-intro-selfhosting&#34;&gt;arquivo markdown editável&lt;/a&gt; feito com &lt;a href=&#34;https://marp.app/&#34;&gt;Marp&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Slides: Primeiros passos com self-hosting (cryptorave 2023)</title>
      <link>https://caioau.net/blog/cr2023-intro-selfhosting/</link><category>cryptorave</category>
		  <category>slides</category>
		  <category>devops</category>
		  <category>raspberry-pi</category>
		  <category>selfhost</category>
		  <category>linux</category>
		  <category>docker</category>
		  <category>ansible</category>
		  <category>security</category>
		  <category>monitoramento</category>
		  
      <pubDate>Thu, 04 May 2023 08:00:00 -0300</pubDate>
      
      <guid>https://caioau.net/blog/cr2023-intro-selfhosting/</guid><description>&lt;p&gt;Atividade realizada dia 5 maio 2023, na &lt;a href=&#34;https://2023.cryptorave.org/&#34;&gt;cryptorave&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Palestra baseada no texto &lt;a href=&#34;https://caioau.net/blog/selfhosting/&#34;&gt;Primeiros passos com self-hosting&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;slides-intro-selfhosting_05maio2023.pdf&#34;&gt;slides&lt;/a&gt; (&lt;a href=&#34;https://gitlab.com/caioau/caioau.gitlab.io/-/tree/master/static/blog/cr2023-intro-selfhosting&#34;&gt;arquivo markdown editável&lt;/a&gt; feito com &lt;a href=&#34;https://marp.app/&#34;&gt;Marp&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Slides: Primeiros passos com self-hosting (TOSCONF[3])</title>
      <link>https://caioau.net/blog/tosconf2023-intro-selfhosting/</link><category>lhc</category>
		  <category>slides</category>
		  <category>devops</category>
		  <category>raspberry-pi</category>
		  <category>selfhost</category>
		  <category>linux</category>
		  <category>docker</category>
		  <category>ansible</category>
		  <category>security</category>
		  <category>monitoramento</category>
		  
      <pubDate>Fri, 17 Mar 2023 08:00:00 -0300</pubDate>
      
      <guid>https://caioau.net/blog/tosconf2023-intro-selfhosting/</guid><description>&lt;p&gt;Atividade realizada dia 18 março 2023, na &lt;a href=&#34;https://tosconf.lhc.net.br/&#34;&gt;TOSCONF[3]&lt;/a&gt; no &lt;a href=&#34;https://lhc.net.br/&#34;&gt;Laboratório Hacker de Campinas – LHC&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Palestra baseada no texto &lt;a href=&#34;https://caioau.net/blog/selfhosting/&#34;&gt;Primeiros passos com self-hosting&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;slides-intro-selfhosting_18mar2023.pdf&#34;&gt;slides&lt;/a&gt; (&lt;a href=&#34;https://gitlab.com/caioau/caioau.gitlab.io/-/tree/master/static/blog/tosconf2023-intro-selfhosting&#34;&gt;arquivo markdown editável&lt;/a&gt; feito com &lt;a href=&#34;https://marp.app/&#34;&gt;Marp&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Slides: Como operar uma infra on premisses</title>
      <link>https://caioau.net/blog/eldorado-intro-infra/</link><category>eldorado</category>
		  <category>slides</category>
		  <category>devops</category>
		  <category>raspberry-pi</category>
		  <category>selfhost</category>
		  <category>linux</category>
		  <category>docker</category>
		  <category>ansible</category>
		  <category>security</category>
		  <category>monitoramento</category>
		  
      <pubDate>Wed, 15 Dec 2021 08:00:00 -0300</pubDate>
      
      <guid>https://caioau.net/blog/eldorado-intro-infra/</guid><description>&lt;p&gt;Atividade realizada dia 15 dezembro 2021, no &lt;a href=&#34;https://www.eldorado.org.br/&#34;&gt;Eldorado&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Palestra baseada no texto &lt;a href=&#34;https://caioau.net/blog/selfhosting/&#34;&gt;Primeiros passos com self-hosting&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;slides-intro-infra_caioau_15dez2021.pdf&#34;&gt;slides&lt;/a&gt; (&lt;a href=&#34;https://gitlab.com/caioau/caioau.gitlab.io/-/tree/master/static/blog/eldorado-intro-infra&#34;&gt;arquivo markdown editável&lt;/a&gt; feito com &lt;a href=&#34;https://marp.app/&#34;&gt;Marp&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Primeiros passos com self-hosting</title>
      <link>https://caioau.net/blog/selfhosting/</link><category>devops</category>
		  <category>computando-arte</category>
		  <category>texto</category>
		  <category>raspberry-pi</category>
		  <category>selfhost</category>
		  <category>linux</category>
		  <category>docker</category>
		  <category>ansible</category>
		  <category>security</category>
		  <category>monitoramento</category>
		  
      <pubDate>Sun, 04 Jul 2021 14:00:00 -0300</pubDate>
      
      <guid>https://caioau.net/blog/selfhosting/</guid><description>&lt;p&gt;Obs.: Originalmente publicado no &lt;a href=&#34;https://caioau.net/blog/computando-arte/&#34;&gt;computando-arte&lt;/a&gt; dia 05Julho2021&lt;/p&gt;
&lt;p&gt;Neste post vamos fazer uma visão geral das principais partes do self-hosting.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/selfhosting/rasp.png&#34; loading=&#34;lazy&#34;
         alt=&#34;Foto de Jainath Ponnala, unsplash&#34; width=&#34;600px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Foto de Jainath Ponnala, &lt;a href=&#34;https://unsplash.com/photos/9wWX_jwDHeM&#34;&gt;unsplash&lt;/a&gt;&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;vai-usar-a-nuvem-ou-apenas-on-premise-que-tal-ambos&#34;&gt;Vai usar a nuvem? Ou apenas on-premise? Que tal ambos?&lt;/h2&gt;
&lt;p&gt;Acredito que umas das primeiras considerações quando montamos nosso setup de self-hosting é pensar como isso vai se organizar e onde vai ficar cada coisa.&lt;/p&gt;
&lt;p&gt;Self-hosting não é ser “contra a nuvem” mas sim um movimento para ter controle dos nossos dados e aplicações que usamos, mesmo usando a nuvem nós que vamos configurar tudo e ter controle de como cada coisa funciona.&lt;/p&gt;
&lt;p&gt;Outro modelo é hospedar “tudo em casa” (chamado de on-premise), funciona muito bem. Mas um desafio que logo vamos abordar é abrir a conexão da sua operadora para acessar seus serviços fora de casa.&lt;/p&gt;
&lt;p&gt;Daí surge um terceiro modelo: o híbrido, parte das coisas que necessitam de velocidade ficam em casa e o restante que precisa acessar fora de casa na nuvem. No meu caso, coloco na nuvem (uma virtual private server (VPS) da digital ocean) o nextcloud com apenas meus contatos e calendário (no android uso o davx5 para sincronizar a agenda e os contatos com o nextcloud) e em casa guardo meus backups (com uma cópia no &lt;a href=&#34;https://www.rsync.net/&#34;&gt;rsync.net&lt;/a&gt;) e todo resto :P&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/selfhosting/setup_caioau.png&#34; loading=&#34;lazy&#34; width=&#34;600px&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;Além de ser muito bonito e divertido de fazer, recomendo fazer um diagrama de como vai se organizar suas aplicações e dispositivos, acima é como organizo tudo.&lt;/p&gt;
&lt;h2 id=&#34;hardware-usado-para-hospedar&#34;&gt;Hardware usado para hospedar&lt;/h2&gt;
&lt;p&gt;Para hospedar nossas coisas em casa, precisamos de um hardware para fazê-lo, pode ser usado com computador velho ou, outras opções populares, são usar a Raspberry Pi, mini pc (tipo intel NUC) ou por fim um servidor de armazenamento conectado em rede (NAS, de Network Attached Storage). Embora seja uma melhor opção pelo reuso e sobrevida de um equipamento obsoleto, é importante ficar ciente e atento a falhas por fadiga que podem comprometer a disponibilidade ou a confiabilidade do serviço.&lt;/p&gt;
&lt;p&gt;Quando eu comecei nessa jornada do self-hosting, havia comprado um SSD para meu notebook então peguei o disco que veio nele e conectei numa Raspberry Pi. Começar com uma Raspberry Pi é ótimo: é barato, consome pouca energia e atende aos requisitos de recursos de várias aplicações.&lt;/p&gt;
&lt;p&gt;Mas existem outras necessidades que uma Raspberry Pi não consegue atender, como por exemplo rodar máquinas virtuais, e daí surge a necessidade de outros hardwares apropriados. Como um mini-pc (ou Intel NUC) que é literalmente um mini pc e os componentes tradicionais como processador x86 (ao invés do ARM do Raspberry Pi), slots de memória RAM que pode ser trocada, etc.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/selfhosting/nas.png&#34; loading=&#34;lazy&#34;
         alt=&#34;NAS Synology DS920&amp;#43;&#34; width=&#34;400px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;NAS Synology DS920+&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Quer armazenar muitos arquivos? Talvez um NAS seja mais adequado. Este equipamento conta com conexão à rede e diversos slots para colocar os discos.&lt;/p&gt;
&lt;p&gt;Por fim, um item de hardware que é opcional mas recomendo é um “no break”, para que em caso de cair a energia na sua casa não aconteça nada.&lt;/p&gt;
&lt;h2 id=&#34;storage-e-backups&#34;&gt;Storage e backups&lt;/h2&gt;
&lt;p&gt;Tudo, inclusive toda forma de tecnologia, está sujeita a falhas, mas enquanto peças podem ser substituídas, arquivos perdidos podem não serem recuperáveis, por isso surge a necessidade de cópias de segurança, os famosos backups. A regra de ouro é quanto mais importante, raro ou caro mais versões e de mais difícil acesso elas devem ser.&lt;/p&gt;
&lt;p&gt;Isso é uma consideração importante principalmente com a Raspberry Pi, os SD cards não são muito confiáveis, depois de alguns anos de uso eles acabam “morrendo”. Comigo foi muito nítido isso, teve um SD card que me serviu fielmente por 2 anos, enquanto outros logo depois de 1 ano de uso contínuo eles morreram. Mesmo adotando alguns truques para diminuir sua leitura e escrita, como montar com a flag noatime, os logs e outras pastas como tmpfs e desativar o swap.&lt;/p&gt;
&lt;p&gt;Outra preocupação com os backups são os ataques ransomware, se seu computador teve os arquivos sequestrados, depois de sincronizar os backups também podem estar comprometidos. Por isso é aconselhável ter backups versionados, no qual teremos um &amp;ldquo;histórico&amp;rdquo; dos arquivos e no caso de um ransomware, basta restaurar a penúltima versão dos backups no qual os arquivos originais estarão lá.&lt;/p&gt;
&lt;p&gt;Uma prática indispensável quando falamos de storage é o Redundant Array of Independent Disks (RAID: Arranjo redundante de discos baratos) que permite combinar os discos para que o sistema operacional os enxergue tudo como um disco só. Os dois modos mais básicos são o RAID 0 e RAID 1. No RAID 0 temos 2 discos que vão somar suas capacidades, enquanto no RAID 1 teremos a capacidade de apenas 1 disco e outro é usado como redundância caso um disco falhe, bastando trocar o disco quebrado que os dados serão espelhados nele.&lt;/p&gt;
&lt;p&gt;Existem outros níveis de RAID, que são no fundo combinações do 0 e 1, como o RAID 5 (no qual teremos 4 discos, mas apenas podendo utilizar apenas o espaço de 3, pois 1 drive é usado como redundância).&lt;/p&gt;
&lt;p&gt;A fim de combinar os discos utilizando o RAID temos diversas implementações que podem ser usadas no Linux. A mais simples é o mdadm que mapeia os drives num “disco virtual”.&lt;/p&gt;
&lt;p&gt;Outra solução um pouco mais avançada é utilizar o LVM que é um gerenciador de volumes que permite coisas mais avançadas como diminuir e aumentar as partições usadas e realizar snapshots, que é um “retrato” do sistema de arquivos que pode ser acessado depois, dessa forma criando um “ponto de restauração”.&lt;/p&gt;
&lt;p&gt;Por fim os sistemas de arquivos recentes como BTRFS e ZFS podem ser usados RAID e tem recursos legais como os snapshots, compressão nativa dos arquivos (dessa forma aqueles arquivos de texto como dados em csv ficam bem menor) e por fim como esses sistemas de arquivos usam o conceito de copy-on-write ou seja para toda escrita será feita uma cópia para manter a versão anterior, isso permite que para realizar a manutenção dos disco (o fsck, a checagem da integridade do sistema de arquivos) não precise desligar tudo (nesses sistemas o equivalente do fsck é o scrub).&lt;/p&gt;
&lt;p&gt;A única ressalva para usar o ZFS e BTRFS são bancos de dados, o copy-on-write nos bancos de dados prejudica o desempenho, nesses casos talvez seja uma boa manter o sistema operacional num sistema de arquivos tradicional como ext4 e os bancos de dados nele e o armazenamento restante no ZFS ou BTRFS.&lt;/p&gt;
&lt;p&gt;Outra preocupação é a criptografia dos discos, para proteger os arquivos em caso de furto, nesses casos é uma boa instalar o pacote dropbear-initramfs (&lt;a href=&#34;https://www.cyberciti.biz/security/how-to-unlock-luks-using-dropbear-ssh-keys-remotely-in-linux/&#34;&gt;tutorial&lt;/a&gt;) que permite entrar com a senha da criptografia de forma remota (por ssh), sem precisar ter um teclado in loco.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/selfhosting/backups_meme.png&#34; loading=&#34;lazy&#34;
         alt=&#34;Fonte: https://twitter.com/nixcraft/status/1313909322905083905&#34; width=&#34;400px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Fonte: &lt;a href=&#34;https://twitter.com/nixcraft/status/1313909322905083905&#34;&gt;https://twitter.com/nixcraft/status/1313909322905083905&lt;/a&gt;&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Uma regra de ouro dos backups é a regra 3-2-1, que diz que devemos ter ao menos 3 cópias, em 2 mídias diferentes e 1 “fora de casa” em caso de incêndio. Para ter esse backup fora de casa é mais prático usar a nuvem, mas como utilizar a nuvem de forma segura? Podemos utilizar uma solução de backup que tenha criptografia, como o borgbackup, outra opção para utilizar o Google Drive, Dropbox e similares é utilizar o &lt;a href=&#34;https://cryptomator.org/&#34;&gt;cryptomator.org&lt;/a&gt; que criptografa seus dados antes de enviá-los para a nuvem.&lt;/p&gt;
&lt;p&gt;Partindo para as indicações, veja o vídeo do Fabio Akita: &lt;a href=&#34;https://www.youtube.com/watch?v=lxjBgxmDZAI&#34;&gt;Quebrei 3 HDs: Entendendo Armazenamento&lt;/a&gt; explicando como os discos rígidos funcionam. E o meu texto de como montei minha solução de backups criptografados com o borgbackup e &lt;a href=&#34;https://syncthing.net/&#34;&gt;syncthing&lt;/a&gt; no Android: &lt;a href=&#34;https://caioau.net/blog/backups/&#34;&gt;Como parei de me preocupar e passei a adorar minha solução de backups&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;como-acessar-meus-serviços-fora-de-casa&#34;&gt;Como acessar meus serviços fora de casa?&lt;/h2&gt;
&lt;p&gt;Em algumas operadoras como a NET, seu modem tem um IP “interno” dentro da rede da operadora, pois os IPs IPV4 são muito escassos, o famigerado Carrier-grade NAT (CGNAT), dessa forma não é possível acessar sua casa através da internet.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/selfhosting/nat.png&#34; loading=&#34;lazy&#34;
         alt=&#34;Explicação sobre o NAT (fonte)&#34; width=&#34;600px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Explicação sobre o NAT (&lt;a href=&#34;https://twitter.com/0x1shu/status/1401986638197116934/photo/1&#34;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;O único jeito é ligar na operadora e pedir para sair do CGNAT, permitindo assim hospedar na internet seus serviços. Foi o que fiz (tenho NET), mas não consigo abrir algumas portas como a 80 (http) e 443 (https), pois na NET isso só é permitido comprando o plano para empresas 😞&lt;/p&gt;
&lt;p&gt;Pesquise e pergunte no &lt;a href=&#34;https://old.reddit.com/r/InternetBrasil/&#34;&gt;/r/InternetBrasil&lt;/a&gt;, lá tem muito conteúdo sobre isso.&lt;/p&gt;
&lt;p&gt;Outra questão é que os IPs não são fixos. Dentro da sua casa, quando a Raspberry Pi liga ela “pede” um IP pro seu roteador, o Dynamic Host Configuration Protocol (DHCP) que atribui um IP para a Raspberry Pi, mas os IPs muitas vezes são alocados de sequencial, ou seja nem sempre a Raspberry Pi vai ter o mesmo IP, quebrando o encaminhamento de portas do roteador. Então no roteador na configuração do DHCP atribua um IP fixo para a Raspberry Pi.&lt;/p&gt;
&lt;p&gt;Outro IP que não é fixo é o do seu modem, que é o seu IP público na internet, infelizmente às vezes ele acaba mudando (de novo no plano para empresas o IP é fixo), daí surgem os serviços de DNS dinâmico, como o DynDNS ou NOIP, eu utilizo o &lt;a href=&#34;https://www.duckdns.org/&#34;&gt;duckdns&lt;/a&gt; e no google domínios tem a &lt;a href=&#34;https://support.google.com/domains/answer/6147083?hl=pt-BR&#34;&gt;opção de DNS dinâmico&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A partir daí é só fazer os encaminhamentos de portas no seu modem, evite a opção DMZ, que expõe completamente a Raspberry Pi na internet, encaminhe apenas as portas que realmente precisa expor. Outra opção é ter um roteador próprio, e o usar o modem da operadora apenas como modem colocando no modo bridge e o seu roteador vai atuar como firewall encaminhando apenas algumas portas. Eu faço isso com meu roteador usando o OpenWRT e criei algumas VLANs (redes lógicas separadas para segregar os equipamentos) para minha rede.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/selfhosting/ngrok.png&#34; loading=&#34;lazy&#34;
         alt=&#34;Diagrama do proxy reverso (ngrok)&#34; width=&#34;500px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Diagrama do proxy reverso (ngrok)&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Outra opção é utilizar um serviço de proxy reverso, que basicamente torna seu localhost público, como &lt;a href=&#34;https://ngrok.com/&#34;&gt;ngrok&lt;/a&gt;, ou a solução open source &lt;a href=&#34;https://pagekite.net/&#34;&gt;pagekite&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Na mesma linha pode ser utilizada a sua VPS na cloud como proxy para acessar suas coisas em casa, pode ser algo simples como o &lt;a href=&#34;https://linux.die.net/man/1/autossh&#34;&gt;autossh&lt;/a&gt; que cria tunnels ssh permitindo acessar sua casa passando pela VPS.&lt;/p&gt;
&lt;p&gt;Ou criar uma VPN com &lt;a href=&#34;https://www.wireguard.com/&#34;&gt;wireguard&lt;/a&gt; na sua VPS e conectar sua Raspberry Pi, viabilizando seu acesso externo. O legal dessa solução é que você pode criar duas configurações no seu computador/celular: uma que usa a VPN apenas para acessar seus serviços e uma que passa todo seu tráfego pela VPN para usar em WiFis não confiáveis como WiFis públicos.&lt;/p&gt;
&lt;p&gt;Por fim, outra possibilidade é usar o Tor, para criar um .onion que permite hospedar seus serviços em casa, sem precisar abrir suas portas, veja a documentação: &lt;a href=&#34;https://community.torproject.org/onion-services/&#34;&gt;onion-services&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Uma preocupação em expor seus serviços na internet é a de segurança, pois os mesmos podem ser hackeados e o hacker estará na sua rede. Isso pode ser feito de forma segura adotando as medidas de segurança que falaremos, mas outra possibilidade é utilizar o port knocking, no qual as portas dos seus serviços ficam fechadas e depois de “bater” numa sequência de portas corretas (tipo uma senha) a porta é aberta, apenas para o IP, e por um período de tempo, escondendo e protegendo seus serviços. Utilizo o &lt;a href=&#34;https://linux.die.net/man/1/knockd&#34;&gt;knockd&lt;/a&gt; com o firewall ufw.&lt;/p&gt;
&lt;h2 id=&#34;contêiners&#34;&gt;Contêiners&lt;/h2&gt;
&lt;p&gt;Os contêineres vieram para ficar e são uma maneira simples e rápida para colocar seus serviços no ar. Mas é preciso tomar cuidado em usar apenas imagens confiáveis, no fundo você está rodando um software feito por um terceiro na sua máquina.&lt;/p&gt;
&lt;p&gt;Foram encontradas imagens maliciosas minerando bitcoin, ou imagens desatualizadas e vulneráveis. Antes de utilizar uma imagem dá uma olhada no Dockerfile no github para procurar por coisas suspeitas.&lt;/p&gt;
&lt;p&gt;Imagens oficiais do dockerhub são confiáveis, outra fonte excelente de imagens é o &lt;a href=&#34;https://www.linuxserver.io/&#34;&gt;LinuxServer.io&lt;/a&gt; com diversas imagens ótimas.&lt;/p&gt;
&lt;p&gt;Partiu para as indicações? Tem um site excelente para aprender docker, bem direto ao ponto o &lt;a href=&#34;https://docker-curriculum.com/&#34;&gt;docker-curriculum.com&lt;/a&gt;, curso eu indico o &lt;a href=&#34;https://www.udemy.com/course/docker-mastery/&#34;&gt;docker-mastery&lt;/a&gt; na udemy que até fala um pouco de clusters com docker swarm e kubernetes, por fim no youtube tem o vídeo excelente da TechWorld with Nana &lt;a href=&#34;https://www.youtube.com/watch?v=3c-iBn73dDE&#34;&gt;Docker Tutorial for Beginners&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;proxy-reverso&#34;&gt;Proxy Reverso&lt;/h2&gt;
&lt;p&gt;Quando vamos hospedar diversos serviços uma construção comum que é utilizada é o proxy reverso, com ele quando vamos acessar nossos serviços evitamos de ter que usar uma porta diferente para cada coisa, dessa forma podemos configurar o proxy reverso para como cada serviço vai ser acessado, normalmente por um subdomínio tipo nextcloud.seu-dominio.tld ou como uma subpasta seu-dominio.tld/nextcloud.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/selfhosting/traefik.png&#34; loading=&#34;lazy&#34;
         alt=&#34;Ilustração de um proxy reverso&#34; width=&#34;600px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Ilustração de um proxy reverso&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;As opções mais populares são o Secure Web Application Gateway (&lt;a href=&#34;https://github.com/linuxserver/docker-swag&#34;&gt;swag&lt;/a&gt;), da linuxservers.io, que é um nginx, com let’s encrypt (para ter o https) e fail2ban (que bloqueia bots e IPs que estão tentando te invadir).&lt;/p&gt;
&lt;p&gt;A outra opção é o &lt;a href=&#34;https://doc.traefik.io/traefik/&#34;&gt;traefik&lt;/a&gt; que tem a vantagem de já ser integrado com o docker e kubernetes, dessa forma ao invés de configurar as “rotas” de cada serviço em arquivos de configuração (como é feito no nginx) as configurações vivem nos labels do contêiner de cada serviço, muito mágico ✨&lt;/p&gt;
&lt;p&gt;Aliado com o proxy reverso, podemos utilizar o &lt;a href=&#34;https://www.authelia.com/&#34;&gt;authelia&lt;/a&gt;, que permite ter o mesmo usuário e senha (single sign-on) sincronizado com todos seus serviços e autenticação em 2 fatores integrada em todos seus serviços, tornando tudo mais prático e seguro.&lt;/p&gt;
&lt;p&gt;Bora para um exemplo?&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;
&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 1
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 2
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 3
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 4
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 5
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 6
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 7
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 8
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 9
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;10
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;11
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;12
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;13
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;14
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;15
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;16
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;17
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;18
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;19
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;20
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;21
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;22
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;23
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;24
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;25
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;26
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;27
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;28
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;29
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;30
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;31
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;33
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;34
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;35
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;36
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;37
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;38
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;39
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;40
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;41
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;42
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#0087ff&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;2.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#0087ff&#34;&gt;services&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0087ff&#34;&gt;traefik&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik:v2.4&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;restart&lt;/span&gt;: unless-stopped
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;command&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#4e4e4e&#34;&gt;#- &amp;#34;--log.level=DEBUG&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;--api.insecure=true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;--providers.docker=true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;--providers.docker.exposedbydefault=false&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;--entrypoints.web.address=:80&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;80:80&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;8080:8080&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;/var/run/docker.sock:/var/run/docker.sock:ro&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0087ff&#34;&gt;whoami&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;containous/whoami&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;restart&lt;/span&gt;: unless-stopped
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;labels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.enable=true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.http.routers.whoami.rule=PathPrefix(`/whoami/`)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.http.routers.whoami.entrypoints=web&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0087ff&#34;&gt;bitwarden&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;image&lt;/span&gt;: bitwardenrs/server
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;container_name&lt;/span&gt;: bitwarden
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;restart&lt;/span&gt;: unless-stopped
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#4e4e4e&#34;&gt;#environment: &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#4e4e4e&#34;&gt;#- SIGNUPS_ALLOWED=false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;      - ./docker_vols/bwdata/:/data/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;labels&lt;/span&gt;: 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.enable=true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.http.routers.bitwarden.rule=PathPrefix(`/vault/`)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.http.routers.bitwarden.entrypoints=web&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.http.middlewares.bw.stripprefix.prefixes=/vault/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.http.routers.bitwarden.middlewares=bw&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Esse é um arquivo docker-compose, é um arquivo yaml que define vários contêineres, no fundo é como se o fizesse vários docker run, um para cada contêiner.&lt;/p&gt;
&lt;p&gt;Para executá lo, basta baixar esse arquivo como docker-compose.yml e rodar o docker-compose up -d&lt;/p&gt;
&lt;p&gt;Temos 3 contêineres definidos: o traefik, o whoami (usado para debugar o traefik) e o bitwarden (gerenciador de senhas). Repare como as “rotas” para o traefik estão definidas nos labels de cada contêiner ✨&lt;/p&gt;
&lt;p&gt;Espere um pouco e vamos testar tudo: abra seu navegador no endereço &lt;code&gt;localhost/whoami/&lt;/code&gt; , e veja a rota para o whoami funcionando. Depois vá para &lt;code&gt;localhost/vault/&lt;/code&gt; e acesse o bitwarden. Por fim &lt;code&gt;localhost:8080&lt;/code&gt; e veja o dashboard do traefik (não se esqueça de colocar uma senha depois).&lt;/p&gt;
&lt;p&gt;No bitwarden, repare na parte volumes, aqui os dados da aplicação serão salvos na pasta docker_vols/bwdata, para ser feito o backup.&lt;/p&gt;
&lt;p&gt;No traefik, veja em volumes: &lt;code&gt;/var/run/docker.sock:/var/run/docker.sock:ro&lt;/code&gt;, isso vai “conectar” o docker no contêiner do traefik, fazemos isso para que o mesmo consiga “mapear” os outros contêineres e ler suas regras de roteamento em suas labels. Tome cuidado e só faça isso com contêineres que confia pois isso pode dar a permissão de acessar e comprometer os todos seus contêineres e seu computador.&lt;/p&gt;
&lt;p&gt;Por fim repare que todos os contêineres têm &lt;code&gt;restart: unless-stopped&lt;/code&gt;, isso é a política de restart do docker, dessa forma caso o computador seja desligado quando for ligado os contêineres serão iniciados automaticamente, unless stopped, ou seja a menos que sejam parados.&lt;/p&gt;
&lt;p&gt;Ultimo exemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;
&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 1
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 2
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 5
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 7
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 8
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 9
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;10
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;11
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;12
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;13
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;14
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;15
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;16
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;17
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;18
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;19
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;20
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;21
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;22
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;23
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;24
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;25
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;26
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;27
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;28
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;29
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;30
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;31
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;32
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;33
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;34
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;35
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;36
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;37
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;38
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;39
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;40
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;41
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;42
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;43
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;44
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;45
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;46
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;47
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;48
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;49
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;50
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;51
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;52
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;53
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;54
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;55
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;56
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;57
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;58
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;59
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;60
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;61
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;62
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;63
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;64
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#0087ff&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;2.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#0087ff&#34;&gt;networks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0087ff&#34;&gt;web&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;external&lt;/span&gt;: &lt;span style=&#34;color:#d75f00&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0087ff&#34;&gt;internal_net&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;external&lt;/span&gt;: &lt;span style=&#34;color:#d75f00&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#0087ff&#34;&gt;services&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0087ff&#34;&gt;traefik&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik:v2.4&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;restart&lt;/span&gt;: unless-stopped
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;networks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;      - web
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;command&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#4e4e4e&#34;&gt;#- &amp;#34;--log.level=DEBUG&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;--api.insecure=true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;--providers.docker=true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;--providers.docker.exposedbydefault=false&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;--entrypoints.web.address=:80&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;80:80&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;8080:8080&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;/var/run/docker.sock:/var/run/docker.sock:ro&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0087ff&#34;&gt;ttrss&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;image&lt;/span&gt;: wangqiru/ttrss:latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;container_name&lt;/span&gt;: ttrss
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;restart&lt;/span&gt;: unless-stopped
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;networks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    - internal_net
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    - web
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;environment&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - DB_PASS=E7WaTdu9KPLXxYXTqtrA
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - SELF_URL_PATH=http://localhost/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - DB_HOST=ttrss_db
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - PUID=1000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - PGID=1000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - TZ=America/Sao_Paulo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;depends_on&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;      - ttrss_db
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;labels&lt;/span&gt;: 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.enable=true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.http.routers.ttrss.rule=PathPrefix(`/ttrss/`)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.http.routers.ttrss.entrypoints=web&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.http.middlewares.sp1.stripprefix.prefixes=/ttrss/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.http.routers.ttrss.middlewares=sp1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.docker.network=web&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#0087ff&#34;&gt;ttrss_db&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;image&lt;/span&gt;: postgres:13-alpine
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;container_name&lt;/span&gt;: ttrss_db
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;restart&lt;/span&gt;: unless-stopped
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;networks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;      - internal_net
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;environment&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - POSTGRES_PASSWORD=E7WaTdu9KPLXxYXTqtrA
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - ./docker_vols/ttrss_db/:/var/lib/postgresql/data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#0087ff&#34;&gt;labels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;traefik.enable=false&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Continuamos com o nosso conhecido traefik, mas agora vamos colocar no ar o &lt;a href=&#34;https://tt-rss.org/&#34;&gt;tt-rss&lt;/a&gt;, que é um leitor de feeds RSS, que utiliza um banco de dados postgres, essa é a primeira coisa diferente nesse exemplo repare que no topo estão definidas 2 redes (uma chamada web e outra internal_net). O traefik que é o contêiner que está exposto está apenas na web, a aplicação (ttrss) em ambas as redes e o banco de dados apenas na internal_net. Fizemos isso para segregar o banco de dados (que contêm dados sensíveis) do traefik para que o mesmo caso comprometido não acesse o(s) banco de dados.&lt;/p&gt;
&lt;p&gt;Outra coisa a destacar é a opção depends_on, que cria um relação de dependência entre o contêiner da aplicação (ttrss) e o seu banco de dados, iniciando o banco de dados antes da da aplicação.&lt;/p&gt;
&lt;h2 id=&#34;segurança&#34;&gt;Segurança&lt;/h2&gt;
&lt;p&gt;A fim de manter tudo isso seguro, existem diversas práticas e níveis de segurança, um bom começo é ter senhas fortes e únicas (evitar o famoso usuário admin com senha admin) com um gerenciador de senhas e realizar as atualizações de segurança.&lt;/p&gt;
&lt;p&gt;Para deixar todos seus contêineres atualizados, tem o &lt;a href=&#34;https://crazymax.dev/diun/&#34;&gt;Diun&lt;/a&gt;, que “conecta” no docker (como fizemos com o traefik) e verifica periodicamente se existem atualizações para seus contêineres, disparando uma notificação via email ou telegram etc &amp;hellip;&lt;/p&gt;
&lt;p&gt;Já para manter o host atualizado, uma possibilidade é utilizar o &lt;a href=&#34;https://wiki.debian.org/UnattendedUpgrades&#34;&gt;UnattendedUpgrades&lt;/a&gt; que atualiza os pacotes automaticamente, e se quiser pode até reiniciar automaticamente quando necessário. Porém, talvez seja melhor assinar as listas de email/rss de segurança da sua distro (&lt;a href=&#34;https://www.debian.org/security/&#34;&gt;debian security-announce&lt;/a&gt;, &lt;a href=&#34;https://ubuntu.com/security/notices&#34;&gt;Ubuntu USN&lt;/a&gt;), do docker e das suas aplicações e frameworks e veja se faz aquelas atualizações de fato te afetam e se realmente faz sentido aplica-lás.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/selfhosting/forkbomb.png&#34; loading=&#34;lazy&#34;
         alt=&#34;https://twitter.com/nixcraft/status/878903460871061504&#34; width=&#34;500px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;&lt;a href=&#34;https://twitter.com/nixcraft/status/878903460871061504&#34;&gt;https://twitter.com/nixcraft/status/878903460871061504&lt;/a&gt;&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Um site excelente para deixar nos favoritos é o Open Web Application Security Project (&lt;a href=&#34;https://owasp.org/&#34;&gt;owasp&lt;/a&gt;) é uma comunidade de segurança com diversas dicas e recomendações, por exemplo: &lt;a href=&#34;https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html&#34;&gt;como armazenar senhas de forma segura&lt;/a&gt; e no nosso caso &lt;a href=&#34;https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html&#34;&gt;Docker security&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Uma forma excelente para aprender segurança é praticar nas Capture the flag (CTF) que são ambientes controlados para testar a segurança como um todo e revelar a flag (tipo uma senha), comprovando que conseguiu comprometer a segurança. Tem vários sites, tenho mais contato com o &lt;a href=&#34;https://overthewire.org/wargames/&#34;&gt;overthewire&lt;/a&gt; e o &lt;a href=&#34;https://www.hackthebox.eu/&#34;&gt;hackthebox&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Um vídeo que gostei foi do LiveOverflow: &lt;a href=&#34;https://www.youtube.com/watch?v=fKuqYQdqRIs&#34;&gt;Protect Linux Server From Hackers&lt;/a&gt;, no qual ele disseca as dicas populares de boas práticas para proteger seus servidores linux e ele mostrou que essas boas práticas nem sempre são tão positivas e “preto no branco”. Depois ele fez uma continuação bem interessante: &lt;a href=&#34;https://www.youtube.com/watch?v=lKzsNp4AveY&#34;&gt;Understand Security Risk vs. Security Vulnerability!&lt;/a&gt; pontuando as diferenças e semelhanças entre riscos de segurança e vulnerabilidades.&lt;/p&gt;
&lt;h2 id=&#34;monitoramento&#34;&gt;Monitoramento&lt;/h2&gt;
&lt;p&gt;Na seção anterior sobre storage, como saberemos se um disco falhou? Quando tudo parar de funcionar? Ou tem algum jeito de “ficar de olho”, por isso que precisamos ter uma solução de monitoramento.&lt;/p&gt;
&lt;p&gt;As soluções mais populares de monitoramento são o &lt;a href=&#34;https://www.zabbix.com/&#34;&gt;zabbix&lt;/a&gt; e o &lt;a href=&#34;https://prometheus.io/&#34;&gt;prometheus&lt;/a&gt;, que depois de configurados te notificam em caso de alguma falha.&lt;/p&gt;
&lt;p&gt;No caso dos discos, temos dois indicativos que os discos estão para falhar: As informações S.M.A.R.T. &amp;ndash; Self-Monitoring, Analysis, and Reporting Technology (tecnologia de automonitoramento, análise e relatório) geradas pelo próprio disco com diversas informações da &amp;ldquo;saúde&amp;rdquo; do disco, o disco não gera isso sozinho, sua solução de monitoramento precisa disparar os auto-testes e monitorar essas infos. Porém um &lt;a href=&#34;https://static.googleusercontent.com/media/research.google.com/en//archive/disk_failures.pdf&#34;&gt;estudo&lt;/a&gt; de 2007 do Google, mostrou que os dados S.M.A.R.T sozinho não são um bom indicativo da falha dos discos, daí surgem o segundo indicativo o tempo de escrita e leitura, se o disco começa a demorar muito para ler ou escrever isso pode indicar uma falha, essa informação é gerada na solução de monitoramento.&lt;/p&gt;
&lt;p&gt;Outra solução legal de monitoramento é o &lt;a href=&#34;https://healthchecks.io/&#34;&gt;healthchecks.io&lt;/a&gt;, serviço para monitorar seus cronjobs (tarefas executadas periodicamente), por exemplo imagine que você configurou para fazer backup do seu laptop na sua Raspberry Pi, mas por algum problema o backup para de ser feito com sucesso. Como vai saber que parou de funcionar? No healthchecks.io você configura uma periodicidade que os backups devem ser feitos e quando é feito o backup seu laptop “pinga” o serviço, e em caso de falha ou o backup deixou de rodar uma notificação é enviada.&lt;/p&gt;
&lt;h2 id=&#34;infraestrutura-como-código&#34;&gt;Infraestrutura como código&lt;/h2&gt;
&lt;p&gt;Essa é a parte mais legal 🤩, chegou o dia que seu SD card da Raspberry Pi morreu 😞 , tranquilo só fazer a restauração do backup no SD novo e instalar e configurar tudo mas isso pode ser demorado, com a infraestrutura como código (IaC) você cria uma “receita” que configura toda sua infra automaticamente.&lt;/p&gt;
&lt;p&gt;A ferramenta que tenho mais contato é o &lt;a href=&#34;https://www.ansible.com/&#34;&gt;ansible&lt;/a&gt;, ele é similar ao &lt;a href=&#34;https://www.chef.io/&#34;&gt;chef&lt;/a&gt; e &lt;a href=&#34;https://puppet.com/&#34;&gt;puppet&lt;/a&gt;. A principal vantagem do ansible é que ele é agentless, ou seja não precisa de um ter software instalado esperando por instruções do controle, basta ter o python instalado e acesso ssh e na máquina que vai disparar o ansible basta instalar com um pip install, super prático.&lt;/p&gt;
&lt;p&gt;Apesar de ser muito legal automatizar a configuração dos ambientes com IaC, se tudo é importante nada é importante, a IaC não precisa estar no topo das suas prioridades quando configurando seu setup.&lt;/p&gt;
&lt;h2 id=&#34;considerações-finais&#34;&gt;Considerações finais&lt;/h2&gt;
&lt;p&gt;Espero com essa visão geral dos aspectos do self-hosting tenha uma noção do que se trata e comece a aprender mais sobre o tema e adotar esse movimento.&lt;/p&gt;
&lt;p&gt;Além de todas indicações que já fiz vou fechar indicando um podcast: o &lt;a href=&#34;https://selfhosted.show/&#34;&gt;Self-Hosted podcast&lt;/a&gt; que me ajudou muito a aprender sobre esses tópicos e o canal do YouTube: &lt;a href=&#34;https://www.youtube.com/c/TechnoTimLive/featured&#34;&gt;Techno Tim&lt;/a&gt; que tem várias dicas de como montar seu homelab.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>O que é selfhosting e por que adotá-lo</title>
      <link>https://caioau.net/blog/intro-selfhosting/</link><category>devops</category>
		  <category>computando-arte</category>
		  <category>texto</category>
		  <category>raspberry-pi</category>
		  <category>selfhost</category>
		  
      <pubDate>Fri, 28 May 2021 16:00:00 -0300</pubDate>
      
      <guid>https://caioau.net/blog/intro-selfhosting/</guid><description>&lt;p&gt;Obs.: Originalmente publicado no &lt;a href=&#34;https://caioau.net/blog/computando-arte/&#34;&gt;computando-arte&lt;/a&gt; dia 28Maio2021&lt;/p&gt;
&lt;p&gt;Muitos dos serviços digitais que utilizamos no nosso dia a dia estão na &amp;ldquo;nuvem&amp;rdquo;, como Gmail, LinkedIn, Google Drive/Docs etc &amp;hellip; e como diria um famoso ditado “essa tal de &amp;ldquo;nuvem&amp;rdquo; não existe, são apenas computadores de outras pessoas”. Mas, então quais as implicações da maioria das nossas vidas digitais estar nesses computadores dessas grandes empresas? Essas implicações no geral são positivas para os usuários?&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/intro-selfhosting/fsfe-nocloud.jpg&#34; loading=&#34;lazy&#34; width=&#34;400px&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;Neste texto, que vai ser o primeiro de uma série, vamos falar de uma alternativa simples chamada self hosting, ou seja, hospedar os serviços que usamos em computadores que de fato temos controle, e como fazê-lo.&lt;/p&gt;
&lt;h2 id=&#34;motivos-para-adotar-o-self-hosting&#34;&gt;Motivos para adotar o self-hosting&lt;/h2&gt;
&lt;p&gt;Dentre todos os motivos para adotar o self-hosting, vale destacar os seguintes:&lt;/p&gt;
&lt;h3 id=&#34;segurança&#34;&gt;Segurança&lt;/h3&gt;
&lt;p&gt;Com muita frequência, vemos notícias de vazamentos envolvendo nossos dados, e mesmo assim muitos dos vazamentos não são percebidos pelas próprias empresas e logo não são noticiados, ou seja, a quantidade de vazamentos pode ser ainda maior.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/intro-selfhosting/dados-vazam.jpg&#34; loading=&#34;lazy&#34; width=&#34;400px&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;Hospedando as próprias coisas não é um alvo tão grande para os cibercriminosos quanto das big tech, pense nos incentivos, se comprometer uma big tech o cibercriminoso vai ter os dados de milhões de pessoas , enquanto comprometer sua pequena infra não rendera tanto dados assim. Além disso outro incentivo para atacar as big tech é que muitas delas tem programas de bug bounty para recompensar a descoberta da suas inseguranças.&lt;/p&gt;
&lt;p&gt;E também isso vai te ensinar quais são as boas práticas de segurança e como adota-lá.&lt;/p&gt;
&lt;h3 id=&#34;privacidade&#34;&gt;Privacidade&lt;/h3&gt;
&lt;p&gt;Outro ditado famoso diz que se o serviço é gratuito, o produto é você. E isso é verdade, você está pagando o serviço com seus dados.&lt;/p&gt;
&lt;p&gt;Com selfhosting, seus dados ficam apenas com você, retomando totalmente sua privacidade, afinal foi você quem montou o esquemas de criptografia de disco, gerenciamento de senhas (afinal como as senhas sempre vazam não pode usar a mesma senha em mais de um lugar, é bom se inscrever no &lt;a href=&#34;https://haveibeenpwned.com/&#34;&gt;haveibeenpwned.com&lt;/a&gt; para ser notificado se suas senhas vazaram)&lt;/p&gt;
&lt;h3 id=&#34;aprendizado-e-experiência&#34;&gt;Aprendizado e experiência&lt;/h3&gt;
&lt;p&gt;Pra min essa é a principal vantagem, hospedar suas próprias coisas vai proporcionar um conhecimento e experiência enorme em diversas disciplinas como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sistemas operacionais (principalmente Linux e talvez BSD).&lt;/li&gt;
&lt;li&gt;Redes&lt;/li&gt;
&lt;li&gt;Segurança&lt;/li&gt;
&lt;li&gt;Contêineres&lt;/li&gt;
&lt;li&gt;Linguagens de script&lt;/li&gt;
&lt;li&gt;Infraestrutura como código&lt;/li&gt;
&lt;li&gt;Monitoramento&lt;/li&gt;
&lt;li&gt;E principalmente Inglês&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ter o seu &amp;ldquo;ambiente controlado&amp;rdquo; vai te possibilitar aprender, testar e quebrar as coisas que te proporcionará um aprendizado enorme que num ambiente profissional do trabalho muitas vezes não te permitiria.&lt;/p&gt;
&lt;h2 id=&#34;exemplos-de-aplicações&#34;&gt;Exemplos de aplicações&lt;/h2&gt;
&lt;p&gt;As aplicações mais comuns que normalmente são hospedadas são:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://pi-hole.net/&#34;&gt;Pi-Hole&lt;/a&gt;: Permite bloquear anúncios, domínios que te rastreia e maliciosos a nível de rede, ou seja em todos seus dispositivos não apenas no navegador.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://syncthing.net/&#34;&gt;syncthing&lt;/a&gt;: É um app pra Android no PC que permite sincronizar pastas do seu android com o PC e vice versa. Dessa forma você consegue fazer backup do seu celular e sincronizar arquivos sem precisar de uma nuvem das big tech. Se tiver interesse leia meu texto de como montei meu setup de backups: &lt;a href=&#34;https://caioau.net/blog/backups/&#34;&gt;Como parei de me preocupar e passei a adorar minha solução de backups&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nextcloud.com/&#34;&gt;nextcloud&lt;/a&gt;: É uma solução de nuvem completa, permite sincronizar arquivos como dropbox, sincronizar contatos e agenda, quadro kanban (tipo trello), videochamadas e muito mais.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.home-assistant.io/&#34;&gt;Home Assistant&lt;/a&gt;: Gosta da sua alexa ou google assistant controlando suas luzes e outras coisas da sua smart home? Com o Home assistant você consegue ter seu próprio hub de automação com total privacidade e controle. Gosta de eletrônica? O projeto &lt;a href=&#34;https://esphome.io/&#34;&gt;esphome&lt;/a&gt; consegue integrar suas plaquinhas ESP8266/ESP32  com o Home Assistant.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;considerações-finais&#34;&gt;Considerações finais&lt;/h2&gt;
&lt;p&gt;Com o selfhosting você terá privacidade e controle total dos seus dados e vai aprender muito nessa jornada, nós próximos textos vamos abordar de fato começar.&lt;/p&gt;
&lt;p&gt;Vale uma pequena ressalva, casos você seja uma pessoa dev e só quer colocar seu app no ar, e seu objetivo principal agora é apenas isso, talvez ir pelo caminho do selfhosting não seja a melhor alternativa agora, administração de sistemas é muitas vezes um trabalho de tempo integral e talvez seja melhor usar serviços como &lt;a href=&#34;https://www.heroku.com/&#34;&gt;heroku&lt;/a&gt;, &lt;a href=&#34;https://vercel.com/&#34;&gt;vercel&lt;/a&gt; e &lt;a href=&#34;https://www.netlify.com/&#34;&gt;netlify&lt;/a&gt; que cuidaram de tudo para você, para que consiga fazer essa entrega mais rápido. E quanto tiver disponibilidade estudar e adotar o selfhosting :P&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Utilizando o RSS para &#34;furar a bolha&#34;</title>
      <link>https://caioau.net/blog/guia-rss/</link><category>dicas</category>
		  <category>computando-arte</category>
		  <category>rss</category>
		  <category>aaron-swartz</category>
		  <category>texto</category>
		  <category>raspberry-pi</category>
		  <category>selfhost</category>
		  
      <pubDate>Tue, 27 Apr 2021 13:00:00 -0300</pubDate>
      
      <guid>https://caioau.net/blog/guia-rss/</guid><description>&lt;p&gt;Obs.: Originalmente publicado no &lt;a href=&#34;https://caioau.net/blog/computando-arte/&#34;&gt;computando-arte&lt;/a&gt; dia 27Abr2021&lt;/p&gt;
&lt;p&gt;Já percebeu que o seu feed da rede social está cheio de notícias que fazem você &amp;ldquo;passar raiva&amp;rdquo;? O fenômeno é chamado de doomscrolling, e apesar que de termos mais notícias desse tipo, as redes sociais as exibem com mais frequência.&lt;/p&gt;
&lt;p&gt;A conhecida &amp;ldquo;bolha&amp;rdquo; (filter Bubble) das redes sociais faz com fiquemos mais tempo nas redes, exibindo apenas posts que engajamos mais, e isso está causando diversas consequências nefastas desde potencializar fake news e desinformação a ansiedade e depressão nos internautas.&lt;/p&gt;
&lt;p&gt;Mas se eu te disser que existe uma alternativa? Um meio de receber as informações diretamente, sem nenhum filtro ou algoritmo. É disto que vamos falar hoje, o RSS.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/guia-rss/rss-logo.png&#34; loading=&#34;lazy&#34;
         alt=&#34;Logo do RSS&#34; width=&#34;300px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Logo do RSS&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;o-que-é-orss&#34;&gt;O que é o RSS?&lt;/h2&gt;
&lt;p&gt;RSS é a sigla para Really Simple Syndication, sincronização realmente simples, é um arquivo XML gerado por muitos sites que exibe os posts que o site tem, dessa forma a pessoa com um leitor de RSS consegue acompanhar diversos blog, sites de noticia e etc … centralizados no seu leitor.&lt;/p&gt;
&lt;h2 id=&#34;quem-criou-orss&#34;&gt;Quem criou o RSS?&lt;/h2&gt;
&lt;p&gt;Uma das pessoas responsáveis pela criação do RSS foi o Aaron Swartz, um hacker conhecido por diversas coisas como o Creative Commons e da melhor rede social o Reddit 😛&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/guia-rss/Aaron-Swartz.jpeg&#34; loading=&#34;lazy&#34;
         alt=&#34;Aaron Swartz (2008), Fonte: wikimedia&#34; width=&#34;400px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Aaron Swartz (2008), Fonte: &lt;a href=&#34;https://commons.wikimedia.org/wiki/File:Aaron_Swartz_profile.jpg&#34;&gt;wikimedia&lt;/a&gt;&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Quem se interessou pela historia do Aaron recomendo os seguintes conteúdos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O documentário: &lt;strong&gt;O Menino da Internet: A História de Aaron Swartz&lt;/strong&gt;: &lt;a href=&#34;https://libreflix.org/i/the-internets-own-boy&#34;&gt;LibreFlix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;E pra quem gosta de podcast Engenharia Reversa #1: &lt;a href=&#34;https://anchor.fm/engreversa/episodes/Aaron-Swartz--a-histria-do-ativista-e-co-criador-do-Reddit-e-do-RSS-1-eiif3j/a-a3166kn&#34;&gt;Aaron Swartz, a história do ativista e co-criador do Reddit e do RSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;como-usar-o-rss-parte-1-osleitores&#34;&gt;Como usar o RSS? Parte 1: Os leitores&lt;/h2&gt;
&lt;p&gt;Para usar o RSS você precisa de um leitor de RSS, e não faltam opções! A primeira classe de leitores são os locais, um app local no seu computador ou celular que infelizmente não sincroniza entre seus dispositivos, se isso não é um problema para você é uma ótima opção.&lt;/p&gt;
&lt;p&gt;O &lt;a href=&#34;https://www.thunderbird.net/&#34;&gt;thunderbird&lt;/a&gt; (cliente livre de emails) é a opção mais tradicional.&lt;/p&gt;
&lt;p&gt;Gosta de programas que rodam no terminal? tem o &lt;a href=&#34;https://newsboat.org/&#34;&gt;newsboat&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Para Linux tem o liferea que está disponível na maioria das distribuições.&lt;/p&gt;
&lt;p&gt;No Android tem o &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.nononsenseapps.feeder.play&#34;&gt;Feeder&lt;/a&gt;, que também está disponível na &lt;a href=&#34;https://f-droid.org/&#34;&gt;Fdroid&lt;/a&gt; (loja de aplicativos livres).&lt;/p&gt;
&lt;p&gt;Tem Mac ou iOS? Uma opção ótima é o &lt;a href=&#34;https://netnewswire.com/&#34;&gt;NetNewsWire&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Depois desse monte de opções, se não quiser instalar nada 😛 tem o &lt;a href=&#34;https://nodetics.com/feedbro/&#34;&gt;Feedbro&lt;/a&gt; extensão para os navegadores (chrome e firefox).&lt;/p&gt;
&lt;p&gt;Essas são todas as opções de leitores locais que conheço.&lt;/p&gt;
&lt;p&gt;Vamos agora para as opções online, que permitem sincronizar entre seus dispositivos, é muito prático pois se viu algo interessante no computador pode marcar para ler depois no celular e vice versa.&lt;/p&gt;
&lt;p&gt;O &lt;a href=&#34;https://feedly.com/&#34;&gt;Feedly&lt;/a&gt; é o serviço mais conhecido, tem um plano básico gratuito, bem amigável, para quem está começando recomendo ir com ele.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/guia-rss/feedly.png&#34; loading=&#34;lazy&#34;
         alt=&#34;Captura de tela do Feedly&#34; width=&#34;900px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Captura de tela do Feedly&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Por fim, a opção que eu uso, para quem gosta de software livre e se preocupa com sua privacidade, o Tiny Tiny RSS (&lt;a href=&#34;https://tt-rss.org/&#34;&gt;tt-rss.org&lt;/a&gt;). Você pode instalar numa raspberry-pi e acessar na sua rede local (caso precise acessar fora de casa pode usar serviços como &lt;a href=&#34;https://pagekite.net/&#34;&gt;Pagekite&lt;/a&gt; e &lt;a href=&#34;https://ngrok.com/&#34;&gt;ngrok&lt;/a&gt; para torna-ló acessível pela internet) ou alugar uma cloud e hospedar lá.&lt;/p&gt;
&lt;p&gt;Outra opção para usar o tt-rss é utilizar a instancia do &lt;a href=&#34;https://snopyta.org/&#34;&gt;Snopyta&lt;/a&gt; (grupo sustentado por doações que hospeda diversos softwares livres).&lt;/p&gt;
&lt;h2 id=&#34;como-usar-o-rss-parte-2-assinando-osfeeds&#34;&gt;Como usar o RSS? Parte 2: Assinando os feeds&lt;/h2&gt;
&lt;p&gt;Com um leitor de RSS da sua preferencia funcionando, bora assinar os feeds!&lt;/p&gt;
&lt;p&gt;Vamos começar pelo YouTube, os feeds são assim:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;www.youtube.com/feeds/videos.xml?channel_id=&amp;lt;id_do_canal&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Substitua no final pelo channel_id do canal que quer assinar. Um truque para descobrir o id que tem interesse: Selecione um vídeo, em seguida clique no ícone do canal e daí o channel_id vai aparecer na url. Por exemplo, o feed do canal da Jana Viscardi é o seguinte:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;www.youtube.com/feeds/videos.xml?channel_id=UC9h2vDtQXEiD0O4aVubsYYA&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Caso o truque não funcione, com o vídeo aberto, abra o código fonte da página (use o atalho control+u) e procure (control+f) por &lt;strong&gt;channelId&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Para acessar os feeds da melhor rede social 😛, o Reddit:&lt;/p&gt;
&lt;p&gt;Na &lt;a href=&#34;https://www.reddit.com/wiki/rss&#34;&gt;wiki tem uma seção sobre RSS&lt;/a&gt;, basta colocar um .rss no final. Por exemplo o feed do &lt;a href=&#34;https://old.reddit.com/r/dataisbeautiful/&#34;&gt;/r/dataisbeautiful&lt;/a&gt; é:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;old.reddit.com/r/dataisbeautiful/.rss&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Precisa acompanhar projetos do github? Por exemplo, utilizo aqui em casa um firmware livre no meu roteador, o &lt;a href=&#34;https://openwrt.org/&#34;&gt;OpenWRT&lt;/a&gt;, para acompanhar as releases o feed é:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;github.com/openwrt/openwrt/releases.atom&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;No mesmo padrão para acompanhar os commits, da branch master:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;github.com/openwrt/openwrt/commits/master.atom&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Obs.: Os feeds atom na prática são a mesma coisa que feeds RSS, alguns sites adotam isso.&lt;/p&gt;
&lt;p&gt;Gosta de Newsletters? O serviço &lt;a href=&#34;https://kill-the-newsletter.com/&#34;&gt;kill-the-newsletter.com&lt;/a&gt; cria um e-mail para você cadastrar na newsletter e um feed para assinar.&lt;/p&gt;
&lt;p&gt;Veja o &lt;a href=&#34;https://manualdousuario.net/newsletters-brasileiras/&#34;&gt;diretório de Newsletters brasileiras&lt;/a&gt; que o manual do usuário fez.&lt;/p&gt;
&lt;p&gt;Gosta do medium? o feed é assim: medium.com/feed/nome-do-usuario, por exemplo, o feed do computando arte 🤭 é:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;medium.com/feed/computando-arte&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;E o Twitter? Infelizmente o twitter descontinuou os seus feeds RSS 😞 Mas tem um software livre chamado &lt;a href=&#34;https://github.com/zedeus/nitter&#34;&gt;Nitter&lt;/a&gt; que permite navegar pelos posts do twitter com privacidade e gerar um feed rss.&lt;/p&gt;
&lt;p&gt;Tentei mostrar como chegar nos feeds de alguns serviços populares, mas e os outros? Então muitos sites e podcasts tem o ícone e/ou o link do seu feed, caso não encontre procure no código fonte da pagina por rss ou feed ou xml ou atom e você vai acabar encontrando. A maioria das tecnologias por trás dos sites como o super popular WordPress gera nativamente os feeds RSS.&lt;/p&gt;
&lt;p&gt;Por exemplo, até meu site pessoal simples uso o &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; (gerador de sites estáticos, semelhante ao &lt;a href=&#34;https://jekyllrb.com/&#34;&gt;Jekyll&lt;/a&gt;) e coloquei o link pro meu feed, mas se for procurar no código fonte da página encontrará:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#0087ff&#34;&gt;link&lt;/span&gt; rel=&lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;alternate&amp;#34;&lt;/span&gt; type=&lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;application/rss+xml&amp;#34;&lt;/span&gt; href=&lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#39;https://caioau.net/blog/index.xml&amp;#39;&lt;/span&gt; title=&lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;Blogs on Pagina do caioau&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pronto, aqui você encontra o meu feed RSS:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;caioau.net/blog/index.xml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Por fim, não poderia fazer um texto sobre RSS sem falar do &lt;a href=&#34;https://github.com/RSS-Bridge/rss-bridge&#34;&gt;RSS-Bridge&lt;/a&gt;, software livre que gera feeds RSS apartir de páginas do facebook, instagram (dá até pra seguir hashtags ✨) , Wikipedia e várias outras integrações.&lt;/p&gt;
&lt;h2 id=&#34;considerações-finais&#34;&gt;Considerações finais&lt;/h2&gt;
&lt;p&gt;Com o RSS podemos &amp;ldquo;furar a bolha&amp;rdquo; e receber toda a informação sem filtros e algoritmos. Usando o RSS logo vai perceber uma das razões (além do lucro das big tech 💸) do porque desses filtros, é muita informação! Então use com moderação (para evitar o famoso FOMO, fear of missing out, a sensação de que não posso ficar minutos longe do meu celular pois estou perdendo algo) e tentar uma relação mais saudável com a tecnologia.&lt;/p&gt;
&lt;p&gt;Vale recomendar o episódio #41 do tecnocracia, é um podcast excelente sobre as consequências da tecnologia e vou indicar justamente o ep. #41: &lt;a href=&#34;https://manualdousuario.net/podcast/tecnocracia-41/&#34;&gt;Manual prático para retomar sua atenção do calabouço das redes sociais&lt;/a&gt; com várias dicas 🧘🔕 de como controlar o celular e as redes sociais e não o contrário.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/guia-rss/phone-addiction.jpg&#34; loading=&#34;lazy&#34;
         alt=&#34;Estamos usando a tecnologia? Ou sendo usados? (Fonte)&#34; width=&#34;300px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Estamos usando a tecnologia? Ou sendo usados? (&lt;a href=&#34;https://www.gizmodo.com.au/2014/09/a-vivid-reminder-from-banksy-that-technology-can-enslave-us-all/&#34;&gt;Fonte&lt;/a&gt;)&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Por fim, pra quem gosta do tema, vou indicar alguns conteúdos muito interessantes 🤯&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/guia-rss/meme-SocialDillema.jpeg&#34; loading=&#34;lazy&#34;
         alt=&#34;Crédito: Cryptorave no twitter&#34; width=&#34;500px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Crédito: Cryptorave no &lt;a href=&#34;https://twitter.com/cryptoravebr/status/1307305692185817094?s=19&#34;&gt;twitter&lt;/a&gt;&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;O documentário &lt;a href=&#34;https://www.imdb.com/title/tt11464826/&#34;&gt;Dilema nas Redes (2020)&lt;/a&gt;, disponível na Netflix, bombou! Adoro como ele é muito didático e expões as principais questões do tema, recomendo muito pra quem ainda não viu. Outro doc, é o &lt;a href=&#34;https://www.imdb.com/title/tt11394170/&#34;&gt;Coded Bias (2020)&lt;/a&gt; que foca mais nas tecnologias de reconhecimento facial e seus vieses e contou com a presença da Cathy O&amp;rsquo;Neil, autora do livro fenomenal Weapons of Math Destruction traduzido no Brasil como Algoritmos de Destruição em Massa.&lt;/p&gt;
&lt;p&gt;Uma talk recente, que eu adorei foi a &lt;a href=&#34;https://media.ccc.de/v/rc3-891673-rage_against_the_machine_learning&#34;&gt;Rage Against The Machine Learning&lt;/a&gt;, onde o Dr. Hendrik Heuer fala da sua pesquisa de auditoria dos algoritmos das redes sociais para o interesse público.&lt;/p&gt;
&lt;p&gt;Para podcast, vou indicar outros episódios do tecnocracia, é difícil indicar só alguns, todos são ótimos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;#18: &lt;a href=&#34;https://manualdousuario.net/podcast/tecnocracia-18/&#34;&gt;Em nome do lucro, o YouTube abriu os portões do inferno da desinformação&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;#40: &lt;a href=&#34;https://manualdousuario.net/podcast/tecnocracia-40/&#34;&gt;O filtro alucinógeno do Instagram colocou a humanidade no divã - e alguns no caixão&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;#42: &lt;a href=&#34;https://manualdousuario.net/podcast/tecnocracia-42/&#34;&gt;As empresas que nos colocaram nessa enrascada não nos tirarão dela&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>O que é um tarpit de rede e como colocar um no ar</title>
      <link>https://caioau.net/blog/endlessh/</link><category>dicas</category>
		  <category>computando-arte</category>
		  <category>texto</category>
		  <category>raspberry-pi</category>
		  <category>selfhost</category>
		  <category>devops</category>
		  <category>systemd</category>
		  <category>security</category>
		  <category>linux</category>
		  
      <pubDate>Mon, 18 Jan 2021 13:00:00 -0300</pubDate>
      
      <guid>https://caioau.net/blog/endlessh/</guid><description>&lt;p&gt;Obs.: Originalmente publicado no &lt;a href=&#34;https://caioau.net/blog/computando-arte/&#34;&gt;computando-arte&lt;/a&gt; dia 18Jan2021&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/endlessh/lock-picking.jpeg&#34; loading=&#34;lazy&#34;
         alt=&#34;Foto de Ariel Besagar, Unsplash&#34; width=&#34;600px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Foto de &lt;a href=&#34;https://unsplash.com/@arielbesagar&#34;&gt;Ariel Besagar&lt;/a&gt;, &lt;a href=&#34;https://unsplash.com/photos/Oal07Ai4oTk&#34;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Quando vemos as notícias de cyber ataques, como o WannaCry, é impressionante o impacto desses ataques, infectando milhares de computadores. No caso do WannaCry existia uma atualização de segurança que foi publicada 1 mês antes do ataque, quem não atualizou e estava exposto na internet provavelmente foi infectado. Moral da historia é deve se tomar todas precauções de segurança antes de expor algum computador na Internet. Se tiver interesse, leia as essas estatísticas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zdnet.com/article/this-server-was-online-for-under-a-minute-before-cyber-criminals-started-to-hack-it/&#34;&gt;Em menos de 1 minuto online esse servidor começou a ser atacado&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://web.archive.org/web/20200923072723/https://associationsuccess.org/empower/how-long-until-were-hacked-a-lesson-in-server-vulnerability/&#34;&gt;“Quanto tempo até sermos atacados?” Uma lição sobre vulnerabilidade de servidores&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Assim que se coloca algum serviço na internet pública, em poucos minutos, já vemos que os logs de acesso do ssh (protocolo para acessar remotamente computadores) estão lotados de tentativas de combinações de usuário e senha, para conseguir acesso no servidor. Neste texto vamos mostrar como se proteger e como colocar um tarpit no lugar, uma especie de “armadilha” que deixa os atacantes “parados” perdendo tempo e recursos sem atacar ninguém, protegendo quem está vulnerável.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/endlessh/logs-ssh.jpg&#34; loading=&#34;lazy&#34;
         alt=&#34;Logs de acesso do ssh: Fonte&#34; width=&#34;700px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Logs de acesso do ssh: &lt;a href=&#34;https://dailydoseoftech.com/how-to-view-failed-ssh-login-attempts-on-linux/&#34;&gt;Fonte&lt;/a&gt;&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;começando-pelo-começo-protegendo-seu-servidor-ssh&#34;&gt;Começando pelo começo: protegendo seu servidor ssh&lt;/h2&gt;
&lt;p&gt;De todas as mitigações para proteger seu servidor ssh, a medida mais efetiva é desativar a autenticação por senha e utilizar apenas a autenticação por chaves privadas.
Se ainda não tem uma chave ssh, gere uma com o comando &lt;strong&gt;ssh-keygen&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Copie sua chave pro seu servidor: &lt;code&gt;ssh-copy-id -i ~/.ssh/id_rsa usuario@servidor&lt;/code&gt;, se necessário ajuste o caminho da chave depois do -i .&lt;/li&gt;
&lt;li&gt;Teste se está funcionando: &lt;code&gt;ssh usuario@servidor&lt;/code&gt; , se o ssh conectar sem pedir senha então está tudo certo.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Desativando autenticação por senha: logue no servidor (&lt;code&gt;ssh usuario@servidor&lt;/code&gt;), e edite o arquivo /etc/ssh/sshd_config como root (sudo nano /etc/ssh/sshd_config), por fim encontre a linha PasswordAuthentication e coloque no, não se esqueça de não deixar a linha comentada (tire o # no começo da linha). Por fim, reinicie o ssh,  &lt;code&gt;sudo systemctl restart sshd&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Testando: Tente logar com um usuário que não existe: tipo &lt;code&gt;ssh usr123321@servidor&lt;/code&gt;, e deve aparecer Permission denied (publickey).&lt;/p&gt;
&lt;p&gt;É isso que vai acontecer com quem tentar acessar seu servidor, uma permissão negada sem nem pedir senha.&lt;/p&gt;
&lt;h2 id=&#34;endlessh-o-que-faz-um-tarpit&#34;&gt;endlessh: O que faz um tarpit?&lt;/h2&gt;
&lt;p&gt;A tradução de Tarpit é “poço de areia movediça”, no nosso contexto de redes é um serviço que intencionalmente insere um atraso, atrasando os clientes que estão conectando e os forçando esperar.&lt;/p&gt;
&lt;p&gt;O endlessh é um tarpit de ssh, ele explora um “brecha” na especificação do ssh (&lt;a href=&#34;https://datatracker.ietf.org/doc/html/rfc4253&#34;&gt;RFC 4253&lt;/a&gt;) que diz que quando um cliente está conectando o servidor pode mandar um “banner” (aqueles avisos legais avisando a politica de segurança), mas a especificação não coloca um limite do tamanho desse banner. É assim que o endlessh funciona, um cliente conectando fica esperando mandar o resto do banner, e o endlessh fica mandando o banner de pouco em pouco só pra manter a conexão ativa. Dessa forma o atacante fica gastando banda e recursos sem acontecer nada ao invés de atacar os clientes que de fato estão inseguros.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/endlessh/ssh-banner.png&#34; loading=&#34;lazy&#34;
         alt=&#34;Exemplo de banner ssh, Fonte: https://www.healthcareitnews.com/news/warning-banners-often-work-heres-how-hospitals-can-use-them-ward-hackers&#34; width=&#34;700px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Exemplo de banner ssh, Fonte: &lt;a href=&#34;https://www.healthcareitnews.com/news/warning-banners-often-work-heres-how-hospitals-can-use-them-ward-hackers&#34;&gt;https://www.healthcareitnews.com/news/warning-banners-often-work-heres-how-hospitals-can-use-them-ward-hackers&lt;/a&gt;&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;colocando-o-endlessh-no-ar&#34;&gt;Colocando o endlessh no ar&lt;/h2&gt;
&lt;p&gt;Primeiramente vamos instalar as dependências necessárias:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt install git build-essential&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;O apt , ou similarmente apt-get, é um gerenciador de pacotes de distribuições Debian. Pense no gerenciador de pacotes como a app store de seu celular, um programa que instala, remove e atualiza os softwares do seu sistema. É uma maravilha, pois imagine que precisa atualizar o VLC, ao invés de ir ao site e baixar o instalador mais recente basta fazer sudo apt update, para verificar se existem atualizações e finalmente sudo apt upgrade para baixar e instalar as atualizações.&lt;/p&gt;
&lt;p&gt;O comando acima então instala o git e o pacote build-essential.&lt;/p&gt;
&lt;p&gt;Para saber o que um pacote é, podemos utilizar o info do apt, com &lt;code&gt;apt into build-essential&lt;/code&gt; temos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Package: build-essential
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version: &lt;span style=&#34;color:#00afaf&#34;&gt;12.9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Priority: optional
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Build-Essential: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Section: devel
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Maintainer: Matthias Klose &amp;lt;doko@debian.org&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Installed-Size: &lt;span style=&#34;color:#00afaf&#34;&gt;20.5&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Depends: libc6-dev | libc-dev, gcc (&amp;gt;= &lt;span style=&#34;color:#00afaf&#34;&gt;4&lt;/span&gt;:&lt;span style=&#34;color:#00afaf&#34;&gt;10.2&lt;/span&gt;), g++ (&amp;gt;= &lt;span style=&#34;color:#00afaf&#34;&gt;4&lt;/span&gt;:&lt;span style=&#34;color:#00afaf&#34;&gt;10.2&lt;/span&gt;), make, dpkg-dev (&amp;gt;= &lt;span style=&#34;color:#00afaf&#34;&gt;1.17&lt;/span&gt;.&lt;span style=&#34;color:#00afaf&#34;&gt;11&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Tag: devel::packaging, interface::commandline, role::data, role::program,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; scope::utility, suite::debian
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Download-Size: &lt;span style=&#34;color:#00afaf&#34;&gt;7&lt;/span&gt;,&lt;span style=&#34;color:#00afaf&#34;&gt;704&lt;/span&gt; B
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;APT-Manual-Installed: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;APT-Sources: &amp;lt;https://deb.debian.org/debian&amp;gt; bullseye/main amd64 Packages
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Description: Informational list of build-essential packages
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; This package contains an informational list of packages which are
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; considered essential &lt;span style=&#34;color:#5f8700&#34;&gt;for&lt;/span&gt; building Debian packages.  This package also
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; depends on the packages on that list, to make it easy to have the
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; build-essential packages installed.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Instalamos o build-essential pois ele instala o compilador gcc e o make que vamos utilizar (veja na linha Depends).&lt;/p&gt;
&lt;p&gt;Clonando o projeto:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git clone https://github.com/skeeto/endlessh.git&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Agora precisamos compilar o projeto. Felizmente o projeto tem um makefile, que é um arquivo com os comando de compilações configurados. Dessa forma basta fazer &lt;code&gt;make&lt;/code&gt; e &lt;code&gt;sudo make install&lt;/code&gt; para gerar o binário do endlessh e copiar para /usr/local/bin.&lt;/p&gt;
&lt;p&gt;Agora pasta rodar o endlessh:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/usr/local/bin/endlessh -v&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2021-01-14T01:22:10.091Z Port 2222
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2021-01-14T01:22:10.091Z Delay 10000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2021-01-14T01:22:10.091Z MaxLineLength 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2021-01-14T01:22:10.091Z MaxClients 4096
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2021-01-14T01:22:10.091Z BindFamily IPv4 Mapped IPv6
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O endlessh está rodando na porta 2222, então abra outra aba no terminal e faça ssh usuario@servidor -p 2222 e veja o que acontece … ou seja nada 😆&lt;/p&gt;
&lt;p&gt;Mas como faço pro endlessh iniciar sozinho? Na próxima secção vamos mostrar como :)&lt;/p&gt;
&lt;h2 id=&#34;systemd-como-manejar-serviços&#34;&gt;systemd: Como manejar serviços&lt;/h2&gt;
&lt;p&gt;O systemd é um sistema init, que é o primeiro processo iniciado durante o boot do sistema e ele é responsável por iniciar e gerenciar todos os serviços do sistema. Por exemplo, se está rodando um servidor web com nginx, o systemd vai iniciar o nginx automaticamente e em caso dele travar vai ser iniciado novamente, certificando-se que está sempre no ar.&lt;/p&gt;
&lt;p&gt;Na maioria das distribuições Linux, o systemd é o sistema init padrão, que é controlado através do comando systemctl. Por exemplo: veja o status de todos os serviços: &lt;code&gt;sudo systemctl status --all&lt;/code&gt; . aqui podemos ver a que serviço cada processo está associado.&lt;/p&gt;
&lt;p&gt;Mão na massa: na pasta util do endlessh temos o arquivo para subir o endlessh como serviço, o endlessh.service (dentro da pasta util). Não vamos entrar no detalhe das diretivas definidas desse arquivo, aos interessados veja o artigo sobre &lt;a href=&#34;https://wiki.archlinux.org/title/systemd&#34;&gt;systemd na arch wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vamos apenas mudar apenas uma coisa no arquivo, na linha exec coloque o -v, para ele rodar mostrando mais detalhes, como os exibir os clientes conectando, ficando assim: ExecStart=/usr/local/bin/endlessh -v&lt;/p&gt;
&lt;p&gt;Vamos copiar o arquivo para ser identificado: &lt;code&gt;sudo cp endlessh.service /etc/systemd/system/&lt;/code&gt;, agora faça &lt;code&gt;sudo systemctl daemon-reload&lt;/code&gt; para que seja reconhecido, e então finalmente &lt;code&gt;sudo systemctl enable endlessh&lt;/code&gt;, agora o endlessh está habilitado e deve iniciar automaticamente, para iniciá-lo agora faça &lt;code&gt;sudo systemctl start endlessh&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Só para ter certeza, faça &lt;code&gt;sudo systemctl status endlessh&lt;/code&gt;. Podemos ver o status do serviço&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/endlessh/systemd-status.png&#34; loading=&#34;lazy&#34; width=&#34;700px&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;Como queríamos, o serviço está rodando.&lt;/p&gt;
&lt;p&gt;Também podemos reiniciar o serviço com restart (&lt;code&gt;sudo systemctl restart endlessh&lt;/code&gt;), e stop para parar. Para desativar temos o disable, porém caso o serviço seja dependência de outro serviço ele pode acabar sendo iniciado. Nesses casos utilize o mask que previne que o serviço seja iniciado. Por fim, temos o reload que faz que com o serviço carregue sua nova configuração sem derrubar o serviço.&lt;/p&gt;
&lt;h2 id=&#34;journalctl-acessando-os-logs&#34;&gt;journalctl: Acessando os logs&lt;/h2&gt;
&lt;p&gt;Agora que o endlessh está rodando e é iniciado automaticamente, como faço para acessar a saída dele para vem quem está conectando?&lt;/p&gt;
&lt;p&gt;No systemd os logs de todos serviços podem ser acessados através do comando &lt;strong&gt;journalctl&lt;/strong&gt;, faça &lt;code&gt;sudo journalctl&lt;/code&gt; e veja os logs de todos serviços, inclusive do kernel.&lt;/p&gt;
&lt;p&gt;Para vermos apenas do endlessh: &lt;code&gt;sudo journalctl -u endlessh&lt;/code&gt;&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/endlessh/systemd-logs.png&#34; loading=&#34;lazy&#34;
         alt=&#34;logs do endlessh&#34; width=&#34;700px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;logs do endlessh&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Bora analisar os dados? 🤓&lt;/p&gt;
&lt;p&gt;Podemos pegar a saída do journalctl e jogar num arquivo para ser lido e parseado para ser colocado num dataframe, por exemplo.&lt;/p&gt;
&lt;p&gt;para fazer isso, basta rodar o comando:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;journalctl -u endlessh.service &amp;gt; /tmp/endlessh.log&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Dessa forma os logs estarão em /tmp/endlessh.log. Depois disso basta fazer um programa que lê o arquivo, para fazer suas análises. Mas né, sem tempo irmão 😛. Vamos pela solução simples, usar comandos de processamento de texto, do Unix ✨:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo journalctl -u endlessh --since 2021-01-15 --until 2021-01-16 | grep CLOSE | wc -l
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1044
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Da mesma forma que o operador &amp;gt; joga a saída pra um arquivo o | (chamado de pipe) redireciona a saída para o outro comando, dessa forma o commando acima conta quantas linhas CLOSE tinha. Ou seja no período de 1 dia tivemos 1044 conexões.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo journalctl -u endlessh --since 2021-01-15 --until 2021-01-16 | grep CLOSE | awk &amp;#39;{print $8}&amp;#39; | sort | uniq -c | sort -hr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    705 host=::ffff:218.92.0.210
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     32 host=::ffff:87.251.77.206
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     12 host=::ffff:81.161.63.103
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     10 host=::ffff:221.181.185.220
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      9 host=::ffff:81.161.63.100
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      9 host=::ffff:222.187.222.53
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      9 host=::ffff:221.181.185.148
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      8 host=::ffff:221.181.185.135
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      8 host=::ffff:122.194.229.122
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      7 host=::ffff:218.92.0.211
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      6 host=::ffff:81.161.63.252
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      6 host=::ffff:81.161.63.101
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[...]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O comando acima mostra os IPs que fizeram mais conexões.&lt;/p&gt;
&lt;h2 id=&#34;conclusão&#34;&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Neste texto aprendemos como proteger seu servidor ssh, dessa forma ninguém não autorizado vai conseguir acessar seu servidor. E mostramos como colocar no ar um tarpit para ajudar a proteger quem ainda está vulnerável. Além disso aprendemos como manejar serviços e fazer processamento de texto de uma forma bem rápida, usando ferramentas Unix, que são tarefas muito importantes na administração de sistemas.&lt;/p&gt;
&lt;p&gt;Como continuação dessa jornada de implementar as boas praticas de segurança, sugiro o seguinte tutorial da DigitalOcean: &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/7-medidas-de-seguranca-para-proteger-seus-servidores-pt&#34;&gt;7 Medidas de Segurança para Proteger Seus Servidores&lt;/a&gt;. Para segurança digital pessoal, o vídeo da Eva Galperin é excelente: &lt;a href=&#34;https://www.youtube.com/watch?v=cQI0O7xdNOU&#34;&gt;Especialista em Internet desmistifica cyber segurança&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Como parei de me preocupar e passei a adorar minha solução de backups</title>
      <link>https://caioau.net/blog/backups/</link><category>backup</category>
		  <category>syncthing</category>
		  <category>borgbackup</category>
		  <category>raspberry-pi</category>
		  <category>selfhost</category>
		  <category>healthchecks.io</category>
		  <category>rclone</category>
		  <category>qubesos</category>
		  <category>texto</category>
		  <category>linux</category>
		  <category>monitoramento</category>
		  
      <pubDate>Sat, 12 Sep 2020 18:00:00 -0300</pubDate>
      
      <guid>https://caioau.net/blog/backups/</guid><description>&lt;p&gt;Nesse texto vou mostrar como montei minha solução de backup com algumas propriedades interessantes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sincroniza com Android, usando &lt;a href=&#34;https://syncthing.net/&#34;&gt;syncthing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Caso os dispositivos sejam comprometidos, os backups não poderão ser deletados/sequestrados (modo append-only).&lt;/li&gt;
&lt;li&gt;Monitorado: caso um backup falhe, um alerta será gerado, usando &lt;a href=&#34;https://healthchecks.io/&#34;&gt;healthchecks.io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Caso tudo pegue fogo, como utilizar serviços em nuvem de forma segura.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;edits&#34;&gt;Edits&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;10Apr2021: Adicionado observação para rodar o borg como usuário root e salvar pacotes instalados (&lt;a href=&#34;https://gitlab.com/caioau/caioau.gitlab.io/-/commit/f75023a82473fb7b48595d0053cb5c16776f9e94#50a7b2d5d9e17e53fbb0f9b408c180e970718f44&#34;&gt;diff&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;16Nov2021: Nova localização da pasta do WhatsApp no Android 11 e outras pequenas atualizações (&lt;a href=&#34;https://gitlab.com/caioau/caioau.gitlab.io/-/compare/fe6f29dbaffd28ea032ebde616e2de65793b67d8...master?from_project_id=19243044#50a7b2d5d9e17e53fbb0f9b408c180e970718f44&#34;&gt;diff&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;27Mar2022: Atualização das dependências para o borg 1.2 e dump banco de dados postgres em container (&lt;a href=&#34;https://gitlab.com/caioau/caioau.gitlab.io/-/commit/6ebe56505d3ce6eb214b983ca4db053897e93df9&#34;&gt;diff&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;14Ago2022: Comentário sobre a mudança da operação prune, a partir da versão 1.2 (&lt;a href=&#34;https://gitlab.com/caioau/caioau.gitlab.io/-/commit/af0f8bae10d92f9ac7cc0986c200084c757a5c5b&#34;&gt;diff&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;25Nov2024: Avisos de descontinuação, atualização na configuração do borgmatic e usando systemd (&lt;a href=&#34;https://gitlab.com/caioau/caioau.gitlab.io/-/commit/5d4f9c8652e4e634d4b92f1f20b1104cbe069a63&#34;&gt;diff&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;10dez2025: Atualização do borgmatic (usando a versão do debian trixie) (&lt;a href=&#34;https://gitlab.com/caioau/caioau.gitlab.io/-/commit/0e194fa178d6f86f4b31287ec03fcd61da680620&#34;&gt;diff&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;agradecimentos&#34;&gt;Agradecimentos&lt;/h2&gt;
&lt;p&gt;Primeiramente, esse texto não seria possível sem o apoio do Gustavo Gus, que além de sempre me incentivar e orientar nesses desafios, me introduziu ao borg e revisou esse texto. Confira a pagina pessoal dele: &lt;a href=&#34;https://gus.computer/&#34;&gt;gus.computer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Também gostaria de agradecer os amigues que sempre me apoiam e incentivam a disseminar o conhecimento.&lt;/p&gt;
&lt;h2 id=&#34;backup-uma-medida-para-evitar-desastres&#34;&gt;Backup: Uma medida para evitar desastres&lt;/h2&gt;
&lt;p&gt;Toda forma de armazenamento digital de dados pode falhar. Ter backups é importante, pois precisamos ter cópias reservas caso o disco rígido falhe ou em caso de furto do computador/celular.&lt;/p&gt;
&lt;h3 id=&#34;regra-3-2-1&#34;&gt;Regra 3-2-1&lt;/h3&gt;
&lt;p&gt;A regra 3-2-1 é uma recomendação muito popular de como fazer backups, ela diz:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3: mantenha 3 cópias dos dados importantes: 1 original e mais 2 backups.&lt;/li&gt;
&lt;li&gt;2: salve os backups em 2 tipos de mídias: por exemplo, se você tiver um backup num HD externo e caso o seu computador seja infectado por um ransomware, o seu backup pode ser comprometido.&lt;/li&gt;
&lt;li&gt;1: tenha 1 backup &amp;ldquo;fora de casa&amp;rdquo; (pode ser outro local físico ou na nuvem).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Um vídeo excelente explicando essa regra é: &lt;a href=&#34;https://www.youtube.com/watch?v=rFO6NyLIP7M&#34;&gt;Data Backup: The 3-2-1 Rule &amp;ndash; canal ExplainingComputers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A ideia geral dessa regra é a seguinte: caso tenha um problema no computador, temos uma cópia local de fácil e rápido acesso. E em caso de um desastre no local, temos uma cópia remota reservada que podemos restaurar.&lt;/p&gt;
&lt;h2 id=&#34;começando-pelo-começo-fazendo-backup-do-android-com-syncthing&#34;&gt;Começando pelo começo: Fazendo backup do Android com Syncthing&lt;/h2&gt;
&lt;p&gt;Por padrão, a maioria dos Android já faz backup das fotos (via Google Fotos) e das conversas do WhatsApp (via Google drive). Ou seja, esses dois Apps mais comuns já estão replicados.&lt;/p&gt;
&lt;p&gt;Mas o diabo está nos detalhes. O backup do WhatsApp (e das Fotos), por padrão,  está descriptografado, ou seja, o Google e qualquer um que conseguir acesso a sua conta do Google Drive conseguirá acessar todo o histórico de conversas do WhatsApp (e seus nudes do Google Fotos).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Edit: Em setembro de 2021, o WhatsApp disponibilizou a opção de criptografar os backups, veja as &lt;a href=&#34;https://faq.whatsapp.com/490592613091019&#34;&gt;instruções para habilitar a criptografia dos backups&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Além disso, como já vamos montar uma infraestrutura para fazer backup para o computador é interessante aproveitá-la para fazer backup do seu dispositivo Android com mais controle e privacidade.&lt;/p&gt;
&lt;p&gt;O &lt;a href=&#34;https://syncthing.net/&#34;&gt;Syncthing&lt;/a&gt; é uma forma para sincronizar os seus arquivos entre os seus dispositivos, de forma fácil, segura e sem armazenar na nuvem (ou qualquer dispositivo que não seja seu).&lt;/p&gt;
&lt;h3 id=&#34;como-usar-o-syncthing&#34;&gt;Como usar o Syncthing&lt;/h3&gt;
&lt;p&gt;O primeiro passo pra usar o syncthing é instalar no seu computador. Se você usa um sistema operacional baseado no Debian GNU/Linux, basta digitar &lt;code&gt;sudo apt install syncthing&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Vale observar que a versão do Syncthing que muitas distros empacotam tende a ser uma versão mais antiga, então, é recomendado instalar a versão mais recente pelo site do desenvolvedor.&lt;/p&gt;
&lt;p&gt;Além de GNU/Linux, o Syncthing funciona no Windows, macOS e *BSD.&lt;/p&gt;
&lt;p&gt;No celular, infelizmente ele só está disponível para Android.&lt;/p&gt;
&lt;p&gt;Uma vez instalado no computador, vamos agora instalar no Android: ele está disponível na loja de aplicativos livres &lt;a href=&#34;https://f-droid.org/en/packages/com.github.catfriend1.syncthingandroid/&#34;&gt;F-droid&lt;/a&gt; e na &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.github.catfriend1.syncthingandroid&#34;&gt;Play Store&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Obs.: A partir de dez23 o aplicativo original (&lt;code&gt;com.nutomic.syncthingandroid&lt;/code&gt;) será descontinuado em favor do Syncthing-Fork (&lt;code&gt;com.github.catfriend1.syncthingandroid&lt;/code&gt;). Veja o &lt;a href=&#34;https://github.com/Catfriend1/syncthing-android/blob/main/README.md#switching-from-the-now-deprecated-official-version&#34;&gt;passo-a-passo para migrar pra o novo app&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;linkando-o-computador-com-o-android&#34;&gt;Linkando o computador com o Android&lt;/h4&gt;
&lt;p&gt;Primeiro, no computador,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Execute o Syncthing no computador e uma interface web será aberta.&lt;/li&gt;
&lt;li&gt;clique no canto superior direito: Actions -&amp;gt; Show ID. Um QR code será exibido.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Segundo, no seu dispositivo Android,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Abra o Syncthing no Android e libere as permissões necessárias.&lt;/li&gt;
&lt;li&gt;Toque na aba &amp;ldquo;devices&amp;rdquo;, e depois toque no &amp;ldquo;+&amp;rdquo; no canto superior direito. No campo &amp;ldquo;Device ID&amp;rdquo; no canto direito toque no ícone de QR code.&lt;/li&gt;
&lt;li&gt;Será necessário instalar o app Barcode scanner. Uma vez instalado, toque novamente no ícone do QR code e escaneie o QR code do seu computador.&lt;/li&gt;
&lt;li&gt;Por fim, de um nome para o computador no Android.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Último passo, volte para o seu computador,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Na interface web aberta haverá um aviso informando que um dispositivo novo quer se conectar. Aceite e dê um nome para o seu Android.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;sincronizando-uma-pasta-entre-o-android-e-o-computador&#34;&gt;Sincronizando uma pasta entre o Android e o computador&lt;/h4&gt;
&lt;p&gt;Primeiro, no Android,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;No Syncthing, vá na aba &amp;ldquo;Folder&amp;rdquo;, toque no ícone &amp;ldquo;+&amp;rdquo; no canto superior direito.&lt;/li&gt;
&lt;li&gt;Dê um nome para a pasta, toque no ícone de pasta, e escolha a pasta que quer sincronizar e ative o computador.&lt;/li&gt;
&lt;li&gt;Opcional, mas uma boa pratica, toque na opção &amp;ldquo;file versioning&amp;rdquo; e selecione a opção &amp;ldquo;TrashCan&amp;rdquo;. Dessa forma caso o computador delete um arquivo haverá um backup.&lt;/li&gt;
&lt;li&gt;Por fim, toque no ícone de check (✔️) no canto superior direito.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Segundo, no computador,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Um aviso aparecerá na interface web informando que o dispositivo quer compartilhar uma pasta. Clique em &amp;ldquo;Add&amp;rdquo;, coloque o caminho do local para ser armazenado.&lt;/li&gt;
&lt;li&gt;Opcional, mas uma boa prática, clique na opção &amp;ldquo;file versioning&amp;rdquo; e selecione a opção &amp;ldquo;TrashCan&amp;rdquo;. Dessa forma caso o android delete um arquivo haverá um backup.&lt;/li&gt;
&lt;li&gt;Por fim clique em &amp;ldquo;Save&amp;rdquo;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pronto! Agora a pasta selecionada estará sincronizada entre o computador e o Android.&lt;/p&gt;
&lt;p&gt;Eu pessoalmente sincronizo as seguintes pastas:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/backups/syncthing-pastasCaio.jpg&#34; loading=&#34;lazy&#34;
         alt=&#34;Print do syncthing: sincronizo as pastas: WhatsApp, Pictures, DCIM, Signal e syncthing&#34; width=&#34;400px&#34;/&gt;&lt;figcaption&gt;
            &lt;p&gt;Print do syncthing: sincronizo as pastas: WhatsApp, Pictures, DCIM, Signal e syncthing&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;Edit 16Nov2021: A partir do Android 11 a pasta do WhatsApp mudou: antes era &lt;code&gt;/storage/emulated/0/WhatsApp&lt;/code&gt; agora está em &lt;code&gt;/storage/emulated/0/Android/media/com.whatsapp/WhatsApp&lt;/code&gt; (conforme o printscreen atualizado acima).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;syncthing---considerações-finais&#34;&gt;Syncthing - considerações finais&lt;/h4&gt;
&lt;p&gt;Como não esquecer executar o Syncthing? Para os backups sempre serem feitos, você pode deixar o Syncthing sempre rodando no Android, mas outra opção é abrir uma vez por dia apenas. Um app que me ajuda muito para não esquecer é o &lt;a href=&#34;https://f-droid.org/en/packages/org.isoron.uhabits/&#34;&gt;Habits&lt;/a&gt;, também disponível na F-droid.&lt;/p&gt;
&lt;p&gt;Caso você tenha algum firewall instalado no seu computador, é importante liberar as portas do Syncthing, assim a transferência de dados quando você estiver na sua rede local será bem mais rápida. As portas usadas pelo Syncthing são: &lt;code&gt;22000/tcp&lt;/code&gt; e &lt;code&gt;21027/udp&lt;/code&gt;. Caso utilize o ufw, veja as instruções na documentação oficial &lt;a href=&#34;https://github.com/syncthing/syncthing/tree/main/etc/firewall-ufw&#34;&gt;syncthing-ufw-firewall&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Para melhorar a experiência de usuário, uma boa sugestão é instalar o cliente gráfico do Syncthing disponível no pacote &lt;code&gt;syncthing-gtk&lt;/code&gt;. Caso utilize Windows: &lt;a href=&#34;https://github.com/canton7/SyncTrayzor/&#34;&gt;SyncTrayzor&lt;/a&gt; e macOS: &lt;a href=&#34;https://github.com/syncthing/syncthing-macos&#34;&gt;syncthing-macos&lt;/a&gt;. Com o ícone na barra de tarefas, utilizar o syncthing é muito mais amigável e fácil.&lt;/p&gt;
&lt;p&gt;A seguir no texto vou ensinar como configurar para fazer backup do computador num Raspberry Pi. Pode ser interessante rodar o Syncthing diretamente no Raspberry, dessa forma o backup do Android não dependerá do computador. No site tem instruções de &lt;a href=&#34;https://docs.syncthing.net/users/firewall.html#tunneling-via-ssh&#34;&gt;como acessar a interface web do Syncthing no Raspberry&lt;/a&gt; e as instruções para &lt;a href=&#34;https://docs.syncthing.net/users/autostart.html#using-systemd&#34;&gt;iniciar o Syncthing automaticamente via Systemd&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;backup-do-computador-quando-tudo-era-mato-rsync-e-rssh-para-security&#34;&gt;Backup do computador: quando tudo era mato: rsync e rssh para security&lt;/h2&gt;
&lt;p&gt;Antes de eu conhecer o borg, usava o clássico Rsync para fazer os backups do computador no Raspberry Pi.&lt;/p&gt;
&lt;p&gt;O &lt;a href=&#34;https://rsync.samba.org/&#34;&gt;Rsync&lt;/a&gt; é um programa que faz backups incrementais de forma rápida.&lt;/p&gt;
&lt;p&gt;Como eu tinha um receio de caso meu computador fosse comprometido ele poderia comprometer o Raspberry. Descobri o &lt;a href=&#34;http://www.pizzashack.org/rssh/&#34;&gt;rssh&lt;/a&gt;. Ele é um shell restrito que permite apenas o scp, rsync, sftp etc &amp;hellip; dessa forma caso comprometido, se tentar acessar o raspberry, mesmo com as credenciais corretas não será permitido, exibindo o erro abaixo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;This account is restricted by rssh.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Allowed commands: scp sftp rsync
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;If you believe this is in error, please contact your system administrator&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Usava o Rsync com os seguintes argumentos, executado pelo cron:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rsync -avh --stats -P --log-file=~/rsync-home.log /home/ rasp:/caminho/na/rasp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Obs.: O rssh foi descontinuado em 2019, podemos ter um comportamento semelhante usando o rssync que já vem incluso no rsync: &lt;a href=&#34;https://manpages.debian.org/bookworm/rsync/rrsync.1.en.html&#34;&gt;manpage do rrsync&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;borgbackups-o-santo-graal-dos-backups&#34;&gt;BorgBackups: O Santo graal dos backups&lt;/h2&gt;
&lt;p&gt;Quando conheci o Borgbackup (vulgo borg) minha mente explodiu! Tem tudo que eu sentia que o Rsync não entregava, como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Todos os backups são backups completos, não incrementais, dessa forma tenho o &amp;ldquo;histórico&amp;rdquo; (versionamento) dos arquivos.
&lt;ul&gt;
&lt;li&gt;E muito mais eficiente em espaço! O Borg ocupa bem pouco espaço em disco!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Os backups são criptografados!&lt;/li&gt;
&lt;li&gt;Os backups são comprimidos, dessa forma os meus arquivos csv enormes ficam bem menores.&lt;/li&gt;
&lt;li&gt;Tem um modo, que vamos detalhar logo menos, chamado &amp;ldquo;append-only&amp;rdquo; dessa forma o backup só será acessado para acrescentar novas coisas, não deletar; ótimo para a segurança!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Não por acaso o Borg já foi chamado como o Santo Graal dos backups.&lt;/p&gt;
&lt;h3 id=&#34;borg-em-ação&#34;&gt;Borg em ação:&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ borg create -v --stats /path/to/repo::{hostname}-{now:%Y-%m-%dT%H:%M:%S.%f} /path/to/be/backuped
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Archive name: nuc-2020-09-06T10:38:03.675158
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Archive fingerprint: 8a7d8a10a54211c74e3dff1e3f5f67f65c1a85935d5e2a5ee23adb8d0fce588c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Time (start): Sun, 2020-09-06 10:38:03
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Time (end):   Sun, 2020-09-06 10:38:09
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Duration: 5.21 seconds
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Number of files: &lt;span style=&#34;color:#00afaf&#34;&gt;11645&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Utilization of max. archive size: 0%
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       Original size      Compressed size    Deduplicated size
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;This archive:                4.78 GB              4.38 GB            103.36 MB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;All archives:               84.61 GB             77.59 GB              9.51 GB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       Unique chunks         Total chunks
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Chunk index:                   &lt;span style=&#34;color:#00afaf&#34;&gt;16246&lt;/span&gt;               &lt;span style=&#34;color:#00afaf&#34;&gt;228864&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;------------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Acima temos a saída do borg depois de adicionados alguns arquivos num repositório de backup e executado para fazer um novo backup. Note o quão eficiente em espaço é o borg: se cada backup fosse um &amp;ldquo;tar&amp;rdquo; seriam gastos 84.61 GB . Se o tar fosse comprimido 77.59 GB, mas o borg gastou apenas 9.51GB! Esses números se referem a todos os backups do repositório (all archives).&lt;/p&gt;
&lt;h3 id=&#34;interfaces-do-borg-borgmatic-e-vorta&#34;&gt;Interfaces do Borg: borgmatic e Vorta:&lt;/h3&gt;
&lt;p&gt;O borg é utilizado através da linha de comando. Para automatizar e tornar mais fácil a operação dele temos algumas interfaces:&lt;/p&gt;
&lt;p&gt;Pra quem usa desktop temos o Vorta:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://caioau.net/blog/backups/vorta-borgbackup.png&#34; loading=&#34;lazy&#34; width=&#34;600px&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;Vamos falar mais do Borgmatic, mas para quem quer uma interface gráfica linda pro borg temos o Vorta.&lt;/p&gt;
&lt;h4 id=&#34;borgmatic-torna-o-borg-automático-e-completo&#34;&gt;Borgmatic: Torna o borg automático e completo&lt;/h4&gt;
&lt;p&gt;O Borgmatic permite que através de um único arquivo de configuração yaml seja gerenciado todas as ações do borg, além de coisas como fazer backups de bancos de dados, além de outras integrações.&lt;/p&gt;
&lt;h3 id=&#34;borgmatic-instalando-e-configurando&#34;&gt;Borgmatic: instalando e configurando&lt;/h3&gt;
&lt;p&gt;Podemos instalar através do pacote do Debian com um &lt;code&gt;sudo apt install borgbackup borgmatic&lt;/code&gt;, mas não teremos a versão mais recente. Há três opções: Instalar uma versão mais recente através do &lt;a href=&#34;https://wiki.debian.org/Backports&#34;&gt;backports&lt;/a&gt; ou baixar o binário para o &lt;a href=&#34;https://github.com/borgbackup/borg/releases&#34;&gt;computador&lt;/a&gt; e o &lt;a href=&#34;https://borg.bauerj.eu/&#34;&gt;Raspberry Pi (não oficial)&lt;/a&gt;, ou compilar via pip como demonstrado a seguir.&lt;/p&gt;
&lt;h4 id=&#34;instalando-através-do-gerenciador-de-pacotes-do-python-pip&#34;&gt;Instalando através do gerenciador de pacotes do Python Pip&lt;/h4&gt;
&lt;p&gt;Primeiro, instale as dependências:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get install python3-venv python3-dev python3-pip &lt;span style=&#34;color:#af0000&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#af0000&#34;&gt;&lt;/span&gt;libacl1-dev libacl1 &lt;span style=&#34;color:#af0000&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#af0000&#34;&gt;&lt;/span&gt;libssl-dev openssl &lt;span style=&#34;color:#af0000&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#af0000&#34;&gt;&lt;/span&gt;liblz4-dev libzstd-dev libxxhash-dev &lt;span style=&#34;color:#af0000&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#af0000&#34;&gt;&lt;/span&gt;build-essential &lt;span style=&#34;color:#af0000&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#af0000&#34;&gt;&lt;/span&gt;pkg-config python3-pkgconfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Depois, instale o Borg e Borgmatic (instale no computador e no Raspberry Pi) dentro de um venv:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python3 -m venv ~/venv
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#0087ff&#34;&gt;source&lt;/span&gt; ~/venv/bin/activate
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pip3 install -U pip setuptools wheel
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pip3 install -U borgbackup borgmatic&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Observação: no meu Raspberry Pi 3 demorou 7 minutos os comandos acima.&lt;/p&gt;
&lt;p&gt;Adicionando no $PATH: tive alguns problemas dizendo que o Borg não estava instalado, porém como ele está instalado em &lt;code&gt;~/venv/bin/borg&lt;/code&gt;, só precisei criar um link simbólico com &lt;code&gt;sudo ln -s $(which borg) /usr/bin/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Observação: O método acima funciona bem para a maioria das situações, mas tive alguns problemas de permissão, principalmente com contêineres docker pois os arquivos dos volumes dos mesmos estavam sendo gerados com outro  usuário e grupo do usuário atual. Nesses casos podemos rodar o borg com super usuário root, fazendo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python3 -m venv ~/venv
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#0087ff&#34;&gt;source&lt;/span&gt; ~/venv/bin/activate
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo pip3 install --user -U pip setuptools wheel
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo pip3 install --user -U borgbackup borgmatic&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Se atente para não esquecer o &amp;ndash;user (como root/sudo), pois sem isso o pip vai sobre sobrescrever o python da sua distro, podendo causar problemas.&lt;/p&gt;
&lt;h4 id=&#34;arquivo-de-configuração-borgmatic&#34;&gt;Arquivo de configuração borgmatic&lt;/h4&gt;
&lt;p&gt;Para gerar o seu arquivo de configuração, basta rodar o comando &lt;code&gt;generate-borgmatic-config&lt;/code&gt;. Por exemplo, o arquivo no Borgmatic que uso é:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;source_directories:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - /etc/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - /home/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - /root/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - /var/spool/ &lt;span style=&#34;color:#4e4e4e&#34;&gt;# salvar as crontabs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;repositories:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - path: usuario@rasp:/mnt/bak/borgbackups/borg_pc &lt;span style=&#34;color:#4e4e4e&#34;&gt;# hd_externo na rasp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      label: rasp-hdexterno
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - path: usuario@rasp:/mnt/borgbackups/borg_pc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      label: rasp-sdcard
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - usuario@repo2:/mnt/borgbackups/borg_pc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      label: repo2-hdd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exclude_patterns:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#39;*/.cache/&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#39;*.pyc&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exclude_caches: &lt;span style=&#34;color:#0087ff&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;flags: &lt;span style=&#34;color:#0087ff&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exclude_if_present:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - .nobackup
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;encryption_passphrase: &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;# senha gerada no keepassxc&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;keep_within: 48H
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;keep_hourly: &lt;span style=&#34;color:#00afaf&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;keep_daily: &lt;span style=&#34;color:#00afaf&#34;&gt;7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;keep_weekly: &lt;span style=&#34;color:#00afaf&#34;&gt;12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;keep_monthly: -1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;keep_yearly: -1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;match_archives: &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#39;*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;checks:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - name: repository
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      frequency: &lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt; weeks
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - name: archives
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      frequency: &lt;span style=&#34;color:#00afaf&#34;&gt;2&lt;/span&gt; weeks
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - name: data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      frequency: &lt;span style=&#34;color:#00afaf&#34;&gt;4&lt;/span&gt; weeks
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;healthchecks:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ping_url: https://hc-ping.com/seu_uuid
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;before_backup:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - /script_que_faz_port_knocking
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - docker &lt;span style=&#34;color:#0087ff&#34;&gt;exec&lt;/span&gt; -i postgres_container /bin/bash -c &lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;pg_dumpall -U postgres&amp;#34;&lt;/span&gt; &amp;gt; /caminho/db.sql
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - apt list --installed &amp;gt; ~/apt.installed &lt;span style=&#34;color:#4e4e4e&#34;&gt;# salva a lista de pacotes instalados&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Esse arquivo faz o backup dos diretórios /etc/ e /home/, no Raspberry Pi (no HD externo e outro diretório) e repo2 não incluindo caches.&lt;/p&gt;
&lt;p&gt;Além disso, para não ocupar todo o disco, é definida uma política de retenção (prune). Dessa forma os backups antigos serão deletados. Os backups das últimas 48 horas jamais serão deletados e teremos no máximo dois backups por dia, os backups dos últimos 7 dias, 12 semanais etc &amp;hellip; e mantemos todos os mensais e todos anuais.&lt;/p&gt;
&lt;p&gt;Observação: A partir da versão 1.2 do borg, a operação prune não libera de fato o espaço em disco, foi criada uma nova operação chamada compact, então quando rodar o prune chame o compact em seguida.&lt;/p&gt;
&lt;p&gt;O Borgmatic também checa a integridade dos backups (opção check do borg/borgmatic) (parte consistency), caso os arquivos sejam corrompidos no disco.&lt;/p&gt;
&lt;p&gt;Também salva o dump de bancos de dados PostgreSQL.&lt;/p&gt;
&lt;p&gt;No meu caso, o meu Raspberry Pi está protegido por port knocking (técnica para proteger serviços numa rede). A porta do ssh fica fechada e só abre após uma sequência de portas são batidas apenas para o IP que acertou e por um período de tempo. Então o Borgmatic executa esse script antes do backup.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://healthchecks.io/&#34;&gt;healthchecks.io&lt;/a&gt;: É um serviço que monitora se uma tarefa (no nosso caso o backup) está sendo feito na frequência esperada. Caso o backup deixe de ser feito com exito vamos receber um email e/ou uma mensagem no Telegram (tem outras integrações). Crie sua conta no site e coloque o link que o borgmatic deve pingar.&lt;/p&gt;
&lt;h4 id=&#34;passo-a-passo&#34;&gt;Passo a passo&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Crie o seu arquivo de configuração do Borgmatic, se quiser, adapte a partir do meu arquivo e mude as pastas que você deseja fazer backup (source_directories) e onde serão salvos (repositories).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Vale lembrar que devido ao cartão SD do Raspberry Pi, não é aconselhável salvar nada crítico nele pois depois de algum tempo o cartão simplesmente corrompe e tudo é perdido. Há algumas boas práticas para mitigar isso, mas não há milagres! Então conecte um HD externo criptografado no Raspberry Pi e salve os backups lá.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;
&lt;p&gt;Gere sua senha segura usando um gerenciador de senhas como o KeePassXC e coloque no campo &lt;code&gt;encryption_passphrase&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Por fim, crie a sua conta no &lt;a href=&#34;https://healthchecks.io/&#34;&gt;healthchecks.io&lt;/a&gt;, configure as integrações (se quer receber alertas por email, Telegram etc &amp;hellip;), e coloque o link do check no arquivo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Com o seu arquivo de configuração pronto, salve-o em: &lt;code&gt;~/.config/borgmatic/config.yaml&lt;/code&gt; (se for rodar como root coloque-o em &lt;code&gt;/etc/borgmatic/config.yaml&lt;/code&gt;, certifique-se que suas permissões seja &lt;code&gt;0600&lt;/code&gt; e pertence a &lt;code&gt;root:root&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;O próximo passo é criar uma chave ssh para conectar no seu Raspberry Pi,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;No terminal, faça: &lt;code&gt;ssh-keygen -t ed25519 -C &amp;quot;usuario@PC.borg&amp;quot;&lt;/code&gt;, lembrando que essa chave não pode ter senha (então só de um enter sem digitar nada), pois o backup vai rodar automaticamente. Caso já tenha uma chave importante com senha que usa pra outras coisas é interessante ter uma chave dedicada pro borg sem senha (configure seu &lt;a href=&#34;https://wiki.archlinux.org/index.php/SSH_keys#Managing_multiple_keys&#34;&gt;~/.ssh/config&lt;/a&gt; para controlar qual chave usar etc &amp;hellip;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copiando a sua nova chave ssh no Raspberry Pi: &lt;code&gt;ssh-copy-id -i ~/.ssh/id_ed25519 usuario@192.168.1.160&lt;/code&gt; (ajuste o usuário e o IP) e digite a senha, depois veja se fazendo &lt;code&gt;ssh usuario@192.168.1.160&lt;/code&gt; ele logará no Raspberry Pi automaticamente sem pedir senha.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Para iniciar o repositório: &lt;code&gt;borgmatic init -e repokey-blake2&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adicionando no crontab: para rodar o backup automaticamente, vamos colocar para ser executado via cron, faça:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ crontab -e
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00afaf&#34;&gt;5&lt;/span&gt; */2 * * * ~/.local/bin/borgmatic create --stats --files --log-file ~/borgmatic.log --verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt; --monitoring-verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt; --log-file-verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Repare que a opção &lt;code&gt;create&lt;/code&gt; do borgmatic foi especificada, dessa forma o borgmatic vai apenas criar o backup, caso queira que o Borgmatic além de criar seja feito o &lt;code&gt;check&lt;/code&gt; e &lt;code&gt;prune&lt;/code&gt;, retire a opção &lt;code&gt;create&lt;/code&gt;, dessa forma o Borgmatic fará o &lt;code&gt;prune&lt;/code&gt;, depois o &lt;code&gt;create&lt;/code&gt; e por fim o &lt;code&gt;check&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Isso fará que o backup seja executado a cada 2 horas no minuto 5, dica: o site &lt;a href=&#34;https://crontab.guru/&#34;&gt;crontab.guru&lt;/a&gt; ajuda a entender a sintaxe do cron.&lt;/p&gt;
&lt;p&gt;Observação, se optou por rodar o borg como root (por causa dos problemas de permissão), faça:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo crontab -e -u root
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00afaf&#34;&gt;5&lt;/span&gt; */2 * * * &lt;span style=&#34;color:#0087ff&#34;&gt;PATH&lt;/span&gt;=&lt;span style=&#34;color:#0087ff&#34;&gt;$PATH&lt;/span&gt;:/usr/bin:/usr/local/bin /root/.local/bin/borgmatic create --stats --files --log-file ~/borgmatic.log --verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt; --monitoring-verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt; --log-file-verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Por fim, é preciso testar se o backup funcionou. Vamos restaurar um backup feito pelo borg para ver se todos os arquivos estão lá e se tudo funciona como deveria:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ borgmatic list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;t430-2020-09-07T16:00:09.936979  Mon, 2020-09-07 16:00:12 [c9...5f]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;t430-2020-09-07T16:24:16.752983  Mon, 2020-09-07 16:24:21 [fa...97]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;t430-2020-09-07T16:28:19.692725  Mon, 2020-09-07 16:28:22 [93...9d] &amp;lt;--(mais recente)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mkdir /tmp/borg_teste
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ borg mount /mnt/bak/borgbackups/borg_pc/::t430-2020-09-07T16:28:19.692725 /tmp/borg_teste/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ &lt;span style=&#34;color:#0087ff&#34;&gt;cd&lt;/span&gt; /tmp/borg_teste/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ du -shxc *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;6.1G	home
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;6.1G	total&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Repare como o du reportou que temos 6 GB de arquivos, ou seja, tudo funcionando como deveria! Outra opção é gerar um tar com a opção &lt;code&gt;export-tar&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;modo-append-only&#34;&gt;Modo append-only&lt;/h4&gt;
&lt;p&gt;Chegamos na esperada parte do modo &lt;code&gt;append-only&lt;/code&gt;. Esse modo faz com que o borg não possa deletar ou sobrescrever os dados inseridos anteriormente.&lt;/p&gt;
&lt;p&gt;Afim de habilitar esse modo, nós vamos especificar que quando conectado no Raspberry Pi, o Borg deve rodar no modo append-only. No Raspberry Pi edite o arquivo &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt;, e adicione:&lt;/p&gt;
&lt;p&gt;Edite o arquivo para ficar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~/.ssh/authorized_keys:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#0087ff&#34;&gt;command&lt;/span&gt;=&lt;span style=&#34;color:#00afaf&#34;&gt;&amp;#34;borg serve --append-only --restrict-to-path /mnt/bak/borgbackups/borg_pc&amp;#34;&lt;/span&gt;,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGc+rutXNxxYCjFpD5v83kDXUVA8Ffh3dWlIeBOc5HgU usuario@PC.borg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Adicionamos antes da chave o seguinte: &lt;code&gt;command=&amp;quot;borg serve --append-only --restrict-to-path /mnt/bak/borgbackups/borg_pc&amp;quot;,restrict&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Repare que o borg está sendo instanciado com a opção &lt;code&gt;--append-only&lt;/code&gt; e opcionalmente passamos o &lt;code&gt;--restrict-to-path&lt;/code&gt; que restringe quais repositórios aquela chave pode acessar (pode ser especificada múltiplas vezes).&lt;/p&gt;
&lt;p&gt;Para testar, faça &lt;code&gt;ssh usuario@192.168.1.160&lt;/code&gt; e espere alguns segundos, dê um enter e aparecerá:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ssh usuario@192.168.1.160
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PTY allocation request failed on channel &lt;span style=&#34;color:#00afaf&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#0087ff&#34;&gt;$LOG&lt;/span&gt; ERROR borg.archiver Remote: Borg 1.1.13: Got unexpected RPC data format from client.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Connection to 192.168.1.160 closed.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Repare que agora não é mais aberto um shell como antes, ele executa o borg assim que conecta.&lt;/p&gt;
&lt;p&gt;Prune no modo append-only: com o append-only não conseguiremos que o borg faça o prune (deletar backups antigos, pra não encher o disco), nesse caso, copiei o config.yaml do borgmatic no Raspberry Pi e rodo prune e check de lá (não esqueça que na parte de repositories é preciso especificar apenas o caminho da pasta, sem usuario@rasp)(via cron tmb)(também criei um check no healtchecks dedicado pro prune e check).&lt;/p&gt;
&lt;p&gt;O crontab na raspberry pi é o seguinte:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo crontab -e -u borguser
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#0087ff&#34;&gt;PATH&lt;/span&gt;=/home/borguser/.local/bin:/usr/local/bin:/usr/bin:/bin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e4e4e&#34;&gt;# prune (e compact) executado diariamente&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00afaf&#34;&gt;42&lt;/span&gt; &lt;span style=&#34;color:#00afaf&#34;&gt;0&lt;/span&gt; * * * borgmatic prune compact --stats --list --log-file ~/borgmatic-prune.log -c ~/.config/borgmatic.d/* --verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt; --monitoring-verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt; --log-file-verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;2&lt;/span&gt; &amp;gt; /dev/null 2&amp;gt;&amp;amp;&lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e4e4e&#34;&gt;# checagem da integridade (check) executada semanalmente&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00afaf&#34;&gt;21&lt;/span&gt; &lt;span style=&#34;color:#00afaf&#34;&gt;2&lt;/span&gt; * * &lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt; borgmatic check --log-file ~/borgmatic-checks.log -c ~/borgmatic.d/* --verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt; --monitoring-verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt; --log-file-verbosity &lt;span style=&#34;color:#00afaf&#34;&gt;2&lt;/span&gt; &amp;gt; /dev/null 2&amp;gt;&amp;amp;&lt;span style=&#34;color:#00afaf&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;trocando-o-cron-pelo-timer-do-systemd&#34;&gt;Trocando o cron pelo timer do systemd&lt;/h4&gt;
&lt;p&gt;Inicialmente estava usando o cron para disparar os backups, mas acabei esbarando por duas questões:&lt;/p&gt;
&lt;p&gt;Primeiro (e mais importante): Quando o backup inicia o computador fica significativamente mais lento.&lt;/p&gt;
&lt;p&gt;E nos servidores o arquivo de log acaba enchendo, claro que podemos usar o &lt;a href=&#34;https://wiki.archlinux.org/title/Logrotate&#34;&gt;logrotate&lt;/a&gt; para configurar um setup para rotação dos logs, mas no systemd é nativo.&lt;/p&gt;
&lt;p&gt;Por essas razões acabei migrando do cron para os timers do systemd.&lt;/p&gt;
&lt;p&gt;Para usar o systemd precisamos definir o arquivo de configuração do serviço que roda o borgmatic e um timer que o dispara.&lt;/p&gt;
&lt;p&gt;Definindo o serviço:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-systemd&#34; data-lang=&#34;systemd&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e4e4e&#34;&gt;# /etc/systemd/system/borgmatic.service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#5f8700&#34;&gt;[Unit]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Description=&lt;span style=&#34;color:#00afaf&#34;&gt;borgmatic backup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Wants=&lt;span style=&#34;color:#00afaf&#34;&gt;network-online.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;After=&lt;span style=&#34;color:#00afaf&#34;&gt;network-online.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ConditionACPower=&lt;span style=&#34;color:#00afaf&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e4e4e&#34;&gt;# roda apenas se plugado na tomada, se quiser rodar sempre comente a linha acima.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Documentation=&lt;span style=&#34;color:#00afaf&#34;&gt;https://torsion.org/borgmatic/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#5f8700&#34;&gt;[Service]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Type=&lt;span style=&#34;color:#00afaf&#34;&gt;oneshot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ProtectSystem=&lt;span style=&#34;color:#00afaf&#34;&gt;full&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e4e4e&#34;&gt;# protege algumas pastas como /boot e /etc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Nice=&lt;span style=&#34;color:#00afaf&#34;&gt;19&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CPUSchedulingPolicy=&lt;span style=&#34;color:#00afaf&#34;&gt;batch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IOSchedulingClass=&lt;span style=&#34;color:#00afaf&#34;&gt;best-effort&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IOSchedulingPriority=&lt;span style=&#34;color:#00afaf&#34;&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IOWeight=&lt;span style=&#34;color:#00afaf&#34;&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e4e4e&#34;&gt;# diminui a prioriodade de io&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Restart=&lt;span style=&#34;color:#00afaf&#34;&gt;no&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LogRateLimitIntervalSec=&lt;span style=&#34;color:#00afaf&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ExecStartPre=&lt;span style=&#34;color:#00afaf&#34;&gt;sleep 1m&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e4e4e&#34;&gt;# espera 1min antes de começar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ExecStart=&lt;span style=&#34;color:#00afaf&#34;&gt;borgmatic --stats --files -c /etc/borgmatic/config.yaml --monitoring-verbosity 1 --syslog-verbosity -1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;E o timer: Nesse exemplo o backup vai rodar duas vezes por dia, uma as 2:10 da manhã e a outra as 4:10 da tarde (a sintaxe é um pouco diferente do as expressões cron). Repare no delay random de 10m, que introduz alguns minutos aleatoriamente para evitar gargalos quando muitas maquinas executam em horarios similares.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;
&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 1
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 2
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 3
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 4
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 5
&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 7
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;background-color:#323232&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 8
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt; 9
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;10
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;11
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#454545&#34;&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;&lt;code class=&#34;language-systemd&#34; data-lang=&#34;systemd&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e4e4e&#34;&gt;# /etc/systemd/system/borgmatic.timer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#5f8700&#34;&gt;[Unit]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Description=&lt;span style=&#34;color:#00afaf&#34;&gt;Run borgmatic backup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#5f8700&#34;&gt;[Timer]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;OnCalendar=&lt;span style=&#34;color:#00afaf&#34;&gt;*-*-* 16:10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;OnCalendar=&lt;span style=&#34;color:#00afaf&#34;&gt;*-*-* 02:10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#323232&#34;&gt;&lt;span&gt;RandomizedDelaySec=&lt;span style=&#34;color:#00afaf&#34;&gt;10m&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Persistent=&lt;span style=&#34;color:#00afaf&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#5f8700&#34;&gt;[Install]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WantedBy=&lt;span style=&#34;color:#00afaf&#34;&gt;timers.target&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Habilitando o timer:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl &lt;span style=&#34;color:#0087ff&#34;&gt;enable&lt;/span&gt; borgmatic.service
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e4e4e&#34;&gt;# vendo os logs:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo journalctl -u borgmatic&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;borg-no-qubesos&#34;&gt;Borg no QubesOS&lt;/h4&gt;
&lt;p&gt;O cron não vem instalado por padrão nos templates do QubesOS, instale o pacote &lt;code&gt;cronie&lt;/code&gt; para templates Fedora e &lt;code&gt;cron&lt;/code&gt; templates Debian, e faça &lt;code&gt;qvm-service --enable work crond&lt;/code&gt; no dom0 no Debian é apenas cron, para habilitar o cron na Qube &lt;code&gt;work&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;como-usar-a-nuvem-de-maneira-segura&#34;&gt;Como usar a nuvem de maneira segura&lt;/h2&gt;
&lt;p&gt;No caso do borg, a criptografia já é nativa, então basta dar um jeito de &amp;ldquo;transferir&amp;rdquo; os arquivos do borg para a nuvem, nesses casos podemos usar o &lt;a href=&#34;https://rclone.org/&#34;&gt;rclone.org&lt;/a&gt; que permite acessar os provedores de nuvem populares como Google Drive, Dropbox etc&amp;hellip;&lt;/p&gt;
&lt;p&gt;Outra opção é usar um provedor que suporta o borg, da mesma forma que fizemos com o Raspberry Pi com uma VPS genérica pode ser usada para mesma finalidade. Algumas hospedagens populares são: DigitalOcean, Linode, vultr, buyvm, ovh e hetzner.&lt;/p&gt;
&lt;p&gt;Por fim, outra opção é usar um provedor que integra o borg: O &lt;a href=&#34;https://www.rsync.net/&#34;&gt;rsync.net&lt;/a&gt; suporta e tem preço promocional para quem usar o borg, a hetzner tem &lt;a href=&#34;https://www.hetzner.com/storage/storage-box&#34;&gt;storage box&lt;/a&gt; e o meu favorito é o &lt;a href=&#34;https://www.borgbase.com/&#34;&gt;borgbase.com&lt;/a&gt; que tem um plano gratuito com 10 GB.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
