Tuesday, 27 June 2017

Torrent Seedbox with Transmission on Debian VPS

Installation et configuration de Transmission

INSTALLATION DES PAQUETS

C’est la partie la plus facile, il suffit d’installer le paquet transmission-daemon :
Note : vous pouvez aussi compiler les sources si vous souhaitez avoir la dernière version, celle des dépôts accusant un léger retard…
sudo apt-get install transmission-daemon
Et voilà, votre seedbox est prête ! Enfin presque… Il nous reste un peu de configuration afin de la moduler à nos besoins.

CONFIGURATION DE LA SEEDBOX

Avant de commencer à mettre les mains dans le cambouis, quelques petites choses à savoir :
  • Le seul fichier de configuration que vous aurez à modifier est /etc/transmission-daemon/settings.json
  • Avant de modifier ce fichier, pensez à arrêter le service transmission-daemon :
    sudo service transmission-daemon stop
    Vous pouvez aussi modifier la configuration de Transmission alors que celui-ci est démarré, mais ne faites surtout pas un sudo service transmission-daemon restart car vous perdrez toutes vos modifications (l’expérience parle…). Pour charger votre configuration, faites :
    sudo service transmission-daemon reload
Maintenant on peut y aller 🙂 On édite donc le fichier /etc/transmission-daemon/settings.json. Ce fichier de configuration est formaté en JSON et se découpe en plusieurs parties. Vous pouvez trouver la documentation dudit fichier par ici car je ne vais pas tout reprendre en détail.

Gestion de la bande passante

Comme je ne veux pas que Transmission consomme toute la bande passante du serveur (on a d’autres services qui tournent), j’ai choisi de brider sa bande passante à 7Mo/s de 8h à minuit, tous les jours. Voici la configuration que j’utilise :
{
    "alt-speed-down": 7000,            // Limite à 7000Ko/s en download
    "alt-speed-enabled": true,         // Limite activée
    "alt-speed-time-begin": 480,       // Le bridage commande à 8h, soit 480min après minuit
    "alt-speed-time-day": 127,         // 127 en binaire = 1111111 (sept 1 pour sept jours, voir doc.)
    "alt-speed-time-enabled": true,    // On active la planification
    "alt-speed-time-end": 1439,        // Heure de fin, 1439 min après minuit, soit 23h59
    "alt-speed-up": 7000              // Limite à 7000Ko/s en upload
}

Gestion des fichiers et répertoires

Ici, le plus simple est de créer un utilisateur système, utilisé par Transmission, pour qu’il puisse disposer d’un dossier où déposer les téléchargements. Je vous propose les commandes suivantes. Elles créent un utilisateur downloader dans le groupe debian-transmission avec son home (/home/downloader) dans lequel nous créons un dossier incomplete/ :
sudo useradd -d /home/downloader -m downloader
sudo usermod -a -G debian-transmission downloader
sudo passwd downloader
sudo mkdir /home/downloader/incomplete
sudo chown -R downloader:debian-transmission /home/downloader
Au niveau de la configuration, voici ce que cela donne chez moi :
{
    "download-dir": "/home/downloader",              // Dossier de destination des téléchargements
    "incomplete-dir": "/home/downloader/incomplete", // Le dossier incomplete/ contient tous les téléchargements en cours
    "incomplete-dir-enabled": true,                  // ils sont déplacés dans download-dir lorsqu'ils sont terminés.
}

Configuration de l’interface web

C’est là que ça devient intéressant. Cette interface web (dite RPC) sera un moyen facile de contrôler Transmission à distance, on va donc faire cela aux petits oignons :). Voici ce que je vous propose :
{
    "rpc-authentication-required": true, // On l'authentification par mot de passe
    "rpc-enabled": true,                 // On active l'interface
    "rpc-password": "Password",          // Tapez votre mot de passe en clair, il sera chiffré à l'enregistrement
    "rpc-port": 9091,                    // Port d'accès à l'interface
    "rpc-url": "/",                      // Url d'accès à l'interface
    "rpc-username": "Utilisateur",       // Le nom d'utilisateur pour l'authentification
}

