CasaOS + Pangolin: Guia de Acesso Remoto

Este guia apresenta uma solução prática para expor seu servidor caseiro à internet de forma totalmente self-hosted. Utilizando o CasaOS em conjunto com o Pangolin, você aprenderá a configurar um ambiente acessível de qualquer lugar.

Este projeto foi desenvolvido e apresentado em uma das lives no canal do Coach de Osasco, e se você não conhece é porque você é um pequeno dicotômico.

Criação de par de chaves SSH

ssh-keygen -t ed25519 -C "Bandindinho"

Ao executar o comando, serão criadas duas chaves:

Use esse comando para copiar a informacao da chave pública

cat ~/.ssh/id_ed25519.pub

Criando um maquina na Digital Ocean

Nesta etapa, criaremos uma instância na DigitalOcean (embora o processo seja aplicável a qualquer provedor de nuvem). Esta máquina atuará como o Portal Central, conectando todos os seus serviços. Nela, instalaremos o Pangolin via Docker. O Pangolin funcionará como um proxy reverso, gerenciando a conexão VPN (via WireGuard) com sua máquina local e automatizando a emissão de certificados SSL. Isso garante que todos os seus domínios utilizem o protocolo HTTPS, exibindo o ícone do cadeado e assegurando uma conexão criptografada.

Passo 1: Criação e Localização do Droplet

No menu lateral esquerdo da DigitalOcean, clique na opção Droplets. Em seguida, escolha a região geográfica mais próxima de você ou do seu público. No exemplo, selecionamos San Francisco para hospedar a máquina.

Escolha da região na DigitalOcean

Passo 2: Escolha do Sistema Operacional (SO)

Escolha o sistema operacional de sua preferência. Recomendamos o Debian, pois utilizá-lo tanto na nuvem quanto no HomeLab (onde rodará o CasaOS) facilita a padronização e a instalação.

Escolha do Sistema Operacional Debian

Passo 3: Especificações Técnicas (Hardware)

Como esta máquina será dedicada exclusivamente ao Pangolin, não é necessário um hardware potente. Selecione o plano com 1 GB de RAM. Em nossos testes, o Pangolin consome no máximo 700 MB, tornando esta configuração o melhor custo-benefício.

Escolha das especificações de hardware

Passo 4: Autenticação via Chave SSH

Por segurança, é altamente recomendável utilizar uma Chave SSH em vez de uma senha convencional. Clique em "Add SSH Key".

Opção de adicionar chave SSH

Se você ainda não tem uma chave, crie uma em seu terminal local com o comando:

ssh-keygen -t ed25519 -C "seu_comentario"

Para visualizar sua chave pública e colá-la no painel da DigitalOcean, use:

cat ~/.ssh/id_ed25519.pub

ATENÇÃO: Use sempre a chave que termina em .pub (chave pública). Nunca compartilhe sua chave privada!

Chave SSH Publica

Passo 5: Finalização e Hostname

Para manter a organização, altere o campo Hostname para um nome simples e identificável (ex: pangolin-server).

Definição do Hostname

Após clicar em criar, a máquina será gerada e você receberá um IP Público no painel de controle.

IP Público gerado

Passo 6: Configuração de DNS (Porkbun ou similar)

Agora, precisamos apontar seu domínio para o IP da nova máquina. No seu provedor de domínio (como o Porkbun):

Painel do Porkbun
  1. Vá até as configurações de DNS Records.
  2. Adicione um registro do Tipo A (para IPv4).
  3. Configure dois apontamentos:
    • Um com o host vazio (ou @) apontando para o seu IP Público.
    • Um com o host * (wildcard) apontando para o mesmo IP. Isso garante que qualquer subdomínio seja redirecionado para o Pangolin.
Configuração dos registros DNS

Passo 7: Acesso Remoto

Com tudo configurado, acesse seu servidor via terminal utilizando o protocolo SSH:

ssh root@SEU_IP_PUBLICO
Dica: Substitua SEU_IP_PUBLICO pelo endereço que você visualizou no painel da DigitalOcean.

Instalação Basica nas maquinas.

