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了。