SAFweb2-Release 2.1.17

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 zum sudo macht
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.