Esta é uma instalação básica que deve ser realizada em dois ambientes: na sua máquina local (HomeLab), onde instalaremos o sistema CasaOS, e no servidor em nuvem, onde o Pangolin será configurado. Essa estrutura permitirá que o servidor remoto e o seu laboratório doméstico se comuniquem de forma segura."

Instalando programas básicos

apt update && upgrade -y
apt install ca-certificates \
            htop \
            neovim \
            tree \
            git \
            zip \
            unzip \
            tmux \
            curl \
            wget \
            fzf -y 

Instalando a chave PGP do Docker

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

Adicionando o repositório oficial do Docker

tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

Atualização e instalação do Docker

apt update
apt install docker-ce \
            docker-ce-cli \
            containerd.io \
            docker-buildx-plugin \
            docker-compose-plugin -y

Testando a instalação do Docker

docker run hello-world

Instalação do Pangolin

Baixando o script

curl -fsSL https://pangolin.net/get-installer.sh | bash

Instalando o Pangolin

./installer

Após rodar o script de instalação, você passará por um assistente de configuração no terminal. Abaixo está um exemplo de como preencher as informações (substitua pelos seus dados):

=== Basic Configuration ===
Do you want to install the Enterprise version of Pangolin? The EE is free for persoal use or for businesses making less than 100k USD annually. (yes/no):no

Enter your base domain (no subdomain e.g. example.com): bandindinho.help

Enter the domain for the Pangolin dashboard (default: pangolin.bandindinho.help): pangolin.bandindinho.help

Enter email for Let's Encrypt certificates: bandindinho@proton.com

Do you want to use Gerbil to allow tunneled connections (yes/no) (default: yes): yes

=== Email Configuration ===
Enable email functionality (SMTP) (yes/no) (default: no):no

=== Advanced Configuration ===
Is your server IPv6 capable? (yes/no) (default: yes): yes

Do you want to download the MaxMind GeoLite2 database for geoblocking functionality? (yes/no) (default: yes): yes

Would you like to install and start the containers? (yes/no) (default: yes):yes

Would you like to run Pangolin as Docker or Podman containers? (default: docker): docker

=== CrowdSec Install ===
Would you like to install CrowdSec? (yes/no) (default: no): no


=== Setup Token ===
Waiting for Pangolin to generate setup token...
Setup token: 556x6hyaphtjcnx0xmj5c0m3iec0otgt

This token is required to register the first admin account in the web UI at:
https://pangolin.bandindinho.help/auth/initial-setup

Save this token securely. It will be invalid after the first admin is created.

Installation complete!

Primeiro Acesso

