{"id":16639875,"url":"https://github.com/dzoukr/funcaster","last_synced_at":"2025-03-21T15:32:02.541Z","repository":{"id":93382277,"uuid":"414238384","full_name":"Dzoukr/Funcaster","owner":"Dzoukr","description":"⚡ Serverless .NET solution for hosting your 🔊 podcasts with (nearly) zero costs using Azure Functions and Azure Storage Account.","archived":false,"fork":false,"pushed_at":"2022-01-19T13:11:27.000Z","size":6614,"stargazers_count":46,"open_issues_count":0,"forks_count":1,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-18T02:44:36.204Z","etag":null,"topics":["azure-functions","podcasts","rss","serverless","storage-account","xml"],"latest_commit_sha":null,"homepage":"","language":"F#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dzoukr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-10-06T14:09:25.000Z","updated_at":"2024-03-08T10:35:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"b44760c1-1bbc-47b4-a553-b34a1a633962","html_url":"https://github.com/Dzoukr/Funcaster","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dzoukr%2FFuncaster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dzoukr%2FFuncaster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dzoukr%2FFuncaster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dzoukr%2FFuncaster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dzoukr","download_url":"https://codeload.github.com/Dzoukr/Funcaster/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244822719,"owners_count":20516154,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["azure-functions","podcasts","rss","serverless","storage-account","xml"],"created_at":"2024-10-12T07:07:16.990Z","updated_at":"2025-03-21T15:32:02.096Z","avatar_url":"https://github.com/Dzoukr.png","language":"F#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Funcaster\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"logo.png\" width=\"150px\"/\u003e\n\u003c/p\u003e\n\n⚡ Serverless .NET solution for hosting your 🔊 podcasts with (nearly) zero costs using Azure Functions and Azure Storage Account. Now with integration with 💻 [FuncasterStudio](https://github.com/Dzoukr/FuncasterStudio)!\n\n\n## Supported platforms\n\u003cimg src=\"docs/apple-badge.png\" height=\"30px\"/\u003e \u003cimg src=\"docs/spotify-badge.png\" height=\"30px\"/\u003e \u003cimg src=\"docs/google-badge.png\" height=\"30px\"/\u003e\n\n## How does it work\nTo start publishing your podcast you simply need two things: Public accessible storage for your audio files, and RSS feed providing information necessary information about podcasts and episodes in valid XML format. Only if we would have cloud-based services providing terabytes of storage for a ridiculously low price and service for providing an Http-based serverless API with millions of monthly invocations for free... Oh, wait! We have Azure Storage Account \u0026 Azure Functions! Yes, this solution does exactly that - checking your blobs (audio files) on your Storage Account and providing valid RSS XML over Azure Functions.\n\n## Requirements\n\nTo use this solution you need to have access to Azure Portal and be logged in. If you don't have an account, you can [create one for free](https://azure.microsoft.com/en-us/free/).\n\n## Pre-installation\n\nYou need to have binaries ready for deployment. You can easily [download the latest ZIP version](https://github.com/Dzoukr/Funcaster/releases) from Releases, or you can build your own by checkout this repository and running:\n\n```cli\n\u003e dotnet tool restore\n\u003e dotnet run publish\n```\n\nCustom build output, as well as ZIP file, can be found in the `publish` folder on the root level of the solution. No matter which one you'll choose, get your ZIP file ready for deployment described in the next chapter.\n\n\n## Installation\n\nWe will need to install and set up two things: Storage Account for your podcasts, and Azure Functions app for management around those files. It's pretty easy so just follow the steps and you are quickly done.\n\n### Storage Account\n\n#### 1️⃣ Create new Storage Account service\n\nOnce logged in Azure Portal, create a new Storage Account a wait for deployment is complete.\n\n![](docs/account_01.gif)\n\n\n#### 2️⃣ Copy connection string\n\nTo connect serverless part of ⚡Funcaster with newly created Storage Account, you need to copy a connection string. Also remember it for using 💻 [FuncasterStudio](https://github.com/Dzoukr/FuncasterStudio) later.\n\n![](docs/account_03.gif)\n\nCool! Now everything is ready for the second part - Azure Functions.\n\n### Azure Functions\n\n#### 1️⃣ Create new Function App\n\nCreate a new Function app with any name you would like to use, select the same region your Storage Account is in, choose `.NET6` and proceed to creation. If you would like to have built-in monitoring, turn on the Application Insights.\n\n![](docs/func_01.gif)\n\n#### 2️⃣ Setup connection string, runtime, and version\n\n⚡Funcaster is built on `.NET6` using `dotnet-isolated` as worker runtime, which is equivalent to `~4` extension version. We need to check this is properly configured in configuration + add the connection string to the prepared Storage Account.\n\n![](docs/func_02.gif)\n\n#### 3️⃣ Deploy ⚡Funcaster\n\nOk, let's deploy our ZIP file! There are many ways (CI solutions like GitHub Actions or Azure DevOps pipelines are preferred), but let's take the shortcut here and use the KUDU ZIP deployment running at `https://\u003cNAME_OF_YOUR_FUNCTION_APP\u003e.scm.azurewebsites.net/`\n\n![](docs/func_03.gif)\n\nGreat! Your solution is _almost_ ready! Now it's time to add some podcast content, can we?\n\n## Using ⚡Funcaster with 💻 [FuncasterStudio](https://github.com/Dzoukr/FuncasterStudio)\n\nYour podcasting solution is ready for serving files stored on blob storage. Let's start using it!! This the time when 💻 [FuncasterStudio](https://github.com/Dzoukr/FuncasterStudio) steps in as a great solution.\n\nJust pull it as a Docker image from hub and run it locally using connection string to newly created storage acccount.\n\n```cli\n\u003e docker run -p 1234:80 -e PodcastStorage=\"\u003cCONNECTION_STRING\u003e\" dzoukr/funcasterstudio\n```\n\nNavigate to `http://localhost:1234` and start uploading episodes, podcast logo, and other stuff using 💻 [FuncasterStudio](https://github.com/Dzoukr/FuncasterStudio).\n\n![](https://raw.githubusercontent.com/Dzoukr/FuncasterStudio/master/docs/funcasterstudio.gif)\n\nIT'S DONE! 🥳🎆🎊 Let's see how our RSS feed looks like. Navigate to https://\u003cNAME_OF_YOUR_FUNCTION_APP\u003e.azurewebsites.net/rss and behold!\n\n![](docs/data_05.gif)\n\n### Using RSS feed\n\nNow it's up to you where you wanna publish your podcast. I've already successfully published to [Spotify Podcasts](https://open.spotify.com/show/280aceAx85AKZslVytXsrB), [Apple Podcasts](https://podcasts.apple.com/us/podcast/podvocasem/id1590431276) and [Google Podcasts](https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkLnBvZHZvY2FzZW0uY3ovcnNz) but I'm pretty sure it will work for other providers too.\n\n## FAQ\n\n### Should I use this instead of Soundcloud?\n\nIt's up to you. Soundcloud offers great social features like likes, a built-in web player, and many more, but it costs over 8 EUR / months. If you just need to publish your podcast for (almost) zero costs, ⚡Funcaster is here at your service.\n\n### What if I need an embedded player on my site?\n\nSpotify and Apple offer an easy way of creating embedded players directly from the application or [marketing tools](https://tools.applemediaservices.com/). Or just use `\u003caudio\u003e` HTML5 tag.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdzoukr%2Ffuncaster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdzoukr%2Ffuncaster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdzoukr%2Ffuncaster/lists"}