🏡 index : github.com/captn3m0/nebula.git

author Nemo <me@captnemo.in> 2018-05-29 18:56:00.0 +05:30:00
committer Nemo <me@captnemo.in> 2018-05-29 18:56:00.0 +05:30:00
commit
1a714d87b2a291d95ba689c80bab6acd40cf571d [patch]
tree
a5693d166c81879073ac6692ad28afb9678e60fe
parent
8efb575290c3505b12606d1804a43781211ea06c
download
1a714d87b2a291d95ba689c80bab6acd40cf571d.tar.gz

re-arch into media directory



Diff

 main.tf                       | 27 +++++++++++++++++++--------
 db/mariadb.tf                 | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 db/mongorocks.tf              | 32 ++++++++++++++++++++++++++++++++
 db/outputs.tf                 |  7 +++++++
 db/variables.tf               | 10 ++++++++++
 db/volumes.tf                 |  7 +++++++
 docker/data.tf                | 19 -------------------
 docker/db.tf                  | 61 -------------------------------------------------------------
 docker/emby.tf                | 36 ------------------------------------
 docker/images.tf              | 20 --------------------
 docker/lychee.tf              |  2 +-
 docker/network.tf             |  7 ++++++-
 docker/outputs.tf             | 12 ------------
 docker/transmission.tf        | 49 -------------------------------------------------
 docker/variables.tf           | 11 +++--------
 docker/volumes.tf             |  6 ------
 docker/wiki.tf                |  2 +-
 media/emby.tf                 | 45 +++++++++++++++++++++++++++++++++++++++++++++
 media/lidarr.tf               |  2 +-
 media/network.tf              |  9 +++++++++
 media/outputs.tf              |  7 +++++++
 media/radarr.tf               |  2 +-
 media/sonarr.tf               |  2 +-
 media/transmission.tf         | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 media/variables.tf            | 10 ++++++++++
 docker/conf/transmission.json | 70 ----------------------------------------------------------------------
 media/conf/transmission.json  | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 27 files changed, 337 insertions(+), 295 deletions(-)

diff --git a/main.tf b/main.tf
index 8e1e742..7fb5415 100644
--- a/main.tf
+++ a/main.tf
@@ -17,12 +17,19 @@
  source              = "docker"
  web_username        = "${var.web_username}"
  web_password        = "${var.web_password}"
  mysql_root_password = "${var.mysql_root_password}"
  cloudflare_key      = "${var.cloudflare_key}"
  cloudflare_email    = "bb8@captnemo.in"
  wiki_session_secret = "${var.wiki_session_secret}"
  links-mariadb       = "${module.db.names-mariadb}"
  links-mongorocks    = "${module.db.names-mongorocks}"
  ips                 = "${var.ips}"
  domain              = "bb8.fun"
}

module "db" {

  source              = "db"
  mysql_root_password = "${var.mysql_root_password}"
  ips                 = "${var.ips}"
}

module "timemachine" {

@@ -56,7 +63,7 @@
  source         = "tt-rss"
  domain         = "rss.captnemo.in"
  mysql_password = "${var.mysql-ttrss-password}"
  links-db       = "${module.docker.names-mariadb}"
  links-db       = "${module.db.names-mariadb}"
  traefik-labels = "${var.traefik-common-labels}"
}

@@ -81,21 +88,25 @@
}

module "media" {

  source                 = "media"
  domain                 = "bb8.fun"
  links-emby             = "${module.docker.names-emby}"
  links-transmission     = "${module.docker.names-transmission}"
  links-mariadb          = "${module.docker.names-mariadb}"
  source = "media"
  domain = "bb8.fun"

  // TODO: remove self links
  links-emby             = "${module.media.names-emby}"
  links-transmission     = "${module.media.names-transmission}"
  links-mariadb          = "${module.db.names-mariadb}"
  links-mongorocks       = "${module.db.names-mongorocks}"
  traefik-labels         = "${var.traefik-common-labels}"
  airsonic-smtp-password = "${var.airsonic-smtp-password}"
  airsonic-db-password   = "${var.mysql_airsonic_password}"
  ips                    = "${var.ips}"
}

