chore: Projektgeruest, Abhaengigkeiten und Werkzeuge
Plain PHP 8.2+ ohne Framework. Einzige Laufzeit-Abhaengigkeit ist endroid/qr-code; intl und imagick sind optional (es gibt jeweils einen Rueckfallweg). Konfiguration ueber .env oder Umgebungsvariablen, damit dieselbe Anwendung per FTP und per Docker deploybar ist.
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
.git
|
||||
.gitignore
|
||||
.env
|
||||
data/
|
||||
vendor/
|
||||
.phpunit.cache/
|
||||
build/
|
||||
dist/
|
||||
*.md
|
||||
!README.md
|
||||
@@ -0,0 +1,91 @@
|
||||
# =============================================================
|
||||
# urlshort-qr-gen – Konfiguration
|
||||
# Diese Datei nach ".env" kopieren und anpassen.
|
||||
# Alle Werte koennen alternativ als echte Umgebungsvariablen
|
||||
# gesetzt werden (Docker); die .env hat dann Vorrang, wenn der
|
||||
# Schluessel dort vorhanden ist.
|
||||
# =============================================================
|
||||
|
||||
# --- Anwendung -----------------------------------------------
|
||||
# Basis-URL OHNE abschliessenden Slash. Wird fuer die Kurzlinks
|
||||
# und die QR-Codes verwendet.
|
||||
APP_BASE_URL=http://localhost:8080
|
||||
|
||||
# production | development (development zeigt Fehlermeldungen an)
|
||||
APP_ENV=production
|
||||
|
||||
APP_TIMEZONE=Europe/Berlin
|
||||
|
||||
# HTTP-Status fuer Weiterleitungen: 301 (permanent, wird vom
|
||||
# Browser gecacht -> weniger Klicks werden gezaehlt) oder
|
||||
# 302 / 307 (temporaer, empfohlen fuer korrekte Statistik).
|
||||
REDIRECT_STATUS=302
|
||||
|
||||
# --- Datenbank ------------------------------------------------
|
||||
# sqlite | mysql
|
||||
DB_DRIVER=sqlite
|
||||
|
||||
# Nur fuer sqlite: Pfad zur Datenbankdatei.
|
||||
# Relative Pfade werden vom Projekt-Stammverzeichnis aus aufgeloest.
|
||||
DB_SQLITE_PATH=data/database.sqlite
|
||||
|
||||
# Nur fuer mysql:
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_NAME=urlshort
|
||||
DB_USER=urlshort
|
||||
DB_PASSWORD=
|
||||
DB_CHARSET=utf8mb4
|
||||
|
||||
# --- Admin-Zugang ---------------------------------------------
|
||||
ADMIN_USER=admin
|
||||
# bcrypt-Hash des Passworts. Leer lassen -> beim ersten Aufruf startet
|
||||
# der Setup-Assistent. Dieser verlangt zusaetzlich ein Einmal-Token,
|
||||
# das in data/setup-token.txt steht (und im Serverprotokoll), damit
|
||||
# niemand anderes die frische Installation uebernehmen kann.
|
||||
# Hash erzeugen: php -r "echo password_hash('geheim', PASSWORD_DEFAULT), PHP_EOL;"
|
||||
ADMIN_PASSWORD_HASH=
|
||||
|
||||
# --- Sessions / Sicherheit ------------------------------------
|
||||
SESSION_NAME=urlshort_session
|
||||
# Abmeldung nach Inaktivitaet (Sekunden)
|
||||
SESSION_LIFETIME=7200
|
||||
# Harte Obergrenze je Sitzung, unabhaengig von Aktivitaet (0 = aus)
|
||||
SESSION_ABSOLUTE_LIFETIME=43200
|
||||
# Cookies nur ueber HTTPS senden. Wird bei einer HTTPS-Anfrage
|
||||
# automatisch aktiviert; hier auf true setzen, wenn die Anwendung
|
||||
# ausschliesslich ueber HTTPS erreichbar ist.
|
||||
SESSION_SECURE=false
|
||||
|
||||
# --- Betrieb hinter einem Proxy / Loadbalancer ----------------
|
||||
# Nur IPs und CIDR-Bereiche aus dieser Liste duerfen X-Forwarded-For
|
||||
# und X-Forwarded-Proto setzen. LEER LASSEN, wenn kein Proxy davor
|
||||
# steht - sonst koennte jeder die Client-IP faelschen und damit die
|
||||
# Login-Sperre umgehen.
|
||||
# Beispiel: TRUSTED_PROXIES=10.0.0.0/8,172.18.0.1
|
||||
TRUSTED_PROXIES=
|
||||
|
||||
# HTTP Strict Transport Security in Sekunden (0 = aus).
|
||||
# Wird nur bei HTTPS-Anfragen gesendet.
|
||||
HSTS_MAX_AGE=31536000
|
||||
|
||||
# Login-Ratenbegrenzung
|
||||
LOGIN_MAX_ATTEMPTS=5
|
||||
LOGIN_LOCKOUT_SECONDS=900
|
||||
|
||||
# --- Datenschutz ----------------------------------------------
|
||||
# none = IP wird gar nicht gespeichert (Standard, DSGVO-freundlich)
|
||||
# hash = nur ein gesalzener, gekuerzter Hash (fuer Unique-Zaehlung)
|
||||
TRACK_IP=none
|
||||
# Zufaelliger Salt, nur relevant bei TRACK_IP=hash
|
||||
IP_HASH_SALT=
|
||||
|
||||
# Tage, nach denen einzelne Besuchsdatensaetze automatisch geloescht
|
||||
# werden (0 = nie loeschen). Die Gesamt-Klickzahl bleibt erhalten.
|
||||
VISIT_RETENTION_DAYS=365
|
||||
|
||||
# --- Uploads (QR-Logos) ---------------------------------------
|
||||
# Ablage der Logos, relativ zum Projekt-Stammverzeichnis.
|
||||
# Liegt bewusst ausserhalb des Webroots.
|
||||
UPLOAD_DIR=data/uploads
|
||||
UPLOAD_MAX_BYTES=2097152
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
/.env
|
||||
/data/*
|
||||
!/data/.gitkeep
|
||||
# Schutzdatei muss mit ausgeliefert werden
|
||||
!/data/.htaccess
|
||||
/data/setup-token.txt
|
||||
/public/uploads/*
|
||||
!/public/uploads/.gitkeep
|
||||
/vendor/
|
||||
/.phpunit.cache/
|
||||
/build/
|
||||
/dist/
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "wildeflorian/urlshort-qr-gen",
|
||||
"description": "Schlanker, selbst gehosteter URL-Shortener mit QR-Code-Generator",
|
||||
"type": "project",
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": ">=8.2",
|
||||
"ext-json": "*",
|
||||
"ext-pdo": "*",
|
||||
"ext-gd": "*",
|
||||
"ext-mbstring": "*",
|
||||
"endroid/qr-code": "^5.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-intl": "Umlaut-Domains (IDN) nach UTS-46 umwandeln; ohne intl greift ein eigener Punycode-Rueckfallweg",
|
||||
"ext-imagick": "SVG-Logos auch in PNG-Downloads einbetten"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^10.5"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"App\\Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"sort-packages": true
|
||||
},
|
||||
"scripts": {
|
||||
"test": "phpunit"
|
||||
}
|
||||
}
|
||||
Generated
+1854
File diff suppressed because it is too large
Load Diff
+21
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
|
||||
bootstrap="vendor/autoload.php"
|
||||
cacheDirectory=".phpunit.cache"
|
||||
colors="true"
|
||||
failOnWarning="true"
|
||||
failOnRisky="true"
|
||||
beStrictAboutOutputDuringTests="true">
|
||||
<testsuites>
|
||||
<testsuite name="urlshort-qr-gen">
|
||||
<directory>tests</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<source>
|
||||
<include>
|
||||
<directory>src</directory>
|
||||
</include>
|
||||
</source>
|
||||
</phpunit>
|
||||
Reference in New Issue
Block a user