# useradd --system --home /opt/pyTorrent --shell /usr/sbin/nologin pytorrent # chown -R pytorrent:pytorrent /opt/pyTorrent [Unit] Description=pyTorrent Web UI After=network-online.target Wants=network-online.target [Service] Type=simple User=pytorrent Group=pytorrent WorkingDirectory=/opt/pyTorrent Environment="PYTHONUNBUFFERED=1" EnvironmentFile=/opt/pyTorrent/.env # Note: production starts through Gunicorn, so Socket.IO keeps WebSocket/thread support without unsafe Werkzeug. ExecStart=/opt/pyTorrent/venv/bin/gunicorn --worker-class gthread --workers 1 --threads 32 --bind ${PYTORRENT_HOST}:${PYTORRENT_PORT} --access-logfile - --error-logfile - wsgi:app Restart=always RestartSec=3 KillSignal=SIGINT TimeoutStopSec=20 NoNewPrivileges=true PrivateTmp=true [Install] WantedBy=multi-user.target