{"id":22208283,"url":"https://github.com/steenhansen/sffaudio-search-kubernetes","last_synced_at":"2026-04-10T12:01:50.549Z","repository":{"id":149760014,"uuid":"338930014","full_name":"steenhansen/sffaudio-search-kubernetes","owner":"steenhansen","description":"A single page Node.js app, using a Neo4j graph database, that is installed with Kubernetes on Linode.com","archived":false,"fork":false,"pushed_at":"2024-05-19T22:05:45.000Z","size":1022,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-25T04:36:05.243Z","etag":null,"topics":["docker","kubernetes"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/steenhansen/sff-audio-kube","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/steenhansen.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-15T00:13:40.000Z","updated_at":"2024-05-19T22:05:48.000Z","dependencies_parsed_at":"2024-04-26T20:30:56.161Z","dependency_job_id":"3feff301-3e48-4a30-9998-bf1ba1b71fbc","html_url":"https://github.com/steenhansen/sffaudio-search-kubernetes","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/steenhansen/sffaudio-search-kubernetes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steenhansen%2Fsffaudio-search-kubernetes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steenhansen%2Fsffaudio-search-kubernetes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steenhansen%2Fsffaudio-search-kubernetes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steenhansen%2Fsffaudio-search-kubernetes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/steenhansen","download_url":"https://codeload.github.com/steenhansen/sffaudio-search-kubernetes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steenhansen%2Fsffaudio-search-kubernetes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31641492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["docker","kubernetes"],"created_at":"2024-12-02T19:17:21.853Z","updated_at":"2026-04-10T12:01:50.531Z","avatar_url":"https://github.com/steenhansen.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n \n  \n\n\n# [Kubernetes](https://www.linode.com/products/kubernetes/) SFFaudio-Search on Linode.com\n\n  \u003ca name='readme-start'\u003e\u003c/a\u003e \n\n  \n\n[SFFaudio-Search](http://192.53.120.71) was a single page Node.js app that was injected into [SFFaudio.com](https://www.sffaudio.com/)'s WordPress search page. It was discontinued because of human intervention needed for manual linking of text posts. It enabled fast and easy searching of SFFaudio's online content of [authors](http://192.53.120.71/?author=larry-niven), [stories](http://192.53.120.71/?book=beyond-lies-the-wub\u0026author=philip-k-dick), [blog-posts](http://192.53.120.71/?book=beyond-lies-the-wub\u0026author=philip-k-dick\u0026view=post_book\u0026choice=4), [PDFs](http://192.53.120.71/?book=beyond-lies-the-wub\u0026author=philip-k-dick\u0026view=pdf\u0026choice=1), and [MP3s](http://192.53.120.71/?book=beyond-lies-the-wub\u0026author=philip-k-dick\u0026view=rsd\u0026choice=1).\n\n  \nThe data is held in Google Sheets for easy text editing; [PDF data](https://docs.google.com/spreadsheets/d/1sbQ8NR7hvcm4EjSlyhmte0rYtI_G3vnc1o5KLPAW2lc/),\n [RSD data](https://docs.google.com/spreadsheets/d/1VFMgWy6wmTkFIpeNW-NkZdWmpz5iZcuULgMpjn8_QgU/), and \n [Podcast data](https://docs.google.com/spreadsheets/d/1cWtA1AaY83cBuU_6vt64adDeR-dfT-X1U5VgvCRVMAg/). Then a [Neo4j](https://neo4j.com/) graph database links the data, while [Vis.js](http://visjs.org/) is used to display the interactive relationships. PDFs are displayed via [PDF.js](https://github.com/mozilla/pdf.js) on the canvas. The four small icons in the bottom left and right of the widget\n\n- show help\n- resize the graph to window size\n- shrink the graph\n- grow the graph\n  \n\n#### Philip K. Dick's \"Beyond Lies the Wub\" found after searching for 'dick':\n\n![visual explanation](https://github.com/steenhansen/sffaudio-search/blob/master/beyond-the-wub-book.png)\n\nFour blog posts, a PDF, an RSD, an MP3, a Wikipedia story link, and a link back to the author.\n\n#### After clicking on \"RSD # 7\" a user can play the associated MP3 while reading along with the PDF:\n\n![visual explanation](https://github.com/steenhansen/sffaudio-search/blob/master/beyond-the-wub-rsd.png)\n\n\n## Docker Run program locally on Windows\n\nSteps | \u0026nbsp;\n------------ | -------------\nGet Docker | [Download](https://hub.docker.com/editions/community/docker-ce-desktop-windows/) Docker Desktop for Windows\nEnter /docker-images/ | *$ cd docker-images*\nLaunch program | *$ docker-run\u0026period;bat*\nView web page | *http://localhost/?author=philip-k-dick* (5 books)\nView Neo4j database | *http://localhost:7474/browser*\nUpdate Neo4j database | *http://localhost:81/cron-new-db-version-81* (wait 2 minutes)\nView 7413 books | *http://localhost/* (refresh to clear cache)\n\n#### Docker Desktop after docker-run.bat has exectued:\n\n![visual explanation](https://github.com/steenhansen/sffaudio-search-kubernetes/blob/master/docker_run.png)\n\n\u0026nbsp;\n\u0026nbsp;\n\u0026nbsp;\n\n  \n## Deploy program on a Linode Kubernetes Cluster \n\n\nSteps | \u0026nbsp;\n------------ | -------------\nGet Linode Account | [Sign up](https://login.linode.com/signup) for Linode Cloud\nGet kubectl | [Install](https://kubernetes.io/docs/tasks/tools/install-kubectl/) kubectl on Windows\nConfigure KUBECONFIG | $ setx KUBECONFIG \"C:\\kubes\\linode-kube-config.yaml\"\nStart LKE | [Make a Kubernetes Cluster](https://cloud.linode.com/kubernetes/clusters) \nCreate a 3 node cluster| 3 Linode 2GB for a total of $30 a month\nCopy kubeconfig.yaml file | into C:\\kubes\\linode-kube-config.yaml\nStart cluster | $ kubectl apply -k ./   \nWait for 4 pods to start | $ kubectl get pods -w\n\n![visual explanation](https://github.com/steenhansen/sffaudio-search-kubernetes/blob/master/kubectl_get_pods.png)\n\n\u0026nbsp; | \u0026nbsp;\n------------ | -------------\nGet EXTERNAL service IPs | $ kubectl get svc\n\u0026nbsp; | \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; neo4j--db--service 104.200.26.55\n\u0026nbsp; | \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; http://104.200.26.55:7474/browser/\n\u0026nbsp; | \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; password=yer_password \n\u0026nbsp; | \n\u0026nbsp; | \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;node--webserver--service 104.200.27.60\n\u0026nbsp; | \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; http://104.200.27.60 (empty database)\n\n![visual explanation](https://github.com/steenhansen/sffaudio-search-kubernetes/blob/master/kubectl_get_svc.png)\n\n\n\u0026nbsp; | \u0026nbsp;\n------------ | -------------\nLaunch CronJob | edit cron--job.yaml for an immediate cronjob run\n\u0026nbsp; | \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;schedule: \"17 * * * *\"  # start 17 minutes after every hour cron job\n\u0026nbsp; | \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;#schedule: \"43 0 * * 0\" # stop weekly cron job \nSet cron job run time | $ kubectl apply -f cron--job.yaml\n\u0026nbsp; | $ kubectl get pods -w to see cron job launch in a pod\n\u0026nbsp; | \n\u0026nbsp; | Wait until *(20315) Node labels in Neo4j browser (up to 10 minutes) \nView full database | http://104.200.27.60 (refresh might be needed to clear cache)\n\n\u003ca name=\"s\"\u003e\u003c/a\u003e\n#### Linode interface after cluster has started:\n\u003ca name=\"kubernetes-screen-shot\"\u003e\u003c/a\u003e\n![visual explanation](https://github.com/steenhansen/sffaudio-search-kubernetes/blob/master/lke.png)\n\n\n## Caveats\n- The Node.js Neo4j-driver used in this project is [1.7.7](https://www.npmjs.com/package/neo4j-driver/v/1.7.7), very old, the current version is 4.2.1 and is not backwards compatible\n- The [Neo4j Docker](https://hub.docker.com/_/neo4j) image used in this project is 3.4.9, very old, the current version is 4.2.2 and is not backwards compatible\n- Mobile css is not handled correctly anymore as this program's output was meant to be displayed inside of Wordpress pages\n\n## Created by\n\n[Steen Hansen](https://github.com/steenhansen)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteenhansen%2Fsffaudio-search-kubernetes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsteenhansen%2Fsffaudio-search-kubernetes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteenhansen%2Fsffaudio-search-kubernetes/lists"}