{"id":18423196,"url":"https://github.com/specht/workspace","last_synced_at":"2026-01-23T00:56:32.756Z","repository":{"id":258687696,"uuid":"871212733","full_name":"specht/workspace","owner":"specht","description":null,"archived":false,"fork":false,"pushed_at":"2024-10-24T17:48:27.000Z","size":91577,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-25T07:32:03.364Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","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/specht.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-10-11T13:46:41.000Z","updated_at":"2024-10-24T17:48:31.000Z","dependencies_parsed_at":"2024-10-27T15:57:40.404Z","dependency_job_id":null,"html_url":"https://github.com/specht/workspace","commit_stats":null,"previous_names":["specht/workspace"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specht%2Fworkspace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specht%2Fworkspace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specht%2Fworkspace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specht%2Fworkspace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/specht","download_url":"https://codeload.github.com/specht/workspace/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248732295,"owners_count":21152842,"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-06T04:35:57.236Z","updated_at":"2026-01-23T00:56:32.718Z","avatar_url":"https://github.com/specht.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hackschule Workspace\n\nDer Workspace der Hackschule ist eine Entwicklungsumgebung, die speziell für den Einsatz in der Schule konzipiert wurde. Sie läuft vollständig im Browser und benötigt keine Installation. Der Workspace enthält alle notwendigen Werkzeuge, um Programme in verschiedenen Programmiersprachen zu schreiben, zu kompilieren und auszuführen. Der wesentliche Vorteil ist, dass Schülerinnen und Schüler in der Schule und zu Hause dieselbe Umgebung vorfinden und ihre Dateien an einem zentralen Ort speichern können.\n\nDer Workspace am Gymnasium Steglitz ist hier zu finden: \u003ca href='https://workspace.hackschule.de'\u003ehttps://workspace.hackschule.de\u003c/a\u003e.\n\n## Funktionen\n\n- Programmieren: Fortran, COBOL, BASIC, Pascal, C, Smalltalk, C++, Common Lisp, Python, Lua, Ruby, Java, JavaScript, Netwide Assembler, C#, Go, Dart, Rust\n- wissenschaftliche Dokumente setzen mit LaTeX\n- moderne und portable HTML-Präsentationen erstellen mit shower.js\n- den Umgang mit der Kommandozeile lernen (Bash)\n- Versionsverwaltung mit Git üben\n\n## Installation (lokal)\n\nFür die lokale Installation benötigst du Docker (mit docker-compose), Git und Ruby. Die Installation wurde unter Linux getestet, sollte aber auch unter Windows funktionieren.\n\n**Klonen des Repositories**\n\n```bash\ngit clone https://github.com/specht/workspace.git\n```\n**Anpassung der Konfiguration**\n\nKopiere die Datei `src/ruby/credentials.template.rb` nach `src/rubyt/credentials.rb` und nimm ein paar Anpassungen vor:\n\n- `DEVELOPMENT` sollte `true` sein\n- `PATH_TO_HOST_DATA` sollte einen absoluten Pfad zum Datenverzeichnis beinhalten (leg einfach ein Unterverzeichnis `data` an und gib den absoluten Pfad an)\n- `WEBSITE_HOST` wird erst wichtig, wenn die Seite tatsächlich auf einem Server gehostet wird\n- die E-Mail-Zugangsdaten sind im Development-Modus nicht relevant\n- trag deine E-Mail-Adresse bei `ADMIN_USERS` ein\n\n**Einladung hinzufügen**\n\nLege die Datei `src/invitations/dev.txt` an (der Dateiname ist egal) und trage die folgenden Zeilen ein (mit deinen Daten):\n\n```\n\u003e Developer\nMax Mustermann \u003cmax@example.com\u003e\n```\n\nWir haben damit eine Gruppe »Developer« mit einem Mitglied »Max Mustermann« angelegt. Die E-Mail-Adresse wird später für die Anmeldung benötigt – später könnte man hier Klassen oder Lerngruppen anlegen.\n\n**Webserver-Image bauen**\n\n```bash\n./config.rb build\n```\n\n**Webserver starten**\n\n```bash\n./config.rb up\n```\n\nWenn der Workspace gestartet ist, kannst du ihn im Browser unter \u003ca href='http://localhost:8025'\u003ehttp://localhost:8025\u003c/a\u003e erreichen. Du solltest dich mit deiner E-Mail-Adresse (oder einem eindeutigen Präfix) und dem Code 123456 (fester Code in der Development-Umgebung) anmelden können. Um den eigentlichen Workspace (Visual Studio Code) zu starten, ist ein weiterer Schritt notwendig:\n\n**Workspace-Image bauen**\n\nDas Bauen des Workspace-Images dauert relativ lange (bei mir ca. 30 Minuten), da alle notwendigen Pakete heruntergeladen und installiert werden müssen. Das Image ist ca. 13.5 GB groß.\n\n```bash\n./build-image.sh\n```\n\nFalls der Platz einmal knapp werden sollte, lohnt es sich, zwischendurch mal den eisernen Besen zu schwingen:\n\n```bash\ndocker system prune\n```\n\n**TIC-80 compilieren**\n\nWenn du TIC-80 nutzen möchtest, musst du es einmalig kompilieren. Dazu musst du folgendes Skript ausführen:\n\n```bash\n./build-tic80.sh\n```\n\n## Betrieb auf einem Server\n\nDer Workspace ist für den Betrieb auf einem Server für eine Schule konzipiert. Die Installation funktioniert im wesentlichen genau wie die lokale Installation, aber es gibt einen wichtigen Punkt zu beachten: Der Webserver hat vollen Zugriff auf Docker, da er Container starten und stoppen können muss. Das bedeutet, dass der Workspace isoliert auf einem eigenen Server laufen sollte.\n\nIch betreibe dafür einen Cloud-Server bei Hetzner mit den folgenden Eckdaten:\n\n- Shared vCPU x86 (Intel/AMD)\n- Standort Falkenstein\n- 80 GB Festplatte\n- 100 GB externes Volume\n\nJe nach Bedarf kann man flexibel zwischen verschiedenen Servern wechseln. Wenn viel los ist und viel gearbeitet wird, verwende ich einen Server mit 16 Kernen und 32 GB RAM für ca. 65 € / Monat. Wenn weniger los ist, z. B. in den Ferien, reicht auch ein Server mit 4 Kernen und 8 GB RAM für ca. 8 € / Monat. Dafür wird der Server einfach über die Cloud Console heruntergefahren, skaliert und neu gestartet. Der ganze Vorgang dauert eine bis zwei Minuten und die Abrechnung erfolg minutengenau, so dass man die Kosten gut im Griff hat.\n\nFür die Installation auf dem Cloud Server gibt es die Datei `cloud-config.yaml`, die man beim Erstellen des Servers mit angeben kann (vorher bitte den Nutzernamen `micha` ggfs. anpassen und den eigenen Public Key eintragen).\n\nDas TLS-Frontend wird ebenfalls in einem Container betrieben, der über Docker Compose gestartet wird. Dazu einfach die Datei `frontend-docker-compose.yaml` in ein Verzeichnis `frontend` als `docker-compose.yaml` kopieren und dort starten:\n\n```bash\ndocker compose up -d\n```\n\nIn der `config.rb` sollten die Werte für `VIRTUAL_HOST`, `LETSENCRYPT_HOST` und `LETSENCRYPT_EMAIL` angepasst werden, damit das Frontend automatisch Letsencrypt-Zertifikate anfordern kann.\n\n## Mitmachen\n\nWenn du Fragen, Hinweise, Wünsche oder Anregungen hast, kannst du gerne ein Issue aufmachen oder einen Merge Request schicken. Oder schreib einfach eine Mail an \u003ca href='mailto:specht@gymnasiumsteglitz.de'\u003especht@gymnasiumsteglitz.de\u003c/a\u003e. Ich freue mich über jede Art von Feedback.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspecht%2Fworkspace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspecht%2Fworkspace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspecht%2Fworkspace/lists"}