Mostrando postagens com marcador Docker. Mostrar todas as postagens
Mostrando postagens com marcador Docker. Mostrar todas as postagens

terça-feira, 8 de julho de 2025

Dica - Atualizando DDNS com No-IP - Minha Transição para o Docker Oficial do No-IP

Olá, pessoal!


No meu setup de rede doméstica, sempre usei o serviço de DDNS da No-IP para manter meus servidores acessíveis via hostnames dinâmicos, como meuddns1.ddns.net e meuddns2.ddns.net.

Por algum tempo, usei o DUC (Dynamic Update Client ou Cliente de Atualização Dinâmica) do próprio No-IP, rodando no Linux, para fazer isso (falei sobre isso aqui). Entretanto, como estava ainda aprendendo sobre redes e pra que isso tudo servia, com alguma frequência eu apagava e reinstalava o Ubuntu Server onde isso ficava.

Depois comecei a fazer isso com o DuckDNS. Comentei sobre isso aqui. Mas o problema era sempre o mesmo. Hardware fraco, software em constante modificação.

Em 2023, quando comprei o meu Synology, um hardware robusto para ser o server base daqui de casa, resolvi atualizar o DNS via DuckDNS rodando em um container Docker do próprio DuckDNS. Nesse post aqui, falei como fiz isso e comentei que o No-IP não tinha um container Docker para fazer isso, ao contrário do DuckDNS. Mostrei inclusive como era possível usar um container não oficial (aanousakis/no-ip), o único que encontrei, para atualizar meu IP público no No-IP.

As vantagens em usar um Docker ao contrário de uma DUC (um programa dedicado para isso) são: a economia de recursos; aprendizado; simplicidade do processo.

Nesses dois anos, não tive problemas como esse container. Porém, há alguns dias, comecei a ter problemas com ele, incluindo erros como "database is locked", e decidi migrar para a imagem oficial do No-IP (noipcom/noip-duc) que eu, até então, nem sabia que tinha sido lançado. Neste post, vou compartilhar por que fiz essa mudança, como funciona a nova DDNS Key da No-IP, e como configurei o novo docker-compose.yml para gerenciar dois hostnames no meu Portainer.

Por que abandonar o velho Docker?

O contêiner aanousakis/no-ip era simples e funcional, mas começou a apresentar instabilidades. O erro mais comum que encontrei foi:

failed to create task for container: failed to
initialize logging driver: database is locked

Esse problema sugeria conflitos no acesso a arquivos de configuração, possivelmente devido à falta de um volume persistente ou permissões inadequadas. Além disso, como era uma imagem não oficial, não havia garantia de atualizações regulares ou suporte para as mudanças recentes no sistema da No-IP, como a introdução da DDNS Key. Resolvi buscar uma solução mais robusta e oficial, que me levasse à nova imagem noipcom/noip-duc, mantida pela própria No-IP.

A novidade da DDNS Key

Recentemente, a No-IP introduziu as DDNS Keys, uma alternativa mais segura às credenciais tradicionais de login (e-mail e senha). Com a DDNS Key, você gera um par de username e senha específicos para seus hostnames no painel da No-IP (my.noip.com). Cada chave é vinculada a um ou mais hostnames, permitindo atualizações seguras sem expor sua conta principal.

Para criar uma DDNS Key:

  1. Acesse o painel da No-IP.
  2. Vá para a seção de DDNS Keys.
  3. Crie uma nova chave, associando-a aos seus hostnames.
  4. Anote o username e a senha gerados, que serão usados no contêiner Docker.

A grande vantagem da DDNS Key é a segurança: se a chave for comprometida, você pode revogá-la sem afetar sua conta No-IP. Além disso, ela é compatível com a nova imagem oficial, que usa o hostname all.ddnskey.com para atualizações via DDNS Key.

Configurando o novo Docker oficial

A imagem noipcom/noip-duc é mantida pela No-IP e está hospedada no GitHub Container Registry (ghcr.io/noipcom/noip-duc). Ela é leve, confiável e suporta as DDNS Keys nativamente. Como eu gerencio dois hostnames com chaves diferentes, configurei dois serviços no mesmo stack do Portainer, cada um com sua própria DDNS Key e volume persistente no meu HD externo (/volume).

Aqui está o docker-compose.yml final que estou usando:

