ALTCHA: Installation und Betrieb
ALTCHA Spam-Schutz für Sylius - Installation per Composer (Packeton), Update, Cronjobs für Purge und Wegwerf-Domain-Liste, Deinstallation in der richtigen Reihenfolge
ALTCHA: Installation und Betrieb
Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net
Installation
Das Repository ist privat und wird über Packeton bereitgestellt (
https://packeton.markus-michalski.net). Die Zugangsdaten bekommst du nach dem Lizenzkauf bzw. der Freigabe.
{ "repositories": [{ "type": "composer", "url": "https://packeton.markus-michalski.net" }] }
composer require mmd/sylius-altcha-plugin
-
Bundle in
config/bundles.phpregistrieren:Mmd\SyliusAltchaPlugin\MmdSyliusAltchaPlugin::class => ['all' => true], -
Routen importieren, zum Beispiel in
config/routes/mmd_sylius_altcha.yaml:mmd_sylius_altcha_admin: resource: "@MmdSyliusAltchaPlugin/config/routes/admin.yaml" mmd_sylius_altcha_shop: resource: "@MmdSyliusAltchaPlugin/config/routes/shop.yaml" -
Setup-Befehl ausführen und die Widget-Assets veröffentlichen:
bin/console mmd:altcha:setup bin/console assets:installmmd:altcha:setupführt ausschließlich die Migrationen dieses Plugins aus, nie die deiner Anwendung oder anderer Plugins. Der Befehl ist idempotent: Gibt es keine neue Migration, passiert nichts, auch nicht nach einemcomposer update. Sind noch Sylius-eigene Migrationen offen, bricht er ab und weist dich an, zuerstdoctrine:migrations:migrateauszuführen. Außerdem prüft er, ob die Routen aus Schritt 2 importiert sind, und gibt andernfalls den passenden Snippet aus. In deinconfig/-Verzeichnis schreibt er nie selbst. Das herkömmlichedoctrine:migrations:migratefunktioniert weiterhin als Alternative. Führe den Befehl mit demselben Benutzer aus wie deine übrigen Konsolenbefehle; in Skripten ergänzt du--no-interaction.Die Widget-Scripts werden immer aus
<base path>/bundles/mmdsyliusaltchaplugin/ausgeliefert, nie über Symfony-Asset-Packages oder Sylius-Themes.assets:installgenügt,sylius:theme:assets:installist nicht nötig, und Einstellungen wiebase_urls(CDN) oderversion_strategygreifen hier nicht. Bei einer Content-Security-Policy musst du'self'inscript-srcerlauben. -
Cronjobs einrichten (siehe Cronjobs): Das Plugin speichert kurzlebige Einträge für Replay-Schutz und Rate-Limiting, die sonst nichts wieder löscht.
Solange du im Admin keinen Channel aktivierst, ist nichts geschützt (siehe Konfiguration). Die Storefront-Hooks und Admin-Grids registrieren sich selbst; darüber hinaus musst du nichts importieren.
Update
composer update mmd/sylius-altcha-plugin
bin/console mmd:altcha:setup --no-interaction
bin/console cache:clear
Den Setup-Befehl nach jedem Update erneut auszuführen ist immer unbedenklich: Ohne neue Migration passiert nichts.
Cronjobs
Das Plugin speichert kurzlebige Einträge für Replay-Schutz und Rate-Limiting. Sie werden ausschließlich vom Purge-Cronjob gelöscht, er gehört deshalb zur Grundinstallation.
| Befehl | Empfohlenes Intervall | Beschreibung |
|---|---|---|
bin/console mmd:altcha:purge |
täglich | Löscht abgelaufene Einträge des Replay-Schutzes (bereits verwendete Challenges), abgelaufene Rate-Limit-Einträge (--rate-limit-retention, Standard 48 Stunden) und Gibberish-Log-Einträge, die älter als 30 Tage sind (--gibberish-log-retention) |
bin/console mmd:altcha:update-disposable-domains |
wöchentlich | Aktualisiert die Wegwerf-Domain-Liste aus der Upstream-Quelle; nur nötig, wenn die Wegwerf-E-Mail-Prüfung aktiv ist. Bei einem Netzwerkfehler oder einer leeren Antwort bleibt die bisherige Datei unverändert erhalten. |
Beispiel für die Crontab des Benutzers, unter dem auch deine übrigen Konsolenbefehle laufen (Pfad anpassen):
# täglich um 03:15 Uhr: abgelaufene Replay-, Rate-Limit- und Gibberish-Log-Einträge löschen
15 3 * * * cd /var/www/shop && bin/console mmd:altcha:purge --no-interaction
# sonntags um 03:30 Uhr: Wegwerf-Domain-Liste aktualisieren (nur bei aktivierter Wegwerf-E-Mail-Prüfung)
30 3 * * 0 cd /var/www/shop && bin/console mmd:altcha:update-disposable-domains --no-interaction
--rate-limit-retention=<Sekunden>muss größer sein als das längste Rate-Limit-Zeitfenster, das du konfigurierst (höchstens 24 Stunden). Sonst werden Einträge gelöscht, die noch mitgezählt werden müssten.
Der Setup-Befehl (mmd:altcha:setup) ist kein Cronjob, sondern ein einmaliger, idempotenter Schritt bei Installation und Update.
Deinstallation
Die Reihenfolge ist wichtig, weil Doctrine die Migrationen nur kennt, solange das Bundle noch registriert ist:
-
Alle
mmd_altcha_widget()-Aufrufe undmmd_altcha.widget*-Hooks aus deinen Templates entfernen, ebenso die Cronjobs fürmmd:altcha:purgeundmmd:altcha:update-disposable-domains. -
Bei noch registriertem Bundle die sieben Migrationen zurückrollen, die neueste zuerst:
bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20261007090000' bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20261003090000' bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20261002090000' bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20261001090000' bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20260930140000' bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20260930120000' bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20260930100000' -
Routen-Imports und Bundle-Eintrag aus
config/bundles.phpentfernen, danachcomposer remove mmd/sylius-altcha-pluginausführen.
Du kannst die sechs Tabellen
mmd_sylius_altcha_*auch von Hand löschen, statt die Migrationen zurückzurollen. Dann musst du aber zusätzlich die sieben passenden ZeilenMmd\SyliusAltchaPlugin\Migrations\...aus der Tabelledoctrine_migration_versionsentfernen.