| 
									
										
										
										
											2017-07-17 20:00:32 +00:00
										 |  |  | # Ensure you update at least the server_name variables to match your own
 | 
					
						
							|  |  |  | # domain
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-25 21:02:36 +00:00
										 |  |  | upstream funkwhale-api { | 
					
						
							|  |  |  |     # depending on your setup, you may want to udpate this
 | 
					
						
							|  |  |  |     server localhost:5000; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | server { | 
					
						
							| 
									
										
										
										
											2017-07-17 20:00:32 +00:00
										 |  |  |     listen 80; | 
					
						
							|  |  |  |     listen [::]:80; | 
					
						
							|  |  |  |     # update this to match your instance name
 | 
					
						
							|  |  |  |     server_name demo.funkwhale.audio; | 
					
						
							|  |  |  |     # useful for Let's Encrypt
 | 
					
						
							|  |  |  |     location /.well-known/acme-challenge/ { allow all; } | 
					
						
							|  |  |  |     location / { return 301 https://$host$request_uri; } | 
					
						
							| 
									
										
										
										
											2017-06-26 12:09:47 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | server { | 
					
						
							|  |  |  |     listen      443 ssl http2; | 
					
						
							|  |  |  |     listen [::]:443 ssl http2; | 
					
						
							| 
									
										
										
										
											2017-07-17 20:00:32 +00:00
										 |  |  |     # update this to match your instance name
 | 
					
						
							| 
									
										
										
										
											2017-06-25 21:02:36 +00:00
										 |  |  |     server_name demo.funkwhale.audio; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-26 12:09:47 +00:00
										 |  |  |     # TLS
 | 
					
						
							| 
									
										
										
										
											2017-07-17 20:00:32 +00:00
										 |  |  |     # Feel free to use your own configuration for SSL here or simply remove the
 | 
					
						
							|  |  |  |     # lines and move the configuration to the previous server block if you
 | 
					
						
							|  |  |  |     # don't want to run funkwhale behind https (this is not recommanded)
 | 
					
						
							|  |  |  |     # have a look here for let's encrypt configuration:
 | 
					
						
							|  |  |  |     # https://certbot.eff.org/all-instructions/#debian-9-stretch-nginx
 | 
					
						
							| 
									
										
										
										
											2017-06-26 12:09:47 +00:00
										 |  |  |     ssl_protocols TLSv1.2; | 
					
						
							|  |  |  |     ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; | 
					
						
							|  |  |  |     ssl_prefer_server_ciphers on; | 
					
						
							|  |  |  |     ssl_session_cache shared:SSL:10m; | 
					
						
							| 
									
										
										
										
											2017-07-17 20:00:32 +00:00
										 |  |  |     ssl_certificate     /etc/letsencrypt/live/demo.funkwhale.audio/fullchain.pem; | 
					
						
							|  |  |  |     ssl_certificate_key /etc/letsencrypt/live/demo.funkwhale.audio/privkey.pem; | 
					
						
							| 
									
										
										
										
											2017-06-26 12:09:47 +00:00
										 |  |  |     # HSTS
 | 
					
						
							|  |  |  |     add_header Strict-Transport-Security "max-age=31536000"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-25 21:02:36 +00:00
										 |  |  |     root /srv/funkwhale/front/dist; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-19 19:20:49 +00:00
										 |  |  |     # global proxy conf
 | 
					
						
							|  |  |  |     proxy_set_header Host $host; | 
					
						
							|  |  |  |     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 X-Forwarded-Host   $host:$server_port; | 
					
						
							|  |  |  |     proxy_set_header X-Forwarded-Port   $server_port; | 
					
						
							|  |  |  |     proxy_redirect off; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-25 21:02:36 +00:00
										 |  |  |     location / { | 
					
						
							|  |  |  |         try_files $uri $uri/ @rewrites; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     location @rewrites { | 
					
						
							|  |  |  |         rewrite ^(.+)$ /index.html last; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     location /api/ { | 
					
						
							| 
									
										
										
										
											2017-12-27 22:32:02 +00:00
										 |  |  |         # this is needed if you have file import via upload enabled
 | 
					
						
							|  |  |  |         client_max_body_size 30M; | 
					
						
							| 
									
										
										
										
											2017-06-25 21:02:36 +00:00
										 |  |  |         proxy_pass   http://funkwhale-api/api/; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-02-19 19:20:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-25 21:02:36 +00:00
										 |  |  |     location /media/ { | 
					
						
							|  |  |  |         alias /srv/funkwhale/data/media/; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-06-28 21:30:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     location /_protected/media { | 
					
						
							|  |  |  |         # this is an internal location that is used to serve
 | 
					
						
							|  |  |  |         # audio files once correct permission / authentication
 | 
					
						
							|  |  |  |         # has been checked on API side
 | 
					
						
							|  |  |  |         internal; | 
					
						
							|  |  |  |         alias   /srv/funkwhale/data/media; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-19 19:20:49 +00:00
										 |  |  |     # Transcoding logic and caching
 | 
					
						
							|  |  |  |     location = /transcode-auth { | 
					
						
							|  |  |  |         # needed so we can authenticate transcode requests, but still
 | 
					
						
							|  |  |  |         # cache the result
 | 
					
						
							|  |  |  |         internal; | 
					
						
							|  |  |  |         set $query ''; | 
					
						
							|  |  |  |         # ensure we actually pass the jwt to the underlytin auth url
 | 
					
						
							|  |  |  |         if ($request_uri ~* "[^\?]+\?(.*)$") { | 
					
						
							|  |  |  |             set $query $1; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         proxy_set_header X-Forwarded-Host   $host:$server_port; | 
					
						
							|  |  |  |         proxy_set_header X-Forwarded-Port   $server_port; | 
					
						
							|  |  |  |         proxy_pass http://api:12081/api/v1/trackfiles/viewable/?$query; | 
					
						
							|  |  |  |         proxy_pass_request_body off; | 
					
						
							|  |  |  |         proxy_set_header        Content-Length ""; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     location /api/v1/trackfiles/transcode/ { | 
					
						
							|  |  |  |         # this block deals with authenticating and caching transcoding
 | 
					
						
							|  |  |  |         # requests. Caching is heavily recommended as transcoding
 | 
					
						
							|  |  |  |         # is a CPU intensive process.
 | 
					
						
							|  |  |  |         auth_request /transcode-auth; | 
					
						
							|  |  |  |         if ($args ~ (.*)jwt=[^&]*(.*)) { | 
					
						
							|  |  |  |             set $cleaned_args $1$2; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         proxy_cache_key "$scheme$request_method$host$uri$is_args$cleaned_args"; | 
					
						
							|  |  |  |         proxy_cache transcode; | 
					
						
							|  |  |  |         proxy_cache_valid 200 7d; | 
					
						
							|  |  |  |         proxy_ignore_headers "Set-Cookie"; | 
					
						
							|  |  |  |         proxy_hide_header "Set-Cookie"; | 
					
						
							|  |  |  |         add_header X-Cache-Status $upstream_cache_status; | 
					
						
							|  |  |  |         proxy_pass   http://funkwhale-api; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     # end of transcoding logic
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-25 21:02:36 +00:00
										 |  |  |     location /staticfiles/ { | 
					
						
							| 
									
										
										
										
											2017-06-28 21:30:26 +00:00
										 |  |  |         # django static files
 | 
					
						
							| 
									
										
										
										
											2017-06-26 17:18:31 +00:00
										 |  |  |         alias /srv/funkwhale/data/static/; | 
					
						
							| 
									
										
										
										
											2017-06-25 21:02:36 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | } |