Installation¶
Für jeden customer gibt es eine Kennung, customer-slug. Im folgenden wird als Beispiel "besenval" als customer-slug verwendet.
Einen neuen customer einrichten¶
Um einen neuen customer einzurichten benötigt man den Zugang über die Kommandozeile.
config.php in bootstrap/ anlegen¶
Falls die Umgebung nicht der subdomain entspricht, muss man ein config.php File anlegen, das ein Array $slugArray definiert. Dieses ordnet die URL der Anton-Installation einem den customer zu:
$slugArray = ['besenval.anton' => 'besenval'];
Der key besteht aus hier Subdomain und Domain, der value enthält den customer-slug bzw. das suffix des .env files, das in diesem Fall .env.besenval heisst.
Umgebung anpassen (.env)¶
Die Umgebungsvariablen werden im .env.besenval im root Verzeichnis der Anton-Installation gespeichert. Weitere Variablen sind dann in der Datenbank in den Settings gespeichert.
Allgemeine Umgebungsvariablen¶
Beispiel Besenval:
APP_ENV=besenval
APP_URL=http://besenval.anton.ch
APP_DEBUG=false
DEBUGBAR_ENABLED=false
APP_KEY=AppKey
APP_LOG_LEVEL=debug
EMAIL_EXCEPTION_ENABLED=true
SNEAKER_SILENT=true
Datenbank Credentials¶
DB_HOST=127.0.0.1
DB_DATABASE=datenbankname
DB_USERNAME=username
DB_PASSWORD=passwort
Drivers¶
CACHE_DRIVER=file
SESSION_DRIVER=database
QUEUE_DRIVER=database
Wichtig
Wichtig: Für die ersten Commands muss der Cache-Driver in .env.besenval auf file gestellt sein:
CACHE_DRIVER=file
Nach der Grundinstallation (bzw. der database migration) sollte dieser Wert zu 'database' geändert werden.
Email¶
MAIL_DRIVER
MAIL_HOST
MAIL_PORT
MAIL_USERNAME
MAIL_PASSWORD
MAIL_FROM
MAIL_NAME
Es ist einfach, den Email Versand zu testen:
php artisan anton:doctor --all --env kr --mail 'kraenzle@k-r.ch'
Customers Path¶
Ausserdem kann die Variable CUSTOMER_PATH gesetzt werden (sie muss einen absoluten Pfad enthalten). Ist der CUSTOMER_PATH nicht gesetzt wird im Anton Ordner ein customers Ordner angelegt und verwendet.
Geolokalisierung¶
Um Geolokalisierung der Orte mit Geonames und Kartendarstellungen von Google Maps zu ermöglichen, müssen folgende Variablen gesetzt sein:
GOOGLE_API_KEY
GEONAMES_USERNAME
Selbstreparatur aus der lokalen Sicherung¶
Optional. media:repair holt Mediendateien,
deren Integritätsprüfung fehlschlägt, aus einer lokalen rsnapshot-Sicherung
zurück (siehe Langzeitarchivierung).
Sinnvoll nur, wo diese Sicherung die Mediendateien enthält.
MEDIA_REPAIR_BACKUP_ROOT=/pfad/zur/einhaengung # schreibgeschützte Einhängung der Stände
# MEDIA_REPAIR_BACKUP_HOST=localhost # Präfix der Sicherungspunkte (Vorgabe)
# MEDIA_REPAIR_QUARANTINE=/pfad # Vorgabe: storage/app/quarantine
# MEDIA_REPAIR_MAX=10 # mehr Abweichungen in einem Lauf: nichts reparieren
Die Anwendung darf die Sicherung nur lesen. Bewährt hat sich: die Ebene über
den Ständen für alle ausser root sperren (0700) und die Stände über eine
zweite, schreibgeschützte Bind-Einhängung zugänglich machen, die nur die
Gruppe des Anwendungsbenutzers erreicht. Ein Schreibversuch scheitert dort mit
«Read-only file system». media:repair läuft als Anwendungsbenutzer und
verweigert die Reparatur, wenn die Sicherung nicht lesbar oder beschreibbar ist.
Ohne MEDIA_REPAIR_BACKUP_ROOT meldet der Befehl «keine lokale Sicherung
eingerichtet» und tut nichts.
Mysql-Datenbank erstellen¶
Als root anmelden:
mysql -u root -p
Eine leere mysql-db anton_"slug" erstellen.
CREATE DATABASE anton_besenval;
Einen eigenen DB-User erstellen:
CREATE USER 'anton_besenval'@'localhost' IDENTIFIED BY 'user_password';
Ersetze user_password durch das Passwort.
Alle Rechte für diese user einrichten:
GRANT ALL PRIVILEGES ON database_name.* TO 'anton_besenval'@'localhost';
GRANT RELOAD, PROCESS ON *.* to 'anton_besenval'@'localhost';
Grundinstallation¶
php artisan anton:install -vv --env=besenval
Es laufen nun die nötigen migrations und die Datenbank wird mit den Grunddaten versorgt.
Nun kann im .env.besenval der Cache auf 'database' gesetzt werden.
Datenverzeichnis erstellen¶
In customers/slug bzw. customers/besenval werden die Kundendaten gespeichert. Das Verzeichnis inklusive der nötigen Unterverzeichnisse kann einfach mit anton:customdir erstellt werden:
php artisan anton:customdir -vv --create --env=besenval
Nun als root das Verzeichnis schreibbar machen:
chmod -R 775 customers/besenval
Logo kopieren¶
Falls kein Logo zur Verfügung steht, kann das Antonlogo kopiert werden:
php artisan anton:install --logo -vv --env=besenval
Matomo einbinden¶
Der Befehl matomo richtet alles drei ein — die
Website in Matomo, einen Benutzer mit Leserecht auf genau diese Website, und
einen Token dafür — und trägt analytics_id und analytics_auth_token in die
Einstellungen des Mandanten ein:
php artisan matomo --env=<slug>
php artisan matomo --env=<slug> --show-sites # nur nachsehen, was Matomo kennt
Vorausgesetzt sind APP_URL, MATOMO_ADMIN_AUTH_TOKEN und MATOMO_EMAIL in
der .env des Mandanten. MATOMO_URL ist optional und steht standardmässig auf
https://matomo.anton.ch; analytics.anton.ch ist dieselbe Installation unter
einem zweiten Namen.
Jeder Mandant bekommt einen eigenen Token mit Leserecht auf seine eigene
Website. Ein gemeinsamer Hauptschlüssel wäre bequemer und ist bewusst nicht
vorgesehen: Ein Matomo-Token mit Superuser-Rechten löscht über
SitesManager.deleteSite eine Website samt ihrer ganzen Auswertungshistorie,
ohne nach einem Passwort zu fragen.
Von Hand geht es weiterhin: in Matomo einloggen, unter «Alle Websites» eine
Website anlegen, einen Benutzer mit Leserecht darauf einrichten, und
analytics_id und analytics_auth_token in den Anton-Einstellungen eintragen.
Was die Statistikseite zeigt¶
Die Seite «Anton Analytics» holt die Zahlen serverseitig von Matomo und stellt sie selbst dar: Besuche, verschiedene Besucher:innen, Seitenaufrufe, Verweildauer, Absprungrate, die zehn meistgesehenen Seiten, die Herkunft der Besucher:innen und die Suchbegriffe. Zwischen Tag, Woche, Monat und Jahr lässt sich oben wechseln.
Der Token verlässt den Server dabei nicht. Bis Version 0.93.0 war Matomos eigenes Auswertungsfenster eingebettet, und dessen Adresse trug den Token — er stand damit im Quelltext der Seite, in der Verlaufsliste des Browsers und im Zugriffsprotokoll von Matomo.
Ist für einen Mandanten keine analytics_id oder kein Token hinterlegt, sagt
die Seite das. Sie zeigte in diesem Fall früher stillschweigend nichts.
Configure Supervisor¶
Als root die Konfigurationsdatei etc/supervisor/supervisor.conf öffnen und einen neuen customer einrichten.
[program:laravel-worker-besenval]
process_name=%(program_name)s_%(process_num)02d
command=%(ENV_SPRVS_PHP)s %(ENV_SPRVS_ANTON)s/artisan queue:work database --tries=3 --timeout=120 --env=besenval
autostart=true
autorestart=true
startretries=10
user=%(ENV_SPRVS_USER)s
numprocs=1
redirect_stderr=true
stdout_logfile=%(ENV_SPRVS_LOG)s/worker-besenval.log
SPRVS_PHP=
SPRVS_LOG=
SPRVS_USER=
SPRVS_ANTON=
Dann den supervisor als root neu starten:
supervisorctl stop
supervisorctl reread
supervisorctl update
supervisorctl restart