<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Self-hosting on Blog do Aquasp</title><link>https://aquasp.blog/pt/tag/self-hosting/</link><description>Recent content in Self-hosting on Blog do Aquasp</description><generator>Hugo -- gohugo.io</generator><language>pt-br</language><lastBuildDate>Fri, 15 May 2026 15:53:11 +0000</lastBuildDate><atom:link href="https://aquasp.blog/pt/tag/self-hosting/index.xml" rel="self" type="application/rss+xml"/><item><title>Corrigindo a tela em branco/cinza nas páginas de álbum do Finamp (player de música do Jellyfin)</title><link>https://aquasp.blog/pt/fixing-blank-grey-screen-on-album-pages-in-finamp-jellyfin-music-player/</link><pubDate>Mon, 15 Dec 2025 15:02:30 +0000</pubDate><guid>https://aquasp.blog/pt/fixing-blank-grey-screen-on-album-pages-in-finamp-jellyfin-music-player/</guid><description>&lt;p&gt;Se você usa o &lt;strong&gt;Finamp&lt;/strong&gt; para ouvir ou baixar músicas do seu servidor &lt;strong&gt;Jellyfin&lt;/strong&gt; e está dando de cara com uma tela em branco (ou cinza) ao abrir a página de um álbum — em que nenhuma faixa carrega e às vezes é preciso forçar o fechamento do app —, esse é um problema comum, principalmente depois de atualizar o Jellyfin para a versão 10.11.x.&lt;/p&gt;&#10;&lt;p&gt;Esse problema costuma acontecer por causa de mudanças na forma como as versões mais novas do Jellyfin lidam com os metadados de música, o que faz o Finamp não conseguir carregar as faixas do álbum corretamente.&lt;/p&gt;&#10;&lt;h2 id="a-solução-atualizar-os-metadados-no-jellyfin-buscar-metadados-ausentes"&gt;A solução: atualizar os metadados no Jellyfin (buscar metadados ausentes)&#10;&lt;/h2&gt;&lt;p&gt;A alternativa mais confiável é forçar o Jellyfin a atualizar os metadados da sua biblioteca de música:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Entre no painel web do Jellyfin (de preferência com uma conta de administrador).&lt;/li&gt;&#10;&lt;li&gt;Vá em &lt;strong&gt;Painel&lt;/strong&gt; &amp;gt; &lt;strong&gt;Bibliotecas&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;li&gt;Selecione sua biblioteca de &lt;strong&gt;Música&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;li&gt;Clique no menu de três pontos (&amp;hellip;) ao lado do nome da biblioteca.&lt;/li&gt;&#10;&lt;li&gt;Escolha &lt;strong&gt;Atualizar metadados&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;li&gt;Nas opções de atualização:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Marque &lt;strong&gt;Buscar metadados ausentes&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;li&gt;Se precisar, ative também outras opções, como &amp;ldquo;Substituir imagens existentes&amp;rdquo; ou &amp;ldquo;Substituir todos os metadados&amp;rdquo;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="7"&gt;&#10;&lt;li&gt;Clique em &lt;strong&gt;Atualizar&lt;/strong&gt; (ou OK) para iniciar a varredura.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;strong&gt;Observação:&lt;/strong&gt; esse processo pode levar vários minutos, dependendo do tamanho da sua biblioteca. Quando terminar, reinicie o Finamp e tente abrir os álbuns de novo — agora as faixas devem carregar normalmente.&lt;/p&gt;&#10;&lt;h2 id="observações-adicionais-sobre-o-jellyfin-1011x"&gt;Observações adicionais sobre o Jellyfin 10.11.x&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;A equipe do Finamp e alguns usuários relataram &lt;strong&gt;perdas de desempenho&lt;/strong&gt; no Jellyfin 10.11.x, principalmente em bibliotecas de música (carregamento mais lento, maior uso de recursos).&lt;/li&gt;&#10;&lt;li&gt;Se possível, considere continuar no Jellyfin 10.10.x (ou voltar para ele) para ter um desempenho melhor, até as correções chegarem por completo nos próximos patches da 10.11.&lt;/li&gt;&#10;&lt;li&gt;No meu caso, posso confirmar que, mesmo na 10.11.x mais recente, a atualização de metadados resolve o problema do álbum em branco, e depois disso tudo funciona bem.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="créditos"&gt;Créditos&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Issue no GitHub: &lt;a class="link" href="https://github.com/jmshrv/finamp/issues/1412?referrer=grok.com&amp;amp;ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://github.com/jmshrv/finamp/issues/1412&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Se o problema continuar depois da varredura, veja se há atualizações do Finamp ou relate o problema no repositório do Finamp no GitHub. Boa música! :)&lt;/p&gt;&#10;</description></item><item><title>Como exportar e importar volumes do Docker com facilidade</title><link>https://aquasp.blog/pt/how-to-easily-export-and-import-docker-volumes/</link><pubDate>Tue, 09 Dec 2025 01:22:26 +0000</pubDate><guid>https://aquasp.blog/pt/how-to-easily-export-and-import-docker-volumes/</guid><description>&lt;p&gt;Se você é como eu, prefere rodar &lt;strong&gt;tudo&lt;/strong&gt; em contêineres Docker. Eles são rápidos, isolados e perfeitos para rodar vários apps em uma única VPS.&lt;/p&gt;&#10;&lt;p&gt;Mas o que acontece quando você quer:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Mover um contêiner para um servidor novo?&lt;/li&gt;&#10;&lt;li&gt;Fazer backup de um volume de banco de dados (NextCloud, PhotoPrism, Vaultwarden etc.)?&lt;/li&gt;&#10;&lt;li&gt;Restaurar dados depois de uma pane?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;O Docker não tem um botão de “exportar volume” — mas existe um &lt;strong&gt;truque superssimples e confiável&lt;/strong&gt; usando um contêiner Ubuntu temporário.&lt;/p&gt;&#10;&lt;p&gt;Vamos lá!&lt;/p&gt;&#10;&lt;h2 id="passo-1-liste-seus-volumes"&gt;Passo 1: Liste seus volumes&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker volume ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Exemplo de saída:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;DRIVER VOLUME NAME&#10;local nextcloud_data&#10;local photoprism_storage&#10;local vaultwarden_data&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Escolha o que você quer exportar (por exemplo, nextcloud_data).&lt;/p&gt;&#10;&lt;h2 id="passo-2-exporte-um-volume--backuptargz"&gt;Passo 2: Exporte um volume → backup.tar.gz&#10;&lt;/h2&gt;&lt;p&gt;Rode este &lt;strong&gt;comando de uma linha&lt;/strong&gt; (troque nextcloud_data pelo nome do seu volume):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;docker run --rm -v nextcloud_data:/data -v &amp;#34;$(pwd)&amp;#34;:/backup ubuntu \&#10; tar -czf /backup/nextcloud-data-backup.tar.gz -C /data ./&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;O que ele faz:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Monta o seu volume em /data dentro de um contêiner temporário&lt;/li&gt;&#10;&lt;li&gt;Monta a sua pasta atual em /backup&lt;/li&gt;&#10;&lt;li&gt;Cria um arquivo compactado com o volume inteiro&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Quando terminar, você terá um arquivo como:&#10;nextcloud-data-backup.tar.gz ← pronto para baixar ou mover!&lt;/p&gt;&#10;&lt;p&gt;Dica de mestre: adicione a data para ficar mais claro&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;docker run --rm -v nextcloud_data:/data -v &amp;#34;$(pwd)&amp;#34;:/backup ubuntu \&#10; tar -czf &amp;#34;/backup/nextcloud-data-$(date +%Y-%m-%d).tar.gz&amp;#34; -C /data ./&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-3-importe-no-servidor-novo"&gt;Passo 3: Importe no servidor novo&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;Copie o arquivo backup.tar.gz para o servidor novo (via scp, rsync etc.)&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Depois, &lt;strong&gt;crie o volume vazio&lt;/strong&gt; (importante!):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;docker volume create nextcloud_data&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Rode o comando de importação (a partir da pasta que contém o arquivo de backup):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;docker run --rm -v nextcloud_data:/data -v &amp;#34;$(pwd)&amp;#34;:/backup ubuntu \&#10; tar -xzf /backup/nextcloud-data-2025-04-05.tar.gz -C /data&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pronto! Seu volume foi totalmente restaurado.&lt;/p&gt;&#10;&lt;p&gt;Nunca deixe o Docker criar o volume automaticamente durante a importação — isso pode causar problemas de permissão ou de mistura de dados.&lt;/p&gt;&#10;&lt;h2 id="bônus-usando-volumes-externos-com-o-docker-compose"&gt;Bônus: usando volumes externos com o Docker Compose&#10;&lt;/h2&gt;&lt;p&gt;Se você usa docker-compose.yml, avise o Docker que o volume é &lt;strong&gt;externo&lt;/strong&gt; (já existe):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;services:&#10; nextcloud:&#10; image: nextcloud:latest&#10; volumes:&#10; - nextcloud_data:/var/www/html&#10;&#10;volumes:&#10; nextcloud_data:&#10; external: true&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A indentação importa — use &lt;strong&gt;exatamente dois espaços&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h2 id="casos-de-uso-reais"&gt;Casos de uso reais&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Migrar o NextCloud para uma VPS nova&lt;/li&gt;&#10;&lt;li&gt;Fazer backup do Vaultwarden antes de atualizar&lt;/li&gt;&#10;&lt;li&gt;Mover a biblioteca do PhotoPrism para um servidor maior&lt;/li&gt;&#10;&lt;li&gt;Recuperação de desastres&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Este método é &lt;strong&gt;100% confiável&lt;/strong&gt;, funciona com qualquer volume e não exige nenhuma ferramenta extra.&lt;/p&gt;&#10;&lt;p&gt;Agora você tem uma estratégia de backup de volumes Docker à prova de balas.&lt;/p&gt;&#10;&lt;p&gt;Boa conteinerização! 🐳&lt;/p&gt;&#10;&lt;p&gt;Obrigado pela leitura!&lt;/p&gt;&#10;</description></item><item><title>Como hospedar em casa com facilidade e colocar seus projetos online mesmo atrás de CGNAT</title><link>https://aquasp.blog/pt/how-to-easily-self-host-at-home-and-put-your-projects-online-under-cgnat/</link><pubDate>Tue, 09 Dec 2025 01:13:41 +0000</pubDate><guid>https://aquasp.blog/pt/how-to-easily-self-host-at-home-and-put-your-projects-online-under-cgnat/</guid><description>&lt;h2 id="introdução"&gt;Introdução&#10;&lt;/h2&gt;&lt;p&gt;Quer rodar serviços pesados em um servidor potente em casa, mesmo com o seu provedor te colocando atrás de CGNAT? Este guia mostra exatamente como colocá-los online — do &lt;strong&gt;jeito clássico e à prova de balas&lt;/strong&gt;, usando túneis SSH reversos.&lt;/p&gt;&#10;&lt;p&gt;Sem Cloudflare Tunnel. Sem Ngrok. Só SSH + systemd.&lt;/p&gt;&#10;&lt;h2 id="as-desvantagens-e-por-que-dá-para-lidar-com-elas"&gt;As desvantagens (e por que dá para lidar com elas)&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Internet de casa não tem a qualidade de um datacenter (quedas acontecem)&lt;/li&gt;&#10;&lt;li&gt;A maioria dos provedores usa CGNAT → não dá para abrir portas do jeito normal&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;Solução:&lt;/strong&gt; use uma VPS barata como “ponte” pública. Seu servidor pesado fica em casa. A VPS só encaminha as portas.&lt;/p&gt;&#10;&lt;h2 id="como-funciona--a-mágica-dos-túneis-ssh-reversos--r"&gt;Como funciona – a mágica dos túneis SSH reversos (-R)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;Internet → Cheap VPS (public IP) → SSH reverse tunnel → Your home server (behind CGNAT)&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;O seu servidor de casa abre uma conexão SSH de saída até a VPS e diz:&#10;“Tudo o que chegar na sua porta 8096 → mande para o meu Jellyfin local na 8096”&lt;/p&gt;&#10;&lt;p&gt;Nenhuma porta aberta no roteador de casa. Nenhuma exposição.&lt;/p&gt;&#10;&lt;h2 id="configuração-passo-a-passo"&gt;Configuração passo a passo&#10;&lt;/h2&gt;&lt;h3 id="1-no-seu-servidor-de-casa-o-potente"&gt;1. No seu servidor de casa (o potente)&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Create folder for tunnel configs&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mkdir -p /etc/sshtunnels&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Example: expose Jellyfin (port 8096)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nano /etc/sshtunnels/jellyfin.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Conteúdo do arquivo:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;8096:8096 # remote_port:local_port&#10;443:8443 # optional: HTTPS reverse proxy on VPS → your local 8443&#10;80:8080&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Uma linha por serviço. O primeiro número = porta na &lt;strong&gt;VPS&lt;/strong&gt;, o segundo = porta no &lt;strong&gt;seu servidor de casa&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h3 id="2-gere-uma-chave-ssh-se-você-ainda-não-tiver-uma"&gt;2. Gere uma chave SSH (se você ainda não tiver uma)&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;ssh-keygen -t ed25519 -C &amp;#34;home-server-tunnel&amp;#34;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Copie a chave pública para a sua VPS:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;ssh-copy-id user@your-vps-ip&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="3-crie-o-script-que-gerencia-os-túneis"&gt;3. Crie o script que gerencia os túneis&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo nano /usr/local/bin/sshtunnel.sh&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;#!/bin/bash&#10;&#10;# === EDIT THESE ===&#10;REMOTE_USER=&amp;#34;root&amp;#34; # or your VPS user&#10;REMOTE_HOST=&amp;#34;123.45.67.89&amp;#34; # your VPS public IP&#10;SSH_KEY=&amp;#34;/home/youruser/.ssh/id_ed25519&amp;#34;&#10;SSH_PORT=&amp;#34;22&amp;#34; # change if you use a non-standard port&#10;# ==================&#10;&#10;INSTANCE=&amp;#34;$1&amp;#34;&#10;CONFIG_FILE=&amp;#34;/etc/sshtunnels/${INSTANCE}.conf&amp;#34;&#10;&#10;if [[ ! -f &amp;#34;$CONFIG_FILE&amp;#34; ]]; then&#10; echo &amp;#34;Error: Config file $CONFIG_FILE not found!&amp;#34;&#10; exit 1&#10;fi&#10;&#10;# Build -R arguments&#10;FORWARD_OPTS=&amp;#34;&amp;#34;&#10;while IFS=: read -r remote_port local_port; do&#10; [[ -z &amp;#34;$remote_port&amp;#34; || &amp;#34;$remote_port&amp;#34; =~ ^# ]] &amp;amp;&amp;amp; continue&#10; # Clean any old process using the remote port&#10; ssh -p &amp;#34;$SSH_PORT&amp;#34; &amp;#34;$REMOTE_USER@$REMOTE_HOST&amp;#34; \&#10; &amp;#34;lsof -i :$remote_port -t | xargs -r kill -9&amp;#34; 2&amp;gt;/dev/null&#10; FORWARD_OPTS=&amp;#34;$FORWARD_OPTS -R $remote_port:localhost:$local_port&amp;#34;&#10;done &amp;lt; &amp;#34;$CONFIG_FILE&amp;#34;&#10;&#10;echo &amp;#34;Starting tunnel $INSTANCE → $REMOTE_HOST ($FORWARD_OPTS)&amp;#34;&#10;&#10;exec ssh -o StrictHostKeyChecking=no \&#10; -o ServerAliveInterval=30 \&#10; -o ServerAliveCountThreshold=3 \&#10; -o ExitOnForwardFailure=yes \&#10; -o GatewayPorts=yes \&#10; -N -T \&#10; -i &amp;#34;$SSH_KEY&amp;#34; \&#10; -p &amp;#34;$SSH_PORT&amp;#34; \&#10; $FORWARD_OPTS \&#10; &amp;#34;$REMOTE_USER@$REMOTE_HOST&amp;#34;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Torne-o executável:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo chmod +x /usr/local/bin/sshtunnel.sh&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="4-crie-um-serviço-do-systemd-início-e-reconexão-automáticos"&gt;4. Crie um serviço do systemd (início e reconexão automáticos)&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo nano /etc/systemd/system/sshtunnel@.service&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;[Unit]&#10;Description=SSH Reverse Tunnel for %i&#10;After=network-online.target&#10;Wants=network-online.target&#10;&#10;[Service]&#10;User=youruser # ← change to your home user (not root!)&#10;Group=youruser&#10;ExecStart=/usr/local/bin/sshtunnel.sh %i&#10;Restart=always&#10;RestartSec=10&#10;&#10;[Install]&#10;WantedBy=multi-user.target&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Recarregue e ative:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo systemctl daemon-reload&#10;&#10;# Start a tunnel (example: jellyfin)&#10;sudo systemctl enable --now sshtunnel@jellyfin.service&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Confira o status:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo systemctl status sshtunnel@jellyfin.service&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="5-no-lado-da-vps-opcional-mas-recomendado"&gt;5. No lado da VPS (opcional, mas recomendado)&#10;&lt;/h3&gt;&lt;p&gt;Instale um servidor web pequeno ou o Caddy/nginx para cuidar do TLS e fazer proxy para as portas encaminhadas.&lt;/p&gt;&#10;&lt;p&gt;Exemplo com o Caddy (HTTPS automático):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;# On the VPS&#10;apt install caddy&#10;&#10;# /etc/caddy/Caddyfile&#10;jellyfin.yourdomain.com {&#10; reverse_proxy localhost:8096&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Agora jellyfin.yourdomain.com → o seu Jellyfin de casa, totalmente criptografado.&lt;/p&gt;&#10;&lt;p&gt;Tudo rodando no meu servidor parrudo de casa, atrás de CGNAT.&lt;/p&gt;&#10;&lt;h2 id="vantagens-desta-configuração"&gt;Vantagens desta configuração&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Funciona atrás de qualquer CGNAT / bloqueio do provedor&lt;/li&gt;&#10;&lt;li&gt;Nenhuma dependência de terceiros (sem Cloudflare, sem Ngrok)&lt;/li&gt;&#10;&lt;li&gt;Criptografia completa possível&lt;/li&gt;&#10;&lt;li&gt;Sobrevive a reinicializações (systemd + Restart=always)&lt;/li&gt;&#10;&lt;li&gt;Custa quase nada&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="palavras-finais"&gt;Palavras finais&#10;&lt;/h2&gt;&lt;p&gt;Este é o jeito realmente bacana que encontrei para hospedar serviços pesados em casa em 2025.&lt;/p&gt;&#10;&lt;p&gt;O seu hardware potente fica em casa. A sua VPS de US$ 1/mês é só uma guarda de trânsito.&lt;/p&gt;&#10;&lt;p&gt;Obrigado pela leitura — agora vá montar o seu home lab imbatível!&lt;/p&gt;&#10;</description></item><item><title>Como fazer backup automático do seu blog Ghost auto-hospedado</title><link>https://aquasp.blog/pt/how-to-automatically-backup-your-self-hosted-ghost-blog/</link><pubDate>Tue, 09 Dec 2025 01:05:55 +0000</pubDate><guid>https://aquasp.blog/pt/how-to-automatically-backup-your-self-hosted-ghost-blog/</guid><description>&lt;h2 id="introdução"&gt;Introdução&#10;&lt;/h2&gt;&lt;p&gt;O Ghost é uma plataforma de blog &lt;strong&gt;incrivelmente rápida e elegante&lt;/strong&gt;. Mas, ao contrário do WordPress, ele não tem plugins de backup com um clique.&lt;/p&gt;&#10;&lt;p&gt;Isso muda hoje.&lt;/p&gt;&#10;&lt;p&gt;Neste guia, você vai configurar um &lt;strong&gt;sistema de backup diário totalmente automatizado&lt;/strong&gt; que:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Faz o dump do seu banco de dados MySQL&lt;/li&gt;&#10;&lt;li&gt;Faz backup de todos os temas, imagens e conteúdos&lt;/li&gt;&#10;&lt;li&gt;Compacta tudo em um único &lt;code&gt;.zip&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Envia o arquivo com segurança para o seu armazenamento na nuvem (pCloud, NextCloud, Google Drive, Dropbox etc.)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Tudo usando &lt;strong&gt;ferramentas gratuitas&lt;/strong&gt;: &lt;code&gt;rclone&lt;/code&gt; + um script bash simples + cron.&lt;/p&gt;&#10;&lt;p&gt;Vamos começar.&lt;/p&gt;&#10;&lt;h2 id="passo-1-instale-o-rclone"&gt;Passo 1: Instale o Rclone&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt install -y rclone&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O Rclone é o canivete suíço do armazenamento na nuvem — ele suporta &lt;strong&gt;mais de 70 provedores&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;Lista completa: &lt;a class="link" href="https://rclone.org/overview/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://rclone.org/overview/&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="passo-2-configure-o-rclone-conecte-seu-armazenamento-na-nuvem"&gt;Passo 2: Configure o Rclone (conecte seu armazenamento na nuvem)&#10;&lt;/h2&gt;&lt;p&gt;Rode:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;rclone config&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Siga as perguntas:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;n → novo remote&lt;/li&gt;&#10;&lt;li&gt;Dê um nome como ghost-backup ou pcloud&lt;/li&gt;&#10;&lt;li&gt;Escolha seu provedor (por exemplo, webdav para NextCloud, pcloud, google drive etc.)&lt;/li&gt;&#10;&lt;li&gt;Informe suas credenciais/URL quando for pedido&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Teste se funciona:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;rclone ls ghost-backup:&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Você deve ver os arquivos do seu remote (ou uma pasta vazia, se for novo).&lt;/p&gt;&#10;&lt;p&gt;Digite q para sair.&lt;/p&gt;&#10;&lt;h2 id="passo-3-pegue-as-credenciais-do-banco-de-dados-do-ghost"&gt;Passo 3: Pegue as credenciais do banco de dados do Ghost&#10;&lt;/h2&gt;&lt;p&gt;Entre com o usuário do Ghost (não o root):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;su - yourghostuser&#10;cd /var/www/ghost # or wherever you installed Ghost&#10;cat config.production.json&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Procure a seção do banco de dados. Você verá algo assim:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#34;database&amp;#34;: {&#10; &amp;#34;client&amp;#34;: &amp;#34;mysql&amp;#34;,&#10; &amp;#34;connection&amp;#34;: {&#10; &amp;#34;host&amp;#34;: &amp;#34;localhost&amp;#34;,&#10; &amp;#34;user&amp;#34;: &amp;#34;ghost_db_user&amp;#34;,&#10; &amp;#34;password&amp;#34;: &amp;#34;yoursecretpassword&amp;#34;,&#10; &amp;#34;database&amp;#34;: &amp;#34;ghost_prod&amp;#34;&#10; }&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Anote&lt;/strong&gt;:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Nome do banco de dados (ghost_prod)&lt;/li&gt;&#10;&lt;li&gt;Usuário (ghost_db_user)&lt;/li&gt;&#10;&lt;li&gt;Senha&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="passo-4-crie-o-script-de-backup"&gt;Passo 4: Crie o script de backup&#10;&lt;/h2&gt;&lt;p&gt;Crie o script como root:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;nano /root/backup-ghost.sh&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cole isto (depois edite as variáveis abaixo):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;#!/bin/bash&#10;&#10;# === EDIT THESE VALUES ===&#10;GHOST_USER=&amp;#34;yourghostuser&amp;#34; # e.g. ghost&#10;GHOST_PATH=&amp;#34;/var/www/ghost&amp;#34; # path to your Ghost install&#10;DB_NAME=&amp;#34;ghost_prod&amp;#34; # from config.production.json&#10;DB_USER=&amp;#34;ghost_db_user&amp;#34; # from config.production.json&#10;DB_PASS=&amp;#34;yoursecretpassword&amp;#34; # from config.production.json&#10;BACKUP_NAME=&amp;#34;theselfhostingart-blog&amp;#34; # name for your backup zip&#10;RCLONE_REMOTE=&amp;#34;ghost-backup&amp;#34; # name you gave in rclone config&#10;RCLONE_PATH=&amp;#34;/&amp;#34; # folder in your cloud (use / for root)&#10;# =========================&#10;&#10;DATE=$(date +&amp;#39;%Y-%m-%d_%H-%M&amp;#39;)&#10;BACKUP_DIR=&amp;#34;/home/$GHOST_USER/backups/$DATE&amp;#34;&#10;ZIP_FILE=&amp;#34;$BACKUP_DIR/$BACKUP_NAME-$DATE.zip&amp;#34;&#10;&#10;echo &amp;#34;Starting Ghost backup: $DATE&amp;#34;&#10;&#10;# Create backup directory&#10;mkdir -p &amp;#34;$BACKUP_DIR&amp;#34;&#10;&#10;# Backup database&#10;echo &amp;#34;Backing up database...&amp;#34;&#10;mysqldump -u &amp;#34;$DB_USER&amp;#34; -p&amp;#34;$DB_PASS&amp;#34; --add-drop-table &amp;#34;$DB_NAME&amp;#34; | gzip &amp;gt; &amp;#34;$BACKUP_DIR/db.sql.gz&amp;#34;&#10;&#10;# Backup content folder (themes, images, etc.)&#10;echo &amp;#34;Backing up content folder...&amp;#34;&#10;rsync -av --exclude=&amp;#39;logs&amp;#39; --exclude=&amp;#39;cache&amp;#39; &amp;#34;$GHOST_PATH/content/&amp;#34; &amp;#34;$BACKUP_DIR/content/&amp;#34;&#10;&#10;# Compress everything&#10;echo &amp;#34;Compressing backup...&amp;#34;&#10;zip -r &amp;#34;$ZIP_FILE&amp;#34; &amp;#34;$BACKUP_DIR/content&amp;#34; &amp;#34;$BACKUP_DIR/db.sql.gz&amp;#34; &amp;gt; /dev/null&#10;&#10;# Upload to cloud&#10;echo &amp;#34;Uploading to cloud storage...&amp;#34;&#10;rclone copy &amp;#34;$ZIP_FILE&amp;#34; &amp;#34;$RCLONE_REMOTE:$RCLONE_PATH&amp;#34;&#10;&#10;# Cleanup: remove local backups older than 1 day (optional but recommended)&#10;echo &amp;#34;Cleaning up old local backups...&amp;#34;&#10;find /home/$GHOST_USER/backups -type d -mtime +1 -exec rm -rf {} +&#10;&#10;echo &amp;#34;Backup complete: $ZIP_FILE → $RCLONE_REMOTE:$RCLONE_PATH&amp;#34;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Torne-o executável:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;chmod +x /root/backup-ghost.sh&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Teste manualmente primeiro&lt;/strong&gt;:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;/root/backup-ghost.sh&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Confira seu armazenamento na nuvem — você deve ver um arquivo como:&#10;theselfhostingart-blog-2025-04-05_03-22.zip&lt;/p&gt;&#10;&lt;h2 id="passo-5-automatize-com-o-cron-backups-diários"&gt;Passo 5: Automatize com o cron (backups diários)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;crontab -e&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Adicione esta linha para um &lt;strong&gt;backup diário às 2h da manhã&lt;/strong&gt;:&lt;/p&gt;&#10;&lt;p&gt;cron&lt;code&gt;0 2 * * * /usr/bin/bash /root/backup-ghost.sh &amp;gt;&amp;gt; /var/log/ghost-backup.log 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Salve e saia.&lt;/p&gt;&#10;&lt;p&gt;Agora o seu blog Ghost tem &lt;strong&gt;backup automático todos os dias&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h2 id="o-que-entra-no-backup"&gt;O que entra no backup?&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Banco de dados completo (posts, usuários, configurações)&lt;/li&gt;&#10;&lt;li&gt;Todas as imagens enviadas&lt;/li&gt;&#10;&lt;li&gt;Temas personalizados&lt;/li&gt;&#10;&lt;li&gt;Tudo o que é preciso para restaurar ou migrar&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Você pode até mandar esse .zip para o suporte do Ghost(Pro) — eles conseguem importá-lo diretamente.&lt;/p&gt;&#10;&lt;h2 id="bônus-restaure-em-caso-de-desastre"&gt;Bônus: restaure em caso de desastre&#10;&lt;/h2&gt;&lt;p&gt;Para restaurar:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Instale um Ghost novo&lt;/li&gt;&#10;&lt;li&gt;Descompacte o backup&lt;/li&gt;&#10;&lt;li&gt;Importe o banco: gunzip &amp;lt; db.sql.gz | mysql -u user -p dbname&lt;/li&gt;&#10;&lt;li&gt;Substitua a pasta content/&lt;/li&gt;&#10;&lt;li&gt;Rode ghost restart&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="créditos-e-agradecimentos"&gt;Créditos e agradecimentos&#10;&lt;/h2&gt;&lt;p&gt;Este método foi inspirado e aprimorado a partir deste excelente post:&#10;&lt;a class="link" href="https://dev.to/kvizdos/how-to-automatically-backup-ghost-blogs-4he1?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;How to Automatically Backup Ghost Blogs – Kenton Vizdos&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Obrigado, Kenton!&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Agora o seu blog auto-hospedado dorme mais tranquilo à noite. 😴💾&lt;/p&gt;&#10;&lt;p&gt;Obrigado pela leitura!&lt;/p&gt;&#10;</description></item><item><title>Como instalar o NextCloud com OpenLiteSpeed (stack LOMP)</title><link>https://aquasp.blog/pt/how-to-install-nextcloud-with-openlitespeed-lomp-stack/</link><pubDate>Tue, 09 Dec 2025 00:59:45 +0000</pubDate><guid>https://aquasp.blog/pt/how-to-install-nextcloud-with-openlitespeed-lomp-stack/</guid><description>&lt;h2 id="introdução"&gt;Introdução&#10;&lt;/h2&gt;&lt;p&gt;Hoje vou mostrar como montar o que eu sinceramente acredito ser a &lt;strong&gt;stack de NextCloud mais rápida&lt;/strong&gt; disponível em 2025:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;OpenLiteSpeed&lt;/strong&gt; – o servidor web mais rápido, com cache embutido&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;LSPHP 8.1/8.2&lt;/strong&gt; – a implementação ultrarrápida de PHP da LiteSpeed&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Redis + APCu&lt;/strong&gt; – para cache e travamento (locking) ultrarrápidos&lt;/li&gt;&#10;&lt;li&gt;Roda totalmente &lt;strong&gt;sem root&lt;/strong&gt;, com o seu próprio usuário&lt;/li&gt;&#10;&lt;li&gt;Protegido com cabeçalhos de segurança adequados, HSTS e pasta de dados isolada&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Mesmo que o NextCloud seja comprometido, o invasor ainda não consegue mexer no resto do seu servidor.&lt;/p&gt;&#10;&lt;p&gt;Vamos lá!&lt;/p&gt;&#10;&lt;h2 id="passo-1-proteja-sua-vps-primeiro"&gt;Passo 1: Proteja sua VPS primeiro&#10;&lt;/h2&gt;&lt;p&gt;Antes de tudo, proteja o seu servidor. Siga o meu guia completo aqui:&#10;&lt;a class="link" href="https://aquasp.blog/pt/how-to-make-your-vps-secure/" &gt;Como deixar sua VPS segura&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="passo-2-instale-o-openlitespeed-o-lsphp-o-redis-e-as-ferramentas"&gt;Passo 2: Instale o OpenLiteSpeed, o LSPHP, o Redis e as ferramentas&#10;&lt;/h2&gt;&lt;p&gt;Rode como root:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Update system&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt update &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Add OpenLiteSpeed repository&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget -O - https://repo.litespeed.sh | bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Install essentials&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt install -y curl gnupg2 imagemagick ffmpeg redis openlitespeed lsphp81* lsphp82* zip unzip mariadb-server mariadb-client&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Observação: no Ubuntu 22.04+, o pacote do ImageMagick pode ser libmagickwand-dev + imagemagick. O comando acima funciona na maioria das versões recentes do Debian/Ubuntu.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;Ative e reinicie o Redis:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl enable --now redis-server&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-3-crie-um-usuário-de-sistema-dedicado-para-o-nextcloud"&gt;Passo 3: Crie um usuário de sistema dedicado para o NextCloud&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;adduser --shell /bin/bash files&#10;usermod -aG redis files # Allow access to Redis socket&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-4-baixe-e-extraia-o-nextcloud-como-o-usuário-files"&gt;Passo 4: Baixe e extraia o NextCloud como o usuário &amp;ldquo;files&amp;rdquo;&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;su - files&#10;mkdir -p ~/public_html&#10;cd ~/public_html&#10;&#10;wget https://download.nextcloud.com/server/releases/latest.zip&#10;unzip latest.zip&#10;rsync -av nextcloud/ ./&#10;rm -rf nextcloud latest.zip .htaccess .user.ini&#10;exit&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-5-configure-o-painel-web-de-administração-do-openlitespeed-porta-7080"&gt;Passo 5: Configure o painel web de administração do OpenLiteSpeed (porta 7080)&#10;&lt;/h2&gt;&lt;p&gt;Defina uma senha de administrador:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;/usr/local/lsws/admin/misc/admpass.sh&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Agora acesse: https://your-vps-ip:7080 e entre.&lt;/p&gt;&#10;&lt;h3 id="configuração-do-virtual-host"&gt;Configuração do Virtual Host&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;Apague o virtual host padrão &amp;ldquo;Example&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;Adicione um novo Virtual Host:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Virtual Host Name: yourdomain.com&lt;/li&gt;&#10;&lt;li&gt;Virtual Host Root: /home/files/&lt;/li&gt;&#10;&lt;li&gt;Config File: $SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf&lt;/li&gt;&#10;&lt;li&gt;Document Root: $VH_ROOT/public_html&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="3"&gt;&#10;&lt;li&gt;Script Handler → Add:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Suffix: php&lt;/li&gt;&#10;&lt;li&gt;Handler Type: LiteSpeed LVE&lt;/li&gt;&#10;&lt;li&gt;Handler: lsphp81 (ou lsphp82, se preferir o PHP 8.2)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="4"&gt;&#10;&lt;li&gt;Rewrite Rules (forçar HTTPS):&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;RewriteEngine On&#10;RewriteCond %{HTTPS} !=on&#10;RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]&#10;&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt;&#10;&lt;li&gt;Cabeçalhos de segurança (Context → Static → adicione um novo context /):&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;Strict-Transport-Security &amp;#34;max-age=63072000; includeSubDomains; preload&amp;#34;&#10;Content-Security-Policy &amp;#34;upgrade-insecure-requests&amp;#34;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt;&#10;&lt;li&gt;External App → LSPHP → Edit:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Run as User/Group: files&lt;/li&gt;&#10;&lt;li&gt;PHP_LSAPI_CHILDREN = 100&lt;/li&gt;&#10;&lt;li&gt;LSAPI_AVOID_FORK = 0&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;Listeners:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Apague os listeners padrão&lt;/li&gt;&#10;&lt;li&gt;Adicione HTTP → porta 80&lt;/li&gt;&#10;&lt;li&gt;Adicione HTTPS → porta 443 (Secure = Yes)&lt;/li&gt;&#10;&lt;li&gt;Associe o seu domínio aos dois listeners&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Reinício suave (graceful restart) → OpenLiteSpeed → Graceful Restart&lt;/p&gt;&#10;&lt;h2 id="passo-6-emita-o-ssl-do-lets-encrypt"&gt;Passo 6: Emita o SSL do Let’s Encrypt&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;apt install -y certbot&#10;certbot certonly --webroot -w /home/files/public_html -d yourdomain.com&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Anote os caminhos (você vai precisar deles):&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Fullchain: /etc/letsencrypt/live/yourdomain.com/fullchain.pem&lt;/li&gt;&#10;&lt;li&gt;Privkey: /etc/letsencrypt/live/yourdomain.com/privkey.pem&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Adicione-os em:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Virtual Host → aba SSL&lt;/li&gt;&#10;&lt;li&gt;Listener HTTPS → aba SSL&lt;/li&gt;&#10;&lt;li&gt;Chained Certificate = Yes&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Faça o graceful restart de novo.&lt;/p&gt;&#10;&lt;h2 id="passo-7-renovação-automática-do-ssl"&gt;Passo 7: Renovação automática do SSL&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;crontab -e&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Adicione:&lt;/p&gt;&#10;&lt;p&gt;cron&lt;code&gt;0 3 * * * /usr/bin/certbot renew --quiet&lt;/code&gt;&lt;/p&gt;&#10;&lt;h2 id="passo-8-instale-e-proteja-o-mariadbmysql"&gt;Passo 8: Instale e proteja o MariaDB/MySQL&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;mysql_secure_installation&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Depois, crie o banco de dados e o usuário:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;mysql -u root -p&#10;CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;&#10;CREATE USER &amp;#39;ncuser&amp;#39;@&amp;#39;localhost&amp;#39; IDENTIFIED BY &amp;#39;strong-password-here&amp;#39;;&#10;GRANT ALL PRIVILEGES ON nextcloud.* TO &amp;#39;ncuser&amp;#39;@&amp;#39;localhost&amp;#39;;&#10;FLUSH PRIVILEGES;&#10;EXIT;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-9-otimize-o-php-e-ative-o-opcache--apcu"&gt;Passo 9: Otimize o PHP e ative o OPCache + APCu&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;# Edit the correct php.ini (adjust path if using lsphp82)&#10;sed -i &amp;#39;/usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini&amp;#39; \&#10; -e &amp;#39;s/memory_limit = .*/memory_limit = 1024M/&amp;#39; \&#10; -e &amp;#39;s/upload_max_filesize = .*/upload_max_filesize = 10G/&amp;#39; \&#10; -e &amp;#39;s/post_max_size = .*/post_max_size = 10G/&amp;#39; \&#10; -e &amp;#39;s/max_execution_time = .*/max_execution_time = 3600/&amp;#39; \&#10; -e &amp;#39;s/opcache.enable=.*/opcache.enable=1/&amp;#39; \&#10; -e &amp;#39;s/;opcache.memory_consumption=.*/opcache.memory_consumption=512/&amp;#39; \&#10; -e &amp;#39;s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=64/&amp;#39; \&#10; -e &amp;#39;s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=20000/&amp;#39;&#10;&#10;# Enable APCu CLI&#10;echo &amp;#34;apc.enable_cli = 1&amp;#34; &amp;gt;&amp;gt; /usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini&#10;&#10;pkill -f lsphp&#10;systemctl restart lsws&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-10-configure-o-redis-como-socket-unix"&gt;Passo 10: Configure o Redis como socket Unix&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;sed -i &amp;#39;s/port 6379/port 0/&amp;#39; /etc/redis/redis.conf&#10;sed -i &amp;#39;s|# unixsocket /var/run/redis/redis-server.sock|unixsocket /var/run/redis/redis-server.sock|&amp;#39; /etc/redis/redis.conf&#10;sed -i &amp;#39;s/# unixsocketperm 700/unixsocketperm 770/&amp;#39; /etc/redis/redis.conf&#10;sed -i &amp;#39;s/# maxmemory .*/maxmemory 1gb/&amp;#39; /etc/redis/redis.conf&#10;&#10;systemctl restart redis-server&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-11-configuração-final-do-nextcloud"&gt;Passo 11: Configuração final do NextCloud&#10;&lt;/h2&gt;&lt;h3 id="mova-a-pasta-de-dados-para-fora-da-raiz-web-essencial"&gt;Mova a pasta de dados para fora da raiz web (essencial!)&#10;&lt;/h3&gt;&lt;p&gt;Durante a instalação, defina o diretório de dados como: /home/files/data&lt;/p&gt;&#10;&lt;h3 id="edite-o-configphp-depois-do-primeiro-login"&gt;Edite o config.php (depois do primeiro login)&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;su - files&#10;nano /home/files/public_html/config/config.php&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Adicione &lt;strong&gt;logo depois&lt;/strong&gt; de &amp;lsquo;installed&amp;rsquo; =&amp;gt; true,:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#39;memcache.local&amp;#39; =&amp;gt; &amp;#39;\\OC\\Memcache\\APCu&amp;#39;,&#10; &amp;#39;memcache.distributed&amp;#39; =&amp;gt; &amp;#39;\\OC\\Memcache\\Redis&amp;#39;,&#10; &amp;#39;memcache.locking&amp;#39; =&amp;gt; &amp;#39;\\OC\\Memcache\\Redis&amp;#39;,&#10; &amp;#39;redis&amp;#39; =&amp;gt; [&#10; &amp;#39;host&amp;#39; =&amp;gt; &amp;#39;/var/run/redis/redis-server.sock&amp;#39;,&#10; &amp;#39;port&amp;#39; =&amp;gt; 0,&#10; ],&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="configure-as-tarefas-em-segundo-plano-cron"&gt;Configure as tarefas em segundo plano (cron)&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;su - files&#10;crontab -e&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Adicione:&lt;/p&gt;&#10;&lt;p&gt;cron&lt;code&gt;*/5 * * * * /usr/local/lsws/lsphp81/bin/php -f /home/files/public_html/cron.php&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Depois, no NextCloud, vá em Administração → Configurações básicas → Tarefas em segundo plano → selecione &lt;strong&gt;Cron&lt;/strong&gt; (recomendado).&lt;/p&gt;&#10;&lt;h2 id="bônus-deixe-o-occ-fácil-de-usar-para-sempre"&gt;Bônus: deixe o occ fácil de usar para sempre&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;su - files&#10;echo &amp;#34;alias occ=&amp;#39;/usr/local/lsws/lsphp81/bin/php /home/files/public_html/occ&amp;#39;&amp;#34; &amp;gt;&amp;gt; ~/.bashrc&#10;source ~/.bashrc&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Agora, de qualquer lugar dentro de ~/public_html:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;cd ~/public_html&#10;occ status&#10;occ maintenance:repair&#10;occ db:add-missing-indices&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="pronto"&gt;Pronto!&#10;&lt;/h2&gt;&lt;p&gt;Agora você tem:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;A stack de NextCloud &lt;strong&gt;mais rápida&lt;/strong&gt; (OpenLiteSpeed + Redis + APCu)&lt;/li&gt;&#10;&lt;li&gt;Totalmente &lt;strong&gt;sem root&lt;/strong&gt; e isolada&lt;/li&gt;&#10;&lt;li&gt;Renovação automática do SSL&lt;/li&gt;&#10;&lt;li&gt;Cabeçalhos de segurança reforçados&lt;/li&gt;&#10;&lt;li&gt;Proteção adequada da pasta de dados&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Aproveite a sua nuvem privada e ultrarrápida!&lt;/p&gt;&#10;&lt;p&gt;Obrigado pela leitura! 🚀&lt;/p&gt;&#10;</description></item><item><title>Como rodar o seu próprio nó de Monero</title><link>https://aquasp.blog/pt/how-to-run-your-own-monero-node/</link><pubDate>Tue, 09 Dec 2025 00:07:50 +0000</pubDate><guid>https://aquasp.blog/pt/how-to-run-your-own-monero-node/</guid><description>&lt;h2 id="introdução"&gt;Introdução&#10;&lt;/h2&gt;&lt;p&gt;Na minha opinião, o Monero é uma das criptomoedas mais importantes. Ele não tem a mesma participação de mercado que o Bitcoin, mas é bem único em um aspecto: &lt;strong&gt;privacidade&lt;/strong&gt;. O Monero é igualzinho a dinheiro vivo — ninguém precisa saber quanto Monero foi enviado nem quem enviou. Nesse ponto, ele é o oposto do Bitcoin. Na verdade, quando o assunto é privacidade, o Bitcoin é &lt;strong&gt;pior que o dinheiro fiduciário&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;Você pode ler mais detalhes aqui:&#10;&lt;a class="link" href="https://lukesmith.xyz/articles/monero-maximalism-or-how-bitcoin-is-a-coin/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://lukesmith.xyz/articles/monero-maximalism-or-how-bitcoin-is-a-coin/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Obs.:&lt;/strong&gt; eu &lt;strong&gt;NÃO&lt;/strong&gt; estou recomendando que ninguém invista em Monero. O Monero foi feito para ser uma moeda, mas, como as criptomoedas ainda são extremamente voláteis, muita gente o trata como investimento. Faça sua própria pesquisa — não me responsabilizo por nenhum investimento que você fizer.&lt;/p&gt;&#10;&lt;h2 id="1-escolha-uma-vps-ou-monte-em-casa"&gt;1. Escolha uma VPS ou monte em casa&#10;&lt;/h2&gt;&lt;p&gt;Antes de tudo, você vai precisar de um servidor. Pode usar o seu próprio PC de casa, se preferir, ou uma VPS. A VPS é mais fácil, porque fica online 24/7 e você sempre consegue abrir as portas necessárias.&lt;/p&gt;&#10;&lt;p&gt;Em casa, muitos provedores bloqueiam as portas de entrada, então o seu nó não seria público (ele ainda ajudaria a rede, mas você não conseguiria se conectar a ele de fora com facilidade sem algo como o ngrok).&lt;/p&gt;&#10;&lt;p&gt;Eu, pessoalmente, recomendo a &lt;strong&gt;Contabo&lt;/strong&gt; para rodar um nó de Monero, porque eles têm ótimos preços nos planos de VPS de armazenamento.&#10;Veja os preços aqui: &lt;a class="link" href="https://contabo.com/en/storage-vps/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;Contabo Storage VPS&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;A &lt;strong&gt;Storage VPS S&lt;/strong&gt; é mais que suficiente. Hoje a blockchain do Monero ocupa cerca de 175 GB, usa menos de 2 GB de RAM e quase nada de CPU depois de totalmente sincronizada (~3 % de uso).&lt;/p&gt;&#10;&lt;h2 id="2-protegendo-a-vps"&gt;2. Protegendo a VPS&#10;&lt;/h2&gt;&lt;p&gt;Antes de tudo, &lt;strong&gt;desative o login por senha&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;Depois, instale e configure o UFW (se ainda não estiver configurado):&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install ufw&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw default deny incoming&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw default allow outgoing&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw allow ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw allow &lt;span style="color:#ae81ff"&gt;18080&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw allow &lt;span style="color:#ae81ff"&gt;18089&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ufw enable&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3-criando-um-usuário-dedicado"&gt;3. Criando um usuário dedicado&#10;&lt;/h2&gt;&lt;p&gt;Por segurança, nunca rode o Monero como root. Em vez disso, crie um usuário normal:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;adduser monerouser&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Defina uma senha e aperte Enter no resto das perguntas.&lt;/p&gt;&#10;&lt;h2 id="4-mudando-as-configurações-e-sincronizando-o-nó"&gt;4. Mudando as configurações e sincronizando o nó&#10;&lt;/h2&gt;&lt;p&gt;Troque para o novo usuário:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;su monerouser&#10;cd ~&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Baixe os binários oficiais do Monero CLI (Linux 64 bits):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;wget -c https://downloads.getmonero.org/cli/monero-linux-x64-v0.18.3.4.tar.bz2&#10;mkdir monero&#10;tar -xjvf monero-linux-x64-v0.18.3.4.tar.bz2 -C monero --strip-components=1&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(Se precisar, troque a versão na URL/no nome do arquivo pela mais recente em &lt;a class="link" href="https://getmonero.org/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://getmonero.org&lt;/a&gt;.)&lt;/p&gt;&#10;&lt;p&gt;Entre na pasta e inicie o monerod uma vez só para criar os arquivos de configuração (pare depois de alguns segundos com Ctrl+C):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;cd monero&#10;./monerod&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Agora edite o arquivo de configuração:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;nano ~/.bitmonero/bitmonero.conf&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cole as configurações recomendadas a seguir:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;# P2P full node&#10;public-node=true # Advertises the RPC-restricted port over p2p&#10;&#10;# RPC settings&#10;rpc-restricted-bind-ip=0.0.0.0&#10;rpc-restricted-bind-port=18089&#10;&#10;# Node settings&#10;enforce-dns-checkpointing=true&#10;db-sync-mode=safe # Slow but reliable db writes&#10;enable-dns-blocklist=true # Block known-malicious nodes&#10;no-igd=true # Disable UPnP&#10;no-zmq=true&#10;&#10;# Bandwidth settings (much faster sync + better contribution)&#10;out-peers=32&#10;in-peers=32&#10;limit-rate-up=1048576 # 1 GB/s upload&#10;limit-rate-down=1048576 # 1 GB/s download&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Salve com &lt;strong&gt;Ctrl+O → Enter → Ctrl+X&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;Inicie o nó em modo destacado (em segundo plano):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;./monerod --detach&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pronto! Agora é só esperar ele sincronizar por completo.&lt;/p&gt;&#10;&lt;p&gt;Confira o status da sincronização quando quiser com:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;./monerod status&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A sincronização inicial costuma levar algumas horas, dependendo da sua conexão e da velocidade da VPS.&lt;/p&gt;&#10;&lt;p&gt;Depois de totalmente sincronizado, você pode conectar qualquer carteira Monero (Cake Wallet, Monero GUI, Feather etc.) ao seu próprio nó usando o IP da sua VPS e a porta &lt;strong&gt;18089&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h2 id="conclusão-e-créditos"&gt;Conclusão e créditos&#10;&lt;/h2&gt;&lt;p&gt;É só isso! A comunidade do Monero incentiva muito que cada um rode o próprio nó completo. Isso deixa a rede mais descentralizada e dá a você o máximo de privacidade.&lt;/p&gt;&#10;&lt;p&gt;Este guia não teria sido possível sem estes excelentes materiais:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.getmonero.org/resources/user-guides/vps_run_node.html?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://www.getmonero.org/resources/user-guides/vps_run_node.html&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.coincashew.com/coins/overview-xmr/guide-or-how-to-run-a-full-node?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://www.coincashew.com/coins/overview-xmr/guide-or-how-to-run-a-full-node&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Obrigado pela leitura! 🙂&lt;/p&gt;&#10;</description></item><item><title>Como hospedar sua própria instância do Piped</title><link>https://aquasp.blog/pt/how-to-self-host-your-own-piped-instance/</link><pubDate>Mon, 08 Dec 2025 23:58:10 +0000</pubDate><guid>https://aquasp.blog/pt/how-to-self-host-your-own-piped-instance/</guid><description>&lt;h2 id="introdução"&gt;Introdução&#10;&lt;/h2&gt;&lt;p&gt;O Piped é um front-end alternativo e de código aberto para o YouTube, focado em privacidade. Sem rastreamento do Google, sem anúncios (nem nos vídeos que normalmente têm anúncios que não dá para pular), e funciona perfeitamente com o SponsorBlock e o DeArrow.&lt;/p&gt;&#10;&lt;p&gt;Hospedar sua própria instância com Docker é incrivelmente fácil e leva menos de 20 minutos.&lt;/p&gt;&#10;&lt;h2 id="requisitos"&gt;Requisitos&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Um domínio (ou subdomínio)&lt;/li&gt;&#10;&lt;li&gt;Uma VPS KVM barata com suporte a Docker (evite OpenVZ — kernel antigo)&lt;/li&gt;&#10;&lt;li&gt;~US$ 3–6/mês é mais que suficiente (1 CPU, 1–2 GB de RAM)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Ótimos provedores baratos em 2025:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;RackNerd&lt;/li&gt;&#10;&lt;li&gt;Hostinger (meu link de afiliado, se quiser apoiar: &lt;a class="link" href="https://hostinger.com.br/?REFERRALCODE=waterdownfall&amp;amp;ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://hostinger.com.br?REFERRALCODE=waterdownfall&lt;/a&gt;)&lt;/li&gt;&#10;&lt;li&gt;Cloudcone, Hetzner Cloud, BuyVM etc.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="passo-1-proteja-e-prepare-sua-vps"&gt;Passo 1: Proteja e prepare sua VPS&#10;&lt;/h2&gt;&lt;p&gt;(Só chaves SSH, firewall etc. — faça isso primeiro!)&lt;/p&gt;&#10;&lt;p&gt;Depois, instale o Docker (exemplo para Ubuntu/Debian):&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt update &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt install -y ca-certificates curl gnupg lsb-release&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Add Docker repo&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mkdir -p /etc/apt/keyrings&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;deb [arch=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;dpkg --print-architecture&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;&lt;span style="color:#e6db74"&gt; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;lsb_release -cs&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;&lt;span style="color:#e6db74"&gt; stable&amp;#34;&lt;/span&gt; &amp;gt; /etc/apt/sources.list.d/docker.list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="passo-2-implante-o-piped-com-a-configuração-oficial-em-docker"&gt;Passo 2: Implante o Piped com a configuração oficial em Docker&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;cd /opt&#10;git clone https://github.com/TeamPiped/Piped-Docker&#10;cd Piped-Docker&#10;./configure-instance.sh&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Durante o script:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Escolha o &lt;strong&gt;Caddy&lt;/strong&gt; como proxy reverso (o mais fácil, com SSL automático)&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Informe seu domínio e os subdomínios:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Frontend → piped.yourdomain.com&lt;/li&gt;&#10;&lt;li&gt;API do backend → pipedapi.yourdomain.com&lt;/li&gt;&#10;&lt;li&gt;Proxy → pipedproxy.yourdomain.com&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="passo-3-aponte-o-dns-para-sua-vps"&gt;Passo 3: Aponte o DNS para sua VPS&#10;&lt;/h2&gt;&lt;p&gt;Crie três registros A no seu provedor de DNS:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;piped.yourdomain.com → VPS_IP&#10;pipedapi.yourdomain.com → VPS_IP&#10;pipedproxy.yourdomain.com → VPS_IP&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-4-suba-tudo"&gt;Passo 4: Suba tudo&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;docker compose up -d&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pronto!&#10;Depois que o DNS propagar (normalmente em menos de 10 minutos), o seu YouTube privado estará no ar em:&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://piped.yourdomain.com/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://piped.yourdomain.com&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;O Caddy cuida automaticamente do SSL gratuito do Let’s Encrypt — sem precisar mexer no certbot manualmente.&lt;/p&gt;&#10;&lt;h2 id="passo-5-opcional-confira-os-logs"&gt;Passo 5: (Opcional) Confira os logs&#10;&lt;/h2&gt;&lt;p&gt;Bash&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;# See what Caddy is doing&#10;docker logs -f caddy&#10;&#10;# Or any other container&#10;docker logs -f piped-frontend&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="dicas-bônus"&gt;Dicas bônus&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Quer deixar pública? É só compartilhar a URL — qualquer pessoa pode usar a sua instância.&lt;/li&gt;&#10;&lt;li&gt;Quer deixar privada? Bloqueie com regras de firewall do Cloudflare ou com autenticação básica no Caddy.&lt;/li&gt;&#10;&lt;li&gt;Use junto com o app &lt;strong&gt;LibreTube&lt;/strong&gt; (Android) para ter a experiência completa sem Google.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Agora você tem o seu próprio YouTube sem anúncios, sem rastreamento e com SponsorBlock — totalmente sob o seu controle.&lt;/p&gt;&#10;&lt;p&gt;Obrigado pela leitura!&lt;/p&gt;&#10;</description></item><item><title>Como instalar o WordPress em LEMP com Redis e WP-CLI no Debian 11</title><link>https://aquasp.blog/pt/how-to-setup-wordpress-on-lemp-with-redis-and-wp-cli-on-debian-11/</link><pubDate>Mon, 08 Dec 2025 23:47:36 +0000</pubDate><guid>https://aquasp.blog/pt/how-to-setup-wordpress-on-lemp-with-redis-and-wp-cli-on-debian-11/</guid><description>&lt;h2 id="introdução"&gt;Introdução&#10;&lt;/h2&gt;&lt;p&gt;Este é o jeito mais rápido, mais seguro e que mais economiza recursos para hospedar o WordPress por conta própria em 2025.&#10;Vamos usar uma stack LEMP de verdade (Linux + Nginx + MySQL/MariaDB + PHP-FPM) com isolamento de PHP por site, cache de objetos com Redis, SSL automático e WP-CLI — tudo ajustado para velocidade e segurança.&lt;/p&gt;&#10;&lt;p&gt;Vamos lá.&lt;/p&gt;&#10;&lt;h2 id="passo-0-proteja-e-atualize-sua-vps"&gt;Passo 0: Proteja e atualize sua VPS&#10;&lt;/h2&gt;&lt;p&gt;(Se ainda não fez isso, siga primeiro um guia de proteção de VPS — só chaves SSH, firewall, fail2ban etc.)&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt update &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt autoremove --purge&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reboot&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="passo-1-instale-a-stack-principal"&gt;Passo 1: Instale a stack principal&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;# Nginx&#10;apt install nginx -y&#10;systemctl enable nginx&#10;&#10;# MariaDB (better than MySQL on Debian)&#10;apt install mariadb-server -y&#10;systemctl enable mariadb&#10;&#10;# PHP 8.3 + all needed extensions (using ondrej/sury repo)&#10;apt install ca-certificates apt-transport-https lsb-release -y&#10;wget -qO- https://packages.sury.org/php/apt.gpg | gpg --dearmor &amp;gt; /usr/share/keyrings/sury-php.gpg&#10;echo &amp;#34;deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;#34; &amp;gt; /etc/apt/sources.list.d/sury-php.list&#10;apt update&#10;apt install php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-intl php8.3-imagick php8.3-redis -y&#10;systemctl enable php8.3-fpm&#10;&#10;# Redis&#10;curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg&#10;echo &amp;#34;deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main&amp;#34; &amp;gt; /etc/apt/sources.list.d/redis.list&#10;apt update &amp;amp;&amp;amp; apt install redis-server -y&#10;systemctl enable redis-server&#10;&#10;# Certbot + WP-CLI&#10;apt install python3-certbot-nginx -y&#10;curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar&#10;chmod +x wp-cli.phar &amp;amp;&amp;amp; mv wp-cli.phar /usr/local/bin/wp&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-2-proteja-o-mariadb-e-crie-o-banco-de-dados"&gt;Passo 2: Proteja o MariaDB e crie o banco de dados&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;mysql_secure_installation&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;mysql -u root -p&#10;CREATE DATABASE wp_yoursite;&#10;CREATE USER &amp;#39;wp_yoursite&amp;#39;@&amp;#39;localhost&amp;#39; IDENTIFIED BY &amp;#39;strongpassword&amp;#39;;&#10;GRANT ALL ON wp_yoursite.* TO &amp;#39;wp_yoursite&amp;#39;@&amp;#39;localhost&amp;#39;;&#10;FLUSH PRIVILEGES;&#10;EXIT;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-3-isole-o-php-fpm-por-site-segurança--estabilidade"&gt;Passo 3: Isole o PHP-FPM por site (segurança + estabilidade)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;cd /etc/php/8.3/fpm/pool.d/&#10;cp www.conf yoursite.conf&#10;nano yoursite.conf&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Substitua:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;[www] → [yoursite]&lt;/li&gt;&#10;&lt;li&gt;user = www-data → user = yoursiteuser (vamos criar esse usuário daqui a pouco)&lt;/li&gt;&#10;&lt;li&gt;group = www-data → group = yoursiteuser&lt;/li&gt;&#10;&lt;li&gt;listen = /run/php/php8.3-fpm.sock → listen = /run/php/php8.3-fpm-yoursite.sock&lt;/li&gt;&#10;&lt;li&gt;Mude o gerenciador de processos de dynamic → ondemand (economiza RAM)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl restart php8.3-fpm&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(Vai falhar até o usuário existir — tudo bem.)&lt;/p&gt;&#10;&lt;h2 id="passo-4-otimize-o-php-e-ative-o-opcache"&gt;Passo 4: Otimize o PHP e ative o OPcache&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;sed -i &amp;#34;s/memory_limit = .*/memory_limit = 1024M/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/upload_max_filesize = .*/upload_max_filesize = 10240M/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/post_max_size = .*/post_max_size = 10240M/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/max_execution_time = .*/max_execution_time = 600/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/;opcache.enable=1/opcache.enable=1/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/;opcache.memory_consumption=.*/opcache.memory_consumption=512/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=20000/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-5-crie-o-usuário-do-sistema-e-o-diretório-do-site"&gt;Passo 5: Crie o usuário do sistema e o diretório do site&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;adduser yoursiteuser --shell /bin/bash&#10;su yoursiteuser&#10;mkdir ~/public_html &amp;amp;&amp;amp; cd ~/public_html&#10;echo &amp;#34;cd ~/public_html&amp;#34; &amp;gt;&amp;gt; ~/.bashrc&#10;exit&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-6-configuração-do-nginx-rápida-e-segura"&gt;Passo 6: Configuração do Nginx (rápida e segura)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;nano /etc/nginx/sites-available/yoursite.conf&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;upstream php-yoursite {&#10; server unix:/run/php/php8.3-fpm-yoursite.sock;&#10;}&#10;&#10;server {&#10; listen 80;&#10; listen [::]:80;&#10; server_name yourdomain.com www.yourdomain.com;&#10; root /home/yoursiteuser/public_html;&#10; index index.php index.html;&#10;&#10; client_max_body_size 10G;&#10;&#10; location / {&#10; try_files $uri $uri/ /index.php?$args;&#10; }&#10;&#10; location ~ \.php$ {&#10; include fastcgi_params;&#10; fastcgi_pass php-yoursite;&#10; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&#10; }&#10;&#10; location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?|ttf|eot)$ {&#10; expires max;&#10; log_not_found off;&#10; }&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;ln -s /etc/nginx/sites-available/yoursite.conf /etc/nginx/sites-enabled/&#10;nginx -t &amp;amp;&amp;amp; systemctl reload nginx&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-7-instale-o-wordpress-via-wp-cli-como-o-usuário-do-site"&gt;Passo 7: Instale o WordPress via WP-CLI (como o usuário do site)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;su yoursiteuser&#10;cd ~/public_html&#10;&#10;wp core download&#10;wp config create --dbname=wp_yoursite --dbuser=wp_yoursite --dbpass=&amp;#39;strongpassword&amp;#39; --locale=en_US&#10;wp core install --url=https://yourdomain.com --title=&amp;#34;Your Site&amp;#34; --admin_user=admin --admin_password=&amp;#39;strongpass&amp;#39; --admin_email=you@domain.com&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-8-ssl-com-lets-encrypt-renovação-automática"&gt;Passo 8: SSL com Let’s Encrypt (renovação automática)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;certbot --nginx -d yourdomain.com -d www.yourdomain.com&#10;# Choose redirect to HTTPS when asked&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Adicione o cron de renovação automática:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;crontab -e&#10;# Add:&#10;0 0 * * 0 certbot renew --quiet&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-9-ative-o-cache-de-objetos-com-redis"&gt;Passo 9: Ative o cache de objetos com Redis&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;# As root&#10;usermod -aG redis yoursiteuser&#10;chmod 770 /var/run/redis/redis-server.sock&#10;&#10;# Optimize Redis config&#10;sed -i &amp;#39;s/port 6379/port 0/&amp;#39; /etc/redis/redis.conf&#10;sed -i &amp;#39;s|# unixsocket /run/redis/redis-server.sock|unixsocket /var/run/redis/redis-server.sock|&amp;#39; /etc/redis/redis.conf&#10;sed -i &amp;#39;s/# unixsocketperm 700/unixsocketperm 770/&amp;#39; /etc/redis/redis.conf&#10;sed -i &amp;#39;s/# maxmemory .*/maxmemory 1024mb/&amp;#39; /etc/redis/redis.conf&#10;systemctl restart redis-server&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;# As yoursiteuser&#10;cd ~/public_html&#10;wp plugin install redis-cache --activate&#10;wp config set WP_REDIS_SCHEME unix&#10;wp config set WP_REDIS_PATH &amp;#39;/var/run/redis/redis-server.sock&amp;#39;&#10;wp redis enable&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="pronto"&gt;Pronto!&#10;&lt;/h2&gt;&lt;p&gt;Agora você tem:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Pool do PHP-FPM totalmente isolado (1 usuário = 1 site = nenhum estrago entre sites)&lt;/li&gt;&#10;&lt;li&gt;Cache de objetos com Redis via socket Unix&lt;/li&gt;&#10;&lt;li&gt;OPcache + limites de upload enormes&lt;/li&gt;&#10;&lt;li&gt;Renovação automática do SSL&lt;/li&gt;&#10;&lt;li&gt;O roteamento mais rápido possível no Nginx&lt;/li&gt;&#10;&lt;li&gt;WP-CLI pronto para usar&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;O seu wp-admin vai parecer instantâneo, e o site vai aguentar o tráfego como um campeão — mesmo numa VPS de US$ 5/mês.&lt;/p&gt;&#10;&lt;p&gt;Próximos passos:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Instale um plugin de cache de página (qualquer um gratuito serve)&lt;/li&gt;&#10;&lt;li&gt;Configure o Cloudflare (opcional, mas recomendado)&lt;/li&gt;&#10;&lt;li&gt;Backups regulares&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Aproveite o seu WordPress privado e ultrarrápido!&lt;/p&gt;&#10;&lt;p&gt;Obrigado pela leitura! 😊&lt;/p&gt;&#10;</description></item><item><title>Como montar o seu próprio servidor de e-mail</title><link>https://aquasp.blog/pt/how-to-setup-your-own-email-server/</link><pubDate>Mon, 08 Dec 2025 23:35:02 +0000</pubDate><guid>https://aquasp.blog/pt/how-to-setup-your-own-email-server/</guid><description>&lt;h2 id="introdução"&gt;Introdução&#10;&lt;/h2&gt;&lt;p&gt;Quer ter o seu próprio e-mail ultraprivado, como &lt;a class="link" href="" &gt;name@yourdomain.com&lt;/a&gt;, com uma interface de webmail bonita?&#10;Este guia mostra como montar um servidor de e-mail completo em menos de uma hora usando o lendário script &lt;strong&gt;EmailWiz&lt;/strong&gt; do Luke Smith + o webmail &lt;strong&gt;Roundcube&lt;/strong&gt; — tudo numa VPS de US$ 2–3/mês.&lt;/p&gt;&#10;&lt;p&gt;Tudo é gratuito, de código aberto e 100% sob o seu controle.&lt;/p&gt;&#10;&lt;h2 id="passo-0-arrume-uma-vps-barata"&gt;Passo 0: Arrume uma VPS barata&#10;&lt;/h2&gt;&lt;p&gt;Bons provedores com promoções frequentes:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Contabo&lt;/li&gt;&#10;&lt;li&gt;Seção “Offers” do LowEndTalk&lt;/li&gt;&#10;&lt;li&gt;Hostinger (meu link de afiliado, se quiser me apoiar -&amp;gt; &lt;a class="link" href="https://hostinger.com.br/?REFERRALCODE=waterdownfall&amp;amp;ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://hostinger.com.br?REFERRALCODE=waterdownfall&lt;/a&gt;)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Requisitos:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Qualquer localização (EUA funciona bem)&lt;/li&gt;&#10;&lt;li&gt;Debian 10 ou 11 (vamos usar o Debian 10 neste guia)&lt;/li&gt;&#10;&lt;li&gt;Pelo menos 1 GB de RAM (2 GB ou mais recomendado)&lt;/li&gt;&#10;&lt;li&gt;Defina o hostname no cadastro como o seu domínio (por exemplo, sobremail.com)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Espere a implantação → pegue a senha de root no e-mail → entre via SSH.&lt;/p&gt;&#10;&lt;h2 id="passo-1-proteção-básica-da-vps"&gt;Passo 1: Proteção básica da VPS&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh root@your-vps-ip&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt update &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Troque a senha de root:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;passwd&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Crie e envie uma chave SSH (faça isso a partir da sua máquina local):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;ssh-copy-id root@your-vps-ip&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Agora desative o login por senha:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;nano /etc/ssh/sshd_config&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Altere:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;PasswordAuthentication no&#10;UsePAM no&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Depois:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl restart sshd&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Agora só a sua chave SSH funciona — muito mais seguro.&lt;/p&gt;&#10;&lt;h2 id="passo-2-instale-o-emailwiz-o-script-mágico"&gt;Passo 2: Instale o EmailWiz (o script mágico)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;apt install curl nginx python3-certbot-nginx -y&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Aponte estes registros DNS para o IP da sua VPS:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;yourdomain.com → IP da VPS (registro A)&lt;/li&gt;&#10;&lt;li&gt;mail.yourdomain.com → IP da VPS (registro A)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Rode o script do Luke:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;curl -LO lukesmith.xyz/emailwiz.sh&#10;sh emailwiz.sh&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Siga as perguntas:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Responda Yes/Y para tudo&lt;/li&gt;&#10;&lt;li&gt;Quando pedir o “System mail name” → digite SÓ yourdomain.com (NÃO mail.yourdomain.com!)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Espere ~5–10 minutos. Quando terminar, ele te dá três registros DNS para adicionar:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Registro TXT do DKIM (mail._domainkey.yourdomain.com)&lt;/li&gt;&#10;&lt;li&gt;Registro TXT do DMARC (_dmarc.yourdomain.com)&lt;/li&gt;&#10;&lt;li&gt;Registro TXT do SPF (domínio raiz)&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Adicione-os no seu provedor de DNS (Cloudflare, Namecheap etc.).&lt;/p&gt;&#10;&lt;h2 id="passo-3-configure-o-dns-reverso-essencial-para-a-entregabilidade"&gt;Passo 3: Configure o DNS reverso (essencial para a entregabilidade!)&#10;&lt;/h2&gt;&lt;p&gt;No painel da Cloudcone → Networking → rDNS → defina como yourdomain.com&#10;&lt;strong&gt;NÃO ative o IPv6&lt;/strong&gt; (a Cloudcone ainda não suporta rDNS em IPv6 — isso vai prejudicar a entregabilidade).&lt;/p&gt;&#10;&lt;h2 id="passo-4-crie-sua-primeira-caixa-de-e-mail"&gt;Passo 4: Crie sua primeira caixa de e-mail&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;useradd -G mail -m yourusername&#10;passwd yourusername&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Agora o seu e-mail é: &lt;a class="link" href="mailto:yourusername@yourdomain.com" &gt;yourusername@yourdomain.com&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Teste no Thunderbird/cliente IMAP:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;IMAP: mail.yourdomain.com (porta 993, SSL/TLS)&lt;/li&gt;&#10;&lt;li&gt;SMTP: mail.yourdomain.com (porta 465, SSL/TLS)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="passo-5-instale-o-webmail-roundcube"&gt;Passo 5: Instale o webmail Roundcube&#10;&lt;/h2&gt;&lt;p&gt;Adicione o backports + o repositório do PHP 8.x:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2&#10;echo &amp;#34;deb https://packages.sury.org/php/ $(lsb_release -sc) main&amp;#34; | tee /etc/apt/sources.list.d/sury-php.list&#10;wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add -&#10;apt update&#10;apt install -y php8.0-fpm php8.0-common php8.0-gd php8.0-imap php8.0-mysql php8.0-curl php8.0-zip php8.0-xml php8.0-mbstring php8.0-intl mariadb-server&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Proteja o MySQL:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;mysql_secure_installation&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Crie o banco de dados do Roundcube:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;mysql -u root -p&#10;CREATE DATABASE roundcube;&#10;CREATE USER &amp;#39;roundcubeuser&amp;#39;@&amp;#39;localhost&amp;#39; IDENTIFIED BY &amp;#39;strongpassword&amp;#39;;&#10;GRANT ALL ON roundcube.* TO &amp;#39;roundcubeuser&amp;#39;@&amp;#39;localhost&amp;#39;;&#10;FLUSH PRIVILEGES;&#10;EXIT;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Baixe e extraia o Roundcube (a versão completa mais recente):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;cd /var/www&#10;wget https://github.com/roundcube/roundcubemail/releases/download/1.6.9/roundcubemail-1.6.9-complete.tar.gz&#10;tar xvf roundcubemail-1.6.9-complete.tar.gz&#10;mv roundcubemail-1.6.9 roundcube&#10;rm roundcubemail-1.6.9-complete.tar.gz&#10;chown -R www-data:www-data /var/www/roundcube/temp /var/www/roundcube/logs&#10;mysql roundcube &amp;lt; /var/www/roundcube/SQL/mysql.initial.sql&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Configuração do Nginx para o Roundcube (/etc/nginx/sites-enabled/roundcube):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;server {&#10; listen 80;&#10; listen [::]:80;&#10; server_name yourdomain.com;&#10; root /var/www/roundcube;&#10; index index.php;&#10;&#10; location / {&#10; try_files $uri $uri/ /index.php;&#10; }&#10;&#10; location ~ \.php$ {&#10; include fastcgi_params;&#10; fastcgi_pass unix:/run/php/php8.0-fpm.sock;&#10; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&#10; }&#10;&#10; location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {&#10; expires 360d;&#10; access_log off;&#10; }&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Teste e recarregue o Nginx, depois obtenha o SSL:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;nginx -t &amp;amp;&amp;amp; systemctl reload nginx&#10;certbot --nginx -d yourdomain.com&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Acesse &lt;a class="link" href="https://yourdomain.com/installer" target="_blank" rel="noopener"&#10; &gt;https://yourdomain.com/installer&lt;/a&gt; → siga o assistente:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Banco de dados: roundcube, usuário roundcubeuser, a senha que você definiu&lt;/li&gt;&#10;&lt;li&gt;Host IMAP: localhost&lt;/li&gt;&#10;&lt;li&gt;Host SMTP: localhost&lt;/li&gt;&#10;&lt;li&gt;Host padrão: mail.yourdomain.com&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Ative todos os plugins &lt;strong&gt;menos o Enigma&lt;/strong&gt; (ele quebra as identidades em versões mais antigas).&lt;/p&gt;&#10;&lt;p&gt;Ao terminar, apague o instalador:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;rm -rf /var/www/roundcube/installer&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-6-ajustes-de-qualidade-de-vida"&gt;Passo 6: Ajustes de qualidade de vida&#10;&lt;/h2&gt;&lt;p&gt;Edite /var/www/roundcube/config/config.inc.php:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;// Login with just username (no need to type @domain.com)&#10;$config[&amp;#39;username_domain&amp;#39;] = &amp;#39;yourdomain.com&amp;#39;;&#10;&#10;// Stay logged in for 6 months&#10;$config[&amp;#39;session_lifetime&amp;#39;] = 259200;&#10;&#10;// Disable Enigma if you enabled it&#10;// Remove &amp;#39;enigma&amp;#39; from $config[&amp;#39;plugins&amp;#39;] array&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Aumente o tamanho dos anexos:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;nano /etc/php/8.0/fpm/php.ini&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;upload_max_filesize = 50M&#10;post_max_size = 50M&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Depois:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl restart php8.0-fpm&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="passo-7-proteção-contra-força-bruta-com-o-fail2ban"&gt;Passo 7: Proteção contra força bruta com o Fail2Ban&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;apt install fail2ban -y&#10;cd /var/www/roundcube/plugins&#10;wget https://github.com/texxasrulez/roundcube_fail2ban/archive/refs/tags/1.4.zip&#10;unzip 1.4.zip&#10;mv roundcube_fail2ban-1.4 fail2ban&#10;rm 1.4.zip&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ative na configuração do Roundcube (config.inc.php):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;$config[&amp;#39;plugins&amp;#39;][] = &amp;#39;fail2ban&amp;#39;;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Adicione a jail (/etc/fail2ban/jail.local – crie se não existir):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;[roundcube]&#10;enabled = true&#10;port = http,https&#10;filter = roundcube&#10;action = iptables-multiport[name=roundcube, port=&amp;#34;http,https&amp;#34;]&#10;logpath = /var/www/roundcube/logs/errors.log&#10;maxretry = 5&#10;bantime = 3600&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Crie o filtro (/etc/fail2ban/filter.d/roundcube.conf):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;[Definition]&#10;failregex = IMAP Error: Login failed for .* from &amp;lt;HOST&amp;gt;&#10;ignoreregex =&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Reinicie:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl restart fail2ban php8.0-fpm&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pronto! Agora o seu webmail está protegido.&lt;/p&gt;&#10;&lt;h2 id="resultado-final"&gt;Resultado final&#10;&lt;/h2&gt;&lt;p&gt;Agora você tem:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Servidor de e-mail completo com DKIM, SPF e DMARC&lt;/li&gt;&#10;&lt;li&gt;Webmail Roundcube bonito e rápido&lt;/li&gt;&#10;&lt;li&gt;Zero envolvimento do Google/Microsoft&lt;/li&gt;&#10;&lt;li&gt;Login uma vez a cada 6 meses&lt;/li&gt;&#10;&lt;li&gt;Proteção contra força bruta&lt;/li&gt;&#10;&lt;li&gt;Tudo por ~US$ 50/ano&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Bem-vindo à verdadeira liberdade no e-mail.&lt;/p&gt;&#10;&lt;p&gt;Obrigado pela leitura! 😊&lt;/p&gt;&#10;</description></item></channel></rss>