Autres petites choses utiles

Quelques petits autres paramètres que j’ai modifié. Là, c’est à vous de voir…
{
    "ratio-limit": 5,            // Le partage est arrêté au bout de 5 partages
    "ratio-limit-enabled": true, // La limite de ratio est activée
}
En fait cette option me permet de plus ou moins bien gérer ma bande passante et mon ratio de partage.
Toutes les autres options ont été laissées par défaut car je n’en ai pas eu besoin, n’hésitez pas à aller faire un tour sur la documentation de Transmission pour plus d’informations, ou laissez un commentaire 😉
Il ne vous reste plus qu’à enregistrer votre fichier et à recharger le daemon :
sudo service transmission-daemon reload
Vous devriez maintenant pouvoir accéder à l’interface web de transmission, à l’adresse et au port préalablement défini. Pour nous c’était http://mon.nomdedomaine.com:9091/. On s’authentifie et on atterri sur une page comme celle-là :
Je pense que les icônes sont assez explicites… En haut vous avez, de gauche à droite :
  • Ajouter un torrent en envoyant directement une URL ou un .torrent
  • Supprimer un torrent de la liste (il ne sera pas supprimé du dossier /home/downloader/)
  • Démarrer le torrent sélectionné
  • Suspendre le torrent sélectionné
  • Démarrer tous les torrents
  • Suspendre tous les torrents
  • Obtenir des informations sur le torrent sélectionné.
Dans la barre d’outil en bas, toujours de gauche à droite, on a :
  • Deux premiers boutons de paramètres que je vous déconseille d’utiliser car j’ai rencontré quelques souci avec. Préférez modifier directement le fichier de configuration.
  • Un bouton pour activer le bridage
  • Un bouton pour modifier l’affichage parmi les différentes listes disponibles
Voilà, avec ça on commence à avoir quelque chose d’intéressant et de bons moments de partage en perspective. Maintenant, je vous propose de peaufiner la gestion des URLs de notre interface car devoir ajouter le port 9091 à la fin de notre adresse n’est pas très joli. De plus, il nous contraint d’ouvrir un port de plus sur le pare feu, ce que je n’aime pas trop alors qu’Apache gère très bien la redirection de port. Sans parler de la sécurité : plus notre interface est cachée mieux c’est.
Nous allons donc créer un vhost Apache qui nous permettra d’accéder à l’interface de Transmission via l’url http://torrent.mondomaine.com.

Configuration d’un vhost Apache pour Transmission

On commence par activer les modules Apache dont nous allons avoir besoin :
sudo a2enmod  rewrite proxy proxy_http
On crée le vhost :
sudo vim /etc/apache2/sites-available/transmission
Pour lequel je vous propose le contenu suivant :
<VirtualHost *:80>
        ServerName torrent.mondomaine.com
 
        RewriteEngine On
        RewriteRule ^/$ /web/ [L,R=301]
 
        ProxyPass / http://127.0.0.1:9091/
        ProxyPassReverse / http://127.0.0.1:9091/
</VirtualHost>
Il ne reste plus qu’à redémarrer tout ça :
sudo service apache2 restart
Vous devriez maintenant pourvoir accéder à Transmission via la nouvelle URL, http://torrent.mondomaine.com.

Configuration d’un server block Nginx

Cette configuration a fait l’objet d’un article ! C’est par ici que ça se passe 🙂

POUR ALLER PLUS LOIN…

