My Profile Photo

Eric Z. Casaucao


Android Developer • Clean Code Enthusiasm • In love with Melania


Un seedbox BitTorrent con Dokku

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"