pro-kasch/archery-cms

Open-source club management system for archery associations, built with Symfony.

Maintainers

Package info

gitlab.com/pro-kasch/archery-cms

Issues

Type:project

pkg:composer/pro-kasch/archery-cms

Transparency log

Statistics

Installs: 22

Dependents: 0

Suggesters: 0

Stars: 0

1.2.0 2026-05-29 16:55 UTC

README

Ein CMS für Bogensportvereine.

Funktionen

  • Öffentliche Vereins-Webseite mit pflegbaren System-Seiten (Über uns, Kontakt, Impressum, Datenschutz)
  • News, Veranstaltungen und 3D-Parcours mit Stationsverwaltung
  • Mitgliederbereich mit Login per Mitgliedsnummer
  • Generisches Kontaktformular mit konfigurierbaren Feldern
  • Inhalte werden mit einem Block-Editor erfasst
  • Sensible Daten werden transparent verschlüsselt gespeichert
  • Vollständige Konfiguration im Backend

Voraussetzungen am Server

  • PHP 8.4 oder neuer
  • PHP-Extensions: sodium, intl, pdo_mysql, mbstring, zip, xml, ctype, iconv
  • MariaDB 10.11+ oder MySQL 8.0+
  • Composer 2
  • Webserver (nginx oder Apache) mit DocumentRoot auf public/

Installation

Es gibt zwei Wege. Welcher für dich passt, hängt davon ab, ob du einen SSH-Zugang zu deinem Webspace hast.

Variante A — mit SSH-Zugang (Composer)

composer create-project pro-kasch/archery-cms mein-vereins-cms
cd mein-vereins-cms
bin/console app:install

Der app:install-Befehl führt dich interaktiv durch:

  1. Datenbank-Verbindung — Host, Port, Datenbank-Name, Benutzer, Passwort werden abgefragt und sofort getestet.
  2. Vereinsname — wird in der verein- und site_layout-Tabelle als Startwert eingetragen.
  3. Admin-Konto — E-Mail und Passwort für den Backend-Login.
  4. Schema + Seed — die Migration legt alle Tabellen plus Standard-Inhalte (System-Seiten, Kontaktformular) an.
  5. .env.local — alle eingegebenen Werte werden gespeichert; ein zufälliger APP_SECRET wird erzeugt.
  6. Prod-Cache wird vorbereitet, eine var/install.lock schützt vor versehentlichem Re-Install.

Nach erfolgreichem Lauf ist das Backend unter https://deine-domain.tld/login erreichbar.

Variante B — ohne SSH-Zugang (ZIP-Upload + Web-Wizard)

Für Hoster mit reinem FTP-Zugang (typisch bei einfachen Shared-Hosting-Tarifen).

Schritt 1 — ZIP herunterladen. Die jeweils aktuellste Version liegt unter:

https://gitlab.com/pro-kasch/archery-cms/-/releases/permalink/latest/downloads/binaries/archery-cms.zip

Schritt 2 — Per FTP hochladen. Den Inhalt des ZIPs (also die Dateien innerhalb des Ordners archery-cms-x.y.z/, nicht den Ordner selbst) auf deinen Webspace laden.

Wichtig — wohin genau? Symfony erwartet, dass nur das Verzeichnis public/ über das Web erreichbar ist; der Rest der Anwendung muss außerhalb des Webroots liegen. Je nach Hosting-Setup gibt es zwei Wege:

  • Wenn dein Hoster den DocumentRoot auf einen Unterordner zeigen lässt (Plesk, eigener vServer mit nginx/Apache-Config-Zugriff): den ganzen ZIP-Inhalt auf den Webspace laden und den DocumentRoot auf das Unterverzeichnis public/ umstellen.

  • Wenn der Webroot fix auf z. B. httpdocs/ oder public_html/ zeigt (typisch bei einfachen Shared-Hosts): den Inhalt des ZIP-Ordners public/ in httpdocs/ legen und den Rest der Anwendung eine Ebene darüber ablegen (oft ~/ oder ~/private/). Anschließend den Pfad in httpdocs/index.php an die neue Lage anpassen — die Datei enthält dazu zwei require-Zeilen, deren Pfade von __DIR__ . '/../...' auf die neue Struktur zeigen müssen.

    Falls dir diese Anpassung unklar ist, frag deinen Hoster, wie der DocumentRoot konfiguriert ist — viele Anbieter erlauben inzwischen einen Wechsel auf das public/-Unterverzeichnis und ersparen dir die Verschieberei.

Schritt 3 — Berechtigungen prüfen. Die Verzeichnisse var/ und public/uploads/ müssen vom Webserver beschreibbar sein. Über die meisten FTP-Programme erreichst du das mit einem Rechtsklick → „Eigenschaften" → CHMOD 755 (oder bei Hostern, die strenger sind, auch 775). Auf modernen Shared-Hosts ist das meist schon der Default.

Hinweis bei „Permission denied"-Fehlern auf bin/console: Manche FTP-Clients und Hoster-Webuploader übernehmen das Ausführungs-Bit aus dem ZIP nicht. Falls der Wizard im 3. Schritt mit einem Fehler abbricht, setze einmalig CHMOD 755 auf bin/console. Auf das migrations/-Verzeichnis reichen normale Lese-Rechte (644 für Dateien, 755 für den Ordner).

