Servidor Caseiro com Acer Aspire One
Origem do projeto
Este servidor nasceu de um Acer Aspire One que ganhei da amiga Victoria. Em vez de deixá-lo parado, o objetivo foi encontrar utilidades práticas para ele dentro de casa — bloqueio de anúncios em toda a rede, servidor de música pessoal com downloads via Soulseek, e acesso remoto a tudo isso de qualquer lugar.
Hardware
| Item | Especificação |
|---|---|
| Modelo | Acer Aspire One |
| Processador | Intel Atom N570 1.66GHz |
| Memória RAM | 2GB |
| Armazenamento | 250GB SSD |
| Sistema Operacional | Debian 12 |
| Hostname | aspire |
| IP Local | 192.168.0.254 |
Serviços configurados
1. Pi-hole
Bloqueador de anúncios em nível de DNS. Instalado no servidor e configurado como DNS primário no roteador via DHCP, de modo que todos os dispositivos da rede passam automaticamente pelo filtro — sem instalar nada em cada aparelho.
Porta admin: 4443 (HTTPS)
A porta padrão foi alterada para 4443 para evitar conflito com outros serviços:
Configuração: /etc/pihole/pihole.toml
port = "80o,4443os,[::]:80o,[::]:4443os"
Acesso local: http://[IP-DO-SERVIDOR]:4443
Gerenciamento:
systemctl start pihole-FTL
systemctl stop pihole-FTL
systemctl restart pihole-FTL
systemctl status pihole-FTL
2. slskd + Navidrome
Combinação para baixar e ouvir música. O slskd conecta à rede Soulseek e faz os downloads diretamente para a pasta da biblioteca do Navidrome — toda música baixada aparece automaticamente no servidor de streaming.
2.1 slskd
Cliente Soulseek headless com interface web.
Versão: 0.21.4 (usa .NET 8 — necessário para compatibilidade com o Atom N570)
Porta local: 5030
Diretório de instalação: /opt/slskd/
Diretório de dados: /var/lib/slskd/
Downloads: /srv/musica/biblioteca
Downloads incompletos: /srv/musica/downloads/.incomplete
Configuração: /etc/slskd/slskd.yml
soulseek:
username: [usuario-soulseek]
password: [senha-soulseek]
directories:
downloads: /srv/musica/biblioteca
incomplete: /srv/musica/downloads/.incomplete
web:
port: 5030
Serviço systemd: /etc/systemd/system/slskd.service
[Unit]
Description=slskd Soulseek Client
After=network.target
[Service]
Environment="DOTNET_EnableHWIntrinsics=0"
ExecStart=/opt/slskd/slskd --app-dir /var/lib/slskd --config /etc/slskd/slskd.yml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Nota: A variável
DOTNET_EnableHWIntrinsics=0é obrigatória para o funcionamento no Atom N570.
Gerenciamento:
systemctl start slskd
systemctl stop slskd
systemctl restart slskd
systemctl status slskd
Acesso local: http://[IP-DO-SERVIDOR]:5030
2.2 Navidrome
Servidor de música pessoal com interface web e suporte ao protocolo Subsonic, compatível com dezenas de apps para todos os sistemas operacionais.
Porta local: 4533
Diretório de dados: /var/lib/navidrome
Biblioteca musical: /srv/musica/biblioteca
Configuração: /etc/navidrome/navidrome.toml
MusicFolder = "/srv/musica/biblioteca"
DataFolder = "/var/lib/navidrome"
Address = "0.0.0.0"
Port = 4533
LyricsPriority = "nd-lyrics,lrclib,musixmatch"
Gerenciamento:
systemctl start navidrome
systemctl stop navidrome
systemctl restart navidrome
systemctl status navidrome
Acesso local: http://[IP-DO-SERVIDOR]:4533
Plugin de letras (nd-lyrics)
Fornece letras sincronizadas (.lrc) via múltiplos provedores (lrclib, musixmatch).
Instalação: arquivo nd-lyrics.ndp copiado para /var/lib/navidrome/plugins/
Fonte: github.com/J0R6IT0/navidrome-lyrics-plugin
Nota: As letras não aparecem na interface web do Navidrome. Para visualizá-las, use um dos clientes listados abaixo que suportam letras sincronizadas.
Clientes recomendados para o Navidrome
iOS - Amperfy — gratuito, suporte a download offline e letras sincronizadas
Android - Ultrasonic — gratuito e open source
Linux
- Feishin — gratuito, exibe letras sincronizadas, disponível como .deb para distribuições baseadas em Debian
macOS - Feishin — mesma versão do Linux, disponível também para macOS - Submariner — cliente nativo para macOS, interface limpa
Configuração nos clientes:
- URL do servidor: endereço externo (ver seção Tailscale Funnel) ou IP local na rede de casa
- Usuário/senha: configurados no painel de administração do Navidrome
3. Tailscale Funnel
O servidor está atrás de CGNAT da operadora, o que impede qualquer acesso externo via port forwarding tradicional. O Tailscale Funnel resolve isso criando uma conexão de saída para os servidores do Tailscale — sem necessidade de portas abertas ou IP público.
Conta Tailscale: vinculada ao e-mail do administrador
Funnels ativos
| Serviço | Porta local | Acesso externo |
|---|---|---|
| Navidrome | 4533 | https://[seu-servidor].ts.net |
| slskd | 5030 | https://[seu-servidor].ts.net:8443 |
Comandos úteis
# Ver status dos funnels
tailscale funnel status
# Desativar um funnel
tailscale funnel --https=443 off
tailscale funnel --https=8443 off
# Reativar funnels
tailscale funnel --bg 4533
tailscale funnel --bg --https=8443 5030
O serviço tailscaled está habilitado para iniciar automaticamente com o sistema.
4. Filebrowser
Gerenciador de arquivos web leve para upload de músicas diretamente para a biblioteca do Navidrome, útil quando o slskd não encontra o que se procura.
Porta local: 8080
Pasta raiz: /srv/musica/biblioteca
Banco de dados: /var/lib/filebrowser/filebrowser.db
Configuração relevante:
- Endereço: 0.0.0.0
- Autenticação: json (usuário e senha)
- Tamanho mínimo de senha: 6 caracteres
Serviço systemd: /etc/systemd/system/filebrowser.service
[Unit]
Description=File Browser
After=network.target
[Service]
ExecStart=/usr/local/bin/filebrowser --database /var/lib/filebrowser/filebrowser.db
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Gerenciamento:
systemctl start filebrowser
systemctl stop filebrowser
systemctl restart filebrowser
systemctl status filebrowser
Acesso local: http://[IP-DO-SERVIDOR]:8080
Para alterar a senha do usuário admin, pare o serviço antes:
bash systemctl stop filebrowser filebrowser users update admin --password [nova-senha] --database /var/lib/filebrowser/filebrowser.db systemctl start filebrowser
5. Monitor automático de capas de álbuns
Quando um novo álbum é baixado pelo slskd, o sistema detecta automaticamente a ausência de capa e busca uma no iTunes, salvando-a na pasta do álbum para que o Navidrome a exiba.
Dependência: inotify-tools (instalado via apt install inotify-tools)
Scripts: /root/fetch_covers.py e /root/watch_covers.sh
Serviço systemd: /etc/systemd/system/watch-covers.service
[Unit]
Description=Monitor de capas de álbuns
After=network.target
[Service]
ExecStart=/root/watch_covers.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Fluxo:
1. watch_covers.sh monitora /srv/musica/biblioteca via inotifywait
2. Ao detectar novo álbum com áudio mas sem capa, chama fetch_covers.py
3. fetch_covers.py busca a capa no iTunes e salva como cover.jpg na pasta do álbum
4. O Navidrome detecta a capa na próxima varredura
Gerenciamento:
systemctl start watch-covers
systemctl stop watch-covers
systemctl status watch-covers
Estrutura de diretórios
/srv/musica/
├── biblioteca/ # Biblioteca do Navidrome + destino dos downloads do slskd
└── downloads/
└── .incomplete/ # Downloads em andamento do slskd
/etc/
├── navidrome/
│ └── navidrome.toml
├── slskd/
│ └── slskd.yml
└── pihole/
└── pihole.toml
/opt/slskd/ # Binário e interface web do slskd
/var/lib/navidrome/ # Dados do Navidrome (banco de dados, plugins)
/var/lib/slskd/ # Dados do slskd
/root/
├── fetch_covers.py # Busca e baixa capas ausentes via iTunes
└── watch_covers.sh # Monitora a biblioteca e aciona o fetch_covers.py
Firewall (UFW)
Regras ativas relevantes:
| Porta | Protocolo | Origem | Serviço |
|---|---|---|---|
| 22 | TCP | Qualquer | SSH |
| 53 | TCP/UDP | Qualquer | DNS (Pi-hole) |
| 4533 | TCP | Rede local | Navidrome |
| 5030 | TCP | Rede local | slskd |
| 4443 | TCP | Rede local | Pi-hole admin |
| 8080 | TCP | Rede local | Filebrowser |
Os serviços Navidrome e slskd são expostos externamente exclusivamente via Tailscale Funnel, sem necessidade de abrir portas no firewall ou no roteador.
Manutenção
Verificar status de todos os serviços
systemctl status navidrome slskd pihole-FTL tailscaled filebrowser watch-covers
Adicionar músicas manualmente
Copie os arquivos para /srv/musica/biblioteca/ e o Navidrome os detectará automaticamente na próxima varredura, ou force uma varredura pelo painel de administração.
Atualizar o Navidrome
apt update && apt upgrade navidrome
Atualizar o slskd
Baixar a versão desejada em https://github.com/slskd/slskd/releases (manter versões com .NET 8):
systemctl stop slskd
# Substituir binário e wwwroot em /opt/slskd/
systemctl start slskd
Atenção: Ao trocar versões do slskd, pode ser necessário apagar o banco de dados em
/var/lib/slskd/data/se houver incompatibilidade de esquema.