Update readme with basic info and warnings

This commit is contained in:
iamdoubz committed 2025-04-11 14:41:52 -05:00
1 parent bd646f1b3b
commit d2f4098ffc
1 file changed
+151 -2
+151 -2
View File
@@ -1,3 +1,152 @@
# radio
# Radio
Source code for my radio website
This is my attempt at making a repo for my radio website found at https://radio.dou.bet. It needs a lot of work to be more "generic" for others to use, but it is a start nontheless.
## WARNING
This code isn't production ready. My website is hard coded in most files. There is no standard for coding. I created this to tell myself "Yes you can stream an internet radio station from home".
## Features
- Live broadcast using [icecast](https://icecast.org/)
- Detailed listening history
- DJing software provided by [mixxx](https://mixxx.org/)
- Artwork and Lyrics using [Genius API](https://docs.genius.com/)
- Live polling of stream count
## Prerequisites
- You have already compiled and installed icecast
- You have downloaded and installed mixxx
- You have configured icecast and pointed it to your server name i.e. radio.my.domain
- You have added your icecast server to the Live Broadcasting source connection in mixxx
- You have music you want to stream on the internet
## Install
This section will eventually be populated with what you should do. For now, it is just `cd /var/www && sudo -u www-data git pull https://git.dou.bet/iamdoubz/radio radio` and then add a virtual host for your favorite web frontend. NOTE: my website is hard coded in most of these files. Each file will need to be checked to point to your actual radio streaming website.
## nginx example
This isn't a complete example, but the overall base should be covered.
```
server {
server_name radio.my.domain;
root /var/www/radio;
include defaults-http.conf;
}
server {
### Default config ###
server_name radio.my.domain;
include defaults-https.conf;
### Block HTTP/1.0 traffic
if ($server_protocol = HTTP/1.0) {
return 444;
}
### Performance tuning config ###
client_max_body_size 16M;
client_body_timeout 300s;
client_body_buffer_size 256k;
### Default headers ###
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Strict-Transport-Security "max-age=15768000" always;
add_header Permissions-Policy "browsing-topics=(self), geolocation=(self), midi=(self), sync-xhr=(self), microphone=(self), camera=(self), magnetometer=(self), gyroscope=(self), fullscreen=(self), payment=(self), interest-cohort=()";
### Proxy php rules ###
index index.php index.html /index.php$request_uri;
fastcgi_buffers 64 4K;
fastcgi_hide_header X-Powered-By;
proxy_intercept_errors off;
root /var/www/radio;
access_log /var/log/nginx/radio_access.log;
error_log /var/log/nginx/radio_error.log info;
location = /peers.xsl {
access_log off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:10038/status-json.xsl;
proxy_redirect off;
proxy_ssl_verify off;
proxy_http_version 1.1;
}
location = /status-json.xsl {
access_log off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:10038;
proxy_redirect off;
proxy_ssl_verify off;
proxy_http_version 1.1;
}
location = /stream {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:10038;
proxy_redirect off;
proxy_ssl_verify off;
proxy_http_version 1.1;
}
location = /peers2.xsl {
access_log off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://192.168.1.24:10036/status-json.xsl;
proxy_redirect off;
proxy_ssl_verify off;
proxy_http_version 1.1;
}
location = /status-json2.xsl {
access_log off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://192.168.1.24:10036/status-json.xsl;
proxy_redirect off;
proxy_ssl_verify off;
proxy_http_version 1.1;
}
location = /stream2 {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://192.168.1.24:10036;
proxy_redirect off;
proxy_ssl_verify off;
proxy_http_version 1.1;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_max_temp_file_size 0;
fastcgi_index index.php;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
}
```