# Lokaler MySQL-Dev-Start Die Legacy-App kann für Entwicklung gegen MySQL laufen. Dafür gibt es eine Kompatibilitätsschicht, die die verwendeten `sqlsrv_*`-Funktionen im Dev-Modus auf PDO/MySQL abbildet. ## Voraussetzungen - PHP CLI mit `pdo_mysql`. - MySQL-Testdatenbank. - Keine Produktivdaten und keine Produktivpasswörter im Repository. In dieser VS-Code-Server-Umgebung wurde PHP lokal unter `.local/` entpackt, weil `sudo` nicht passwordless verfügbar war. `.local/` wird von Git ignoriert. ### Nachträglich eine Erweiterung ergänzen (Beispiel `imap`) Ohne Root lässt sich ein `.deb` trotzdem auspacken und einbinden — so kam die `imap`-Erweiterung für den PayPal-Mailabruf dazu: ```bash cd .local/debs curl -O http://archive.ubuntu.com/ubuntu/pool/universe/p/php8.3/php8.3-imap_8.3.6-0ubuntu0.24.04.10_amd64.deb curl -O http://archive.ubuntu.com/ubuntu/pool/universe/u/uw-imap/libc-client2007e_2007f~dfsg-7build3_amd64.deb dpkg-deb -x php8.3-imap_*.deb ../php dpkg-deb -x libc-client2007e_*.deb ../php # imap.so sucht libc-client.so.2007e im LD_LIBRARY_PATH aus .env.local: cp -a ../php/usr/lib/libc-client.so.2007e.0 ../php/usr/lib/x86_64-linux-gnu/ ln -sf libc-client.so.2007e.0 ../php/usr/lib/x86_64-linux-gnu/libc-client.so.2007e echo 'extension=imap.so' >> ../php-dev.ini ``` Die Paketversion muss zur PHP-Version passen (`20230831` = PHP 8.3). Auf dem Webspace geht das **nicht** — dort entscheidet der Anbieter, welche Erweiterungen es gibt; siehe `docs/deployment.md`, Abschnitt PayPal-Postfach. ## Umgebungsvariablen ```bash export APP_DB_DRIVER=mysql export DB_HOST="example.mysql.host" export DB_PORT="3306" export DB_NAME="example_database" export DB_USER="example_user" export DB_PASS="example_password" export DB_TABLE_PREFIX="test_" export DEV_AUTH_EMAIL="admin@test.local" export DEV_AUTH_NAME="Test Admin" # Optional: Standard ist var/sessions im Repository. export APP_SESSION_PATH="/path/to/writable/sessions" # Optional für Passwort-Reset und E-Mail-Verifikation. export APP_BASE_URL="http://127.0.0.1:8080" export APP_MAIL_TRANSPORT="log" export APP_MAIL_LOG_DIR="/path/to/writable/mail-log" export APP_MAIL_FROM="noreply@example.test" export APP_MAIL_FROM_NAME="Kaffeeliste" ``` ## Testdatenbank initialisieren Migrationen anwenden: ```bash php scripts/migrate.php ``` Dev-Admin und Basistestdaten anlegen: ```bash php scripts/init-mysql-dev.php ``` In der aktuellen lokalen Umgebung: ```bash LD_LIBRARY_PATH="$PWD/.local/php/usr/lib/x86_64-linux-gnu" \ "$PWD/.local/php/usr/bin/php8.3" \ -c "$PWD/.local/php-dev.ini" \ scripts/init-mysql-dev.php ``` ## Server starten ```bash HOST=127.0.0.1 PORT=8080 scripts/run-dev-server.sh ``` Danach ist die App unter `http://127.0.0.1:8080/` erreichbar. In VS Code kann der Port über die Ports-Ansicht weitergeleitet werden. ## Hinweise - Der Dev-Login umgeht AD/LDAP und nutzt `DEV_AUTH_EMAIL`. - Der Dev-Mailversand nutzt standardmäßig `APP_MAIL_TRANSPORT=log` und legt Nachrichten unter `var/mail` ab. Für Produktion kann zunächst `APP_MAIL_TRANSPORT=mail` mit passendem `APP_BASE_URL` und Absender gesetzt werden; eine SMTP-/Provider-Anbindung bleibt ein späterer Betriebsausbau. - Die Tabellen werden über `database/migrations/` mit dem Prefix aus `DB_TABLE_PREFIX` angelegt. Lokal und auf Staging ist das `test_`, in Produktion ausschließlich `prod_`. - `database/mysql-dev-schema.sql` bleibt als historische Dev-Schema-Baseline erhalten; der aktive Weg ist `scripts/migrate.php`. - Session-Dateien liegen standardmäßig unter `var/sessions`; `var/` wird von Git ignoriert. - Der Dev-Modus ist nur für lokale Tests gedacht, nicht für Produktion.