diff --git a/group_vars/nginx_rtmp.yml b/group_vars/nginx_rtmp.yml new file mode 100644 index 00000000..d5626daa --- /dev/null +++ b/group_vars/nginx_rtmp.yml @@ -0,0 +1,4 @@ +--- + +glob_nginx_rtmp: + uri: stream.crans.org diff --git a/group_vars/reverseproxy.yml b/group_vars/reverseproxy.yml index cd01d6a3..fa185203 100644 --- a/group_vars/reverseproxy.yml +++ b/group_vars/reverseproxy.yml @@ -48,6 +48,7 @@ nginx: # - {from: grafana.crans.org, to: "10.231.136.102:3000"} # - {from: webirc.crans.org, to: "10.231.136.1:9000"} - {from: framadate.crans.org, to: 172.16.10.109} + - {from: stream.crans.org, to: 172.16.10.118} # - {from: mailman.crans.org, to: 10.231.136.180} # # # Zamok diff --git a/hosts b/hosts index 22b567d8..b6c94842 100644 --- a/hosts +++ b/hosts @@ -25,6 +25,9 @@ # [test_vm] # re2o-test.adm.crans.org +[nginx_rtmp] +fluxx.adm.crans.org + [reverseproxy] hodaur.adm.crans.org frontdaur.adm.crans.org @@ -81,6 +84,7 @@ gitlab-ci.adm.crans.org hodaur.adm.crans.org monitoring.adm.crans.org boeing.adm.crans.org +fluxx.adm.crans.org [ovh_physical] sputnik.adm.crans.org diff --git a/plays/nginx_rtmp.yml b/plays/nginx_rtmp.yml new file mode 100755 index 00000000..b515bb23 --- /dev/null +++ b/plays/nginx_rtmp.yml @@ -0,0 +1,7 @@ +#!/usr/bin/env ansible-playbook +--- +- hosts: nginx_rtmp + vars: + nginx_rtmp: "{{ glob_nginx_rtmp | default({}) | combine(loc_nginx_rtmp | default({})) }}" + roles: + - nginx-rtmp diff --git a/roles/nginx-rtmp/files/index.html b/roles/nginx-rtmp/files/index.html new file mode 100644 index 00000000..3f0323cc --- /dev/null +++ b/roles/nginx-rtmp/files/index.html @@ -0,0 +1,129 @@ + + + + + Crans Stream + + + + + +
+
+ +
+
+ + + + + + + + + diff --git a/roles/nginx-rtmp/files/no-stream.jpg b/roles/nginx-rtmp/files/no-stream.jpg new file mode 100644 index 00000000..af44c5a4 Binary files /dev/null and b/roles/nginx-rtmp/files/no-stream.jpg differ diff --git a/roles/nginx-rtmp/handlers/main.yml b/roles/nginx-rtmp/handlers/main.yml new file mode 100644 index 00000000..3b8f2d69 --- /dev/null +++ b/roles/nginx-rtmp/handlers/main.yml @@ -0,0 +1,7 @@ +--- + +- name: restart nginx + service: + name: nginx + state: restarted + become: true diff --git a/roles/nginx-rtmp/tasks/main.yml b/roles/nginx-rtmp/tasks/main.yml new file mode 100644 index 00000000..c1e61bfd --- /dev/null +++ b/roles/nginx-rtmp/tasks/main.yml @@ -0,0 +1,54 @@ +--- + +- name: Install nginx with rtmp module + apt: + name: + - nginx-full + - libnginx-mod-rtmp + - libjs-bootstrap4 + register: apt_result + retries: 3 + until: apt_result is succeeded + become: yes + +- name: Copy module and site configuration files + template: + src: "{{ item }}.j2" + dest: "/etc/{{ item }}" + loop: + - nginx/modules-available/60-rtmp.conf + - nginx/sites-available/stream + notify: restart nginx + +- name: Enable NGINX site + file: + src: /etc/nginx/sites-available/stream + dest: /etc/nginx/sites-enabled/stream + state: link + notify: restart nginx + +- name: Enable RTMP module + file: + src: /etc/nginx/modules-available/60-rtmp.conf + dest: /etc/nginx/modules-enabled/60-rtmp.conf + state: link + notify: restart nginx + +- name: Create site folder + file: + path: /var/www/stream/hls + state: directory + +- name: Copy index.html and assets + copy: + src: "{{ item }}" + dest: "/var/www/stream/{{ item }}" + loop: + - index.html + - no-stream.jpg + +- name: Link javascript libs + file: + src: /usr/share/javascript + dest: /var/www/stream/lib + state: link diff --git a/roles/nginx-rtmp/templates/nginx/modules-available/60-rtmp.conf.j2 b/roles/nginx-rtmp/templates/nginx/modules-available/60-rtmp.conf.j2 new file mode 100644 index 00000000..e780fb6c --- /dev/null +++ b/roles/nginx-rtmp/templates/nginx/modules-available/60-rtmp.conf.j2 @@ -0,0 +1,18 @@ +{{ ansible_header | comment }} + +rtmp { + server { + listen 1935; + chunk_size 4096; + application live { + live on; + hls on; + hls_path /var/www/stream/hls/; + hls_fragment 3; + hls_playlist_length 20; + + record off; + } + } +} + diff --git a/roles/nginx-rtmp/templates/nginx/sites-available/stream.j2 b/roles/nginx-rtmp/templates/nginx/sites-available/stream.j2 new file mode 100644 index 00000000..2a074c8d --- /dev/null +++ b/roles/nginx-rtmp/templates/nginx/sites-available/stream.j2 @@ -0,0 +1,40 @@ +{{ ansible_header | comment }} + +server { + listen 80; + listen [::]:80; + + server_name {{ nginx_rtmp.uri }}; + + root /var/www/stream; + index index.html; + + location / { + try_files $uri $uri/ /index.html; + } + + location /hls { + # Disable cache + add_header Cache-Control no-cache; + + # CORS setup + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length'; + + # allow CORS preflight requests + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; + } + + types { + application/dash+xml mpd; + application/vnd.apple.mpegurl m3u8; + video/mp2t ts; + } + } +} +