On peut en effet pousser la chose plus loin en forçant l’utilisation de HTTPS par exemple. Cela rajouterait une couche de sécurité en chiffrant tous nos échanges avec le serveur, notamment au moment de l’authentification. Je ne vais pas le détailler ici mais vous pouvez vous inspirer de mon tutoriel sur phpMyAdmin si ça vous tente.
Vous voilà maintenant avec une seedbox prête à télécharger et partager du contenu à la vitesse de l’éclair. Si vous utilisez un pare feu, pensez à ouvrir les ports spécifiés dans settings.json (51413 par défaut) et à fermer le 9091, qui ne vous servira plus.
Je pense que j’ai fait le tour de la question, si malgré tout vous en avez, n’hésitez pas à utiliser les commentaires, ou la page de contact 😉
Cet article vous a plu ? Partagez-le sur les réseaux sociaux !

Saturday, 20 May 2017

Master Master replication tutorial for Mariadb

We have two servers. lets call them mater1 (1.1.1.1) and master2 (2.2.2.2) .
This instruction is tested for mariadb 10.1 on Debian 8.

First set my.cnf on both servers:

on master1:

[mysqld]
server-id=1
bind-address = 0.0.0.0
log_bin=/var/log/mysql/mariadb-bin
expire_logs_days=10
sync_binlog = 1
slave_compressed_protocol = 1
binlog_format = row

#to avoid in PRIMARY / UNIQUE key collisions when we write on both servers
auto-increment-increment=2
auto-increment-offset=1

on master2:

[mysqld]
server-id=2 #server id of each server should be unique
bind-address = 0.0.0.0
log_bin=/var/log/mysql/mariadb-bin
expire_logs_days=10
sync_binlog = 1
slave_compressed_protocol = 1
binlog_format = row


--------------
copy databases form master1 to master2

on master1
mysqldump -uroot -p --opt --routines --triggers --events --single-transaction --master-data=2 -A > alldb.sql

on maste2:
mysql -uroot -p < alldb.sql

--------------

Now setting up the databases


On master1:

MariaDB [(none)]> create user 'replication'@'2.2.2.2' identified by 'MYSECRETPASSWD';
MariaDB [(none)]> grant replication slave on *.* to 'replication'@'2.2.2.2';
MariaDB [(none)]> flush privileges;

On master2:
MariaDB [(none)]> create user 'replication'@'1.1.1.1' identified by 'MYSECRETPASSWD';
MariaDB [(none)]> grant replication slave on *.* to 'replication'@'1.1.1.1';
MariaDB [(none)]> flush privileges;


on Master 1:

MariaDB [(none)]> SELECT @@GLOBAL.gtid_current_pos;
+---------------------------+
| @@GLOBAL.gtid_current_pos |
+---------------------------+
| 0-1-26067388              |
+---------------------------+



on Master 2:
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> stop slave;
MariaDB [(none)]> reset slave;
MariaDB [(none)]> set global gtid_slave_pos = "0-1-26067388";
MariaDB [(none)]> change master to master_host='1.1.1.1', master_user='replication', master_password='MYSECRETPASSWD', master_use_gtid=slave_pos;
MariaDB [(none)]> start slave; 

MariaDB [(none)]> SELECT @@GLOBAL.gtid_current_pos;
+---------------------------+
| @@GLOBAL.gtid_current_pos |
+---------------------------+
| 0-2-26067398              |
+---------------------------+


on Master 1:

MariaDB [(none)]> stop slave;
MariaDB [(none)]> reset slave;
MariaDB [(none)]> set global gtid_slave_pos = "0-2-26067398";
MariaDB [(none)]> change master to master_host='2.2.2.2', master_user='replication', master_password='MYSECRETPASSWD', master_use_gtid=slave_pos;
MariaDB [(none)]> start slave;

Check whether slaves are set properly:

MariaDB [(none)]> show slave status\G;

you should see both:

  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes



---------
Test replication by creating a new database on master1:

MariaDB [(none)]> create database replication_test;

On Master2, check whether replication_test in created:

MariaDB [(none)]> show databases;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| mysql
|
| performance_schema |
| replication_test
|
+--------------------+

To be absolutely sure, try the same tests the othe way round.

