Magnetico: Docker
Magnetico es el primer conjunto de motores de búsqueda DHT
(BitTorrent) autónomo, diseñado en lenguaje Go.
Entrando en materia, BitTorrent, es un protocolo de intercambio de archivos P2P distribuido, el cual ha sufrido durante mucho tiempo ha generado cierta controversia, debido el ataque a servidores de las que las personas dependían para buscar torrents (sitios web) y para descubrir otros pares (rastreadores).
Con la introducción de DHT
(tabla hash distribuida) eliminó la necesidad de rastreadores, permitiendo que los pares se descubrieran entre sí a través de otros pares y obtuvieran metadatos de los leechers y seeders.
Aprovechando la idea, se emplea el uso de DHT
para generar un índice local, lo que a su vez elimina cualquier posibilidad de bloqueo.
Ahora, eso si Magnetico
tiene algo negativo, ya que tener un índice local suena muy tentador, pero el software no cuenta con filtros, por lo tanto, el índice podría terminar indexando contenido controvertido.
La suite consta de dos aplicaciones:
- magneticod: Motor rastreador autónomo de BitTorrent y metadatos P2P
- magneticow: Interfaz web de magneticod
Ambos programas combinados, permiten que cualquier persona con una conexión a Internet decente (durante la creación de tablas consume grandes recursos de Servidor y conexión), pueda acceder a la gran cantidad de torrents que esperan ser descubiertos de la red sin depender de ningún servidor centralizado.
Vamos a realizar unos pasos previos para preparar el entorno. En primer lugar creamos las carpetas donde alojar el proyecto:
mkdir -p $HOME/docker/magnetico/{config,datos,web} && \
cd $HOME/docker/magnetico
Opcionalmente instalamos dependencias si posteriomente queremos proteger el acceso a magneticow
con usuario y contraseña:
sudo apt-get update && \
sudo apt-get -y install apache2-utils
Ahora vamos a crear el fichero de configuración docker-compose.yml
lanzando el siguiente comando:
cat << EOF > $HOME/docker/magnetico/docker-compose.yml
version: "2"
services:
magneticod:
image: boramalper/magneticod:latest
container_name: Magneticod
volumes:
- '~/docker/magnetico/datos:/root/.local/share/magneticod'
- '~/docker/magnetico/config:/root/.config/magneticod'
network_mode: "host"
restart: always
command:
- "--indexer-addr=0.0.0.0:1212"
magneticow:
image: boramalper/magneticow:latest
container_name: Magneticow
volumes:
- '~/docker/magnetico/datos:/root/.local/share/magneticod'
- '~/docker/magnetico/web:/root/.config/magneticow'
ports:
- "8889:8080"
restart: always
command:
- "--no-auth"
EOF
Vamos a repasar los principales parámetros a modificar para adaptarlos a nuestro sistema y configuración especifica:
Parámetro | Función |
---|---|
~/docker/magnetico/datos:/root/.local/share/magneticod |
Ruta donde se almacena la base de datos (+10Gb) |
~/docker/magnetico/config:/root/.config/magneticod |
Ruta donde se almacena configuración |
~/docker/magnetico/web:/root/.config/magneticow |
Ruta donde se almacenan credenciales de acceso Web |
network_mode: host |
Habilitamos el uso de la red host en vez de una Virtual |
--indexer-addr=0.0.0.0:1212 |
Parámetro de indexación DHT |
--no-auth |
Parámetro de credenciales Web, por defecto no habilitadas |
restart: always |
Habilitamos que tras reiniciar la maquina anfitrion vuelva a cargar el servicio |
Una vez configurado, lo levantamos para ser creado y ejecutado:
docker-compose up -d
Tras ello, podremos consultar el servicio, que en mi caso estaría disponible en la dirección web http://192.168.1.90:8889
Podremos analizar las estadisticas de indexación desde la propia intefaz web, importante recordar que es un proceso que lleva bastante tiempo y que puede interesar usar el contenedor magneticod
únicamente en horarios de menor uso de red, mientras que el magneticow
este siempre disponible:
NOTA: Si queremos proteger el acceso al contenedor web con usuario/contraseña, debemos de seguir los siguientes pasos:
Primeramente generamos el fichero de credenciales definiendo un usuario y una contraseña, para el ejemplo empalador/nocturno
htpasswd -bnBC 12 "empalador" "nocturno" | && \
tee $HOME/docker/magnetico/web/credentials
Editamos o regeneramos el fichero docker-compose.yml
comentando las líneas de credenciales:
cat << EOF > $HOME/docker/magnetico/docker-compose.yml
version: "2"
services:
magneticod:
image: boramalper/magneticod:latest
container_name: Magneticod
volumes:
- '~/docker/magnetico/datos:/root/.local/share/magneticod'
- '~/docker/magnetico/config:/root/.config/magneticod'
network_mode: "host"
restart: always
command:
- "--indexer-addr=0.0.0.0:1212"
magneticow:
image: boramalper/magneticow:latest
container_name: Magneticow
volumes:
- '~/docker/magnetico/datos:/root/.local/share/magneticod'
- '~/docker/magnetico/web:/root/.config/magneticow'
ports:
- "8889:8080"
restart: always
# command:
# - "--no-auth"
EOF
Y volvemos a lanzar el servicio:
docker-compose up -d
Y listo!