version: '3.9' services: noip-duc-1: image: ghcr.io/noipcom/noip-duc:latest container_name: noip-duc-1 environment: - NOIP_USERNAME=<username_do_ddnskey_não_é_do_NoIP> - NOIP_PASSWORD=<senha_do_ddnskey_não_é_do_NoIP> - NOIP_HOSTNAMES=<seuddns.ddns.net - INTERVAL=5 volumes: - /etc/localtime:/etc/localtime:ro - /volume/docker/noip/noip-data-1:/config restart: unless-stopped noip-duc-2: image: ghcr.io/noipcom/noip-duc:latest container_name: noip-duc-2 environment: - NOIP_USERNAME=<username_do_outro_ddnskey_não_é_do_NoIP> - NOIP_PASSWORD=<senha_do_outro_ddnskey_não_é_do_NoIP> - NOIP_HOSTNAMES=<seuoutroddns.ddns.net - INTERVAL=5 volumes: - /etc/localtime:/etc/localtime:ro - /volume/docker/noip/noip-data-2:/config restart: unless-stopped

Explicando o docker-compose.yml

  • Imagem: Uso a ghcr.io/noipcom/noip-duc:latest para garantir a versão mais recente.
  • Contêineres: Criei dois serviços (noip-duc-1 e noip-duc-2) para gerenciar os meus DDNS do NoIP separadamente, já que optei por que cada um tivesse sua própria DDNS Key.
  • Variáveis de ambiente:
    • NOIP_USERNAME e NOIP_PASSWORD: As credenciais da DDNS Key para cada hostname.
    • NOIP_HOSTNAMES: O hostname específico que cada contêiner atualiza.
    • INTERVAL: Configurado para 5 minutos, definindo a frequência de verificação do IP.
  • Volumes:
    • /etc/localtime:/etc/localtime:ro: Sincroniza o fuso horário do host.
    • /volume/docker/noip/noip-data-1:/config e noip-data-2: Diretórios no meu HD externo para persistir configurações, evitando erros como o "database is locked".
  • Restart policyunless-stopped garante que os contêineres reiniciem automaticamente, exceto se eu os parar manualmente.

Passos para implantar

  1. Criei os diretórios no HD externo (mas se você tiver acesso pelo Windows ou Mac, pode simplesmente criar a pasta sem precisar de fazer isso):
    sudo mkdir -p /volume3/docker/noip/noip-data-1 /volume3/docker/noip/noip-data-2
    sudo chmod 700 /volume3/docker/noip/noip-data-1 /volume3/docker/noip/noip-data-2
    sudo chown 1000:1000 /volume3/docker/noip/noip-data-1 /volume3/docker/noip/noip-data-2
  2. Salvei o docker-compose.yml em /volume/docker/noip.
  3. Implantei no Portainer:
    • Acessei Stacks > Add stack.
    • Colei o conteúdo do docker-compose.yml no Web editor.
    • Cliquei em Deploy the stack.
  4. Verifiquei os logs:
    docker logs noip-duc-1
    docker logs noip-duc-2
    Os logs mostraram mensagens como [INFO noip_duc::observer] update successful, confirmando que os IPs estavam atualizados.

Solucionando problemas iniciais

Durante a configuração, enfrentei alguns desafios:

  • Erro de variável: Inicialmente, usei EMAIL_PASSWORD em vez de NOIP_PASSWORD, o que causou um erro de "missing required argument --password". Corrigir para NOIP_PASSWORD resolveu.
  • Lentidão nos logs: O Portainer demorava para carregar os logs, mas após a correção da configuração, o problema desapareceu.
  • Volume inexistente: Tive que criar manualmente os diretórios /volume/docker/noip/noip-data-1 e noip-data-2 para evitar erros de "bind mount failed".

Resultado final

Com o novo setup, meus hostnames estão atualizando o IP daqui de casa sem falhas. Você pode testar dando um < ping>:

ping meuddns1.ddns.net
ping meuddns2.ddns.net

Ambos responderam com latência baixa (~0.2 ms), confirmando que tudo está funcionando. No painel da No-IP, os hostnames estão associados ao IP correto, e os logs dos contêineres mostram atualizações regulares a cada 5 minutos.

A migração para a imagem oficial noipcom/noip-duc foi um grande acerto. A DDNS Key trouxe mais segurança, e o uso de volumes persistentes no meu HD externo eliminou os erros de "database is locked". Se você também usa o No-IP para DDNS, recomendo experimentar a imagem oficial e configurar a DDNS Key.

O DuckDNS tem várias opções de atualização, bem mais flexíveis que como o No-IP. Eu optei por fazer os dois para poder ter DDNSs distintos para serviços distintos.

Por hoje é isso, pessoal!

domingo, 29 de setembro de 2024

Dica: Convertendo comandos do Docker run para o Docker Compose

Pessoal,


Quando vamos instalar um contêiner Docker em nosso sistema, muitas vezes nos deparamos com uma instalação em comandos do Docker run:


Os comandos do Docker são muitos (veja aqui) e tornam as linhas de comando muitas vezes indecifráveis, principalmente para quem é iniciante no assunto.