That's it. enjyo Master/Master replication.

Curtesy of the book MariaDB High Performance-Packt Publishing (2014) by Pierre Mavro

Monday, 1 May 2017

Increase session timeout of PhpMyAmin


Changing php.ini will change the session duration for all the websites running on the server. To change it just for PhpMyAdmin, open config.inc.php and add:
$sessionDuration = 60*60*24*7; // 60*60*24*7 = one week
ini_set('session.gc_maxlifetime', $sessionDuration);
$cfg['LoginCookieValidity'] = $sessionDuration;

How to fix 'perl: warning: Please check that your locale settings:' in Debian

Use:
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_TYPE=en_US.UTF-8
It works for Debian.

Thursday, 13 April 2017

Reset debian root password through KVM

Boot into grub, select single user but do not press enter.
Press e to bring you into edit mode.
Scroll down to the kernel line, it starts with “linux /boot/vmlinuz-2.6…….”
Scroll to the end of that line and press space key once and type
init=/bin/bash
Press Crtl x to boot
Then type
mount -rw -o remount /
Now you can right to disk and change password or whatever else you want

----------------------
referece:
https://derwynd.com/2011/04/14/debian-squeeze-change-root-password/


Wednesday, 12 April 2017

Deploy django on Debian with gunicorn using upstart

In my experience gunicorn is more stable and uses less memory than uwsgi to handle the same number of requests. It is also much simpler to configure and deploy.

The only issue with it is that finding good straightforward tutorial on its deployment hasn't been easy for me. The problem araise not by gunicorn but the rather convulted method of supervisor which adds more complexity to the process.

Fortunately there is the much simpler way to keep gunicorn running:‌ upstart

First you need to install pip and virtaulenv:

apt-get install python-pip
pip install virtualenv
Switch to a non-root user and create a virtualenv



su myuser 
virtualenv ~/.myenv
virtualenv ~/.myenv
activate the virtaualenv

source ~/.myenv/bin/activate

Install gunicorn while you'r on your virtualenv:

(.myenv)# pip install gunicorn


create a gunicorn.sh in  /path/to/project, like this:
#!/bin/bash
NAME="myproject"                                  # Name of the application
DJANGODIR=/path/to/project             # Django project directory
SOCKFILE=/tmp/gunicorn.sock  # we will communicte using this unix socket
USER=john                                        # the user to run as
GROUP=www-data                                     # the group to run
NUM_WORKERS=9                                     # twice the number of cpu cores
DJANGO_SETTINGS_MODULE=sai.settings             # which settings file should Django use
DJANGO_WSGI_MODULE=sai.wsgi                     # WSGI module name
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /home/user/.virtualenv/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /home/john/.virtualenv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
  --name $NAME \
  --workers $NUM_WORKERS \
  --user=$USER --group=$GROUP \
  --bind=unix:$SOCKFILE \
  --log-level=debug \
  --log-file=-
Note: DO NOT create /tmp/gunicorn.sock  
gunicorn will do that for you


Make sure that upstart is installed:

apt-get install upstart

Now create an upstart job in /etc/init to run gunicorn.sh

nano /etc/init/gunicorn.conf
And put in it:
description "Gunicorn application server handling myproject"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
setuid john
setgid www-data
chdir /path/to/project
exec bash gunicorn.sh


Now you can start gunicorn like any service :

service gunicorn restart

The only remaining step is to pass request to gunicorn in nginx, by a file like this:

upstream myproject {
    server unix:///tmp/gunicorn.sock;    # the socket will be created automatically
    }
server {
#...other stuff
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host;
        if (!-f $request_filename) {
            proxy_pass http://myproject;
            break;
        }
    }
}
Note 2: If you just started upstart, you may need to  reboot to be able to service gunicorn restart.



That's it!
Restart nginx and enjoy gunicorn.



Tuesday, 28 March 2017

Take screeshot gallery of a video

