Files
kevinveenbirkenbachandClaude Opus 5 8ffb1f5674 refactor(peertube): make the role clearnet-only
PeerTube distributes video over WebRTC and the role proxies its tracker socket on purpose (templates/proxy.conf.j2:48, with a raised read timeout because peers ping every fifteen minutes). Tor carries no UDP and an onion client cannot hold peer connections, so an onion PeerTube is the app without the feature it exists for. What remained was plain HTTP video at Tor throughput, and a login path that only worked through a sed over the vendored dist of a third-party plugin.

That patch is gone with this change, along with PEERTUBE_OIDC_ALLOW_INSECURE_ISSUER, the variable that gated it, and both tor pins in meta/variants.yml. The root TODO entry describing it is removed too - it carried a three-step exit path (upstream MR, fork, delete) that no longer needs walking. The https-on-onion entry keeps its analysis and loses only the sentence that named peertube among the per-consumer workarounds.

The discovery gate stays. Failing the deploy when the plugin registered without building a client is not tor-specific and was the honest half of e64ed1cd9.

tor.enabled becomes a literal false rather than the block being deleted. Two lints define the contract: test_tor_contract requires every domain-serving role to declare the block, and test_sso_variant_requires_tor names a literal false as the first of three cases that may opt out of pinning the onion on with a reason. Deleting the block failed both; this is the language they specify.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 14:40:48 +02:00

59 lines
2.9 KiB
Django/Jinja

{% include 'roles/sys-svc-container/templates/env.j2' %}
POSTGRES_USER={{ lookup('database', application_id, 'username') }}
POSTGRES_PASSWORD={{ lookup('database', application_id, 'password') | dotenv_quote }}
POSTGRES_DB={{ lookup('database', application_id, 'name') }}
PEERTUBE_DB_USERNAME={{ lookup('database', application_id, 'username') }}
PEERTUBE_DB_PASSWORD={{ lookup('database', application_id, 'password') | dotenv_quote }}
PEERTUBE_DB_SSL=false
PEERTUBE_DB_HOSTNAME={{ lookup('database', application_id, 'host') }}
PEERTUBE_REDIS_HOSTNAME={{ lookup('engine', 'redis', application_id, 'host') }}
PEERTUBE_REDIS_PORT={{ lookup('engine', 'redis', application_id, 'port') }}
PEERTUBE_REDIS_AUTH={{ lookup('engine', 'redis', application_id, 'password') | dotenv_quote }}
PEERTUBE_WEBSERVER_HOSTNAME={{ lookup('domain',application_id) }}
PEERTUBE_WEBSERVER_HTTPS={{ lookup('tls', application_id, 'enabled') | string | lower }}
PEERTUBE_WEBSERVER_PORT={{ lookup('tls', application_id, 'ports.web') }}
PEERTUBE_TRUST_PROXY=["127.0.0.1", "loopback"]
{% if PEERTUBE_LIVE_ENABLED | bool %}
PEERTUBE_LIVE_ENABLED=true
PEERTUBE_LIVE_RTMP_ENABLED=true
PEERTUBE_LIVE_RTMP_PORT={{ PEERTUBE_RTMP_PORT }}
{% endif %}
PEERTUBE_SECRET={{ lookup('config', application_id, 'secrets.credentials.secret')}}
{% if lookup('objstore', application_id, 'enabled') | bool %}
{% set objstore_bucket = lookup('objstore', application_id, 'bucket') %}
{% set objstore_public_base = lookup('objstore', application_id, 'public_url') %}
PEERTUBE_OBJECT_STORAGE_ENABLED=true
PEERTUBE_OBJECT_STORAGE_ENDPOINT={{ lookup('objstore', application_id, 'url') }}
PEERTUBE_OBJECT_STORAGE_REGION={{ lookup('objstore', application_id, 'region') }}
PEERTUBE_OBJECT_STORAGE_FORCE_PATH_STYLE=true
PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PUBLIC=public-read
PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PRIVATE=private
PEERTUBE_OBJECT_STORAGE_CREDENTIALS_ACCESS_KEY_ID={{ lookup('objstore', application_id, 'access_key') }}
PEERTUBE_OBJECT_STORAGE_CREDENTIALS_SECRET_ACCESS_KEY={{ lookup('objstore', application_id, 'secret_key') | dotenv_quote }}
PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BUCKET_NAME={{ objstore_bucket }}
PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_PREFIX=web-videos/
PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BASE_URL={{ objstore_public_base }}
PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_BUCKET_NAME={{ objstore_bucket }}
PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_PREFIX=streaming-playlists/
PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_BASE_URL={{ objstore_public_base }}
{% endif %}
{% set email = lookup('email', application_id) %}
{% if email.enabled | bool %}
PEERTUBE_SMTP_USERNAME={{ email.username }}
PEERTUBE_SMTP_PASSWORD={{ email.password | dotenv_quote }}
PEERTUBE_SMTP_HOSTNAME={{ email.host }}
PEERTUBE_SMTP_PORT={{ email.port }}
PEERTUBE_SMTP_FROM={{ email['from'] }}
PEERTUBE_SMTP_TLS={{ email.tls | lower }}
PEERTUBE_SMTP_DISABLE_STARTTLS={{ 'false' if email.start_tls else 'true' }}
{% endif %}
PEERTUBE_ADMIN_EMAIL={{ email['from'] }}