module "monitoring" {

  source                     = "monitoring"
  gf-security-admin-password = "${var.gf-security-admin-password}"
  domain                     = "bb8.fun"
  transmission               = "${module.docker.names-transmission}"
  transmission               = "${module.media.names-transmission}"
  traefik-labels             = "${var.traefik-common-labels}"
  ips                        = "${var.ips}"
  links-traefik              = "${module.docker.names-traefik}"
diff --git a/db/mariadb.tf b/db/mariadb.tf
new file mode 100644
index 0000000..de2a474 100644
--- /dev/null
+++ a/db/mariadb.tf
@@ -1,0 +1,47 @@
resource "docker_container" "mariadb" {

  name  = "mariadb"
  image = "${docker_image.mariadb.latest}"

  volumes {

    volume_name    = "${docker_volume.mariadb_volume.name}"
    container_path = "/var/lib/mysql"
    host_path      = "${docker_volume.mariadb_volume.mountpoint}"
  }

  // This is so that other host-only services can share this
  ports {

    internal = 3306
    external = 3306
    ip       = "${var.ips["eth0"]}"
  }

  // This is a not-so-great idea
  // TODO: Figure out a better way to make terraform SSH and then connect to localhost
  ports {

    internal = 3306
    external = 3306
    ip       = "${var.ips["tun0"]}"
  }

  memory                = 512
  restart               = "unless-stopped"
  destroy_grace_seconds = 10
  must_run              = true

  env = [

    "MYSQL_ROOT_PASSWORD=${var.mysql_root_password}",
  ]

  command = [

    "--version=${var.mariadb-version}-MariaDB",
  ]
}

resource "docker_image" "mariadb" {

  name          = "${data.docker_registry_image.mariadb.name}"
  pull_triggers = ["${data.docker_registry_image.mariadb.sha256_digest}"]
}

data "docker_registry_image" "mariadb" {

  name = "mariadb:${var.mariadb-version}"
}
diff --git a/db/mongorocks.tf b/db/mongorocks.tf
new file mode 100644
index 0000000..9de189b 100644
--- /dev/null
+++ a/db/mongorocks.tf
@@ -1,0 +1,32 @@
resource "docker_container" "mongorocks" {

  name  = "mongorocks"
  image = "${docker_image.percona-mongodb-server.latest}"

  restart               = "unless-stopped"
  destroy_grace_seconds = 30
  must_run              = true
  memory                = 256

  volumes {

    volume_name    = "${docker_volume.mongorocks_data_volume.name}"
    container_path = "/data/db"
    host_path      = "${docker_volume.mongorocks_data_volume.mountpoint}"
  }

  command = [

    "--storageEngine=rocksdb",
    "--httpinterface",
    "--rest",
    "--master",
  ]
}

resource "docker_image" "percona-mongodb-server" {

  name          = "${data.docker_registry_image.percona-mongodb-server.name}"
  pull_triggers = ["${data.docker_registry_image.percona-mongodb-server.sha256_digest}"]
}

# Database versions shouldn't be upgraded
data "docker_registry_image" "percona-mongodb-server" {

  name = "percona/percona-server-mongodb:3.4"
}
diff --git a/db/outputs.tf b/db/outputs.tf
new file mode 100644
index 0000000..ffeff05 100644
--- /dev/null
+++ a/db/outputs.tf
@@ -1,0 +1,7 @@
output "names-mariadb" {

  value = "${docker_container.mariadb.name}"
}

output "names-mongorocks" {

  value = "${docker_container.mongorocks.name}"
}
diff --git a/db/variables.tf b/db/variables.tf
new file mode 100644
index 0000000..708e0b3 100644
--- /dev/null
+++ a/db/variables.tf
@@ -1,0 +1,10 @@
variable "mariadb-version" {

  description = "mariadb version to use for fetching the docker image"
  default     = "10.2.14"
}

variable "ips" {

  type = "map"
}

variable "mysql_root_password" {}
diff --git a/db/volumes.tf b/db/volumes.tf
new file mode 100644
index 0000000..4a066c3 100644
--- /dev/null
+++ a/db/volumes.tf
@@ -1,0 +1,7 @@
resource "docker_volume" "mariadb_volume" {

  name = "mariadb_volume"
}

resource "docker_volume" "mongorocks_data_volume" {

  name = "mongorocks_data_volume"
}
diff --git a/docker/data.tf b/docker/data.tf
index 28eaecf..7569914 100644
--- a/docker/data.tf
+++ a/docker/data.tf
@@ -1,26 +1,7 @@
# Database versions shouldn't be upgraded

data "docker_registry_image" "mariadb" {

  name = "mariadb:${var.mariadb-version}"
}

data "docker_registry_image" "percona-mongodb-server" {

  name = "percona/percona-server-mongodb:3.4"
}

data "docker_registry_image" "traefik" {

  # Critical and I like upgrading it
  # for updating config for new features
  name = "traefik:1.6-alpine"
}

# YOLO everything else
data "docker_registry_image" "emby" {

  name = "emby/embyserver:latest"
}

data "docker_registry_image" "transmission" {

  name = "linuxserver/transmission:latest"
}

data "docker_registry_image" "wikijs" {

diff --git a/docker/db.tf b/docker/db.tf
deleted file mode 100644
index 47141ed..0000000 100644
--- a/docker/db.tf
+++ /dev/null
@@ -1,61 +1,0 @@
resource "docker_container" "mongorocks" {

  name  = "mongorocks"
  image = "${docker_image.percona-mongodb-server.latest}"

  restart               = "unless-stopped"
  destroy_grace_seconds = 30
  must_run              = true
  memory                = 256

  volumes {

    volume_name    = "${docker_volume.mongorocks_data_volume.name}"
    container_path = "/data/db"
    host_path      = "${docker_volume.mongorocks_data_volume.mountpoint}"
  }

  command = [

    "--storageEngine=rocksdb",
    "--httpinterface",
    "--rest",
    "--master",
  ]
}

resource "docker_container" "mariadb" {

  name  = "mariadb"
  image = "${docker_image.mariadb.latest}"

  volumes {

    volume_name    = "${docker_volume.mariadb_volume.name}"
    container_path = "/var/lib/mysql"
    host_path      = "${docker_volume.mariadb_volume.mountpoint}"
  }

  // This is so that other host-only services can share this
  ports {

    internal = 3306
    external = 3306
    ip       = "${var.ips["eth0"]}"
  }

  // This is a not-so-great idea
  // TODO: Figure out a better way to make terraform SSH and then connect to localhost
  ports {

    internal = 3306
    external = 3306
    ip       = "${var.ips["tun0"]}"
  }

  memory                = 512
  restart               = "unless-stopped"
  destroy_grace_seconds = 10
  must_run              = true

  env = [

    "MYSQL_ROOT_PASSWORD=${var.mysql_root_password}",
  ]

  command = [

    "--version=${var.mariadb-version}-MariaDB",
  ]
}
diff --git a/docker/emby.tf b/docker/emby.tf
deleted file mode 100644
index 0f474f8..0000000 100644
--- a/docker/emby.tf
+++ /dev/null
@@ -1,36 +1,0 @@
resource "docker_container" "emby" {

  name  = "emby"
  image = "${docker_image.emby.latest}"

  volumes {

    host_path      = "/mnt/xwing/config/emby"
    container_path = "/config"
  }

  volumes {

    host_path      = "/mnt/xwing/media"
    container_path = "/media"
  }

  labels = "${merge(

    local.traefik_common_labels,
    map(
      "traefik.frontend.rule", "Host:emby.in.${var.domain},emby.${var.domain}",
      "traefik.frontend.passHostHeader", "true",
      "traefik.port", 8096,
    ))}"

