<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Self-Hosted on /var/log/janio</title><link>https://devops.sarmento.org/tags/self-hosted/</link><description>Recent content in Self-Hosted on /var/log/janio</description><generator>Hugo</generator><language>pt-BR</language><lastBuildDate>Fri, 17 Apr 2026 10:46:00 +0000</lastBuildDate><atom:link href="https://devops.sarmento.org/tags/self-hosted/index.xml" rel="self" type="application/rss+xml"/><item><title>De WordPress a Hugo: Temas Não São o Que Você Pensa</title><link>https://devops.sarmento.org/posts/de-wordpress-a-hugo-temas-nao-sao-o-que-voce-pensa/</link><pubDate>Sat, 04 Apr 2026 14:59:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/de-wordpress-a-hugo-temas-nao-sao-o-que-voce-pensa/</guid><description>&lt;p&gt;Quem trabalha com WordPress por tempo suficiente desenvolve uma intuição sobre o que um tema é e o que ele faz. Essa intuição funciona bem dentro do ecossistema — ela guia decisões sobre estrutura de arquivos, sobre onde colocar lógica e sobre como estender funcionalidades. O problema aparece quando você migra para o Hugo e tenta aplicar esse mesmo modelo mental.&lt;/p&gt;
&lt;p&gt;As palavras são parecidas — templates, layouts, partials — mas o que elas significam na prática é radicalmente diferente. Um tema no WordPress é, em essência, uma aplicação PHP completa que consulta banco de dados, toma decisões de lógica e renderiza HTML, tudo no mesmo lugar. Um tema no Hugo é uma coleção de templates que recebe dados já processados e se limita a apresentá-los. Parece uma diferença sutil até você sentar para construir o seu primeiro layout e perceber que quase tudo que você sabia precisa ser reaprendido.&lt;/p&gt;</description></item><item><title>Apagando e-mails automaticamente no Apple Mail com AppleScript + launchd</title><link>https://devops.sarmento.org/posts/apagando-e-mails-automaticamente-no-apple-mail-com-applescript-launchd/</link><pubDate>Mon, 30 Mar 2026 20:24:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/apagando-e-mails-automaticamente-no-apple-mail-com-applescript-launchd/</guid><description>&lt;p&gt;Minha caixa de entrada vive cheia de notificações com assunto no formato &lt;code&gt;[Ticket ID: 12345] Atualização do chamado&lt;/code&gt;. Elas são úteis por algumas horas e depois viram ruído. Não são e-mails que precisam ser arquivados, respondidos ou revisitados, então acabam só ocupando espaço mental.&lt;/p&gt;
&lt;p&gt;Apagar manualmente é aquele tipo de tarefa pequena que nunca vira prioridade, mas que cobra juros em distração. Então resolvi tratar como qualquer outro problema recorrente: automatizar localmente, sem depender de serviço externo, sem &lt;em&gt;webhook&lt;/em&gt; e sem integrações. A ideia é rodar periodicamente um script que mova para o lixo as &lt;a href="https://devops.sarmento.org/experiencias-com-mensagens-subliminares/"&gt;mensagens&lt;/a&gt; cujo assunto contenha um padrão específico e que tenham mais de 48 horas.&lt;/p&gt;</description></item><item><title>Tailscale no Homelab — Acesso Remoto sem Abrir Portas</title><link>https://devops.sarmento.org/posts/tailscale-no-homelab-acesso-remoto-sem-abrir-portas/</link><pubDate>Sun, 29 Mar 2026 21:58:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/tailscale-no-homelab-acesso-remoto-sem-abrir-portas/</guid><description>&lt;p&gt;Quem mantém um homelab — ou mesmo um único Raspberry Pi rodando serviços — eventualmente esbarra no mesmo obstáculo: como acessar esses dispositivos de fora da rede local? A resposta clássica envolve abrir portas no roteador, configurar port forwarding, lidar com IP dinâmico via DDNS e torcer para que nenhum bot descubra aquela porta SSH exposta na internet. Funciona, mas a superfície de ataque cresce a cada porta aberta, e a manutenção vira uma dor de cabeça silenciosa que só aparece quando algo quebra.&lt;/p&gt;</description></item><item><title>Comentários em sites estáticos com Isso — leve, self-hosted e sem rastreamento</title><link>https://devops.sarmento.org/posts/comentarios-em-sites-estaticos-com-isso-leve-self-hosted-e-sem-rastreamento/</link><pubDate>Sat, 28 Mar 2026 13:34:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/comentarios-em-sites-estaticos-com-isso-leve-self-hosted-e-sem-rastreamento/</guid><description>&lt;p&gt;Um &lt;a href="https://devops.sarmento.org/posts/o-lado-b-do-site-gratis-limites-e-alternativas-para-hugo-github-cloudflare-pages-pages-cms/"&gt;site estático&lt;/a&gt; não tem backend. Não tem banco de dados, não tem servidor de aplicação processando requisições — e é exatamente isso que o torna rápido, barato e resiliente. Mas essa simplicidade cobra um preço quando você quer algo que dependa de estado persistente, e comentários são o caso mais óbvio. No WordPress ou Ghost, o sistema de comentários faz parte da aplicação. Num site gerado por Hugo, Jekyll ou Eleventy, essa camada simplesmente não existe.&lt;/p&gt;</description></item><item><title>Expondo serviços do homelab na internet com Cloudflare Tunnel</title><link>https://devops.sarmento.org/posts/expondo-servicos-do-homelab-na-internet-com-cloudflare-tunnel/</link><pubDate>Fri, 27 Mar 2026 18:24:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/expondo-servicos-do-homelab-na-internet-com-cloudflare-tunnel/</guid><description>&lt;p&gt;No &lt;a href="https://devops.sarmento.org/posts/ssh-atras-de-nat-ssh-jcom-resolve/"&gt;post anterior&lt;/a&gt;, mostrei como o SSH-J.com resolve um problema específico: acessar via SSH uma máquina que está atrás de NAT, sem abrir portas no roteador e sem depender de IP público. O túnel reverso funciona bem para sessões interativas e transferência de arquivos, e o SSH-J.com como jump host torna tudo trivial de configurar. Para SSH, continua sendo a solução mais simples que conheço.&lt;/p&gt;
&lt;p&gt;Mas SSH é só uma peça do quebra-cabeça. Quem mantém um homelab — mesmo que seja só um mini PC embaixo da mesa ou um Raspberry Pi no canto da sala — inevitavelmente acaba rodando serviços web: um leitor de RSS, um dashboard de monitoramento, um Gitea, um Jellyfin, um &lt;a href="https://devops.sarmento.org/posts/immich-suas-fotos-seu-servidor-suas-regras/"&gt;Immich&lt;/a&gt;. Esses serviços escutam em portas HTTP locais e funcionam perfeitamente enquanto você está na mesma rede. O problema aparece quando você quer acessá-los de fora — do escritório, do celular no ônibus, de qualquer lugar que não seja a sua rede local.&lt;/p&gt;</description></item><item><title>Monitorando arquivos e pastas no Linux com systemd path units (e inotifywait para quem não tem root)</title><link>https://devops.sarmento.org/posts/monitorando-arquivos-e-pastas-no-linux-com-systemd-path-units-e-inotifywait-para-quem-nao-tem-root/</link><pubDate>Thu, 26 Mar 2026 19:27:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/monitorando-arquivos-e-pastas-no-linux-com-systemd-path-units-e-inotifywait-para-quem-nao-tem-root/</guid><description>&lt;p&gt;No &lt;a href="https://devops.sarmento.org/posts/monitorando-arquivos-e-pastas-com-launchd-watchpaths-na-pratica/"&gt;post anterior&lt;/a&gt;, o launchd do macOS monitorava arquivos e diretórios com &lt;code&gt;WatchPaths&lt;/code&gt; para disparar scripts automaticamente quando algo mudava. O modelo é reativo — em vez de rodar um backup a cada hora ou uma conversão a cada cinco minutos, o sistema observa o caminho no disco e só executa o job quando detecta uma modificação real. Sem polling, sem desperdício, sem janela de vulnerabilidade entre a mudança e a ação.&lt;/p&gt;</description></item><item><title>Immich: suas fotos, seu servidor, suas regras</title><link>https://devops.sarmento.org/posts/immich-suas-fotos-seu-servidor-suas-regras/</link><pubDate>Wed, 25 Mar 2026 07:18:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/immich-suas-fotos-seu-servidor-suas-regras/</guid><description>&lt;p&gt;Existe um momento em que todo mundo para e pensa sobre onde estão as suas fotos. Geralmente acontece quando o Google manda aquele email simpático avisando que o armazenamento gratuito acabou — e que por apenas alguns reais por mês você pode continuar guardando suas memórias no servidor deles. É um empurrãozinho gentil na direção de uma assinatura mensal que, somada ao longo de anos, custa mais do que um HD externo de vários terabytes. Mas o preço em dinheiro é só a parte mais óbvia da equação. Existe um custo mais sutil em deixar todas as suas fotos, vídeos e memórias pessoais nas mãos de uma empresa que lucra com dados — e é sobre esse custo que vale a pena conversar antes de falar de qualquer ferramenta.&lt;/p&gt;</description></item><item><title>O Lado B do Site Grátis: Limites e Alternativas para Hugo + GitHub + Cloudflare Pages + Pages CMS</title><link>https://devops.sarmento.org/posts/o-lado-b-do-site-gratis-limites-e-alternativas-para-hugo-github-cloudflare-pages-pages-cms/</link><pubDate>Tue, 24 Mar 2026 10:45:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/o-lado-b-do-site-gratis-limites-e-alternativas-para-hugo-github-cloudflare-pages-pages-cms/</guid><description>&lt;p&gt;No &lt;a href="https://devops.sarmento.org/posts/como-criei-este-blog-sem-gastar-um-centavo-e-sem-tocar-em-wordpress/"&gt;post anterior&lt;/a&gt;, montamos um blog completo com Hugo, GitHub, Cloudflare Pages e Pages CMS sem gastar um centavo. A stack funciona, é rápida, e para a maioria dos blogs pessoais vai continuar funcionando por muito tempo sem pedir nada em troca. Mas &amp;ldquo;grátis&amp;rdquo; não significa &amp;ldquo;sem limites&amp;rdquo;, e entender onde estão as paredes antes de bater nelas é o tipo de coisa que poupa dor de cabeça lá na frente.&lt;/p&gt;</description></item><item><title>Systemd Timers: hora de aposentar o cron</title><link>https://devops.sarmento.org/posts/systemd-timers-hora-de-aposentar-o-cron/</link><pubDate>Mon, 23 Mar 2026 06:21:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/systemd-timers-hora-de-aposentar-o-cron/</guid><description>&lt;p&gt;Se você administra servidores Debian ou Ubuntu há algum tempo, provavelmente tem uma relação de conforto com o cron. Uma linha no crontab, cinco campos de agendamento e o caminho do script — pronto, resolvido. O cron funciona assim desde os anos 1970, e essa simplicidade é justamente o que o manteve relevante por tanto tempo.&lt;/p&gt;
&lt;p&gt;O problema é que &amp;ldquo;funciona&amp;rdquo; e &amp;ldquo;funciona bem em 2026&amp;rdquo; são coisas diferentes. Quando um job falha silenciosamente às três da manhã, quando você precisa descobrir qual dos vinte crontabs espalhados pelo sistema contém aquela tarefa específica, ou quando o servidor reinicia e simplesmente perde a execução que deveria ter acontecido durante o downtime — nesses momentos o cron mostra que foi projetado para uma época em que as expectativas sobre observabilidade e resiliência eram outras.&lt;/p&gt;</description></item></channel></rss>