Schritt 4 — Wizard öffnen. Im Browser deine Domain plus /install aufrufen, also z. B.

https://meinverein.at/install

Du landest auf einer Seite, die dich nach einem Installations-Token fragt. Dieser Schutz verhindert, dass jemand Fremdes deine Wizard-URL findet, bevor du selbst die Installation gestartet hast.

Schritt 5 — Token besorgen. Auf deinem Webspace wurde gerade die Datei var/install_token angelegt. Lade sie per FTP herunter, öffne sie mit einem Texteditor und kopiere den darin stehenden Wert (eine Zeichenfolge aus Buchstaben und Zahlen) in das Feld auf der Wizard-Seite.

Schritt 6 — Wizard durchlaufen. Drei Schritte, geführt:

  1. Systemprüfung — der Wizard prüft PHP-Version, Erweiterungen und Schreibrechte.
  2. Datenbank verbinden — Host, Port, Datenbank-Name, Benutzer, Passwort eintragen. Wird sofort getestet.
  3. Verein & Admin-Konto anlegen — Vereinsname festlegen, Admin-E-Mail und -Passwort wählen.

Nach dem Klick auf „Jetzt installieren" laufen Datenbankschema, Admin-User und Konfiguration durch — danach erscheint die Erfolgsseite mit Login-Link.

Schritt 7 — Mailversand einrichten. Direkt nach Login im Backend unter System → SMTP Settings die Daten deines Mail-Servers (Host, Benutzer, Passwort) eintragen und „Aktiv" anhaken. Solange das nicht gemacht ist, werden Mails verworfen — das Kontaktformular auf der Webseite tut dann nichts.

Dateiberechtigungen für var/ und public/uploads/

Wenn es Probleme mit den Berechtigungen gibt „Permission denied".

Damit dein SSH-User und der Webserver-User parallel ins Cache- bzw. Upload-Verzeichnis schreiben können, einmalig nach dem Install ACLs setzen. Ohne das schlagen z. B. asset-map:compile oder Bild-Uploads später mit „Permission denied" fehl.

sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var/ public/uploads/
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var/ public/uploads/

Die zwei Befehle setzen einmal die Default-ACL (gilt für neu angelegte Dateien) und einmal die direkte ACL (für bereits existierende). Damit haben Webserver und SSH-User dauerhaft beide Schreibrechte, unabhängig davon, wer eine Datei zuerst angelegt hat.

Update auf eine neuere Version

cd mein-vereins-cms
bin/console app:update

Voraussetzungen für Update über die Konsole:

Auf dem Server müssen composer, rsync und mysqldump verfügbar sein. Der Befehl prüft das vorab und meldet, falls etwas fehlt.

Falls beim Update etwas schief geht:

Die Backup-Datei aus Schritt 2 lässt sich mit

mysql -u DB_USER -p DB_NAME < var/backup/db-before-update-{Datum}.sql

wieder einspielen.

Die Backups in var/backup/ werden nicht automatisch gelöscht — nach erfolgreichem Update einige Tage stehen lassen, dann manuell entfernen.

Empfohlen zusätzlich: Vor größeren Updates auch das public/uploads/-Verzeichnis extern sichern (z. B. per FTP-Download). Bei einer schweren Code-Korruption müsste der Verzeichnisbaum komplett neu aufgesetzt werden — die Bilder kommen dann aus diesem externen Backup zurück.

Upload-Größe und PHP-Limits anpassen

Die Datei public/.user.ini bzw. public/.htaccess enthält die für Datei-Uploads relevanten PHP-Einstellungen.

Mitgelieferte Defaults:

DirektiveDefaultZweck
upload_max_filesize32MMaximale Größe einer einzelnen hochgeladenen Datei
post_max_size560MGesamtgröße eines POST-Requests (sollte ≥ upload_max_filesize)
memory_limit256MSpeicherlimit pro Request
max_execution_time60Sekunden, die ein Request laufen darf
max_input_time60Sekunden für das Einlesen des POST-Bodys

Reichen die Defaults nicht, Werte einfach in den entsprechenden Dateien hochsetzen.

Hinweis: Auf Shared Hosting können globale Limits des Hosters die Werte hier überschreiben — dann muss der Hoster über sein Panel höhere Werte zulassen, oder die FPM-Pool-Konfiguration angepasst werden.

E-Mail-Versand aktivieren

Standardmäßig werden Mails verworfen. Es gibt zwei Wege, das umzustellen:

Empfohlen — über das Backend. Im Admin-Backend unter System → SMTP Settings Host, Port, Benutzer, Passwort und Standard-Absender eintragen, „Aktiv" anhaken und mit dem „Test-Mail senden"-Button gleich verifizieren, dass es klappt. Das Passwort wird verschlüsselt in der Datenbank gespeichert.

Alternativ — über .env.local. Für Setups mit SSH-Zugang oder wenn das Backend gerade nicht erreichbar ist:

MAILER_DSN=smtp://user:password@smtp.beispiel.at:587

Sobald die SMTP Settings im Backend aktiv sind, überschreiben sie diese MAILER_DSN-Konfiguration.

Lizenz

AGPL-3.0-or-later — kostenlos nutzbar, auch für Vereinsserver. Veränderungen müssen unter derselben Lizenz weitergegeben werden, auch bei SaaS-Hosting.