在vultr搭建一个transmission服务器

原创
2020/06/26 14:59
阅读数 614

vps选择

只需要 5$/mon 的配置即可。1000G的流量基本是用不完的,如果大量bt下载可能让vultr把你ban了。

因为我下载的大多是动画资源所以机房还是不选日本了,免得吃版权警告。新加坡或者韩国都可以。

因为个人习惯的原因,Ubuntu Server 和 Debian 都可以,红帽比较麻烦,所以还是选了 Ubuntu Server。

顺便提一嘴自用的Linux桌面可以选 manjaro 或者 OpenSUSE 都蛮不错的。都不喜欢可以Windows 10 + WSL 2 再装个 vcxsrv 也行。Windows 上的 Docker 是真的烂。

部署

使用 docker compose 部署。因为docker hub上transmission的镜像有个奇怪的问题会导致磁盘占用100%,所以Dockerfile还是自己写的。

安装 docker

首先是安装docker,直接参考 docker 自己的文档装就行了。

我把文档里的命令直接存了个shell文件传服务器上执行,ssh 按键延迟太难受了。

#!/usr/bin/bash

apt-get remove docker docker-engine docker.io containerd runc

set -e
apt-get update
apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io
docker run hello-world

编写 Dockerfile

直接上代码

FROM debian:buster
# ============================================================================
# Software and dependencies installation
# ============================================================================
# RUN sed -i 's/deb\.debian\.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \
#     sed -i 's/security\.debian\.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \
RUN apt-get update 
RUN apt-get install -y python3 python3-pip transmission-daemon
# ============================================================================
# Startup script and permission setup
# ============================================================================
RUN useradd -m user
COPY startup.sh /usr/local/bin/startup.sh
COPY transmission.json /home/user/.config/transmission-daemon/settings.json
RUN mkdir /home/user/data && \
    chmod +x /usr/local/bin/startup.sh && \
    chown user:user -R /home/user/.config
# ============================================================================
# Entrypoint
# ============================================================================
USER user
CMD [ "/usr/local/bin/startup.sh" ]

因为希望用环境变量控制transmission的用户名和密码所以还另外写了个入口shell脚本。

#!/usr/bin/env bash

RANDOM_PASSWORD=$(< /dev/urandom tr -dc 0-9-A-Z-a-z|head -c ${1:-16};echo)

set -e

SETTINGS='/home/user/.config/transmission-daemon/settings.json'
USERNAME=${USERNAME:-root}
PASSWORD=${PASSWORD:-$RANDOM_PASSWORD}
DATADIR=${DATADIR:-/home/user/data}

echo "========================================================================"
echo "                         My Transmission Server                         "

if [ $(grep -c -E '%(PASSWORD|USERNAME)%' $SETTINGS) -gt 0 ]; then
    echo " Initializing transmission server ..."
    sed -i "s/%USERNAME%/$USERNAME/g" $SETTINGS
    sed -i "s/%PASSWORD%/$PASSWORD/g" $SETTINGS
    sed -i "s/%DATADIR%/$DATADIR/g" $SETTINGS
    mkdir -p $DATADIR
    echo " USERNAME $USERNAME"
    echo " PASSWORD $PASSWORD"
else
    echo " Starting transmission server ..."
fi

echo "                                                   -- produce by weakptr"
echo "========================================================================"

transmission-daemon -f

配置文件的模板如下

{
    "blocklist-enabled": 0,
    "dht-enabled": 1,
    "download-dir": "%DATADIR%",
    "download-limit": 100,
    "download-limit-enabled": 0,
    "encryption": 1,
    "max-peers-global": 200,
    "peer-port": 51413,
    "pex-enabled": 1,
    "port-forwarding-enabled": 0,
    "rpc-enabled": 1,
    "rpc-authentication-required": 1,
    "rpc-password": "%PASSWORD%",
    "rpc-port": 9091,
    "rpc-username": "%USERNAME%",
    "rpc-whitelist": "",
    "rpc-whitelist-enabled": 0,
    "upload-limit": 100,
    "upload-limit-enabled": 0,
    "preallocation": 1
}

把上面的文件全部放到一个文件夹里,最终如下。

docker/tr
├── [1.1K]  Dockerfile
├── [1013]  startup.sh
└── [ 562]  transmission.json

编写 docker-compose

docker-compose 安装就不说了,直接上 docker-compose.yml 文件。

version: '3.0'
services:
  transmission:
    build: ./tr
    ports: 
      - 9091:9091
      - 51413:51413
      - 51413:51413/udp
    environment: 
      USERNAME: <用户名>
      PASSWORD: <密码>
    volumes:
      - ./data:/home/user/data

运行

可以用 tmux 开个终端看日志,或者就放着好了。

docker-compose up -d
docker-compose logs -t -f transmission

遗留问题

最大的遗留问题是用了USER user导致bt下载写入的时候总是出现permission error,其实我觉得直接用ROOT也没事,虽然安全性考虑还是用普通用户最好...因为已经bt下载完东西了,我也不继续折腾tr了。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部