5个版本
3.0.0-alpha.11 | 2023年9月18日 |
---|---|
3.0.0-alpha.10 | 2023年9月16日 |
3.0.0-alpha.3 | 2023年7月10日 |
3.0.0-alpha.2 | 2023年4月13日 |
3.0.0-alpha.1 |
|
#75 in #settings
用于 2 crate
60KB
423 行
Torrust Tracker Configuration
为Torrust Tracker提供配置的库。
文档
许可证
本项目遵循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