  memory                = 2048
  restart               = "unless-stopped"
  destroy_grace_seconds = 10
  must_run              = true

  # Running as lounge:tatooine
  env = [

    "APP_USER=lounge",
    "APP_UID=1004",
    "APP_GID=1003",
    "APP_CONFIG=/mnt/xwing/config",
    "TZ=Asia/Kolkata",
  ]
}
diff --git a/docker/images.tf b/docker/images.tf
index 3739293..7713d28 100644
--- a/docker/images.tf
+++ a/docker/images.tf
@@ -1,18 +1,3 @@
resource "docker_image" "emby" {

  name          = "${data.docker_registry_image.emby.name}"
  pull_triggers = ["${data.docker_registry_image.emby.sha256_digest}"]
}

resource "docker_image" "mariadb" {

  name          = "${data.docker_registry_image.mariadb.name}"
  pull_triggers = ["${data.docker_registry_image.mariadb.sha256_digest}"]
}

resource "docker_image" "transmission" {

  name          = "${data.docker_registry_image.transmission.name}"
  pull_triggers = ["${data.docker_registry_image.transmission.sha256_digest}"]
}

resource "docker_image" "traefik16" {

  name          = "${data.docker_registry_image.traefik.name}"
  pull_triggers = ["${data.docker_registry_image.traefik.sha256_digest}"]
@@ -21,11 +6,6 @@
resource "docker_image" "wikijs" {

  name          = "${data.docker_registry_image.wikijs.name}"
  pull_triggers = ["${data.docker_registry_image.wikijs.sha256_digest}"]
}

resource "docker_image" "percona-mongodb-server" {

  name          = "${data.docker_registry_image.percona-mongodb-server.name}"
  pull_triggers = ["${data.docker_registry_image.percona-mongodb-server.sha256_digest}"]
}

resource "docker_image" "ubooquity" {

diff --git a/docker/lychee.tf b/docker/lychee.tf
index 2a6fe07..1d60020 100644
--- a/docker/lychee.tf
+++ a/docker/lychee.tf
@@ -33,5 +33,5 @@
    "PGID=984",
  ]

  links = ["${docker_container.mariadb.name}"]
  links = ["${var.links-mariadb}"]
}
diff --git a/docker/network.tf b/docker/network.tf
index 8b13789..8ea0161 100644
--- a/docker/network.tf
+++ a/docker/network.tf
@@ -1,1 +1,6 @@

