Skip to content

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.