Qué
Si te gusta descargarte archivos usando un cliente BitTorrent pero no quieres encender tu portátil solo para eso, puedes crear un seedbox en tu servidor usando Dokku.
Cómo
Para conseguirlo vamos a usar el sistema de despliegue de imágenes a partir de tags de Dokku. Necesitaremos una imagen para rTorrent y ruTorrent. Afortunadamente alguien ya la ha hecho: Rtorrent-LXC.
Creamos una nueva aplicación:
ssh dokku@example.com apps:create torrent
Descargamos la imagen en local desde Docker Hub:
docker pull kerwood/rtorrent-lxc
Ahora la reetiquetamos siguiendo las guías de Dokku:
docker tag kerwood/rtorrent-lxc dokku/torrent:v1
Pero como la imagen la tenemos en nuestro pc local debemos subirla al servidor:
docker save dokku/torrent:v1 | bzip2 | ssh root@example.com "bunzip2 | docker load"
Y mandamos hacer el deploy:
ssh dokku@example.com tags:deploy torrent v1
Despues de algunos minutos ya tendríamos el contenedor corriendo y funcionando, aunque antes de poder usarlo tenemos que hacer algunos ajustes. Recuerda que también puedes hacer todo esto desde una shell de tu servidor.
Mapeo de puertos
De forma predeterminada Dokku trabaja con http:80:5000
, lo que implica que el puerto 5000 del contenedor se mapeará con el puerto 80 del nginx del virtual host. ¡Error! El puerto 80 ya lo utiliza ruTorrent, por lo que tendremos que cambiarlo:
ssh dokku@example.com config:set torrent DOKKU_PROXY_PORT_MAP=http:80:80
Seguridad
No querrás que cualquiera acceda a tu seedbox y se ponga a descargar contenido, llamémosle… ilegal, ¿no? Entonces tendrás que añadir alguna capa de seguridad. Existe un plugin que hace esto de manera exquisitamente sencilla. Tienes que instalarlo como root
.
ssh root@example.com dokku plugin:install https://github.com/matto1990/dokku-secure-apps.git secure-apps
Casi listo. Ahora solo falta crear la identidad:
ssh dokku@example.com secure:set torrent myUsername myPassword
ssh dokku@example.com secure:enable torrent
Obtener los archivos descargados
Como norma general, los archivos que descargues se guardarán dentro del contenedor. Mala idea. Necesitamos montar un volumen con la carpeta de descargas. Nuevamente, Dokku viene con el plugin docker-options
que nos simplifica el trabajo muchísimo:
ssh dokku@example.com docker-options:add torrent run "-v /home/dokku/torrent/downloads:/downloads"
ssh dokku@example.com docker-options:add torrent deploy "-v /home/dokku/torrent/downloads:/downloads"
¡Ojo! Asegúrate de que /home/dokku/torrent/downloads
está creado de antemano y pertenece a dokku:dokku
.
Update: Personalmente he tenido problemas asignando el grupo a la carpeta de descargas. No sé si tiene que ver con el usuario que ha instalado Dokku y Docker, pero para mí lo que ha funcionado ha sido:
sudo chown -R eric:lpadmin /home/dokku/torrent/downloads
Extra
En caso de catástrofe y tengas que reiniciar el contenedor (incluso crearlo desde la imagen) también puedes montar la carpeta rtorrent-session
donde se almacena toda la información para el seeding:
ssh dokku@example.com docker-options:add torrent run "-v /home/dokku/torrent/rtorrent-session:/home/rtorrent/rtorrent-session"
ssh dokku@example.com docker-options:add torrent deploy "-v /home/dokku/torrent/rtorrent-session:/home/rtorrent/rtorrent-session"