🎉 begin project
This commit is contained in:
parent
54a5d8d822
commit
874907d167
145
.env.example
Normal file
145
.env.example
Normal file
@ -0,0 +1,145 @@
|
||||
# ========================================
|
||||
# Gatoflix Media Center - Environment Variables
|
||||
# ========================================
|
||||
# Copie este arquivo para .env e ajuste os valores conforme necessário
|
||||
# cp .env.example .env
|
||||
|
||||
# ========================================
|
||||
# DOMÍNIO E REDE
|
||||
# ========================================
|
||||
# Domínio raiz para acesso aos serviços
|
||||
# Os subdomínios serão: plex.DOMAIN, sonarr.DOMAIN, radarr.DOMAIN, etc.
|
||||
#
|
||||
# REDE LOCAL (recomendado para uso doméstico):
|
||||
# - Use .local (ex: media.local, gatoflix.local)
|
||||
# - Caddy usará certificados auto-assinados (TLS interno)
|
||||
# - Configure /etc/hosts ou DNS local
|
||||
#
|
||||
# REDE EXTERNA (exposto na internet):
|
||||
# - Use um domínio real (ex: gatoflix.com.br)
|
||||
# - Caddy usará Let's Encrypt automaticamente
|
||||
# - Requer portas 80 e 443 abertas e DNS configurado
|
||||
#
|
||||
DOMAIN=media.local
|
||||
|
||||
# ========================================
|
||||
# USUÁRIO E PERMISSÕES
|
||||
# ========================================
|
||||
# ID do usuário e grupo para execução dos containers
|
||||
# Use 'id -u' e 'id -g' no terminal para obter seus valores
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
|
||||
# ========================================
|
||||
# TIMEZONE
|
||||
# ========================================
|
||||
# Fuso horário para todos os containers
|
||||
# Lista completa: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||
TZ=America/Sao_Paulo
|
||||
|
||||
# ========================================
|
||||
# VERSÕES DOS CONTAINERS
|
||||
# ========================================
|
||||
# Versão dos containers LinuxServer
|
||||
# Use 'latest' para sempre puxar a versão mais recente
|
||||
# Ou especifique uma versão específica para maior controle
|
||||
VERSION=latest
|
||||
|
||||
# ========================================
|
||||
# DIRETÓRIOS DE DADOS
|
||||
# ========================================
|
||||
# Caminho base para dados de aplicação
|
||||
# Cada serviço terá seu subdiretório: appdata/plex, appdata/sonarr, etc.
|
||||
APPDATA_DIR='~/gatoflix/appdata'
|
||||
|
||||
# Caminho para biblioteca de mídia
|
||||
# Estrutura sugerida:
|
||||
# - MEDIA_DIR/Filmes
|
||||
# - MEDIA_DIR/Series
|
||||
MEDIA_DIR='~/gatoflix/MEDIA'
|
||||
|
||||
# Caminho para downloads de torrents
|
||||
# Estrutura sugerida:
|
||||
# - TORRENT_DIR/complete
|
||||
# - TORRENT_DIR/incomplete
|
||||
# - TORRENT_DIR/watch
|
||||
TORRENT_DIR='~/gatoflix/torrent'
|
||||
|
||||
# ========================================
|
||||
# FLARESOLVERR - Bypass Cloudflare
|
||||
# ========================================
|
||||
# Nível de log do FlareSolverr
|
||||
# Opções: info, debug, warning, error
|
||||
FLARE_LOG_LEVEL=info
|
||||
|
||||
# Registrar HTML das páginas (útil para debug)
|
||||
# Opções: true, false
|
||||
FLARE_LOG_HTML=false
|
||||
|
||||
# Solver de CAPTCHA
|
||||
# Opções: none, hcaptcha-solver, recaptcha-solver
|
||||
# IMPORTANTE: Solvers externos podem requerer configuração adicional
|
||||
FLARE_CAPTCHA_SOLVER=none
|
||||
|
||||
# ========================================
|
||||
# CADDY - Proxy Reverso (Opcional)
|
||||
# ========================================
|
||||
# Usuário para autenticação básica em serviços sensíveis
|
||||
# ADMIN_USER=admin
|
||||
|
||||
# Hash da senha para autenticação básica
|
||||
# Gere com: caddy hash-password --plaintext 'sua-senha'
|
||||
# ADMIN_PASSWORD_HASH=
|
||||
|
||||
# ========================================
|
||||
# PLEX - Configurações Específicas
|
||||
# ========================================
|
||||
# Claim Token para vincular servidor Plex à sua conta
|
||||
# Obtenha em: https://www.plex.tv/claim/
|
||||
# IMPORTANTE: O token expira em 4 minutos após gerado
|
||||
# PLEX_CLAIM=
|
||||
|
||||
# ========================================
|
||||
# OBSERVAÇÕES IMPORTANTES
|
||||
# ========================================
|
||||
# 1. Crie os diretórios antes de iniciar os containers:
|
||||
# mkdir -p ${APPDATA_DIR}/{plex,sonarr,radarr,bazarr,jackett,transmission,caddy/{data,config}}
|
||||
# mkdir -p ${MEDIA_DIR}/{Filmes,Series}
|
||||
# mkdir -p ${TORRENT_DIR}/{complete,incomplete,watch}
|
||||
#
|
||||
# 2. Ajuste as permissões dos diretórios:
|
||||
# sudo chown -R ${PUID}:${PGID} ${APPDATA_DIR} ${MEDIA_DIR} ${TORRENT_DIR}
|
||||
#
|
||||
# 3. REDE LOCAL (uso doméstico - SEM acesso internet):
|
||||
# a) Configure /etc/hosts com suas entradas:
|
||||
# sudo nano /etc/hosts
|
||||
# # Adicione:
|
||||
# 127.0.0.1 plex.media.local
|
||||
# 127.0.0.1 transmission.media.local
|
||||
# 127.0.0.1 jackett.media.local
|
||||
# 127.0.0.1 sonarr.media.local
|
||||
# 127.0.0.1 radarr.media.local
|
||||
# 127.0.0.1 bazarr.media.local
|
||||
#
|
||||
# b) Acesse via HTTPS com certificados auto-assinados:
|
||||
# - https://plex.media.local
|
||||
# - Navegador mostrará aviso de segurança (é normal!)
|
||||
# - Aceite o certificado para continuar
|
||||
#
|
||||
# c) OU use HTTP sem SSL (descomente seção HTTP no Caddyfile):
|
||||
# - http://plex.media.local
|
||||
# - Sem avisos de segurança
|
||||
# - Menos seguro, mas funciona
|
||||
#
|
||||
# 4. REDE EXTERNA (exposto na internet):
|
||||
# IMPORTANTE: Let's Encrypt SÓ funciona com domínio real e acesso internet!
|
||||
# a) Registre um domínio (ex: gatoflix.com.br)
|
||||
# b) Configure DNS A/AAAA apontando *.seudominio.com para seu IP público
|
||||
# c) Abra portas 80 e 443 no roteador para o servidor
|
||||
# d) Altere Caddyfile: remova "tls internal" e adicione email no global options
|
||||
# e) Caddy gerará certificados SSL automaticamente via Let's Encrypt
|
||||
#
|
||||
# 5. Migração dos dados existentes:
|
||||
# - Os volumes já apontam para os diretórios existentes
|
||||
# - Verifique se os caminhos estão corretos antes de iniciar
|
||||
# - Faça backup antes de migrar!
|
||||
12
.gitignore
vendored
Normal file
12
.gitignore
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
# Environment variables
|
||||
.env
|
||||
|
||||
# Caddy data
|
||||
caddy/
|
||||
|
||||
# Docker volumes
|
||||
appdata/
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
logs/
|
||||
163
Caddyfile
Normal file
163
Caddyfile
Normal file
@ -0,0 +1,163 @@
|
||||
# ==============================================
|
||||
# Gatoflix Media Center - Caddy Configuration
|
||||
# CONFIGURAÇÃO PARA REDE LOCAL
|
||||
# ==============================================
|
||||
|
||||
# Global options
|
||||
# {
|
||||
# # Para rede local, desabilitar ACME (Let's Encrypt)
|
||||
# # Caddy gerará certificados auto-assinados automaticamente
|
||||
# auto_https disable_redirects
|
||||
#
|
||||
# # OU use certificados internos do Caddy (recomendado)
|
||||
# # Descomente a linha abaixo para usar PKI interno do Caddy
|
||||
# # local_certs
|
||||
# }
|
||||
|
||||
# ==============================================
|
||||
# Media Server - Plex
|
||||
# ==============================================
|
||||
# plex.{$DOMAIN} {
|
||||
# # TLS interno (certificado auto-assinado)
|
||||
# tls internal
|
||||
#
|
||||
# reverse_proxy plex:32400
|
||||
#
|
||||
# # Headers específicos para Plex
|
||||
# header {
|
||||
# X-Content-Type-Options "nosniff"
|
||||
# X-Frame-Options "SAMEORIGIN"
|
||||
# Referrer-Policy "no-referrer-when-downgrade"
|
||||
# }
|
||||
#
|
||||
# # Logs
|
||||
# log {
|
||||
# output file /var/log/caddy/plex.log
|
||||
# format json
|
||||
# }
|
||||
# }
|
||||
|
||||
# ==============================================
|
||||
# Download Manager - Transmission
|
||||
# ==============================================
|
||||
# transmission.{$DOMAIN} {
|
||||
# tls internal
|
||||
#
|
||||
# reverse_proxy transmission:9091
|
||||
#
|
||||
# header {
|
||||
# X-Content-Type-Options "nosniff"
|
||||
# X-Frame-Options "DENY"
|
||||
# }
|
||||
#
|
||||
# log {
|
||||
# output file /var/log/caddy/transmission.log
|
||||
# format json
|
||||
# }
|
||||
# }
|
||||
#
|
||||
# # ==============================================
|
||||
# # Indexer - Jackett
|
||||
# # ==============================================
|
||||
# jackett.{$DOMAIN} {
|
||||
# tls internal
|
||||
#
|
||||
# reverse_proxy jackett:9117
|
||||
#
|
||||
# header {
|
||||
# X-Content-Type-Options "nosniff"
|
||||
# X-Frame-Options "DENY"
|
||||
# }
|
||||
#
|
||||
# log {
|
||||
# output file /var/log/caddy/jackett.log
|
||||
# format json
|
||||
# }
|
||||
# }
|
||||
#
|
||||
# # ==============================================
|
||||
# # TV Shows Manager - Sonarr
|
||||
# # ==============================================
|
||||
# sonarr.{$DOMAIN} {
|
||||
# tls internal
|
||||
#
|
||||
# reverse_proxy sonarr:8989
|
||||
#
|
||||
# header {
|
||||
# X-Content-Type-Options "nosniff"
|
||||
# X-Frame-Options "DENY"
|
||||
# }
|
||||
#
|
||||
# log {
|
||||
# output file /var/log/caddy/sonarr.log
|
||||
# format json
|
||||
# }
|
||||
# }
|
||||
#
|
||||
# # ==============================================
|
||||
# # Movies Manager - Radarr
|
||||
# # ==============================================
|
||||
# radarr.{$DOMAIN} {
|
||||
# tls internal
|
||||
#
|
||||
# reverse_proxy radarr:7878
|
||||
#
|
||||
# header {
|
||||
# X-Content-Type-Options "nosniff"
|
||||
# X-Frame-Options "DENY"
|
||||
# }
|
||||
#
|
||||
# log {
|
||||
# output file /var/log/caddy/radarr.log
|
||||
# format json
|
||||
# }
|
||||
# }
|
||||
#
|
||||
# # ==============================================
|
||||
# # Subtitles Manager - Bazarr
|
||||
# # ==============================================
|
||||
# bazarr.{$DOMAIN} {
|
||||
# tls internal
|
||||
#
|
||||
# reverse_proxy bazarr:6767
|
||||
#
|
||||
# header {
|
||||
# X-Content-Type-Options "nosniff"
|
||||
# X-Frame-Options "DENY"
|
||||
# }
|
||||
#
|
||||
# log {
|
||||
# output file /var/log/caddy/bazarr.log
|
||||
# format json
|
||||
# }
|
||||
# }
|
||||
|
||||
# ==============================================
|
||||
# ALTERNATIVA: SEM HTTPS (HTTP apenas)
|
||||
# ==============================================
|
||||
# Se preferir não usar HTTPS em rede local, descomente abaixo
|
||||
# e comente todos os blocos acima
|
||||
#
|
||||
http://plex.{$DOMAIN} {
|
||||
reverse_proxy plex:32400
|
||||
}
|
||||
|
||||
http://transmission.{$DOMAIN} {
|
||||
reverse_proxy transmission:9091
|
||||
}
|
||||
|
||||
http://jackett.{$DOMAIN} {
|
||||
reverse_proxy jackett:9117
|
||||
}
|
||||
|
||||
http://sonarr.{$DOMAIN} {
|
||||
reverse_proxy sonarr:8989
|
||||
}
|
||||
|
||||
http://radarr.{$DOMAIN} {
|
||||
reverse_proxy radarr:7878
|
||||
}
|
||||
|
||||
http://bazarr.{$DOMAIN} {
|
||||
reverse_proxy bazarr:6767
|
||||
}
|
||||
276
README.md
276
README.md
@ -1,2 +1,276 @@
|
||||
# gatoflix
|
||||
# Gatoflix Media Center
|
||||
|
||||
Stack completa de servidor de mídia com Plex, Sonarr, Radarr, Bazarr, Jackett, Transmission e FlareSolverr, gerenciados via Docker Compose com proxy reverso Caddy.
|
||||
|
||||
## Serviços Incluídos
|
||||
|
||||
### Media Server
|
||||
- **Plex** - Servidor de streaming de mídia
|
||||
|
||||
### Download
|
||||
- **Transmission** - Cliente BitTorrent
|
||||
|
||||
### Indexers & Resolvers
|
||||
- **Jackett** - Agregador de indexadores/trackers
|
||||
- **FlareSolverr** - Bypass de proteção Cloudflare
|
||||
|
||||
### PVR (Personal Video Recorder)
|
||||
- **Sonarr** - Gerenciador de séries de TV
|
||||
- **Radarr** - Gerenciador de filmes
|
||||
|
||||
### Subtitles
|
||||
- **Bazarr** - Gerenciador de legendas
|
||||
|
||||
### Proxy Reverso
|
||||
- **Caddy** - Servidor web com HTTPS automático
|
||||
|
||||
## Estrutura de Subdomínios
|
||||
|
||||
Todos os serviços são acessíveis via subdomínios:
|
||||
|
||||
- `plex.SEU_DOMINIO` - Plex Media Server
|
||||
- `transmission.SEU_DOMINIO` - Transmission Web UI
|
||||
- `jackett.SEU_DOMINIO` - Jackett
|
||||
- `sonarr.SEU_DOMINIO` - Sonarr
|
||||
- `radarr.SEU_DOMINIO` - Radarr
|
||||
- `bazarr.SEU_DOMINIO` - Bazarr
|
||||
|
||||
## Instalação
|
||||
|
||||
### 1. Configurar variáveis de ambiente
|
||||
|
||||
```bash
|
||||
# Copiar arquivo de exemplo
|
||||
cp .env.example .env
|
||||
|
||||
# Editar com seus valores
|
||||
nano .env
|
||||
```
|
||||
|
||||
### 2. Criar estrutura de diretórios
|
||||
|
||||
```bash
|
||||
# Criar diretórios de aplicação
|
||||
mkdir -p ~/gatoflix/appdata/{plex,plex/transcode,sonarr,radarr,bazarr,jackett,transmission,caddy/{data,config},downloads}
|
||||
|
||||
# Criar diretórios de mídia (se ainda não existirem)
|
||||
mkdir -p ~/gatoflix/MEDIA/{Filmes,Series}
|
||||
|
||||
# Criar diretórios de torrents
|
||||
mkdir -p ~/gatoflix/torrent/{complete/{radarr,tv-sonarr},incomplete,watch}
|
||||
```
|
||||
|
||||
### 3. Ajustar permissões
|
||||
|
||||
```bash
|
||||
# Obter seu UID e GID
|
||||
id -u # Geralmente 1000
|
||||
id -g # Geralmente 1000
|
||||
|
||||
# Ajustar permissões (use os valores corretos de PUID e PGID)
|
||||
sudo chown -R 1000:1000 ~/gatoflix/appdata
|
||||
sudo chown -R 1000:1000 ~/gatoflix/MEDIA
|
||||
sudo chown -R 1000:1000 ~/gatoflix/torrent
|
||||
```
|
||||
|
||||
### 4. Configurar DNS
|
||||
|
||||
#### Para acesso local (desenvolvimento/rede interna)
|
||||
|
||||
Edite o arquivo `/etc/hosts` e adicione:
|
||||
|
||||
```
|
||||
127.0.0.1 plex.media.local
|
||||
127.0.0.1 transmission.media.local
|
||||
127.0.0.1 jackett.media.local
|
||||
127.0.0.1 sonarr.media.local
|
||||
127.0.0.1 radarr.media.local
|
||||
127.0.0.1 bazarr.media.local
|
||||
```
|
||||
|
||||
No `.env`, configure `DOMAIN=media.local`
|
||||
|
||||
#### Para acesso externo (produção)
|
||||
|
||||
1. Configure registros DNS A/AAAA apontando para seu IP público:
|
||||
- `*.seudominio.com` → `SEU_IP_PUBLICO`
|
||||
|
||||
2. Configure port forwarding no roteador:
|
||||
- Porta 80 → 80 (HTTP)
|
||||
- Porta 443 → 443 (HTTPS)
|
||||
|
||||
3. No `.env`, configure `DOMAIN=seudominio.com`
|
||||
|
||||
### 5. Iniciar serviços
|
||||
|
||||
```bash
|
||||
# Subir todos os containers
|
||||
docker-compose up -d
|
||||
|
||||
# Verificar status
|
||||
docker-compose ps
|
||||
|
||||
# Ver logs
|
||||
docker-compose logs -f
|
||||
|
||||
# Ver logs de um serviço específico
|
||||
docker-compose logs -f plex
|
||||
```
|
||||
|
||||
### 6. Verificar e ajustar
|
||||
|
||||
1. Acesse cada serviço via navegador
|
||||
2. Verifique se as configurações estão corretas
|
||||
3. Ajuste URLs internas se necessário (ex: Sonarr/Radarr → Transmission)
|
||||
|
||||
## Configuração dos Serviços
|
||||
|
||||
### URLs Internas (para configuração entre serviços)
|
||||
|
||||
Use os nomes dos containers como hostname:
|
||||
|
||||
- Transmission: `http://transmission:9091`
|
||||
- Jackett: `http://jackett:9117`
|
||||
- FlareSolverr: `http://flaresolverr:8191`
|
||||
|
||||
### Exemplos de Configuração
|
||||
|
||||
#### Sonarr/Radarr → Transmission
|
||||
- Host: `transmission`
|
||||
- Port: `9091`
|
||||
- URL Base: (vazio)
|
||||
|
||||
#### Sonarr/Radarr → Jackett
|
||||
- Host: `http://jackett:9117`
|
||||
|
||||
#### Jackett → FlareSolverr
|
||||
- FlareSolverr URL: `http://flaresolverr:8191`
|
||||
|
||||
## Comandos Úteis
|
||||
|
||||
```bash
|
||||
# Parar todos os serviços
|
||||
docker-compose down
|
||||
|
||||
# Reiniciar um serviço específico
|
||||
docker-compose restart plex
|
||||
|
||||
# Ver logs em tempo real
|
||||
docker-compose logs -f
|
||||
|
||||
# Atualizar images
|
||||
docker-compose pull
|
||||
docker-compose up -d
|
||||
|
||||
# Remover containers, networks e volumes (CUIDADO!)
|
||||
docker-compose down -v
|
||||
|
||||
# Executar comando em um container
|
||||
docker-compose exec plex bash
|
||||
```
|
||||
|
||||
## Backup
|
||||
|
||||
### Backup dos dados de configuração
|
||||
|
||||
```bash
|
||||
# Criar backup
|
||||
tar -czf backup-gatoflix-$(date +%Y%m%d).tar.gz \
|
||||
~/gatoflix/appdata
|
||||
|
||||
# Restaurar backup
|
||||
tar -xzf backup-gatoflix-YYYYMMDD.tar.gz -C /
|
||||
```
|
||||
|
||||
### Backup da biblioteca de mídia
|
||||
|
||||
```bash
|
||||
# Use rsync para backups incrementais
|
||||
rsync -av --progress \
|
||||
~/gatoflix/MEDIA/ \
|
||||
/caminho/destino/backup/
|
||||
```
|
||||
|
||||
## Segurança
|
||||
Segurança
|
||||
|
||||
### Recomendações
|
||||
Recomendações
|
||||
1. **Autenticação**: Configure senhas fortes em todos os serviços
|
||||
2. **Firewall**: Mantenha apenas portas 80, 443 abertas externamente
|
||||
3. **Atualizações**: Execute `docker-compose pull` regularmente
|
||||
4. **Backups**: Configure backups automáticos regulares
|
||||
5. **HTTPS**: Caddy gerencia certificados SSL automaticamente
|
||||
|
||||
### Autenticação Básica no Caddy (Opcional)
|
||||
|
||||
Para adicionar camada extra de segurança:
|
||||
|
||||
```bash
|
||||
# Gerar hash de senha
|
||||
docker run --rm caddy caddy hash-password --plaintext 'sua-senha-forte'
|
||||
|
||||
# Adicionar ao .env
|
||||
ADMIN_USER=admin
|
||||
ADMIN_PASSWORD_HASH=<hash_gerado>
|
||||
```
|
||||
|
||||
Descomente as linhas de `basicauth` no Caddyfile.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Containers não iniciam
|
||||
|
||||
```bash
|
||||
# Verificar logs
|
||||
docker-compose logs
|
||||
|
||||
# Verificar permissões
|
||||
ls -la ~/gatoflix/appdata
|
||||
```
|
||||
|
||||
### Erro de permissões
|
||||
|
||||
```bash
|
||||
# Ajustar owner dos diretórios
|
||||
sudo chown -R 1000:1000 ~/gatoflix/appdata
|
||||
```
|
||||
|
||||
### Certificados SSL não geram
|
||||
|
||||
1. Verifique se portas 80 e 443 estão acessíveis externamente
|
||||
2. Confirme que DNS está apontando corretamente
|
||||
3. Veja logs do Caddy: `docker-compose logs caddy`
|
||||
|
||||
### Serviços não se comunicam
|
||||
|
||||
1. Verifique se estão na mesma rede: `docker network ls`
|
||||
2. Use nomes de container como hostname
|
||||
3. Não use `localhost` ou `127.0.0.1` entre containers
|
||||
|
||||
## Estrutura do Projeto
|
||||
|
||||
```
|
||||
gatoflix/
|
||||
├── docker-compose.yml # Definição de todos os serviços
|
||||
├── Caddyfile # Configuração do proxy reverso
|
||||
├── .env # Variáveis de ambiente (não versionado)
|
||||
├── .env.example # Template de variáveis de ambiente
|
||||
├── .gitignore # Arquivos ignorados pelo git
|
||||
└── README.md # Esta documentação
|
||||
```
|
||||
|
||||
## Licença
|
||||
|
||||
Este é um projeto pessoal de gerenciamento de mídia.
|
||||
|
||||
## Suporte
|
||||
|
||||
Para problemas específicos dos serviços:
|
||||
- [Plex](https://support.plex.tv/)
|
||||
- [Sonarr](https://wiki.servarr.com/sonarr)
|
||||
- [Radarr](https://wiki.servarr.com/radarr)
|
||||
- [Bazarr](https://wiki.bazarr.media/)
|
||||
- [Jackett](https://github.com/Jackett/Jackett)
|
||||
- [Transmission](https://transmissionbt.com/)
|
||||
- [Caddy](https://caddyserver.com/docs/)
|
||||
|
||||
233
REDE-LOCAL.md
Normal file
233
REDE-LOCAL.md
Normal file
@ -0,0 +1,233 @@
|
||||
# Configuração para Rede Local
|
||||
|
||||
Este guia explica como configurar o Gatoflix Media Center para uso em rede doméstica **SEM exposição à internet**.
|
||||
|
||||
## Por que Let's Encrypt não funciona?
|
||||
|
||||
**Let's Encrypt NÃO funciona em redes locais** porque:
|
||||
|
||||
1. Let's Encrypt precisa validar que você controla o domínio
|
||||
2. Servidores do Let's Encrypt acessam seu servidor via internet (porta 80 ou 443)
|
||||
3. Em rede local doméstica sem IP público acessível, isso é impossível
|
||||
|
||||
## Opções para Rede Local
|
||||
|
||||
### Opção 1: HTTPS com Certificados Auto-Assinados (Configuração Atual)
|
||||
|
||||
O Caddyfile está configurado para usar `tls internal`, que gera certificados auto-assinados automaticamente.
|
||||
|
||||
**Vantagens:**
|
||||
- Conexão criptografada (HTTPS)
|
||||
- Zero configuração adicional
|
||||
- Funciona offline
|
||||
|
||||
**Desvantagens:**
|
||||
- Navegador mostrará aviso de certificado não confiável
|
||||
- Precisa aceitar o certificado manualmente em cada dispositivo
|
||||
|
||||
**Como usar:**
|
||||
1. Configure o `.env` com `DOMAIN=media.local`
|
||||
2. Adicione entradas ao `/etc/hosts`:
|
||||
```bash
|
||||
sudo nano /etc/hosts
|
||||
|
||||
# Adicione estas linhas:
|
||||
127.0.0.1 plex.media.local
|
||||
127.0.0.1 transmission.media.local
|
||||
127.0.0.1 jackett.media.local
|
||||
127.0.0.1 sonarr.media.local
|
||||
127.0.0.1 radarr.media.local
|
||||
127.0.0.1 bazarr.media.local
|
||||
```
|
||||
|
||||
3. Inicie os containers:
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
4. Acesse via HTTPS:
|
||||
- `https://plex.media.local`
|
||||
- `https://sonarr.media.local`
|
||||
- etc.
|
||||
|
||||
5. **Aceite o aviso de segurança:**
|
||||
- Chrome/Edge: Clique em "Avançado" → "Continuar para media.local"
|
||||
- Firefox: Clique em "Avançado" → "Aceitar o risco e continuar"
|
||||
|
||||
### Opção 2: HTTP sem SSL (Mais Simples)
|
||||
|
||||
Se preferir evitar avisos de certificado, use HTTP puro (sem criptografia).
|
||||
|
||||
**Vantagens:**
|
||||
- Sem avisos de certificado
|
||||
- Acesso direto sem aceitar nada
|
||||
|
||||
**Desvantagens:**
|
||||
- Conexão não criptografada
|
||||
- Senhas trafegam em texto claro na rede
|
||||
|
||||
**Como usar:**
|
||||
|
||||
1. Edite o `Caddyfile` e **comente** todos os blocos HTTPS:
|
||||
```caddyfile
|
||||
# plex.{$DOMAIN} {
|
||||
# tls internal
|
||||
# reverse_proxy plex:32400
|
||||
# }
|
||||
```
|
||||
|
||||
2. **Descomente** os blocos HTTP no final do arquivo:
|
||||
```caddyfile
|
||||
http://plex.{$DOMAIN} {
|
||||
reverse_proxy plex:32400
|
||||
}
|
||||
|
||||
http://transmission.{$DOMAIN} {
|
||||
reverse_proxy transmission:9091
|
||||
}
|
||||
|
||||
# ... etc
|
||||
```
|
||||
|
||||
3. Reinicie o Caddy:
|
||||
```bash
|
||||
docker-compose restart caddy
|
||||
```
|
||||
|
||||
4. Acesse via HTTP:
|
||||
- `http://plex.media.local`
|
||||
- `http://sonarr.media.local`
|
||||
- etc.
|
||||
|
||||
### Opção 3: Sem Caddy - Portas Diretas
|
||||
|
||||
Se não quiser usar proxy reverso, pode acessar diretamente pelas portas.
|
||||
|
||||
**Como usar:**
|
||||
|
||||
1. Edite `docker-compose.yml` e exponha as portas:
|
||||
```yaml
|
||||
services:
|
||||
sonarr:
|
||||
ports:
|
||||
- 8989:8989
|
||||
|
||||
radarr:
|
||||
ports:
|
||||
- 7878:7878
|
||||
|
||||
bazarr:
|
||||
ports:
|
||||
- 6767:6767
|
||||
|
||||
jackett:
|
||||
ports:
|
||||
- 9117:9117
|
||||
```
|
||||
|
||||
2. Remova ou pare o container do Caddy:
|
||||
```bash
|
||||
docker-compose stop caddy
|
||||
```
|
||||
|
||||
3. Acesse diretamente pelo IP:
|
||||
- `http://localhost:8989` (Sonarr)
|
||||
- `http://localhost:7878` (Radarr)
|
||||
- `http://localhost:32400/web` (Plex)
|
||||
- etc.
|
||||
|
||||
## Acesso de outros dispositivos na rede
|
||||
|
||||
### Configurar /etc/hosts em outros dispositivos
|
||||
|
||||
**Linux/macOS:**
|
||||
```bash
|
||||
sudo nano /etc/hosts
|
||||
|
||||
# Substitua 192.168.1.100 pelo IP do seu servidor
|
||||
192.168.1.100 plex.media.local
|
||||
192.168.1.100 sonarr.media.local
|
||||
192.168.1.100 radarr.media.local
|
||||
192.168.1.100 transmission.media.local
|
||||
192.168.1.100 jackett.media.local
|
||||
192.168.1.100 bazarr.media.local
|
||||
```
|
||||
|
||||
**Windows:**
|
||||
1. Abra o Bloco de Notas como Administrador
|
||||
2. Abra: `C:\Windows\System32\drivers\etc\hosts`
|
||||
3. Adicione as mesmas linhas acima
|
||||
|
||||
**Android:**
|
||||
- Requer root ou app como "Hosts Editor"
|
||||
|
||||
**iOS:**
|
||||
- Requer jailbreak ou usar DNS local
|
||||
|
||||
### Opção Melhor: DNS Local
|
||||
|
||||
Configure um servidor DNS local (Pi-hole, AdGuard Home, ou router DNS):
|
||||
|
||||
1. Adicione registros A apontando para o IP do servidor:
|
||||
```
|
||||
plex.media.local → 192.168.1.100
|
||||
sonarr.media.local → 192.168.1.100
|
||||
radarr.media.local → 192.168.1.100
|
||||
transmission.media.local → 192.168.1.100
|
||||
jackett.media.local → 192.168.1.100
|
||||
bazarr.media.local → 192.168.1.100
|
||||
```
|
||||
|
||||
2. Configure DHCP do roteador para usar o DNS local
|
||||
|
||||
3. Todos os dispositivos da rede resolverão automaticamente!
|
||||
|
||||
## mDNS/Avahi (Alternativa Avançada)
|
||||
|
||||
Para usar `.local` sem editar hosts:
|
||||
|
||||
1. Instale Avahi no servidor:
|
||||
```bash
|
||||
sudo apt install avahi-daemon
|
||||
```
|
||||
|
||||
2. Configure para responder por múltiplos nomes
|
||||
|
||||
3. Dispositivos Apple (macOS, iOS) resolverão automaticamente
|
||||
4. Linux com avahi também resolve
|
||||
5. Windows precisa de Bonjour Print Services
|
||||
|
||||
## Resumo - Recomendação
|
||||
|
||||
**Para uso doméstico simples:**
|
||||
- Use **Opção 2 (HTTP sem SSL)**
|
||||
- Configure `/etc/hosts` em cada dispositivo
|
||||
- OU configure DNS local no roteador
|
||||
|
||||
**Para segurança adicional:**
|
||||
- Use **Opção 1 (HTTPS com certificados auto-assinados)**
|
||||
- Aceite os certificados uma vez em cada navegador/dispositivo
|
||||
- Conexão criptografada mesmo em rede local
|
||||
|
||||
**Para máxima simplicidade:**
|
||||
- Use **Opção 3 (sem Caddy)**
|
||||
- Acesse direto pelo IP:porta
|
||||
- Sem subdomínios, sem proxy
|
||||
|
||||
## Migração para Internet (Futuro)
|
||||
|
||||
Se futuramente quiser expor na internet com Let's Encrypt:
|
||||
|
||||
1. Registre um domínio real
|
||||
2. Configure DNS A/AAAA para seu IP público
|
||||
3. Abra portas 80 e 443 no roteador
|
||||
4. Edite `Caddyfile`:
|
||||
- Remova `tls internal` de todos os serviços
|
||||
- Adicione email no global options:
|
||||
```caddyfile
|
||||
{
|
||||
email seu@email.com
|
||||
}
|
||||
```
|
||||
5. Reinicie: `docker-compose restart caddy`
|
||||
6. Caddy obterá certificados Let's Encrypt automaticamente!
|
||||
167
docker-compose.yml
Normal file
167
docker-compose.yml
Normal file
@ -0,0 +1,167 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# ======================
|
||||
# Media Server
|
||||
# ======================
|
||||
plex:
|
||||
image: linuxserver/plex:latest
|
||||
container_name: gatoflix-plex
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media
|
||||
# Plex precisa de algumas portas UDP para descoberta na rede local
|
||||
# Comente estas linhas se não precisar de acesso direto
|
||||
ports:
|
||||
- 32400:32400 # Web UI (será também acessível via Caddy)
|
||||
- 32400:32400/udp # Plex DLNA Server
|
||||
- 32469:32469 # Plex DLNA Server
|
||||
- 32469:32469/udp # Plex DLNA Server
|
||||
- 5354:5353/udp # Plex Companion
|
||||
- 1900:1900/udp # Plex DLNA Server
|
||||
volumes:
|
||||
- ${APPDATA_DIR}/plex:/config
|
||||
- ${APPDATA_DIR}/plex/transcode:/transcode
|
||||
- ${MEDIA_DIR}:/data
|
||||
environment:
|
||||
PUID: ${PUID}
|
||||
PGID: ${PGID}
|
||||
TZ: ${TZ}
|
||||
VERSION: ${VERSION}
|
||||
|
||||
# ======================
|
||||
# Download Clients
|
||||
# ======================
|
||||
transmission:
|
||||
image: linuxserver/transmission:latest
|
||||
container_name: gatoflix-transmission
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media
|
||||
# Porta 51413 necessária para conexões P2P
|
||||
# Pode ser comentada se usar VPN ou não precisar de seeding
|
||||
ports:
|
||||
- 51413:51413
|
||||
- 51413:51413/udp
|
||||
volumes:
|
||||
- ${APPDATA_DIR}/transmission:/config
|
||||
- ${TORRENT_DIR}:/downloads
|
||||
- ${TORRENT_DIR}/watch:/watch
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
PUID: ${PUID}
|
||||
PGID: ${PGID}
|
||||
TZ: ${TZ}
|
||||
|
||||
# ======================
|
||||
# Indexers & Searchers
|
||||
# ======================
|
||||
jackett:
|
||||
image: linuxserver/jackett:latest
|
||||
container_name: gatoflix-jackett
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media
|
||||
volumes:
|
||||
- ${APPDATA_DIR}/jackett:/config
|
||||
#- ${APPDATA_DIR}/downloads:/downloads
|
||||
environment:
|
||||
PUID: ${PUID}
|
||||
PGID: ${PGID}
|
||||
TZ: ${TZ}
|
||||
|
||||
flaresolverr:
|
||||
image: ghcr.io/flaresolverr/flaresolverr:latest
|
||||
container_name: gatoflix-flaresolverr
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media
|
||||
environment:
|
||||
LOG_LEVEL: ${FLARE_LOG_LEVEL:-info}
|
||||
LOG_HTML: ${FLARE_LOG_HTML:-false}
|
||||
CAPTCHA_SOLVER: ${FLARE_CAPTCHA_SOLVER:-none}
|
||||
TZ: ${TZ}
|
||||
|
||||
# ======================
|
||||
# PVR - TV Shows
|
||||
# ======================
|
||||
sonarr:
|
||||
image: linuxserver/sonarr:latest
|
||||
container_name: gatoflix-sonarr
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media
|
||||
volumes:
|
||||
- ${APPDATA_DIR}/sonarr:/config
|
||||
# - ${APPDATA_DIR}/downloads:/downloads
|
||||
- ${MEDIA_DIR}/Series:/tv
|
||||
- ${TORRENT_DIR}/complete/tv-sonarr:/supercousas/MEDIACENTER/torrent
|
||||
- ${TORRENT_DIR}/complete/tv-sonarr:/downloads/complete/tv-sonarr
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
PUID: ${PUID}
|
||||
PGID: ${PGID}
|
||||
TZ: ${TZ}
|
||||
|
||||
# ======================
|
||||
# PVR - Movies
|
||||
# ======================
|
||||
radarr:
|
||||
image: linuxserver/radarr:latest
|
||||
container_name: gatoflix-radarr
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media
|
||||
volumes:
|
||||
- ${APPDATA_DIR}/radarr:/config
|
||||
- ${MEDIA_DIR}/Filmes:/movies
|
||||
- ${TORRENT_DIR}:/supercousas/MEDIACENTER/torrent
|
||||
- ${TORRENT_DIR}/complete/radarr:/downloads/complete/radarr
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
PUID: ${PUID}
|
||||
PGID: ${PGID}
|
||||
TZ: ${TZ}
|
||||
|
||||
# ======================
|
||||
# Subtitles
|
||||
# ======================
|
||||
bazarr:
|
||||
image: linuxserver/bazarr:latest
|
||||
container_name: gatoflix-bazarr
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media
|
||||
volumes:
|
||||
- ${APPDATA_DIR}/bazarr:/config
|
||||
- ${MEDIA_DIR}/Filmes:/movies
|
||||
- ${MEDIA_DIR}/Series:/tv
|
||||
environment:
|
||||
PUID: ${PUID}
|
||||
PGID: ${PGID}
|
||||
TZ: ${TZ}
|
||||
UMASK: 022
|
||||
|
||||
# ======================
|
||||
# Reverse Proxy
|
||||
# ======================
|
||||
caddy:
|
||||
image: caddy:latest
|
||||
container_name: gatoflix-caddy
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media
|
||||
ports:
|
||||
- 80:80
|
||||
# - 443:443
|
||||
# - 443:443/udp # HTTP/3
|
||||
volumes:
|
||||
- ./Caddyfile:/etc/caddy/Caddyfile
|
||||
- ${APPDATA_DIR}/caddy/data:/data
|
||||
- ${APPDATA_DIR}/caddy/config:/config
|
||||
environment:
|
||||
DOMAIN: ${DOMAIN}
|
||||
|
||||
networks:
|
||||
media:
|
||||
driver: bridge
|
||||
Loading…
x
Reference in New Issue
Block a user