// This is the default network we use
// for any new container
resource "docker_network" "bb8-default" {

  name   = "bb8"
  driver = "bridge"
}
diff --git a/docker/outputs.tf b/docker/outputs.tf
index cd1347b..a143190 100644
--- a/docker/outputs.tf
+++ a/docker/outputs.tf
@@ -1,19 +1,7 @@
output "lychee-ip" {

  value = "${docker_container.lychee.ip_address}"
}

output "names-transmission" {

  value = "${docker_container.transmission.name}"
}

output "names-emby" {

  value = "${docker_container.emby.name}"
}

output "names-mariadb" {

  value = "${docker_container.mariadb.name}"
}

output "names-traefik" {

  value = "${docker_container.traefik.name}"
}
diff --git a/docker/transmission.tf b/docker/transmission.tf
deleted file mode 100644
index 301a106..0000000 100644
--- a/docker/transmission.tf
+++ /dev/null
@@ -1,49 +1,0 @@
resource "docker_container" "transmission" {

  name  = "transmission"
  image = "${docker_image.transmission.latest}"

  labels = "${merge(

    local.traefik_common_labels,
    map(
      "traefik.frontend.auth.basic", "${var.basic_auth}",
      "traefik.port", 9091,
    ))}"

  ports {

    internal = 51413
    external = 51413
    ip       = "${var.ips["eth0"]}"
    protocol = "udp"
  }

  volumes {

    host_path      = "/mnt/xwing/config/transmission"
    container_path = "/config"
  }

  volumes {

    host_path      = "/mnt/xwing/media/DL"
    container_path = "/downloads"
  }

  volumes {

    host_path      = "/mnt/xwing/data/watch/transmission"
    container_path = "/watch"
  }

  upload {

    content = "${file("${path.module}/conf/transmission.json")}"
    file    = "/config/settings.json"
  }

  env = [

    "PGID=1003",
    "PUID=1000",
    "TZ=Asia/Kolkata",
  ]

  memory                = 1024
  restart               = "unless-stopped"
  destroy_grace_seconds = 10
  must_run              = true
}
diff --git a/docker/variables.tf b/docker/variables.tf
index e64d81c..76c5b22 100644
--- a/docker/variables.tf
+++ a/docker/variables.tf
@@ -6,10 +6,6 @@
  type = "string"
}

