{"id":14982917,"url":"https://github.com/cluster-queue/core","last_synced_at":"2026-03-07T18:32:17.666Z","repository":{"id":56954276,"uuid":"314309797","full_name":"cluster-queue/core","owner":"cluster-queue","description":"core application to be used in the background - only for core development. you may watch out for the dummy package","archived":false,"fork":false,"pushed_at":"2020-12-03T22:53:42.000Z","size":167,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"unstable","last_synced_at":"2025-03-10T22:59:17.780Z","etag":null,"topics":["bash","cli","cluster-management","cluster-queue","dependency","dummy","php","scp","server-config","setup","shell","ssh"],"latest_commit_sha":null,"homepage":"","language":"PHP","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/cluster-queue.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-11-19T16:43:44.000Z","updated_at":"2020-12-03T22:17:43.000Z","dependencies_parsed_at":"2022-08-21T08:50:17.705Z","dependency_job_id":null,"html_url":"https://github.com/cluster-queue/core","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/cluster-queue/core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cluster-queue%2Fcore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cluster-queue%2Fcore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cluster-queue%2Fcore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cluster-queue%2Fcore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cluster-queue","download_url":"https://codeload.github.com/cluster-queue/core/tar.gz/refs/heads/unstable","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cluster-queue%2Fcore/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30226247,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T18:12:09.766Z","status":"ssl_error","status_checked_at":"2026-03-07T18:11:58.786Z","response_time":53,"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":["bash","cli","cluster-management","cluster-queue","dependency","dummy","php","scp","server-config","setup","shell","ssh"],"created_at":"2024-09-24T14:06:24.769Z","updated_at":"2026-03-07T18:32:17.611Z","avatar_url":"https://github.com/cluster-queue.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"cluster-queue - core\n============================================================\n\nDE | [EN](README_EN.md)\n\n\n\n\u003c!-- doctoc --title 'Inhalt' README.md --\u003e\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\nInhalt\n\n- [cluster-queue - core - Projekt](#cluster-queue---core---projekt)\n  - [Ausgangssituation](#ausgangssituation)\n    - [Basis zum Ausprobieren](#basis-zum-ausprobieren)\n  - [Installation](#installation)\n    - [Anforderungen](#anforderungen)\n  - [Beschreibung](#beschreibung)\n  - [Benutzung von `php-cluster-queue`](#benutzung-von-php-cluster-queue)\n    - [Parameter Beschreibung](#parameter-beschreibung)\n    - [Konfiguration](#konfiguration)\n      - [Die `default` und nodes `configs` Konfiguration.](#die-default-und-nodes-configs-konfiguration)\n  - [Beispiel HA Cluster [ Web | DB ] Server Infrastruktur](#beispiel-ha-cluster--web--db--server-infrastruktur)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n\n\ncluster-queue - core - Projekt\n============================================================\n\nEinrichtung einer Konfiguration um einen oder mehrere server oder server cluster\neinrichten zu können. Z.B HA Cluster mit DRBD/ Heatbeat für DB und WWW Server\nkonfigurieren.\n\n`core` - Projekt\n\nDas [cluster-queue/dummy](http://github.com/cluster-queue/dummy) Projekt ist für die\nreine Benutzung eines eigenen Projektes ausgelegt das diese Quellen nutz.\nDie Dokumentation liegt je nach Version, nach der Installation des `dummy` Projektes bei.\n\n\nAusgangssituation\n------------------------------------------------------------\n\nHA Cluster mit DRBD/ Heatbeat für DB und WWW Server einrichten/ installieren.\n\nInstallationreihenfolgen und Abhängigkeiten über einen Server hinweg bei der\nKonfiguration.\n\nMehr als zwei Server nicht automatisiert zu installieren bzw. zu konfigurieren\ndauert oft genau so lange wie ein mal konfiguriert und dann auf seine Plattformen aus zu\nrollen was dann für neue Server automatisiert übertragbar ist.\n\nSicherlich kenne ich das ein oder andere Tool vielleicht auch nicht. Auch über\ndocker wurde nachgedacht, aber die Individualisierung und Anpassbarkeit der\nServer steht nach wie vor im Vordergrund.\n\nOffen ist noch der Blick Richtung\n- [FAI](https://fai-project.org/cluster/) und\n- [Ansible](http://ansible.com)\num **High End** Massen- Installationen/ Konfigurationen eine Antwort zu geben.\n\nMit diesem Programm soll der Konfigurations Prozess vereinfacht/ automatisiert werden\nkönnen.\n\n- Lokale Konfigurationen für alle Server (fest oder generiert) zu Servern überspielen\n- Shell Kommandos/ Services einrichten verwalten\n- Über mehrere Server hinweg Reihenfolgen bei der Ausführung beachten.\n\nGgf. folgen noch Konfigurationen mit denen der Installationsprozess auch mit\ndiesem Programm erledigt werden kann.\n\n\n### Basis zum Ausprobieren\n\n+ [Virtual Box](http://www.virtualbox.org):\n\n  - 4 x Debian 10 VM's\n  - Mit je einer weiteren Daten Festplatte gleicher Grösse für DRBD\n  - 2 Netzwerk Karten (1x (eg.via dhcp) internet fähig, 1x interne Kommunikation)\n  - Minimal installation, nur SSH wählen; VM 4 x Klonen, je hostnamen ändern,\n    reboot\n  - drbd, heartbeat auf allen Nodes installieren\n\n+ DB Gruppe 2 x mit MariaDB.\n+ WWW Gruppe 2 x nginx, php, php-fpm...\n+ Installationsreihenfolgen **unbedingt** synkron halten.\n+ 'root' und 'linux' User mit ssh pub keys erreichbar machen.\n\n\n\nInstallation\n------------------------------------------------------------\n\nUm die hier befindlichen Programme nutzen zu können müssen Abhängigkeiten\ninstalliert werden.\n\n    cd ./\n\n    php7.3 /path/to/composer.phar install\n\n    # Falls nicht ausführbar:\n    chmod +x php-cluster-queue\n\n    # Starten:\n    # ./php-cluster-queue --[mehr siehe unten]\n\nComposer? \"A Dependency Manager for PHP\" [Homepage](https://getcomposer.org),\n[Download](https://getcomposer.org/download).\n\n\n### Anforderungen\n\nAnforderungen an dieses Programm:\n\n    php \u003e= 7.3, 7.4, 8.0 ...\n    php-cli\n    ssh\n    scp\n    bash | zsh | sh (ash|dash)\n\n- Wichtig: Bitte sicherstellen das `php -v` min. php7.3 liefert.\n  Ansonnsten die Shebang von `php-cluster-queue` anpassen oder entsprechende Pakete\n  installieren.\n\n- Wo läuft 'php-cluster-queue'?\n  Auf jedem Betriebssystem/ OS wo `php` als auch ggf. Shell scripte\n  (`sh`/ `bash`) in der Console ausgeführt werden können als auch `scp` und `ssh`.\n\n- Vorzugweise ein Unix/Linux basierendes OS. Für andere Betriebssysteme liegen\n  keine Quellen bei.\n\n- Ziel Systeme: Linux (Z.B. in einer 'Virtual Box', 'VMWare' Umgebung, Echte\n  Rechner). U.a. getestet unter debian (debian 10, Buster) in 'Virtual Box'.\n\n\n\nBeschreibung\n------------------------------------------------------------\n\nDas Programm kann auf Basis von \"Node\"/ Server Konfigurations- Dateien\nKonfigurationen zu bestimmten Nodes/Servern kopieren, aus Templates individuelle\nKonfigurationen erstellen und dann zum jeweiligen oder zu allen Nodes/Servern\nKopieren als auch individuelle Kommandos ausführen. Aktions- Reihenfolgen sind\ngruppiert bestimmbar weshalb dieses Projekt enstanden ist.\n\nAusgangspunkt sind folgene Basis- Aktionen:\n\n+ `deploy` Zum Remote Node/ Server Kopieren\n+ `archive` Vom Remote Node/ Server Kopieren (Archivierung z.B. nach\n  `archive/NODENAME/`)\n+ `actions` Shell Kommandos die auf einem bestimmten oder allen Remote Node/s\n  oder auch lokal ausgeführt werden sollen.\n\nKonfigurations Datei (und Aktion): `defaults` gilt für alle Nodes\n(`src/config/nodesconfigs_CONFIGNAME_default.php`). **Muss nicht vorhanden sein.**\n\nDie Node Konfigurations Datei (und Aktion): `configs`\n(`src/config/nodesconfigs_CONFIGNAME.php`) für individuelle Schritte pro Node\nKonfiguration.\n\nDie Ausführungsreihenfolge ist innerhalb der Node/s Konfiguration bestimmbar.\n\nZ.B:\n\n    # Variante 1:\n    copy skel/generic/etc/mysql/someconfig root@remoteA:/etc/mysql/conf.d/someconfig\n    copy skel/generic/etc/mysql/someconfig root@remoteB:/etc/mysql/conf.d/someconfig\n    remoteB: restart mysql\n    remoteA: restart mysql\n\n    # Variante 2:\n    copy skel/generic/etc/mysql/someconfig root@remoteA:/etc/mysql/conf.d/someconfig\n    remoteA: restart mysql\n    copy skel/generic/etc/mysql/someconfig root@remoteB:/etc/mysql/conf.d/someconfig\n    remoteB: restart mysql\n\nNatürlich müssen die echten Kommandos für das entsprechende Ziel- Betriebssystem\nin den Konfigurationen hinterlegt werden.\n\n\n\nBenutzung von `php-cluster-queue`\n------------------------------------------------------------\n\nBeispiel Aufruf:\n\n    ./php-cluster-queue \\\n        --config=debnode --action=defaults --execute --confirm # --no-debug\n                    |               |           |       |          |\n                    |               |           |       |          +\n                    |               |           |       |          Debug/Reporting auf das\n                    |               |           |       |          Minimum reduzieren.\n                    |               |           |       |\n                    |               |           |       + Jedes Kommando bestätigen.\n                    |               |           |\n                    |               |           + Führe Kommandos wirklich aus.\n                    |               |\n                    |               + Welche Aktion soll ausgeführt werden?\n                                      create|build|defaults|configs|deploy|archive|actions\n                    |\n                    + Welche Konfigurations Kombination soll geladen werden?\n                      `nodeconfigs_**NAME**.php` und `nodeconfigs_**NAME**_default.php`\n                      Gruppen Name für alle Nodes. In diesem Beispiel `debnode` für die\n                      4 Test Nodes/ Server:\n                        - Web Nodes: `debnode01` `debnode02`\n                        - DB Nodes: `debnode03`,`debnode04`,\n\n\nVerwendete Beispiel- Konfigurationen:\n\n+ Node/s Konfigurationen:\n\n  `src/config/nodeconfigs_debnode.php`\n\n+ Konfigurationen die für alle Nodes/ Server in `debnode` gelten. Aktion `defaults`:\n\n  `src/config/nodeconfigs_debnode_default.php`\n\n  Muss nicht vorhanden sein wenn man keine allgmeinen Aktionen für alle nodes hat.\n\n\n\n### Parameter Beschreibung\n\n    --config=[ NAME ]\n\n        Es müssen immer zwei Konfigurations Datei-Paare existieren:\n        Individuell: `nodeconfigs_NAME.php` und\n        Alle Nodes : `nodeconfigs_NAME_default.php`\n\n\n    --action=[ defaults|configs|create|build|deploy|archive|actions ]\n\n        `defaults`  : `deploy`, `archive` oder `actions` auf **allen** Nodes anwenden.\n\n        `create`|`build`: Templates aus `skel/` nehmen, rendern (Suchen/Ersetzen anwenden)\n                          und nach `build/` kopieren. Für eine spätere Übertragung (Sofern\n                          in der Node Konfiguration angegeben).\n\n        ---\u003e custom (Abfall Produkt; Kann, muss aber nicht Sinnvoll sein) --\u003e--\n\n        `deploy` : Node und default Konfiguration laden aber nur alle `deploy` Aktionen anwenden.\n\n        `archive`: Node und default Konfiguration laden aber nur alle `archive` Aktionen anwenden.\n\n        `actions`: Node und default Konfiguration laden aber nur alle `actions` Aktionen anwenden.\n\n        --\u003c--\n\n\n    --execute\n\n        Flag um das echt Ausführen zu erlauben.\n        Standartmässig wird alles nur Protokolliert (`log/`) als auch nach `stdout`\n        ausgegeben.\n\n\n    --confirm\n\n        Flag um vor jeder aktion (scp|ssh) eine Bestätigung ein zu holen.\n\n\n    --no-debug\n\n        Redefreudingkeit auf das Minimum reduzieren.\n        In der `actions` Konfiguration können auch Kommentare hinterlegt werden um\n        zusammenspiele bei der Ausfürung von Aktionen mit aus zu geben. Sehr Sinnvoll in\n        Verbindung mit `--confirm`. Wem das lästig ist kann es aus machen.\n        Mit Raute/Hashtag Prefix können in der `actions` Konfiguration Kommentare\n        hinterlegt werden welche grundsätzlich vor Ausführung gefiltert aber ausgegeben\n        werden können.\n\n\n### Konfiguration\n\n\n#### Die `default` und nodes `configs` Konfiguration.\n\nDie `nodeconfigs_NAME_default.php` Konfiguration gilt für jeden Node welcher in der Node\nKonfiguration (NAME, `nodeconfigs_NAME.php`) angegeben ist.\n\nHier werden nur Aktionen konfiguriert. Die Konfigurations- Struktur ist mit der Node\nKonfiguration (Bereich `actions`) vergleichbar bzw. identisch.\n\nEs werden verschiedene Job Konfigurationen erstellt die verschiedene Aufgaben übernehmen\nkönnen. Z.B (type): `deploy`, `archive`, `execute`.\n\nJede Job Konfiguration beinhaltet im Aktions- Code z.B `'debnode01:defaultdeploy'` den\nprefix des aktuellen Hostnamen/Node um den es gerade geht: 'prefix:individualcode'. Bei\nder `default` Konfiguration wird `NODECURRENTPUB` dann ersetzt um auch ggf. Abhängigkeiten\nin der Ausführungsreihenfolge ändern zu können.\n\n`deploy`: Quell- Dateien müssen im Ordner `skel/` hinterlegt sein.\n\n`archive`: Zieldatein sollten in einen zentralen Ordner gehen. Z.b. `archive/NODECURRENTPUB/`\n\n\n**Beispiel** `deploy`:\n\nStandard Aktions- Konfiguration, Typ:deploy. All diese Werte (je Typ) sollten existieren,\nkönnen im `value` allerdings leer bleiben. Leere Job Konfigurationen können helfen\nAktionsreihenfolgen besser zu definieren.\n\n    return array(\n        // Aktionen die für alle Nodes gelten\n        'actions' =\u003e array(\n            // Job 1:\n            // NODECURRENTPUB wird ersetzt werden.\n            'NODECURRENTPUB:defaultdeploy' =\u003e array(\n                'type' =\u003e 'deploy',\n                'value' =\u003e array(\n                    // from local 'skel/' =\u003e to remote\n                    '/testfile_NODECURRENTPUB.txt' =\u003e '/tmp/testfile.txt',\n                ),\n\n                // Wann soll dieser Job greifen:\n                'posway' =\u003e 'after',\n\n                // An welcher Stelle soll dieser Job eingereiht werden.\n                // z.B. 'debnode03:defaultdeploy' -\u003e Nach debnode03:defaultdoploy ausführen.\n                // ZZt: Reihenfolge: Job 1 = Pos:1/Node\n                'poskey' =\u003e null,\n            ),\n    ...\n\n\n**Sonderfall** `deploy`:\n\nIn `skel/` können sich auch Templates befinden die bei Programmstart gewandelt (siehe\n`'replace'` in der Node Konfiguration) und nach `build/` kopiert werden.\n\nDiese Dateien können wie folgt in den deploy Prozess mit einbezogen werden:\n\n    // Job 2\n    'debnode01:deploybuilds' =\u003e array(\n        'type' =\u003e 'deploy',                     Aktion: deploy\n        'value' =\u003e array(\n            'files' =\u003e true                     Soll als eigener Job konfiguriert werden.\n        ),\n    ...\n\n\n`execute`: Es wird eine Liste von Kommandos hinterlegt die per default remote mit dem\n`root` Benutzer ausgeführt werden.\n\nMuss man allerdings lokal zuvor etwas ausführen oder soll ein anderer Remote- Benutzer\ngenutzt werden wird im array key das Kommando hinterlegt und als value stehen folgende\nOptionen zur Verfügung:\n\n    // Job N excecute\n    ...\n    'type' =\u003e 'execute',\n    'value' =\u003e array(\n        'remote command 1', // ...\n\n        'cmd2' =\u003e array(                    Wird zu: ssh username@remote 'cmd2' (remote)\n            'type' =\u003e 'remote' | 'local'\n\n            // Benutzer der das Kommando Remote ausführen soll.\n            // SSH Verbindung sollte zuvor geprüft sein.\n            'user' =\u003e 'username',\n        ),\n        // Z.B: 'local': ... da das Komando lokal ausgeführt werden soll!\n        'scp a user@remote:/tmp/a' =\u003e array('type'=\u003e'local'),\n        // versus\n        'cp /tmp/a /tmp/b' =\u003e array('type'=\u003e'remote'),\n\n\nBeispiele sind in: 'src/config/nodeconfigs_ **demo | debnode** [ _default ].php' zu finden.\n\n\n\nBeispiel HA Cluster [ Web | DB ] Server Infrastruktur\n------------------------------------------------------------\n\nHA [ Web | DB ] Server Infrastruktur Install/ Updates/ Maintainance / Docs\n\nDie hier befindlichen Skripte/ Dokumentation helfen ein HA Cluster Server setup fast\nvollautomatisch bereit zu stellen. Hinweise zu liefern wie es funktioniert oder\nwie aktualisierungen vorgenommen werden können.\n\nBeispiel- Serveraufstellung ([PDF](docs/assets/HA_Netz_debnode.pdf))\n\n\n![HA_Netz.png](docs/assets/HA_Netz_debnode.png)\n\n\nIn der [Anleitung](https://www.howtoforge.de/anleitung/wie-man-mariadb-high-availability-mit-heartbeat-und-drbd-auf-ubuntu-1604-lts-einrichtet/)\nwird Schrittweise erklärt wie man ein HA Setup mit DRBD/ Heatbeat herstellen kann.\n\nFür einen Testcase liegen Konfigurations- Dateien bei (config/**debnode**) wie man zwei\nDB und Web Server Ausfallsicher/ Hoch verfügbar (HA) machen kann (z.B lokal zum testen\nmittels Virtual Box).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcluster-queue%2Fcore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcluster-queue%2Fcore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcluster-queue%2Fcore/lists"}