nginx-rtmps
This commit is contained in:
parent
801a8bcf5f
commit
407318445d
8 changed files with 135 additions and 10 deletions
|
@ -1,6 +1,6 @@
|
||||||
https://github.com/dehydrated-io/dehydrated/wiki/example-dns-01-nsupdate-script
|
https://github.com/dehydrated-io/dehydrated/wiki/example-dns-01-nsupdate-script
|
||||||
|
|
||||||
```
|
```sh
|
||||||
printf "server 127.0.0.1
|
printf "server 127.0.0.1
|
||||||
zone acme.resolver.name.
|
zone acme.resolver.name.
|
||||||
update add _acme-challenge.ckn.li.acme.resolver.name. 600 IN TXT "hello"
|
update add _acme-challenge.ckn.li.acme.resolver.name. 600 IN TXT "hello"
|
||||||
|
|
15
bundles/nginx-rtmps/README.md
Normal file
15
bundles/nginx-rtmps/README.md
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
OBS
|
||||||
|
===
|
||||||
|
|
||||||
|
publish
|
||||||
|
-------
|
||||||
|
|
||||||
|
obs stream to `rtmps://rtmp.sublimity.de:1937/24b626n246n2462v46bb2n2` stream key `ckn`
|
||||||
|
|
||||||
|
input
|
||||||
|
-----
|
||||||
|
|
||||||
|
- Media Source
|
||||||
|
- uncheck Local File
|
||||||
|
- Input: `rtmps://rtmp.sublimity.de:1937/24b626n246n2462v46bb2n2/ckn`
|
||||||
|
|
38
bundles/nginx-rtmps/files/rtmps.conf
Normal file
38
bundles/nginx-rtmps/files/rtmps.conf
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
stream {
|
||||||
|
upstream rtmp {
|
||||||
|
server 127.0.0.1:1936;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 1937 ssl;
|
||||||
|
listen [::]:1937 ssl;
|
||||||
|
|
||||||
|
ssl_certificate /var/lib/dehydrated/certs/${server_name}/fullchain.pem;
|
||||||
|
ssl_certificate_key /var/lib/dehydrated/certs/${server_name}/privkey.pem;
|
||||||
|
|
||||||
|
proxy_pass rtmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rtmp {
|
||||||
|
server {
|
||||||
|
listen 127.0.0.1:1936;
|
||||||
|
chunk_size 4096;
|
||||||
|
|
||||||
|
application ${stream_key} {
|
||||||
|
live on;
|
||||||
|
record off;
|
||||||
|
allow publish 127.0.0.1; # for streaming through nginx
|
||||||
|
allow play 127.0.0.1; # for the pull from /live
|
||||||
|
}
|
||||||
|
|
||||||
|
application live {
|
||||||
|
live on;
|
||||||
|
record off;
|
||||||
|
deny publish all; # no need to publish on /live
|
||||||
|
allow play all; # playing allowed
|
||||||
|
|
||||||
|
pull rtmp://127.0.0.1:1936/${stream_key};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
9
bundles/nginx-rtmps/items.py
Normal file
9
bundles/nginx-rtmps/items.py
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
files = {
|
||||||
|
'/etc/nginx/conf.d/rtmps.conf': {
|
||||||
|
'content_type': 'mako',
|
||||||
|
'context': {
|
||||||
|
'server_name': node.metadata.get('nginx-rtmps/hostname'),
|
||||||
|
'stream_key': node.metadata.get('nginx-rtmps/stream_key'),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
50
bundles/nginx-rtmps/metadata.py
Normal file
50
bundles/nginx-rtmps/metadata.py
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
defaults = {
|
||||||
|
'apt': {
|
||||||
|
'packages': {
|
||||||
|
'libnginx-mod-stream': {},
|
||||||
|
'libnginx-mod-rtmp': {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'nftables': {
|
||||||
|
'input': {
|
||||||
|
'tcp dport 1937 accept',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'nginx-rtmps/stream_key',
|
||||||
|
)
|
||||||
|
def stream_key(metadata):
|
||||||
|
return {
|
||||||
|
'nginx-rtmps': {
|
||||||
|
'stream_key': repo.vault.password_for(f"{metadata.get('id')} nginx-rtmps stream_key", length=24)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'dns',
|
||||||
|
)
|
||||||
|
def dns(metadata):
|
||||||
|
return {
|
||||||
|
'dns': {
|
||||||
|
metadata.get('nginx-rtmps/hostname'): repo.libs.ip.get_a_records(metadata),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'letsencrypt/domains',
|
||||||
|
)
|
||||||
|
def letsencrypt(metadata):
|
||||||
|
return {
|
||||||
|
'letsencrypt': {
|
||||||
|
'domains': {
|
||||||
|
metadata.get('nginx-rtmps/hostname'): {
|
||||||
|
'reload': {'nginx'},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
|
@ -2,6 +2,9 @@ pid /var/run/nginx.pid;
|
||||||
user www-data;
|
user www-data;
|
||||||
worker_processes 10;
|
worker_processes 10;
|
||||||
|
|
||||||
|
include /etc/nginx/modules-enabled/*;
|
||||||
|
include /etc/nginx/conf.d/*;
|
||||||
|
|
||||||
events {
|
events {
|
||||||
worker_connections 768;
|
worker_connections 768;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +18,7 @@ http {
|
||||||
server_names_hash_bucket_size 128;
|
server_names_hash_bucket_size 128;
|
||||||
tcp_nopush on;
|
tcp_nopush on;
|
||||||
client_max_body_size 32G;
|
client_max_body_size 32G;
|
||||||
|
|
||||||
% if node.has_bundle('php'):
|
% if node.has_bundle('php'):
|
||||||
upstream php-handler {
|
upstream php-handler {
|
||||||
server unix:/var/run/php/php${node.metadata.get('php/version')}-fpm.sock;
|
server unix:/var/run/php/php${node.metadata.get('php/version')}-fpm.sock;
|
||||||
|
|
|
@ -9,6 +9,12 @@ directories = {
|
||||||
'svc_systemd:nginx:restart',
|
'svc_systemd:nginx:restart',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
'/etc/nginx/conf.d': {
|
||||||
|
'purge': True,
|
||||||
|
'triggers': {
|
||||||
|
'svc_systemd:nginx:restart',
|
||||||
|
},
|
||||||
|
},
|
||||||
'/etc/nginx/ssl': {
|
'/etc/nginx/ssl': {
|
||||||
'purge': True,
|
'purge': True,
|
||||||
'triggers': {
|
'triggers': {
|
||||||
|
@ -26,22 +32,22 @@ files = {
|
||||||
'triggers': {
|
'triggers': {
|
||||||
'svc_systemd:nginx:restart',
|
'svc_systemd:nginx:restart',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'/etc/nginx/fastcgi.conf': {
|
'/etc/nginx/fastcgi.conf': {
|
||||||
'triggers': {
|
'triggers': {
|
||||||
'svc_systemd:nginx:restart',
|
'svc_systemd:nginx:restart',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'/etc/nginx/sites/80.conf': {
|
'/etc/nginx/sites/80.conf': {
|
||||||
'triggers': {
|
'triggers': {
|
||||||
'svc_systemd:nginx:restart',
|
'svc_systemd:nginx:restart',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'/etc/nginx/sites/stub_status.conf': {
|
'/etc/nginx/sites/stub_status.conf': {
|
||||||
'triggers': {
|
'triggers': {
|
||||||
'svc_systemd:nginx:restart',
|
'svc_systemd:nginx:restart',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'/etc/nginx/sites-available': {
|
'/etc/nginx/sites-available': {
|
||||||
'delete': True,
|
'delete': True,
|
||||||
'needs': {
|
'needs': {
|
||||||
|
@ -88,7 +94,7 @@ for name, config in node.metadata.get('nginx/vhosts').items():
|
||||||
'svc_systemd:nginx:restart',
|
'svc_systemd:nginx:restart',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if name in node.metadata.get('letsencrypt/domains'):
|
if name in node.metadata.get('letsencrypt/domains'):
|
||||||
files[f'/etc/nginx/sites/{name}']['needs'].append(
|
files[f'/etc/nginx/sites/{name}']['needs'].append(
|
||||||
f'action:letsencrypt_ensure-some-certificate_{name}',
|
f'action:letsencrypt_ensure-some-certificate_{name}',
|
||||||
|
|
|
@ -11,13 +11,14 @@
|
||||||
],
|
],
|
||||||
'bundles': [
|
'bundles': [
|
||||||
'bind-acme',
|
'bind-acme',
|
||||||
|
'build-ci',
|
||||||
'download-server',
|
'download-server',
|
||||||
'islamicstate.eu',
|
'islamicstate.eu',
|
||||||
|
'lonercrew',
|
||||||
|
'nginx-rtmps',
|
||||||
|
'steam',
|
||||||
'wireguard',
|
'wireguard',
|
||||||
'zfs',
|
'zfs',
|
||||||
'lonercrew',
|
|
||||||
'build-ci',
|
|
||||||
'steam',
|
|
||||||
],
|
],
|
||||||
'metadata': {
|
'metadata': {
|
||||||
'id': 'ea29bdf0-0b47-4bf4-8346-67d60c9dc4ae',
|
'id': 'ea29bdf0-0b47-4bf4-8346-67d60c9dc4ae',
|
||||||
|
@ -165,6 +166,9 @@
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
'nginx-rtmps': {
|
||||||
|
'hostname': 'rtmp.sublimity.de',
|
||||||
|
},
|
||||||
'roundcube': {
|
'roundcube': {
|
||||||
'product_name': 'Sublimity Mail',
|
'product_name': 'Sublimity Mail',
|
||||||
'version': '1.5.0',
|
'version': '1.5.0',
|
||||||
|
|
Loading…
Reference in a new issue