variable "mysql_root_password" {

  type = "string"
}

variable "cloudflare_key" {

  type        = "string"
  description = "cloudflare API Key"
@@ -54,7 +50,6 @@
  type = "map"
}

variable "mariadb-version" {

  description = "mariadb version to use for fetching the docker image"
  default     = "10.2.14"
}
variable "links-mariadb" {}

variable "links-mongorocks" {}
diff --git a/docker/volumes.tf b/docker/volumes.tf
index 4a066c3..8b13789 100644
--- a/docker/volumes.tf
+++ a/docker/volumes.tf
@@ -1,7 +1,1 @@
resource "docker_volume" "mariadb_volume" {

  name = "mariadb_volume"
}

resource "docker_volume" "mongorocks_data_volume" {

  name = "mongorocks_data_volume"
}
diff --git a/docker/wiki.tf b/docker/wiki.tf
index d1c0049..09e9224 100644
--- a/docker/wiki.tf
+++ a/docker/wiki.tf
@@ -43,7 +43,7 @@
      "traefik.port", 9999,
      "traefik.frontend.headers.customResponseHeaders", "${var.xpoweredby}||Referrer-Policy:${var.refpolicy}||X-Frame-Options:${var.xfo_allow}",
    ))}"
  links = ["${docker_container.mongorocks.name}"]
  links = ["${var.links-mongorocks}"]
  env = [

    "WIKI_ADMIN_EMAIL=me@captnemo.in",
    "SESSION_SECRET=${var.wiki_session_secret}",
diff --git a/media/emby.tf b/media/emby.tf
new file mode 100644
index 0000000..0581bcf 100644
--- /dev/null
+++ a/media/emby.tf
@@ -1,0 +1,45 @@
resource "docker_container" "emby" {

  name  = "emby"
  image = "${docker_image.emby.latest}"

  volumes {

    host_path      = "/mnt/xwing/config/emby"
    container_path = "/config"
  }

  volumes {

    host_path      = "/mnt/xwing/media"
    container_path = "/media"
  }

  labels = "${merge(

    var.traefik-labels,
    map(
      "traefik.frontend.rule", "Host:emby.in.${var.domain},emby.${var.domain}",
      "traefik.frontend.passHostHeader", "true",
      "traefik.port", 8096,
    ))}"

  memory                = 2048
  restart               = "unless-stopped"
  destroy_grace_seconds = 10
  must_run              = true

  # Running as lounge:tatooine
  env = [

    "APP_USER=lounge",
    "APP_UID=1004",
    "APP_GID=1003",
    "APP_CONFIG=/mnt/xwing/config",
    "TZ=Asia/Kolkata",
  ]
}

resource "docker_image" "emby" {

  name          = "${data.docker_registry_image.emby.name}"
  pull_triggers = ["${data.docker_registry_image.emby.sha256_digest}"]
}

data "docker_registry_image" "emby" {

  name = "emby/embyserver:latest"
}
diff --git a/media/lidarr.tf b/media/lidarr.tf
index d3a8e9d..ba1b500 100644
--- a/media/lidarr.tf
+++ a/media/lidarr.tf
@@ -43,5 +43,5 @@
    "TZ=Asia/Kolkata",
  ]

  links = ["${var.links-emby}", "${var.links-transmission}"]
  networks = ["${docker_network.media.id}"]
}
diff --git a/media/network.tf b/media/network.tf
new file mode 100644
index 0000000..4b3e8ff 100644
--- /dev/null
+++ a/media/network.tf
@@ -1,0 +1,9 @@
resource "docker_network" "media" {

  name   = "media"
  driver = "bridge"

  ipam_config {

    subnet  = "172.18.0.0/16"
    gateway = "172.18.0.1"
  }
}
diff --git a/media/outputs.tf b/media/outputs.tf
new file mode 100644
index 0000000..c9ec38f 100644
--- /dev/null
+++ a/media/outputs.tf
@@ -1,0 +1,7 @@
output "names-transmission" {

  value = "${docker_container.transmission.name}"
}