Assim, foi criado o Docker Compose, uma forma mais fácil de escrever e ler os mesmos comandos, só que sem ser através de uma linha de comando. O exemplo acima fica deste jeito:


Muito mais legível, né?

Do mesmo modo, veja a diferença abaixo par instalar o Homarr, uma homepage simples para acessar seu home server.

Docker run:
docker run --name Homarr -c 768 --security-opt no-new-privileges:true --restart
on-failure:5 -p 4755:7575 -v /volume1/docker/homarr:/app/data/configs:rw
-v /volume1/docker/homarr/data:/data:rw -v /volume1/docker/homarr/icons:/app/public/icons:rw
-v /var/run/docker.sock:/var/run/docker.sock -e TZ=America/Sao_Paulo
-m 4g ghcr.io/ajnart/homarr:latest

Docker Compose:
version: "3.9"
services:
  homarr:
    container_name: Homarr
    image: ghcr.io/ajnart/homarr:latest
    mem_limit: 4g
    cpu_shares: 768
    security_opt:
      - no-new-privileges:true
    restart: on-failure:5
    ports:
      - 4755:7575
    volumes:
      - /volume1/docker/homarr:/app/data/configs:rw
      - /volume1/docker/homarr/data:/data:rw
      - /volume1/docker/homarr/icons:/app/public/icons:rw
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
     TZ: America/Sao_Paulo
Pois é.

Assim, criaram um serviço gratuito muito legal que transforma um Docker run em Docker Compose e vice-versa.

Para transformar o Docker run em Docker Compose, use o Composerize.

Para transformar o Docker Compose em Docker run, use o Decomposerize.

Pronto, essa a dica de hoje!

Até a próxima, pessoal!

domingo, 29 de janeiro de 2023

Tutorial e Dica: Como Fazer Download no YouTube - 3 modos diferentes!!! E ainda crie um programa para baixar vídeos você mesmo!

Pessoal,


Com frequência nos deparamos com algum vídeo no YouTube que julgamos necessário guardar para consulta futuro.

Nesse momento, a única opção que temos é fazer o download do vídeo. O vídeo pode ser retirado, sua internet pode cair, o YouTube pode ser proibido no país, sei lá. Ene possibilidades.

Pensei em mostrar aqui três formas de fazer downloads de vídeos do YouTube: usando um site, usando Docker e usando um programa em Python.

Vamos começar pelo site.


1 - savefrom.net

Esse é um serviço clássico e que todos já devem conhecer. O site savefrom.net faz o download de videos do YT. É só colar o endereço do vídeo do YT e pronto.


O site ainda permite que você escolha algumas opções de resolução para download. Algumas, nem todas.



Repare que apenas duas opções (720 e 360) têm áudio. As outras você baixa o vídeo, mas não terá áudio... O site do YT tem várias outras resoluções para assistir, até 4k.


E também não tem a opção de baixar apenas áudio (vai que era apenas um vídeo para tirar uma música?).