#apt-get install ffmpeg
#apt-get install imagemagick
#!/bin/bash
# This script will create a screenshot gallery of a given video very fast


filename=$1

videolable=$1

#ffmpeg  -i $filename -r 0.0033 -vf scale=-1:120 -vcodec png capture-2d.png

ffmpeg -ss 00:00:10 -i $filename -frames 1 -vf "select=not(mod(n\,1000)),scale=320:240,tile=2x3" ff.png


res=`ffmpeg -i $filename 2>&1 | grep -oP 'Stream .*, \K[0-9]+x[0-9]+'`

size=`du -h $filename | awk '{print $1}'`

duration=`ffmpeg -i $filename 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//`


#montage -border 10x10 -pointsize 14  -background black -fill white -gravity NorthWest  -title "\n$filename ( $res )\nSize:$size  Duration:$duration "  out.png screenshotgallery.png



width=`convert ff.png -ping -format "%w" info:`
height=120
fontsize=20


text="$videolable\nResolution($res)\nSize:($size)\nDuration:$duration\n"




convert -background white -fill black  \
           -size ${width}x${height} -pointsize 24 label:${text}  label.gif






convert -append ff.png   label.gif out.jpg

rm ff.png

echo "Done!"

How to install ffmpeg on Debian 8

is now available for Jessy as a backport: https://packages.debian.org/jessie-backports/ffmpeg
Add something like this to /etc/apt/sources.list (with your preferred mirror):
deb http://ftp.uk.debian.org/debian jessie-backports main
Then
apt-get update
apt-get install ffmpeg

Source: https://superuser.com/a/1082860

Friday, 20 January 2017

Install ffmpeg in debian 8 jessie

Installing ffmpeg from source have been a pain in the ass for me that wasted 5 hours of my time with no success.

On the other hand ffmpeg is not in debian jessie repo. But thankfully there is still a simple solution:



It is now available for Jessy as a backport: https://packages.debian.org/jessie-backports/ffmpeg
Add something like this to /etc/apt/sources.list (with your preferred mirror):
deb http://ftp.debian.org/debian jessie-backports main
Then
apt-get update
apt-get install ffmpeg


Which installs `ffmpeg version 3.2.2-1~bpo8+1`


Thanks this good fella, Dan

Wednesday, 18 January 2017

Install torrent seedbox on debian vps


Thanks tutorial by Mikhail Danial - http://youtu.be/ahIdUr3yW64 (with slight modifications)



apt-get update

apt-get install -y apache2 nano

adduser --disabled-password --system --home /var/lib/deluge --gecos "SamRo Deluge server" --group deluge

touch /var/log/deluged.log

touch /var/log/deluge-web.log

chown deluge:deluge /var/log/deluge*

apt-get update

apt-get install -y deluged

apt-get install -y deluge-webui

nano /etc/default/deluge-daemon
-----------------------------------------------------------------------
# Configuration for /etc/init.d/deluge-daemon
# The init.d script will only run if this variable non-empty.
DELUGED_USER="deluge"
# Should we run at startup?
RUN_AT_STARTUP="YES"
-----------------------------------------------------------------------


nano /etc/init.d/deluge-daemon
-----------------------------------------------------------------------
#!/bin/sh
### BEGIN INIT INFO
# Provides:          deluge-daemon
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      $network
# Should-Stop:       $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Daemonized version of deluge and webui.
# Description:       Starts the deluge daemon with the user specified in
#                    /etc/default/deluge-daemon.
### END INIT INFO

# Author: Adolfo R. Brandes
# Updated by: Jean-Philippe "Orax" Roemer

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Deluge Daemon"
NAME1="deluged"
NAME2="deluge"
DAEMON1=/usr/bin/deluged
DAEMON1_ARGS="-d"             # Consult `man deluged` for more options
DAEMON2=/usr/bin/deluge-web
DAEMON2_ARGS=""               # Consult `man deluge-web` for more options
PIDFILE1=/var/run/$NAME1.pid
PIDFILE2=/var/run/$NAME2.pid
UMASK=022                     # Change this to 0 if running deluged as its own user
PKGNAME=deluge-daemon
SCRIPTNAME=/etc/init.d/$PKGNAME