output "names-emby" {

  value = "${docker_container.emby.name}"
}
diff --git a/media/radarr.tf b/media/radarr.tf
index 1783cf6..f0a3b4f 100644
--- a/media/radarr.tf
+++ a/media/radarr.tf
@@ -44,5 +44,5 @@
    "TZ=Asia/Kolkata",
  ]

  links = ["${var.links-emby}", "${var.links-transmission}"]
  networks = ["${docker_network.media.id}"]
}
diff --git a/media/sonarr.tf b/media/sonarr.tf
index b928399..7cc80b0 100644
--- a/media/sonarr.tf
+++ a/media/sonarr.tf
@@ -43,5 +43,5 @@
    "TZ=Asia/Kolkata",
  ]

  links = ["${var.links-emby}", "${var.links-transmission}"]
  networks = ["${docker_network.media.id}"]
}
diff --git a/media/transmission.tf b/media/transmission.tf
new file mode 100644
index 0000000..c6a4d92 100644
--- /dev/null
+++ a/media/transmission.tf
@@ -1,0 +1,60 @@
resource "docker_container" "transmission" {

  name  = "transmission"
  image = "${docker_image.transmission.latest}"

  labels = "${merge(

    var.traefik-labels,
    map(
      "traefik.frontend.auth.basic", "${var.basic_auth}",
      "traefik.port", 9091,
    ))}"

  ports {

    internal = 51413
    external = 51413
    ip       = "${var.ips["eth0"]}"
    protocol = "udp"
  }

  volumes {

    host_path      = "/mnt/xwing/config/transmission"
    container_path = "/config"
  }

  volumes {

    host_path      = "/mnt/xwing/media/DL"
    container_path = "/downloads"
  }

  volumes {

    host_path      = "/mnt/xwing/data/watch/transmission"
    container_path = "/watch"
  }

  upload {

    content = "${file("${path.module}/conf/transmission.json")}"
    file    = "/config/settings.json"
  }

  env = [

    "PGID=1003",
    "PUID=1000",
    "TZ=Asia/Kolkata",
  ]

  networks = ["${docker_network.media.id}"]

  memory                = 1024
  restart               = "unless-stopped"
  destroy_grace_seconds = 10
  must_run              = true
}

resource "docker_image" "transmission" {

  name          = "${data.docker_registry_image.transmission.name}"
  pull_triggers = ["${data.docker_registry_image.transmission.sha256_digest}"]
}

data "docker_registry_image" "transmission" {

  name = "linuxserver/transmission:latest"
}
diff --git a/media/variables.tf b/media/variables.tf
index eb8eac9..7465c81 100644
--- a/media/variables.tf
+++ a/media/variables.tf
@@ -5,9 +5,19 @@
variable "links-emby" {}
variable "links-transmission" {}
variable "links-mariadb" {}
variable "links-mongorocks" {}
variable "airsonic-smtp-password" {}
variable "airsonic-db-password" {}

variable "traefik-labels" {

  type = "map"
}

// TODO: Remove duplication
variable "basic_auth" {

  default = "tatooine:$2y$05$iPbatint3Gulbs6kUtyALO9Yq5sBJ..aiF82bcIziH4ytz9nFoPr6,reddit:$2y$05$ghKxSydYCpAT8r2VVMDmWO/BBecghGfLsRJUkr3ii7XxPyxBqp8Oy"
}