O site ainda tem duas outras opções para download, todas levando ao mesmo lugar: adicionar uma extensão ao navegador (o que eu me recuso a fazer, pois você autoriza o site a monitorar seu tráfego pela internet, deixa o navegador mais pesado e consumindo mais recursos, etc) e o famoso "ss" (onde você coloca as letras "ss" antes do "youtube" no link e manda carregar a página novamente.

No caso do link anterior, ao invés de "https://www.youtube.com/watch?v=VK7bCs4Ho_I" ficaria assim: "https://www.ssyoutube.com/watch?v=VK7bCs4Ho_I". Esse link leva para a página do SaveFrom.net. Claro, quando funciona...


Próximo!


2 - Docker

Esta opção é bem interessante. Você instala um container docker e acessa a página do container para baixar o vídeo.

Existem várias opções boas:

 - TubeSync, que funciona como o Sonarr, baixando canais e playlists inteiras. Atualizou o canal? Ele baixa automaticamente.

 - MeTube: é um fork do yt-dlp. Você coloca o link do video do YT (e vários outros serviços) e ele baixa automaticamente.

- Alltube: tipo o MeTube, mas com o layout mais feinho.

 - TubeArchivist: tipo o TubeSync, mas com o layout bem poluído. Baixa um vídeo, playlist e canal todo...

 - Youtube Downloader: excelente opção. Permite escolher a resolução, baixar apenas áudio, etc.

Eu pessoalmente tenho instalado o MeTube e o Youtube Downloader.

Para instalar o MeTube, usei o docker-compose do Portainer (Stack):
version: "3"
services:
  metube:
    image: alexta69/metube
    restart: always
    ports:
      - "5992:8081"
    volumes:
      - /volume3/Download/NAS Downloads:/downloads
    user: "1026:100"
Para acessar o serviço, digite o IP do container pela porta 5992.


Funciona muito bem, você pode escolher a resolução, o download é rápido, baixar um vídeo, uma playlist ou apenas o áudio... Muito bom! Também tem modo escuro, se quiser.

Para instalar o YouTube Downloader já dá um pouco mais de trabalho. Como estou instalando no Synology, vou mostar como fazer por ele.

Primeiro você deve ir no File Station, na pasta Docker e criar uma pasa com o nome "youtubedl" (tudo em minúsculo mesmo". Dentro desta pasta, crie outras cinco pastas: "appdata", "audio", "subscriptions", "users" e "video". Novamente, tudo em minúsculo.


Mesmo que você faça por outro sistema ou outro modo, deverá criar as pastas.

version: "2.1"
services:
  youtube_downloader:
    image: tzahi12345/youtubedl-material
    container_name: youtube_downloader
    volumes:
      - /volume3/docker/youtubedl/appdata:/app/appdata \
      - /volume3/docker/youtubedl/audio:/app/audio \
      - /volume3/docker/youtubedl/subscriptions:/app/subscriptions \
      - /volume3/docker/youtubedl/users:/app/users \
      - /volume3/docker/youtubedl/video:/app/video \
    ports:
      - 8084:17442
    restart: always
Pronto! Você já recebeu mastigado, no Stack, bem diferente do que eu achei :)

Para acessar, digite o IP com a porta 8084.


Veja que também é possivel mudar a qualidade do download, baixar apenas audio e baixar playlists. Tem também opção de usar modo escuro.

Achei um pouco estranho porque não achei onde estava o vídeo do download. Entendi que, após fazer o dowload, para efetivamente ter ele no seu computador você precisa tocar o vídeo no player embutido para, então, conseguir copiá-lo para o seu computador.

Mas isso me deixou preocupado: onde está o vídeo baixado? Penso que ele está em alguma pasta do NAS mas eu não consegui encontrá-lo... Depois de muitos e muitos downloads, será que vou torrar meu espaço de armazenamento?

Ele tem muitas configurações, permite editar uma série de metadados, enfim, é muito bom. Mas esse questão do download me deixou com uma pulga atrás da orelha... :\

Vamos agora para a cereja do bolo: um bom programinha em Python!


3 - Python

É aqui que as coisas ficam interessantes! Não vou ensinar aqui a instalar o Python nem as dependências do programa. Se você optou por isso, imagino que saiba resolver essas questões ou que terá interesse em aprender. O site do Python ensina isso muito melhor do eu seria capaz de fazer.

Basicamente o programa usa a biblioteca "pytube" para fazer o download do vídeo e de algumas informações (título do vídeo, tamanho do arquivo e duração do vídeo). 

Ele pede a URL do vídeo, apresenta uma barra de progressão do vídeo e ao final avisa que o vídeo foi baixado e mostra as informações.
from pytube import YouTube
from pytube.cli import on_progress
import pytube.request

pytube.request.default_range_size = 500000

def completou_download(a, b):
completo = '\n\nDownload Completo!\n'
titulo = 'Título: ' + stream.title + '\n'
tamanho = 'Tamanho: ' + str(stream.filesize / 1000000) + ' Mb\n'
duracao = 'Duração: ' + str(yt.length) + ' Segundos\n'

lista_inf = [completo, titulo, tamanho, duracao]

for t in lista_inf:
print(t)
print('-*' * 30)


url = input('\nDigite a URL do vídeo: ')
try:
yt = YouTube(url, on_progress_callback=on_progress, on_complete_callback=completou_download)
stream = yt.streams.filter(progressive=True, file_extension='mp4').get_highest_resolution()
print('\nIniciando Download...\n')
stream.download()
except:
print('\nOoops! Algo deu errado!\n')
Duas dicas para instalação do Python e da biblioteca "pytube":

    1 - às vezes você pode encontrar um erro do tipo 'urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)'. Para resolver isso, ao menos no MacOS, abra a pasta /Aplicativos/Python 3.x (onde x é a versão que você está usando) e clique duas vezes no arquivo "Install Certificates.command". Se você tiver mais de uma versão instalada, faça isso em todas as versões.


    2 - para instalar o "pytube", digite o comando:  
# pip install pytube
Porém, às vezes, você pode se deparar com este erro ao depurar e executar o programa:
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import pytube
ImportError: No module named 'pytube'
Aqui provavemente é porque deve haver mais de uma versão do pip e do Python instaladas.


No meu caso, repare que eu tenho a versão 3.9.1 do Python instalada e a versão 22.3.1 do pip que está no Python 3.9

No meu caso, digitando pip ou pip3 já corresponde à única versão instalada do Pyhton. Portanto, o comando para instalar o "pytube" pra mim mostra isso:


Se você tiver mais de uma versão instalada, precisará digitar "pip install pytube" e "pip3 install pytube" para baixar o "pytube" em ambas as versões do Python instaladas.

Bom, com todas as dependências resolvidas, a reposta é essa aqui:


Pronto!

Existe mais uma dica extra. Na verdade eu já dei essa dica lá atrás, há dois anos!! Veja ela aqui. Essa dica trata do cxfreeze, uma biblioteca do Python que cria um executável. Depois de digitar esse programa em Python para baixar vídeos do Youtube, vá no link acima (esse aqui) e crie um executável desse programa.

Nesse post você viu três formas de fazer download de vídeos do Youtube! Escolha a sua e seja feliz!

quarta-feira, 11 de janeiro de 2023

Tutorial: Instalando o Duplicati pelo Docker no Synology.

Pessoal,


Spoiler: Deu certo, mas deu errado... Leia o post e no final você entenderá :(

Dando continuidade ao post anterior onde falei dos problemas que tive com o Carbon Copy Cloner para backupear o Mac para o Synology e comecei a usar o ChronoSync.

Como disse, o ChronoSync custa U$50,00. Tá fácil não. Assim, optei por tentar com o Duplicati.

O Duplicati tem opção para instalar no Mac (e vários outros SOs, veja as opções aqui) e tem opção de instalar pelo Docker no Synology (e no Mac também, mas não tenho Docker no Mac). Faz backup incremental e é gratuito. Confira a página deles no GitHub (aqui) também! Pelo GitHub também é possível fazer o download para as várias plataformas (veja aqui a última versão, a v2.0.6.104, até a data de publicação deste post).

A idéia é instalar a versão de MacOS para evitar ter que mapear um HD externo que está no Mac através do Synology. Sei que isso vai dar um bom trabalho e prefiro evitar, indo direto para o Mac "empurrando" os arquivos para o Synology do que o Synology "puxando" os arquivos do Mac.

A instalação do Duplicati no Mac não está tão fácil. Parece que há um problema após a atualização do Mac para Monterey e o Duplicati está sofrendo para funcionar. Na verdade funciona, mas dá um trabalhinho para aparecer.

O macete (passado aqui no fórum do Duplicati) é instalar a última versão do Duplicati e ir neste site do GitHub e baixar o arquivo "net.duplicati.server.plist" e colocá-lo em uma pasta específica. Para baixar, clique em "Download ZIP", depois descompacte a pasta (terá dois arquivos) e depois copie para a outra pasta:


Agora, vá ao Finder -> Downloads e descompacte o ZIP baixado. Copie o arquivo com Command + C.

Para a pasta de destino, deixe a tela do Finder ativa (clique nela apenas) e pressione junto as teclas "Shift + Command + "." "(Shift + Command + "ponto"). Os arquivos e pastas ocultos irão aparecer.


Agora navegue até a pasta "Biblioteca -> LaunchAgents" e coloque o arquivo copiado lá. Depois volte para outra pasta (como Downloads e pressione Shift + Command + "ponto" para esconder de novo as pastas e arquivos e evitar de fazer merda...


Se você fez tudo certo, vai digitar esse endereço no navegador e vai abrir o Duplicati rodando no seu Mac: "127.0.0.1:8200/ngax/index.html#". Esse é o famoso "localhost", ou seja, o serviço está hospedado localmente no sua máquina. Depois, quando instalarmos o Duplicati no Docker no Synology, ele será acessado pelo endereço "<IP-do-seu-servidor>:8200/ngax/index.html#".

Na página de login ("First run setup") eu escolhi a opção de não colocar senha, uma vez que tem apenas um usuário. Eu, no caso.

Agora crie um backup:


Escolha o nome do backup e a criptografia (eu escolhi sem criptografia para este backup):


No próximo passo, você escolhe o local de destino. Pode ser local, em vários serviços de nuvem (Box, Dropbox, Google Drive, etc) ou no seu servidor local. Eu vou "roubar" e fazer do jeito fácil. Escolha "Pasta ou Unidade Local". Vai aparecer uma opção para navegar nos diretórios e uma para exibir pastas ocultas. Escolha essa, uma vez que, no nosso caso, a pasta destino é remota. Assim, navegue até a pasta "Volumes" e depois até "Livros"(que eu já havia criado no Synology). Depois clique em "Testar Conexão" e deve aparecer "Conexão estabelecida!".


Agora vamos configurar a pasta de origem. É só navegar. No meu caso, como a pasta também é remota (está num HD externo), é só clicar em "Exibir pastas ocultas" e navegar até a origem. Ao final, clique em próximo.


O próximo passo é agendar a tarefa e definir se você quer apagar ou não os arquivos. Eu prefiro não apagar. Salve e siga em frente para executar!


Funcionou perfeito! Só que...

Descobri que o Duplicati entende que essa função de copiar para outra pasta é "sincronização" e ele não faz isso. Segundo os autores (só vi depois dessa trabalheira toda), o Duplicati compacta e criptografa os arquivos por razões como "segurança, espaço e eficiência".

Ok, mas não é o que estou procurando. Nem vou instalar no Synology. Continuo na luta.

É isso, pessoal!

segunda-feira, 9 de janeiro de 2023

Tutorial: Instalar DUC do No-IP e DuckDNS no Docker do Synology

Pessoal,


Uso o DDNS do No-IP para algumas atualizações. Como já falei algumas vezes, como o meu IP público é dinâmico, preciso forneceu uma atualização frequente ao No-IP (e também ao DuckDNS) para eles saberem para onde apontar para o meu IP.

Para o DuckDNS, é fácil. Vá ao Portainer -> Stack e crie um novo Stack:
version: "2.1"
services:
  duckdns:
    image: lscr.io/linuxserver/duckdns:latest
    container_name: duckdns
    environment:
      - TZ=America/Sao_Paulo
      - SUBDOMAINS=<seu subdomain>.duckdns.org
      - TOKEN=<seu token>
    restart: always
Coloque o seu subdomínio e o seu token e pronto!

Já para o No-IP, não existe um container novo para isso, muito menos um do No-IP. Eles preferem que você instale um pequeno programa que fará isso.

Para fazer pelo Docker, vou usar essa imagem: aanousakis/no-ip. Ela também é por linha de comando, mas é bem simples.

Abra o Terminal / Putty e digite:
# docker container run -d -e USERNAME=user1 -e PASSWORD=123 -e "DOMAINS=domain1.ddns.net" -e INTERVAL=5 aanousakis/no-ip
Lembre-se apenas de trocar os dados e colocar seu username e senha do No-IP, além do nome do subdomínio. Detalhe: o username não é o email do cadastro do login, ok?

Pronto! Melhor esses processos rodarem em Docker do que ter que gastar muito recurso em uma VM só pra isso!

É isso, pessoa!

Tutorial: Instalar o Portainer com Stacks no Synology

Pessoal,


Fui instalar o Docker para subir algumas coisas pro NAS e percebi uma coisa: o Portainer da Synology não tem opção de Stacks, ou seja, não tem como usar o Compose para configurar os containeres.

Bom, a instalação do Docker é fácil. Vá em Centro de Pacotes -> Todos os Pacotes -> vá descendo até aparecer "Código Aberto". O Docker está (ou deveria estar) aí. Só clicar em "Instalar" e pronto.

Caso não tenha a opção, siga esse meu tutorial aqui! É bem fácil de resolver.

Instalado o Docker, para acessá-lo vá no Meu Principal -> Docker -> Registro e pesquise pelo container que você procura. Tem um ícone na frente da imagem, em forma de seta, que leva você para o hub.docker.com, um excelente serviço com milhares de imagens para sua escolha.

O meu problema é que instalei uma imagem do Portainer (portainer/portainer-ce) e a imagem não tem o Stack para edição das configurações. Assim, para criar e subir os containeres teria que fazer por linha de comando. Tô fora!

Assim, procurando, achei uma boa dica no próprio site do Portainer.

Faça a instalação do Docker normalmente. Depois vá ao seu armazenamento, através do File Station e crie uma pasta chamada "portainer-ce" (ou o nome que desejar, é claro), dentro da pasta Docker (que foi criada na instalação do Docker.

Depois você tem que conectar por SSH com o Synology e fazer essa instalação por linha de comando (fazer essa apenas, ok; fazer todas, tô fora!).

Para tanto, rode o seguinte comando:

# docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
Essa linha vai ter que sofre algumas alterações:

- a porta 9443 é utilizada pelo Docker do Synology, assim vou trocar para "-p 9000:9000";

- o endereço da pasta "data" também terá que ser trocado pelo da pasta que criamos acima. No meu caso, fui em File Station, naveguei até a pasta e cliquei com o botão direito para acessar as propriedades e ver em qual volume estava. No meu caso, o endereço dela é "/volume3/docker/portainer-ce". Então, para mim, fica assim: "-v /volume3/docker/portainer-ce:/data portainer/portainer-ce".

Assim, o comando todo é:

docker run -d -p 8000:8000 -p 9000:9000 --detach --name portainer-ce --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /volume3/docker/portainer-ce:/data portainer/portainer-ce:latest


Pronto, agora ao acessar a página do Portainer (no meu caso: 192.168.1.2:9000), já cai aqui:


Perfeito!

Quer ver o vídeo? Tá aqui embaixo.



É isso, pessoal!

sábado, 26 de novembro de 2022

Tutorial: Como instalar o Docker e outros programas no Synology

Pessoal,


Após instalar o Synology em um notebook da Dell que estava parado aqui, fui dar uma olhada pra ver o que sistema tinha instalado.

Uma coisa muito interessante do Synology é que o sistema é bem bonito visualmente e é bem parecido com o MacOS.


Na foto acima, a Central de Pacotes contém diversos softwares prontos para serem instalados (softwares para backups e sincronizações, antivirus, File Station - para acessar os arquivos gravados nos discos -, servidor de email, servidor de página de internet, gerenciador de VM, dentre outros, ou seja, muita coisa legal).

O Painel de Controle contém tudo para criar e administrar o NAS (criar e compartilhar pastas, adicionar usuários e discos, configuração para acesso externo, etc).

O File Station, como mencionei acima, é tipo o Finder (do Mac) ou o Explorer (do Windows). Permite navegar pelas pastas e arquivos dos diversos discos do NAS.

Entretanto uma coisa me chamou a atenção: o Docker não veio instalado. Assim, fui dar uma olhada se era possível e como faria para instalar o Docker no Synology.

Primeiramente, é necessário saber que nem todos os equipamentos da Synology permitem instalação do Docker, geralmente por limitação do sistema mesmo. Segundo, existem diversas versões do Docker para os diversos equipamentos.

Assim, se você deseja ter um NAS da Synology, procure saber o que você precisará rodar e se o seu NAS irá suportar o Docker ou o programa que você deseja.

Bom, a própria Synology tem uma extensa lista com as várias versões do Docker (veja aqui).

Na verdade, a lista permite navegar em todos os aplicativos disponíveis para o Synology, sendo que alguns já estão instalados no NAS e outros, a maioria, não estão.

Assim, essa dica serve para instalar o Docker e qualquer um dos outros programas que você quiser (claro, a depender da capacidade do seu equipamento).

A lista dos programas disponíveis pode ser vista aqui, no próprio site da Synology.

Bom, vamos à instalação propriamente dita, algo absurdamente fácil!

Vá em "Centro de Pacotes" -> "Instalação Manual":


Agora, na página onde tem o Docker (esta aqui), procure a versão compatível com o seu equipamento e clique no nome para navegar na página. No meu caso, instalei a versão mais recente (20.10.3-1308):


Clicando no link, vai abrir isso aqui:


Pronto, agora clique nesse arquivo ".spk" e faça o download.

Agora, voltando ao Synology, depois que você clicou no "Instalação Manual", abriu essa página aqui:


Basta clicar aí no "Procurar" e procurar em qual pasta do seu computador você fez o download. Para continuar, clique em "Avançar". O sistema mostrará algumas informações (alguns programas podem solicitar algumas configurações).


Clique em "Concluído" e aguarde a instalação.

Pronto, só isso. Agora instale os Dockers que você quiser!

sábado, 12 de março de 2022

Resolvido: acessando o NextCloud fora da minha rede doméstica!

Pessoal,

Há algum tempo venho tentando entender como funciona redes, Docker e essas coisas para montar meu NAS e acessa-lo do meu celular, em qualquer lugar do mundo.

Hoje, finalmente, consegui resolver isso. Com isso, encerro (por enquanto) este assunto iniciado lá em 2020 no auge da pandemia (veja os posts relacionados aqui, aqui, aqui, aqui, aqui, aqui, aqui, aquiaqui e aqui).

Nestes posts conto a saga para entender o básico de redes, como abrir portas no roteador, VPN, discos em rede, NAS, Docker, etc. É aprendizado demais!

Tenho certeza que qualquer pessoa com algum grau de instrução em TI ou equivalente faria isso com os dois pés nas costas, mas a minha formação é outra. Além de aprender isso, eu ainda tinha que fazer anestesia, dar plantão em CTI, administrar uma equipe de anestesia, administrar essa equipe em um momento de troca do dono do hospital, começar em um serviço novo e, sete meses depois, largar tudo para começar em outro serviço! Isso sem férias há 3 anos!! É, COVID fudeu a vida de todo mundo...

Enfim, vamos terminar essa novela.

O NAS (OMV) já está rodando no Proxmox. Estável, sem sobressaltos. No Proxmox também roda uma VM com o Ubuntu Server com algumas coisas em background.

Por comodismo mesmo optei por colocar o Docker na mesma VM do OMV, mas pensando agora talvez deveria ter colocado em outra. enfim, já foi e não vou inventar moda de alterar isso agora.

O NextCloud roda no Docker e isso tem uma grande vantagem: é facinho acessar os arquivos de configuração dele. Por exemplo, para autorizar acessos ao NextCloud, é preciso editar uma linha num arquivo (config.php). Para acessar, basta entrar no Portainer, ir em Stacks -> nextcloud e, lá embaixo, em Quick options, acessar o quarto ícone (Exec Console):


Isso abre o shell deste docker específico. Aí é só navegar até a pasta onde está o arquivo desejado:


Esse arquivo aí, o config.php, contém as informações para acessar o NextCloud de qualquer lugar, especificamente o campo  "trusted_domains". Fica algo mais ou menos assim:


Bom, outra coisa importante é liberar as portas no roteador. Pra isso, os roteadores tem uma configuração chamada Port Forwarding. Basicamente ela recebe uma solicitação de um IP externo para acessar a porta X e encaminha para um IP interno pela porta determinada internamente.

Por exemplo, você pode determinar que quem acessar a porta 1234 do seu IP determinado pela sua provedora vai se conectar no IP de uma VM e usar a porta 2345 dessa VM. Assim:

    181.191.45.23:1234 -> 192.160.1.15:2345

Ou seja, se você quiser acessar o NextCloud que está rodando na sua VM que utiliza um IP fixo (fornecido pelo seu roteador de casa) '192.168.1.15' e que usa a porta 2345 que você escolheu, você pode usar o seu IP fornecido pela sua operadora (pra isso, acesse o site whatismyip e você ficará sabendo qual IP seu IPS fornece para você) para acessar a porta 1234. O seu roteador vai escutar a porta 1234 e vai encaminhar para o local correto (no exemplo, 192.168.1.15:2345). Simples. Lembre-se apenas de não usar portas reservadas do sistema (veja as portas reservadas aqui).

Agora você já pode usar o seu IP residencial, fornecido pela seu provedor, para acessar o NextCloud.

Provavelmente o seu provedor fornece um IP variável, ou seja, de tempos em tempos o IP da sua casa muda. Só que para acessar um serviço de fora da sua rede doméstica, o IP tem que ser fixo. Pra isso ou você paga os tubos pra ter um IP fixo em casa ou arruma um servidor de DNS que atualize o seu IP de tempos em tempos automaticamente.

Pra isso tem o No-IP (que exige que você atualize seu cadastro a cada mês para ser de graça) ou o DuckDNS. Basicamente, tanto um quanto o outro, instalam um pequeno programa no computador que verifica o seu IP e informa ao serviço que o DNS buscado corresponde a um IP determinado (que o serviço vai atualizar automaticamente).

Assim, por exemplo, o seu NextCloud está instalado numa VM com IP 192.168.1.15 e usa a porta 2345 para se comunicar. Já o seu IP em casa é, agora, 181.191.45.23. Aí você escolheu abrir a porta 1234 do seu roteador para acessar o seu NextCloud. Só que, por exemplo, a cada semana seu IPS troca o seu IP. Assim, fica assim:

Semana 1: 181.191.45.23:1234 -> 192.168.1.15:2345

Semana 2: 182.191.45.57:1234 -> 192.168.1.15:2345

Semana 3: 182.191.41.37:1234 -> 192.168.1.15:2345

O DuckDNS e o No-IP criam um nome de DNS (por exemplo meuhomeserver.duckdns.org) que vai corresponder ao seu IP atualizado diariamente pelo programinha deles.

Semana 1: 181.191.45.23 = meuhomeserver.duckdns.org
                  meuhomeserver.duckdns.org:1234 -> 192.168.1.15:2345

Semana 2: 182.191.45.57 = meuhomeserver.duckdns.org
                  meuhomeserver.duckdns.org:1234 -> 192.168.1.15:2345

Semana 3: 182.191.41.37 = meuhomeserver.duckdns.org
                  meuhomeserver.duckdns.org:1234 -> 192.168.1.15:2345

A grosso modo, é isso que esses serviços fazem. Muito útil, não?

Depois você pega esse endereço 'meuhomeserver.duckdns.org' e coloca lá no 'trusted_domains':


Fica algo mais ou menos assim:

'trusted_domains' =>   [
   0 => '192.168.1.15',    ],

Esse é o IP da sua VM, por exemplo. Colocando o nome do DNS do DuckDNS, vai ficar assim:

'trusted_domains' =>   [
  0 => '192.168.1.15',
     1 => 'meuhomeserver.duckdns.org',
  ],

Assim, quando você acessar o NextCloud, seja pelo computador, seja pelos aplicativos, o NextCloud vai saber que o acesso pode ser autorizado!

A última coisa é que cada vez que você acessa o serviço, o NextCloud reclama que não tem certificado de segurança.


Então temos que fazer um certificado e resolver isso! E aqui está o problema: todas as opções que testei deram erro. Preciso entender como fazer isso e será assunto de um post em breve (assim que descobrir como resolver).

Então é isso por enquanto!

ATUALIZAÇÃO:

Pessoal, a resolução deste problema está explicada aqui.