{"id":21740621,"url":"https://github.com/noahc3/cumulus-comp4300","last_synced_at":"2026-04-14T05:31:10.913Z","repository":{"id":232863392,"uuid":"784920420","full_name":"noahc3/cumulus-comp4300","owner":"noahc3","description":"Implementation of core technologies required for deploying and communicating with game servers hosted in the Cloud.","archived":false,"fork":false,"pushed_at":"2024-04-11T18:20:36.000Z","size":1311,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-25T21:27:48.019Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/noahc3.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":"2024-04-10T20:33:30.000Z","updated_at":"2024-06-12T19:07:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"2f0ee14c-5c1d-49c5-8b02-701f17156b99","html_url":"https://github.com/noahc3/cumulus-comp4300","commit_stats":null,"previous_names":["noahc3/cumulus-comp4300"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noahc3%2Fcumulus-comp4300","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noahc3%2Fcumulus-comp4300/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noahc3%2Fcumulus-comp4300/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noahc3%2Fcumulus-comp4300/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/noahc3","download_url":"https://codeload.github.com/noahc3/cumulus-comp4300/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244717338,"owners_count":20498284,"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":[],"created_at":"2024-11-26T06:14:23.771Z","updated_at":"2026-04-14T05:31:10.907Z","avatar_url":"https://github.com/noahc3.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cumulus - Game Server Control Panel \u0026 Daemon\n\n**Authors: Noah Curoe, Mia Battad**\n\nImplementation of core technologies required for deploying and communicating with game servers hosted in the\nCloud. The final implementation uses TypeScript, React, TailwindCSS, Vite and Bun for the frontend stack, Go for the daemon software, and Python with FastAPI for some auxiliary API functions for interacting with Hetzner Public Cloud.\n\n## Video Demo\n\nDemonstration of deploying a new Minecraft server to Hetzner Public Cloud and using the web console interface\n\n[Cumulus-Demo.webm](https://github.com/noahc3/cumulus-comp4300/assets/6082749/004278a2-75e9-4057-8bee-3347a39150dc)\n\n\n## How to run\n\nThere are three components to this project:\n\n- Frontend\n- Daemon\n- Hetzner Auxiliary API\n\n**Important: Only Ubuntu 22.04 and MacOS have been tested!** To run on Windows, please use WSL2 with Ubuntu.\n\n### Running the Frontend\n\nBun is an alternative JavaScript runtime and package manager which was used to create this project.\n\n- Install [bun](https://bun.sh/docs/installation)\n- Open a terminal in the `/project/frontend` directory\n- Run `bun install`\n- Start the dev server with `bun run dev`.\n\nNodejs may work, but is untested.\n\n### Running the daemon\n\nThe daemon is written in Go.\n\n- Install [go](https://go.dev/doc/install)\n- Open a terminal in the `/project/final/cloud` directory\n- Start the daemon with `go run . --host \u003cip\u003e --port \u003cport\u003e`\n    - host and port are optional, will default to `0.0.0.0:1111`\n- Build a production binary with `go build`\n\n### Running the Hetzner Auxiliary API\n\nThe auxiliary is built with Python and FastAPI.\n\n- Install [Python](https://www.python.org/downloads/)\n    - Note: Tested with Python 3.10.12, other versions may work but are untested\n- Open a terminal in the `/project/final/hetznerfuncs` directory\n- Install uvicorn: `pip install uvicorn`\n- Install other required packages: `pip install -r requirements`\n- Start the server with `uvicorn main:app --reload`\n\n**Important:** You must create a file named `.env` in this directory and supply a Hetzner API key:\n\n```env\n# hetznerfuncs/.env\n\nHETZNER_TOKEN=\u003capi-key\u003e\n```\n\nYou can create a Hetzner Cloud account here: \u003chttps://www.hetzner.com/cloud/\u003e\n\nBilling is hourly so it isn't expensive to launch some test servers, but we recommend just watching the demo\nvideo if you don't want to throw away money.\n\nYou will need to adjust the `main.py` script to specify your own SSH key (or remove it, Hetzner will email you\na root password).\n\n## Other Files\n\nWhile the above is all you need to worry about for running the final implementation of our project, we also\ninclude source code for the test programs we wrote during the exploration phase of our project, detailed below.\n\n- **docs/report**: Source for our project report. This is a mix of Markdown and Latex rendered to PDF using Pandoc.\n- **project/cloud**: Our initial cloud daemon with some bugs, we do not recommend running this.\n- **project/final** Directory with our final cloud daemon and hetzner functions\n    - **project/gs-go-daemon.service** - systemd service file to launch the daemon automatically. Pulled in the cloud-init.yml script.\n- **project/frontend** - Full frontend including testing interfaces\n- **project/httpclient** - Simple WS client we used to generate latency data results.\n- **project/middleware** - Simple middleware server we used to generate latency data results.\n- **project/mockprocess** - Two simple programs, one to echo any input that is typed, and another which will read a mock log file and spit it out to standard output at specified lines per second.\n- **project/tcpclient** - Test TCP client\n- **project/udpclient** - Test UDP client\n- **project/wsclient** - Test WebSocket client\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoahc3%2Fcumulus-comp4300","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoahc3%2Fcumulus-comp4300","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoahc3%2Fcumulus-comp4300/lists"}