pro-kasch / archery-cms
Open-source club management system for archery associations, built with Symfony.
Requires
- php: >=8.4
- ext-ctype: *
- ext-iconv: *
- altcha-org/altcha: ^2.0
- doctrine/doctrine-bundle: ^3.2
- doctrine/doctrine-migrations-bundle: ^4.0
- doctrine/orm: ^3.6
- easycorp/easyadmin-bundle: ^5.0
- liip/imagine-bundle: ^2.17
- mpdf/mpdf: ^8.3
- phpdocumentor/reflection-docblock: ^6.0
- phpstan/phpdoc-parser: ^2.3
- symfony/asset: 8.0.*
- symfony/asset-mapper: 8.0.*
- symfony/console: 8.0.*
- symfony/doctrine-messenger: 8.0.*
- symfony/dotenv: 8.0.*
- symfony/expression-language: 8.0.*
- symfony/flex: ^2
- symfony/form: 8.0.*
- symfony/framework-bundle: 8.0.*
- symfony/http-client: 8.0.*
- symfony/intl: 8.0.*
- symfony/mailer: 8.0.*
- symfony/mime: 8.0.*
- symfony/monolog-bundle: ^3.0|^4.0
- symfony/notifier: 8.0.*
- symfony/process: 8.0.*
- symfony/property-access: 8.0.*
- symfony/property-info: 8.0.*
- symfony/runtime: 8.0.*
- symfony/security-bundle: 8.0.*
- symfony/serializer: 8.0.*
- symfony/stimulus-bundle: ^2.34
- symfony/string: 8.0.*
- symfony/translation: 8.0.*
- symfony/twig-bundle: 8.0.*
- symfony/ux-turbo: ^2.34
- symfony/validator: 8.0.*
- symfony/web-link: 8.0.*
- symfony/yaml: 8.0.*
- twig/extra-bundle: ^2.12|^3.0
- twig/string-extra: ^3.24
- twig/twig: ^2.12|^3.0
Requires (Dev)
- phpunit/phpunit: ^13.1
- symfony/browser-kit: 8.0.*
- symfony/css-selector: 8.0.*
- symfony/debug-bundle: 8.0.*
- symfony/maker-bundle: ^1.0
- symfony/stopwatch: 8.0.*
- symfony/web-profiler-bundle: 8.0.*
Conflicts
This package is auto-updated.
Last update: 2026-07-29 15:21: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:
- Datenbank-Verbindung — Host, Port, Datenbank-Name, Benutzer, Passwort werden abgefragt und sofort getestet.
- Vereinsname — wird in der
verein- undsite_layout-Tabelle als Startwert eingetragen. - Admin-Konto — E-Mail und Passwort für den Backend-Login.
- Schema + Seed — die Migration legt alle Tabellen plus Standard-Inhalte (System-Seiten, Kontaktformular) an.
.env.local— alle eingegebenen Werte werden gespeichert; ein zufälligerAPP_SECRETwird erzeugt.- Prod-Cache wird vorbereitet, eine
var/install.lockschü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/oderpublic_html/zeigt (typisch bei einfachen Shared-Hosts): den Inhalt des ZIP-Ordnerspublic/inhttpdocs/legen und den Rest der Anwendung eine Ebene darüber ablegen (oft~/oder~/private/). Anschließend den Pfad inhttpdocs/index.phpan die neue Lage anpassen — die Datei enthält dazu zweirequire-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 CHMOD755aufbin/console. Auf dasmigrations/-Verzeichnis reichen normale Lese-Rechte (644für Dateien,755fü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:
- Systemprüfung — der Wizard prüft PHP-Version, Erweiterungen und Schreibrechte.
- Datenbank verbinden — Host, Port, Datenbank-Name, Benutzer, Passwort eintragen. Wird sofort getestet.
- 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:
| Direktive | Default | Zweck |
|---|---|---|
upload_max_filesize | 32M | Maximale Größe einer einzelnen hochgeladenen Datei |
post_max_size | 560M | Gesamtgröße eines POST-Requests (sollte ≥ upload_max_filesize) |
memory_limit | 256M | Speicherlimit pro Request |
max_execution_time | 60 | Sekunden, die ein Request laufen darf |
max_input_time | 60 | Sekunden 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.