5个版本

3.0.0-alpha.112023年9月18日
3.0.0-alpha.102023年9月16日
3.0.0-alpha.32023年7月10日
3.0.0-alpha.22023年4月13日
3.0.0-alpha.1 2023年3月19日

#75 in #settings


用于 2 crate

自定义许可证

60KB
423

Torrust Tracker Configuration

Torrust Tracker提供配置的库。

文档

crate文档.

许可证

本项目遵循GNU AFFERO GENERAL PUBLIC LICENSE的条款。


lib.rs:

Torrust Tracker的配置数据结构。

此模块包含Torrust Tracker的配置数据结构,Torrust Tracker是一个BitTorrent tracker服务器。

配置可以从项目根目录下的tracker.toml文件或具有相同内容的环境变量中加载。

在没有配置文件的情况下运行tracker时,将创建一个包含默认值的新配置文件,但tracker将立即退出。然后您可以编辑配置文件并再次运行tracker。

配置不仅可以从文件加载,还可以从环境变量TORRUST_TRACKER_CONFIG加载。这在运行tracker在Docker容器或没有持久存储或无法注入配置文件的环境中很有用。有关如何将配置传递给tracker的更多信息,请参阅Torrust Tracker文档

目录

章节

toml结构中的每个部分都映射到一个数据结构。例如,[http_api]部分(追踪器HTTP API的配置)映射到HttpApi结构。

注意:一些部分是结构体的数组。例如,[[udp_trackers]]部分是一个UdpTracker数组的部分,因为你可以有多个运行在不同的端口上的UDP追踪器。

请参阅每个结构的文档,以获取有关每个部分更详细的信息。

端口绑定

对于API、HTTP和UDP追踪器,您可以使用端口号0将其绑定到随机端口。例如,如果您想要绑定到所有接口上的随机端口,请使用0.0.0.0:0。操作系统将选择一个随机端口,但追踪器在启动时不会打印它正在监听的端口。它只是说Starting Torrust HTTP tracker server on: http://0.0.0.0:0。这显示了配置文件中使用的端口,而不是追踪器实际监听的端口。这是一个计划中的功能,有关更多信息,请参阅问题186

TSL支持

对于API和HTTP追踪器,您可以通过将ssl_enabled设置为true并设置证书和密钥文件的路径来启用TSL。

通常,您将有一个类似这样的目录结构

storage/
├── database
│   └── data.db
└── tls
    ├── localhost.crt
    └── localhost.key

在这里您可以存储所有持久数据。

或者,您可以为SSL/TLS部分设置反向代理,例如Nginx或Apache,并将请求转发到追踪器。如果您这样做,您应该在配置文件中将on_reverse_proxy设置为true。本文档不详细说明如何设置反向代理,但配置文件可能如下所示

对于NGINX

# HTTPS only (with SSL - force redirect to HTTPS)

server {
    listen 80;
    server_name tracker.torrust.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name tracker.torrust.com;

    ssl_certificate CERT_PATH
    ssl_certificate_key CERT_KEY_PATH;

    location / {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://127.0.0.1:6969;
    }
}

对于Apache

# HTTPS only (with SSL - force redirect to HTTPS)

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName tracker.torrust.com

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTPS} off
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    </IfModule>
</VirtualHost>

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerAdmin [email protected]
        ServerName tracker.torrust.com

        <Proxy *>
            Order allow,deny
            Allow from all
        </Proxy>

        ProxyPreserveHost On
        ProxyRequests Off
        AllowEncodedSlashes NoDecode

        ProxyPass / https://127.0.0.1:3000/
        ProxyPassReverse / https://127.0.0.1:3000/
        ProxyPassReverse / http://tracker.torrust.com/

        RequestHeader set X-Forwarded-Proto "https"
        RequestHeader set X-Forwarded-Port "443"

        ErrorLog ${APACHE_LOG_DIR}/tracker.torrust.com-error.log
        CustomLog ${APACHE_LOG_DIR}/tracker.torrust.com-access.log combined

        SSLCertificateFile CERT_PATH
        SSLCertificateKeyFile CERT_KEY_PATH
    </VirtualHost>
</IfModule>

生成自签名证书

出于测试目的,您可以使用自签名证书。

有关更多信息,请参阅Let's Encrypt - Certificates for localhost

运行以下命令将在当前目录生成证书(localhost.crt)和密钥(localhost.key)文件

openssl req -x509 -out localhost.crt -keyout localhost.key \
  -newkey rsa:2048 -nodes -sha256 \
  -subj '/CN=localhost' -extensions EXT -config <( \
   printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

然后您可以在配置文件中使用生成的文件

[[http_trackers]]
enabled = true
...
ssl_cert_path = "./storage/tracker/lib/tls/localhost.crt"
ssl_key_path = "./storage/tracker/lib/tls/localhost.key"

[http_api]
enabled = true
...
ssl_cert_path = "./storage/tracker/lib/tls/localhost.crt"
ssl_key_path = "./storage/tracker/lib/tls/localhost.key"

默认配置

默认配置是

log_level = "info"
mode = "public"
db_driver = "Sqlite3"
db_path = "./storage/tracker/lib/database/sqlite3.db"
announce_interval = 120
min_announce_interval = 120
max_peer_timeout = 900
on_reverse_proxy = false
external_ip = "0.0.0.0"
tracker_usage_statistics = true
persistent_torrent_completed_stat = false
inactive_peer_cleanup_interval = 600
remove_peerless_torrents = true

[[udp_trackers]]
enabled = false
bind_address = "0.0.0.0:6969"

[[http_trackers]]
enabled = false
bind_address = "0.0.0.0:7070"
ssl_enabled = false
ssl_cert_path = ""
ssl_key_path = ""

[http_api]
enabled = true
bind_address = "127.0.0.1:1212"
ssl_enabled = false
ssl_cert_path = ""
ssl_key_path = ""

[http_api.access_tokens]
admin = "MyAccessToken"

依赖项

~4MB
~79K SLoC