Erste Schritte
Basissystem
Für den Betrieb von SAFweb2 wird eine Linux-Installation benötigt. Empfohlen wird das aktuelle Debian 12.
Es kann sehr nützlich sein das System als virtuelle Maschine aufzubauen. Dazu kann z.b. der VMWare Workstation verwendet werden.
Die Debian-Installation kann auf wenige Pakete beschränkt werden. Es ist nur sicherzustellen, dass ssh installiert ist
und das System Netzwerktauglich ist. Alle benötigten Pakete werden dann von Skript geladen.
Installationsskript
Das Installationsskript kann von der Download Webseite geladen
werden. Die Datei installation.tgz ist ein symbolischer Link auf die aktuelle Version und sollte verwendet werden.
Erste Installation mit Skript
Wenn das System erstmalig eingerichtet ist, wird folgendes Kommando ausgeführt
Installation Release runterladen
cd /opt/safweb oder /opt/safineia/safweb
wget https://download.safineia.net/safweb2/installation/installation.tgz
tar -xzf installation.tgz
Arbeitet man als root auf dem System, was nicht empfohlen ist und auch unwahrscheinlich, da neue
Systeme kein ssh-root-login mehr zulassen, kann das Setup ohne sudo ausgeführt werden.
Quickhack
Das ist eine schnelle Lösung, jedoch nicht die “richtige”. Wie mann User zumsudomacht
wird an anderer Stelle noch genau geklärt (TODO)
Ist man jedoch ein anderer Anwender als root, muss dieser Anwender noch in die /etc/sudoers eingetragen werden.
vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
safweb ALL=(ALL:ALL) ALL <--
safadmin ALL=(ALL:ALL) ALL <--
Setup ausführen
Mit dem Parameter -c führt das Skript einen Check durch.
sudo sh installation/linux/setup.sh -c
Prepare - Vorbereiten der Umgebung
Dadurch werden die Verzeichnisse angelegt, User angelegt (safweb), nötige Programme installiert. Es wird gefragt, ob mit der Prozedur gestartet werden soll. Nach Bestätigung wird installiert, das kann einige Minuten in Anspruch nehmen.
sudo sh installation/linux/setup.sh -p
Nachdem das Skript durchgelaugen ist, ist die Umgebung vollständig eingerichtet. Im weiteren Verlauf muss man
mehrmals als anderer User in verschiedene Verzeichnisse wechseln und unterschieldiche Aufgaben ausführen.
Damit das einfacher wird, ist screen auf dem System installiert. Das ist eine Art virtuelle Konsole in der
man leicht zwischen verschiedenen Fenstern wechseln kann.
Gestartet wird es mit
$ screen
Screen Kommandos:
CTRL + a c - create new Window
CTRL + a n - next Window (wechselt in das nächste Fenster)
CTRL + a p - previous Window (wechselt in das vorherige Fenster)
CTRL + a d - detach (verlässt screen)
screen -x startet ein vorhandenes screen, wenn nur eine Session läuft
sind mehrere Sessions am Start, kann mit screen -ls eine Liste der Session ausgegeben werden
screen -r verbindet sich dann mit einer bestimmten Session
Nettes gimmick: screen bleit auch erhalten, wenn die Verbindung zum Host beendet oder unterbrochen wird.
Testumgebung
Git Clone
Wenn die Umgebung eingerichtet ist, kann die Testumgebung installiert werden. Hierbei werden die safweb2 Module aus dem Git-Repository geladen (clone).
sudo sh installation/linux/setup.sh -it
Docker Images erstellen
Als User safadmin muss in das Verzeichnis safweb/test/docker gewechselt werden. Dann sind folgende Schritte
auszuführen
$ cp .env.example.test .env
$ docker compose build app
Wenn dieser Prozess gelaufen ist, dann
docker compose up app
Läuft alles ohne Fehler durch, dann laufen jetzt die nötigen Container und das Log wird in der Konsole ausgegeben.
App einrichten
Als User safweb in das Verzeichnis safweb/test/app wechseln. Zuerst muss die .env Datei erzeugt und angepasst
werden. Wenn man einen eigenen Mailserver betriebt, dann in den u.g. Variablen die entsprechenden Daten eintragen.
$ cp .env.safweb.testserver.test .env
vi .env
// folgende Variablen anpassen
MAIL_MAILER=log
MAIL_SCHEME=null
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
Testen ob der phpfpm Container läuft und Kommandos annimmt. Wir testen mit composer ohne Parameter, das solle
in etwa folgendes Bild liefern:
$ docker exec safweb-test-phpfpm composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.8.9 2025-05-13 14:01:37
Usage:
command [options] [arguments]
Options:
-h, --help Display help for the given command. When no command is given display help for the list command
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi|--no-ansi Force (or disable --no-ansi) ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
--no-scripts Skips the execution of all scripts defined in composer.json file.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
--no-cache Prevent use of the cache
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
about Shows a short information about Composer
archive Creates an archive of this composer package
audit Checks for security vulnerability advisories for installed packages
browse [home] Opens the package's repository URL or homepage in your browser
bump Increases the lower limit of your composer.json requirements to the currently installed versions
check-platform-reqs Check that platform requirements are satisfied
clear-cache [clearcache|cc] Clears composer's internal package cache
completion Dump the shell completion script
config Sets config options
...
Funktioniert dasm dann müssen die Module installiert werden. Das sollte dann in etwa dieses Ergebnis liefern
docker exec safweb-test-phpfpm composer install
...
- Installing phpunit/phpunit (11.5.11): Extracting archive
0/115 [>---------------------------] 0%
20/115 [====>-----------------------] 17%
29/115 [=======>--------------------] 25%
39/115 [=========>------------------] 33%
47/115 [===========>----------------] 40%
58/115 [==============>-------------] 50%
69/115 [================>-----------] 60%
82/115 [===================>--------] 71%
94/115 [======================>-----] 81%
104/115 [=========================>--] 90%
115/115 [============================] 100%
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
INFO Discovering packages.
barryvdh/laravel-debugbar ............................................. DONE
laravel/breeze ........................................................ DONE
laravel/pail .......................................................... DONE
laravel/sail .......................................................... DONE
laravel/tinker ........................................................ DONE
livewire/livewire ..................................................... DONE
livewire/volt ......................................................... DONE
nesbot/carbon ......................................................... DONE
nunomaduro/collision .................................................. DONE
nunomaduro/termwind ................................................... DONE
82 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Danach sollte artisan funktionieren.
docker exec safweb-test-phpfpm php artisan
Das sollte auch eine Liste der möglichen Argument liefern. Wenn das auch funktioniert, dann kann die app
final eingerichtet werden.
$ docker exec safweb-test-phpfpm php artisan key:generate
INFO Application key set successfully.
$ docker exec safweb-test-phpfpm php artisan migrate --seed
WARN The database 'safweb2' does not exist on the 'pgsql' connection.
INFO Preparing database.
Creating migration table ....................................... 9.90ms DONE
INFO Running migrations.
0001_01_01_000000_create_users_table .......................... 17.08ms DONE
0001_01_01_000001_create_cache_table .......................... 10.62ms DONE
0001_01_01_000002_create_jobs_table ........................... 14.81ms DONE
mis_0001_01_01_000000_create_bikr_maschinendaten_table ........ 11.28ms DONE
mis_0001_01_01_000001_create_bikr_parameter_table .............. 5.29ms DONE
mis_0001_01_01_000002_create_bikr_maschinenstundensaetze_table . 5.50ms DONE
mis_0001_01_01_000003_create_bikr_bilanzen_table ............... 7.63ms DONE
mis_0001_01_01_000004_create_bikr_kst_bereiche_table ........... 8.19ms DONE
mis_0001_01_01_000005_create_bikr_kst_abteilungen_table ........ 9.47ms DONE
mis_0001_01_01_000006_create_bikr_kt_gruppen_table ............. 7.10ms DONE
mis_0001_01_01_000007_create_bikr_kt_produkte_table ........... 10.61ms DONE
mis_0001_01_01_000008_create_bikr_kt_artikel_table ............ 10.45ms DONE
mis_0001_01_01_000009_create_bikr_produktlinien_table .......... 8.92ms DONE
mis_0001_01_01_000010_create_bikr_produktlinie_stationen_table . 5.94ms DONE
mis_0001_01_01_000012_create_bikr_lohnkosten_table ............. 6.01ms DONE
INFO Seeding database.
Danach müssen die Container gestoppt und wieder gestartet werden. Dadurch werden die Node-Module installiert.
Anschliessend muss die Datei vite.confi.js angepasst werden.
import laravel from 'laravel-vite-plugin';
export default defineConfig({
/* !!uncomment this on a Docker Environment!! */
/* <== ENTFERNEN
server: {
host: '0.0.0.0',
// port: 3000, // possibly useless?
open: false,
strictPort: true,
cors: {
origin: 'http://10.100.0.134:83', <== IP anpassen
credentials: true,
},
hmr: {
host: '10.100.0.134', <== IP anpassen
},
},
*/ <== ENTFERNEN
plugins: [
laravel({
input: ['resources/css/app.css', 'resources/js/app.js'],
refresh: true,
}),
],
});
Installation für Softwareentwicklung
Verzeichnisstruktur
Alle Module sollten in einem Verzeichnis liegen. Es ist z.B. möglich alles in einen Projekte Ordner in das Verzeichnis SAFINEIA zu kopieren.
Die Verzeichnisstruktur sieht dann wie folgt aus:
── SAFINEIA
├── safweb2
│ ├── app
│ ├── appliance_page
│ ├── docker
│ ├── hugo_safineia
│ ├── installation
│ ├── mk_releases
│ └── oraapi
Erstes Auschecken des Codes
Alle Module werden im Git-Repository vorgehalten. Um mit der Entwicklung starten zu können, müssen alle entsprechenden Module geklont werden.
app
SAFweb2 liegt hier im Verzeichnis app. Es ist aber beliebig, wie das Verzeichnis gennant wird.
Innerhalb des Verzeichnisses wird folgender Git Befehl ausgeführt:
git clone -b main safweb@95.217.217.117:/opt/gitrepositories/safweb2.git .
Zur Ausführung des Befehls, muss entweder das Passwort des Users safweb bekannt sein, oder ein SSH-Key muss auf den Git-Server kopiert worden sein.