# Exit if the package is not installed
[ -x "$DAEMON1" -a -x "$DAEMON2" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$PKGNAME ] && . /etc/default/$PKGNAME

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

if [ -z "$RUN_AT_STARTUP" -o "$RUN_AT_STARTUP" != "YES" ]
then
   log_warning_msg "Not starting $PKGNAME, edit /etc/default/$PKGNAME to start it."
   exit 0
fi

if [ -z "$DELUGED_USER" ]
then
    log_warning_msg "Not starting $PKGNAME, DELUGED_USER not set in /etc/default/$PKGNAME."
    exit 0
fi

#
# Function to verify if a pid is alive
#
is_alive()
{
   pid=`cat $1` > /dev/null 2>&1
   kill -0 $pid > /dev/null 2>&1
   return $?
}

#
# Function that starts the daemon/service
#
do_start()
{
   # Return
   #   0 if daemon has been started
   #   1 if daemon was already running
   #   2 if daemon could not be started

   is_alive $PIDFILE1
   RETVAL1="$?"

   if [ $RETVAL1 != 0 ]; then
       rm -f $PIDFILE1
       start-stop-daemon --start --background --quiet --pidfile $PIDFILE1 --make-pidfile \
       --exec $DAEMON1 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON1_ARGS
       RETVAL1="$?"
   else
       is_alive $PIDFILE2
       RETVAL2="$?"
       [ "$RETVAL2" = "0" -a "$RETVAL1" = "0" ] && return 1
   fi

   is_alive $PIDFILE2
   RETVAL2="$?"

   if [ $RETVAL2 != 0 ]; then
        sleep 2
        rm -f $PIDFILE2
        start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --make-pidfile \
        --exec $DAEMON2 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON2_ARGS
        RETVAL2="$?"
   fi
   [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
   # Return
   #   0 if daemon has been stopped
   #   1 if daemon was already stopped
   #   2 if daemon could not be stopped
   #   other if a failure occurred

   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE2
   RETVAL2="$?"
   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE1
   RETVAL1="$?"
   [ "$RETVAL1" = "2" -o "$RETVAL2" = "2" ] && return 2

   rm -f $PIDFILE1 $PIDFILE2

   [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] && return 0 || return 1
}

case "$1" in
  start)
   [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME1"
   do_start
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  stop)
   [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME1"
   do_stop
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  restart|force-reload)
   log_daemon_msg "Restarting $DESC" "$NAME1"
   do_stop
   case "$?" in
     0|1)
      do_start
      case "$?" in
         0) log_end_msg 0 ;;
         1) log_end_msg 1 ;; # Old process is still running
         *) log_end_msg 1 ;; # Failed to start
      esac
      ;;
     *)
        # Failed to stop
      log_end_msg 1
      ;;
   esac
   ;;
  *)
   echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
   exit 3
   ;;
esac

:
-----------------------------------------------------------------------


chmod a+x /etc/init.d/deluge-daemon

update-rc.d deluge-daemon defaults

reboot -h now

------------------------

After new login:

mkdir /var/www/torrent

In browser vitis:

yourserverip::8112

Enter the server password 'deluge' and reset it.

Go to `Preferences` and set `/var/www/torrent` as the download path.

Good to Go!




This tutorial works on Debian  7 and 8. But in Debian 8 apache2 configs need to be a bit tweaked to show the files in /torrent folder.

You need to add these lines :

Options +Indexes
IndexOptions FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=*

to /etc/apache2/sites-available/000-default.conf

and change the DocumentRoot from /var/www/html to /var/www

In order to be able to have proper directory listing

Source:
https://youtu.be/ahIdUr3yW64