Markus Michalski FAQ

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

English Version

Zurück zur Übersicht

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
  1. Bundle in config/bundles.php registrieren:

    Mmd\SyliusAltchaPlugin\MmdSyliusAltchaPlugin::class => ['all' => true],
    
  2. 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"
    
  3. Setup-Befehl ausführen und die Widget-Assets veröffentlichen:

    bin/console mmd:altcha:setup
    bin/console assets:install
    

    mmd:altcha:setup fü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 einem composer update. Sind noch Sylius-eigene Migrationen offen, bricht er ab und weist dich an, zuerst doctrine:migrations:migrate auszuführen. Außerdem prüft er, ob die Routen aus Schritt 2 importiert sind, und gibt andernfalls den passenden Snippet aus. In dein config/-Verzeichnis schreibt er nie selbst. Das herkömmliche doctrine:migrations:migrate funktioniert 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:install genügt, sylius:theme:assets:install ist nicht nötig, und Einstellungen wie base_urls (CDN) oder version_strategy greifen hier nicht. Bei einer Content-Security-Policy musst du 'self' in script-src erlauben.

  4. 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:

  1. Alle mmd_altcha_widget()-Aufrufe und mmd_altcha.widget*-Hooks aus deinen Templates entfernen, ebenso die Cronjobs für mmd:altcha:purge und mmd:altcha:update-disposable-domains.

  2. 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'
    
  3. Routen-Imports und Bundle-Eintrag aus config/bundles.php entfernen, danach composer remove mmd/sylius-altcha-plugin ausfü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 Zeilen Mmd\SyliusAltchaPlugin\Migrations\... aus der Tabelle doctrine_migration_versions entfernen.