Ao finalizar, o terminal exibirá um Setup Token. Guarde-o com segurança!

  1. Acesse o link gerado (ex: https://pangolin.seudominio.com).
  2. Insira o Setup Token para criar sua conta de administrador.
  3. Na primeira tela, dê um nome ao seu projeto (ex: HomeLab-Principal). O Pangolin permite gerenciar múltiplos projetos e domínios em um único painel.
Criação de Organização no Pangolin

Criando a Conexão VPN (Túnel Seguro)

Agora vamos conectar o servidor da nuvem diretamente à sua máquina local (onde o CasaOS será instalado).

  1. No painel do Pangolin, vá em Nodes ou VPN.
  2. Escolha um nome para sua máquina local.
  3. Tipo de Conexão: Recomendo selecionar o Newt. Ele é muito mais simples de instalar que o WireGuard puro, pois automatiza a configuração.
  4. Selecione o sistema operacional do seu HomeLab (ex: Linux/Debian).
  5. O painel gerará um comando em "Run".
    IMPORTANTE: Copie e salve este comando em um bloco de notas. Você o executará dentro da sua máquina local (HomeLab) no passo para fechar o túnel.
Configuração de VPN e Newt

Configurando o Proxy Reverso (HTTPS)

Com a VPN ativa, você já pode criar o acesso externo seguro para o seu CasaOS.

  1. No Pangolin, crie um novo Proxy.
  2. Domínio: Defina o subdomínio (ex: casaos.bandindinho.help).
  3. Destino: Aponte para o IP da VPN da sua máquina local e a porta 80 (padrão do CasaOS).
  4. O Pangolin gerará automaticamente o certificado SSL (o cadeado).
Dica: Para cada novo serviço que você instalar no CasaOS (Plex, Nextcloud, etc.), basta repetir este processo, mudando apenas o subdomínio e o número da porta correspondente ao serviço.
Configuração de Proxy Reverso

Camadas Extras de Segurança

O Pangolin oferece ferramentas poderosas para proteger seu servidor:

Configuração de Regras de Segurança

CasaOS Server

Criando usuário para CasaOS

No caso do CasaOS (ou qualquer outro serviço), você deve criar um usuário não root e adicioná-lo aos grupos necessários (sudo, docker, etc.) para poder gerenciar serviços com segurança.

useradd -s /usr/bin/bash -g users -G adm,sudo,docker -m user
passwd user

Instalando CasaOS

curl -fsSL https://get.casaos.io | sudo bash

Transformando o comando Newt em um serviço systemd

Para que você não precise rodar o comando manualmente toda vez que ligar a máquina, vamos configurá-lo como um serviço do sistema. Isso garante alta disponibilidade para o seu HomeLab.

Copie o bloco abaixo, mas atenção: substitua o texto COLE_AQUI_O_COMANDO_DO_PANGOLIN pelo comando completo (aquele que começa com newt...) que você salvou anteriormente.

sudo tee /etc/systemd/system/newt.service > /dev/null <<EOF
[Unit]
Description=Newt Service
After=network.target
[Service]

ExecStart=YOUR_NEW_COMMAND  # Substitua pelo comando do Pangolin
Restart=always

[Install]
WantedBy=multi-user.target
EOF

Agora, execute os comandos abaixo para dizer ao Linux que ele deve carregar essa nova configuração e iniciar a conexão imediatamente:

# Recarrega as configurações de serviços do sistema
sudo systemctl daemon-reload

# Habilita o serviço para iniciar automaticamente no boot
sudo systemctl enable newt

# Inicia o serviço agora
sudo systemctl start newt

# Verifica se tudo está rodando corretamente
sudo systemctl status newt

Breve explicação sobre tipos de unidades no systemd

Comandos extras úteis

Monitorar os containers Docker que estão sendo executados:

docker ps --format 'table {{.Names}}\t{{.Status}}'

Atualizar a lista de containers a cada 2 segundos usando watch:

watch -n 2 "docker ps --format 'table {{.Names}}\t{{.Status}}'"

Alterar o hostname da máquina para facilitar a identificação do terminal:

sudo hostnamectl set-hostname new-hostname
exec bash

Navegar pelo terminal e visualizar o conteúdo dos arquivos usando o fuzzy finder (fzf):

fzf --preview "cat {}"

Esse são alguns container para cameras e cctv:

Nome Descrição Principal Destaques Site/Repo Oficial
Frigate NVR com detecção de objetos em tempo real usando IA (integra com Coral TPU para eficiência). Excelente para reduzir falsos positivos, integração com Home Assistant, baixa latência. Muito popular em homelabs. https://frigate.video/
ZoneMinder Software completo e maduro para vigilância, com suporte a milhares de câmeras. Escalável, API robusta, apps mobile/desktop, suporta 4K e GPU. https://zoneminder.com/
Shinobi NVR web moderno, leve e fácil de usar. Boa UI, gravação contínua ou por movimento, suporte a MP4/WebM. https://shinobi.video/
Scrypted Plataforma de integração de vídeo com NVR, foco em HomeKit/Google Home/Alexa. Baixa latência, detecções inteligentes, bom para câmeras não nativas. https://www.scrypted.app/
MotionEye Frontend simples para o Motion, ideal para setups básicos e leves (ex: Raspberry Pi). Fácil configuração, detecção de movimento, múltiplas câmeras. https://github.com/motioneye-project/motioneye
Viseron NVR com IA (detecção de objetos, faces), local-only. Suporte a hardware acceleration, integração MQTT/Home Assistant. https://github.com/roflcoopter/viseron
Kerberos.io Sistema modular de vigilância, gratuito na versão Agent. Fácil deploy em Docker/K8s/RPi, escalável. https://kerberos.io/
Agent DVR (iSpy) Software de vigilância com versão Docker gratuita. Detecção avançada, suporte a GPU, apps mobile. https://www.ispyconnect.com/

Referências