variable "ips" {

  type = "map"
}
diff --git a/docker/conf/transmission.json b/docker/conf/transmission.json
deleted file mode 100644
index 029c854..0000000 100644
--- a/docker/conf/transmission.json
+++ /dev/null
@@ -1,70 +1,0 @@
{
    "alt-speed-down": 50,
    "alt-speed-enabled": false,
    "alt-speed-time-begin": 540,
    "alt-speed-time-day": 127,
    "alt-speed-time-enabled": false,
    "alt-speed-time-end": 1020,
    "alt-speed-up": 50,
    "bind-address-ipv4": "0.0.0.0",
    "bind-address-ipv6": "::",
    "blocklist-enabled": true,
    "blocklist-url": "http://john.bitsurge.net/public/biglist.p2p.gz",
    "cache-size-mb": 16,
    "dht-enabled": true,
    "download-dir": "/downloads",
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 1,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/downloads",
    "incomplete-dir-enabled": true,
    "lpd-enabled": false,
    "message-level": 2,
    "peer-congestion-algorithm": "",
    "peer-id-ttl-hours": 6,
    "peer-limit-global": 200,
    "peer-limit-per-torrent": 50,
    "peer-port": 51413,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": "default",
    "pex-enabled": true,
    "port-forwarding-enabled": true,
    "preallocation": 1,
    "prefetch-enabled": true,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 0.2,
    "ratio-limit-enabled": true,
    "rename-partial-files": true,
    "rpc-host-whitelist": "transmission.bb8.fun,transmission",
    "rpc-host-whitelist-enabled": true,
    "rpc-authentication-required": false,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-password": "{1ddd3f1f6a71d655cde7767242a23a575b44c909n5YuRT.f",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "",
    "rpc-whitelist": "127.0.0.1",
    "rpc-whitelist-enabled": false,
    "scrape-paused-torrents-enabled": true,
    "script-torrent-done-enabled": false,
    "script-torrent-done-filename": "",
    "seed-queue-enabled": false,
    "seed-queue-size": 10,
    "speed-limit-down": 100,
    "speed-limit-down-enabled": false,
    "speed-limit-up": 50,
    "speed-limit-up-enabled": true,
    "start-added-torrents": true,
    "trash-original-torrent-files": false,
    "umask": 2,
    "upload-slots-per-torrent": 14,
    "utp-enabled": true,
    "watch-dir": "/watch",
    "watch-dir-enabled": true
}

diff --git a/media/conf/transmission.json b/media/conf/transmission.json
new file mode 100644
index 0000000..029c854 100644
--- /dev/null
+++ a/media/conf/transmission.json
@@ -1,0 +1,70 @@
{
    "alt-speed-down": 50,
    "alt-speed-enabled": false,
    "alt-speed-time-begin": 540,
    "alt-speed-time-day": 127,
    "alt-speed-time-enabled": false,
    "alt-speed-time-end": 1020,
    "alt-speed-up": 50,
    "bind-address-ipv4": "0.0.0.0",
    "bind-address-ipv6": "::",
    "blocklist-enabled": true,
    "blocklist-url": "http://john.bitsurge.net/public/biglist.p2p.gz",
    "cache-size-mb": 16,
    "dht-enabled": true,
    "download-dir": "/downloads",
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 1,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/downloads",
    "incomplete-dir-enabled": true,
    "lpd-enabled": false,
    "message-level": 2,
    "peer-congestion-algorithm": "",
    "peer-id-ttl-hours": 6,
    "peer-limit-global": 200,
    "peer-limit-per-torrent": 50,
    "peer-port": 51413,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": "default",
    "pex-enabled": true,
    "port-forwarding-enabled": true,
    "preallocation": 1,
    "prefetch-enabled": true,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 0.2,
    "ratio-limit-enabled": true,
    "rename-partial-files": true,
    "rpc-host-whitelist": "transmission.bb8.fun,transmission",
    "rpc-host-whitelist-enabled": true,
    "rpc-authentication-required": false,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-password": "{1ddd3f1f6a71d655cde7767242a23a575b44c909n5YuRT.f",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "",
    "rpc-whitelist": "127.0.0.1",
    "rpc-whitelist-enabled": false,
    "scrape-paused-torrents-enabled": true,
    "script-torrent-done-enabled": false,
    "script-torrent-done-filename": "",
    "seed-queue-enabled": false,
    "seed-queue-size": 10,
    "speed-limit-down": 100,
    "speed-limit-down-enabled": false,
    "speed-limit-up": 50,
    "speed-limit-up-enabled": true,
    "start-added-torrents": true,
    "trash-original-torrent-files": false,
    "umask": 2,
    "upload-slots-per-torrent": 14,
    "utp-enabled": true,
    "watch-dir": "/watch",
    "watch-dir-enabled": true
}