Installation

1. Vorarbeiten

Wichtig: als erstes die "Basis Installation Ubuntu 24.04" ausführen!

Wenn etwas von den Standardwerten abweichen soll, dann müssen die Umgebungsvariablen in der ~/.bashrc hinzugefügt/angepasst werden.

export IS_NAME=icon-server # optional
export IS_ICONS_PATH=/var/www/icons # optional
export SERVICE_INI_FILE=/etc/locr/icon-server.ini # optional
export USER_SERVER_INI_FILE=/etc/locr/user-server.ini # optional
export HTPASSWD_FILE=/etc/nginx/.htpasswd # optional

Die Datei /etc/locr/icon-server.ini anlegen und folgende Standardwerte eintragen.

sudo nano /etc/locr/icon-server.ini

Password <my_db_password> für den DB-Benutzer root eintragen!

[CLIENT]
http_auth_active = false
http_auth_username = 
http_auth_password = 

[DB]
name = icons
username = root
password = <my_db_password>

[DEV]
host = 0.0.0.0
port = 9876

[DIRS]
icons = /var/www/icons

[ENV]
environment = production

Die Datei /etc/locr/user-client.ini anlegen und folgende Standardwerte eintragen.

sudo nano /etc/locr/user-client.ini

Password <my_password> für den Benutzer serverconnect eintragen!

[API]
endpoint = https://users.locr.com/api/
http-auth-enabled = false ; true oder false
http-auth-type = basic ; basic oder digest
http-auth-username = serverconnect
http-auth-password = <my_password>
ssl-verifyhost = 2 ; 0, 1 oder 2
ssl-verifypeer = true ; true oder false

[COOKIE]
name = X-LOCR-USER-TOKEN
expires = "1 month" ; in Sekunden (0 => session cookie) oder als DateInterval-String wie unter https://www.php.net/manual/de/dateinterval.createfromdatestring.php beschrieben.

[JWT]
issuer = https://users.locr.com/
audience = https://users.locr.com/
secret = ; Kann per `echo '<?php print base64_encode(random_bytes(32));' | php` generiert werden.
signature-algorithm = HS256 ; EdDSA, HS256, HS384, HS512, RS256, ..., ES256, ..., PS256, ..., none
expiration = 3600 ; in Sekunden oder als DateInterval-String wie unter https://www.php.net/manual/de/dateinterval.createfromdatestring.php beschrieben.

[TOKEN]
type = jwt
destination = local_directory
directory = /var/lib/locr/tokens/jwt
id-generator = uuid4 ; uuid1, uuid4, uuid6, uuid7, random_bytes oder openssl_random_pseudo_bytes

1.1. Installation aus den Quellen

mkdir -p ~/projects && cd ~/projects

# Diesen Befehl verwenden, wenn der Server über den SSH-Key mit Bitbucket verbunden ist
git clone --recurse-submodules git@bitbucket.org:locr/phpiconserver.git PhpIconServer
# Alternativ Repository Access Token verwenden
git clone --recurse-submodules https://x-token-auth:{access_token}@bitbucket.org/locr/phpiconserver.git PhpIconServer

cd PhpIconServer

Für Entwicklungsumgebung

sudo apt update
sudo apt install composer php-xml

composer update
composer install

2. Container Service installieren

Falls noch keine Icons vorhanden sind

[ ! -d "/var/www/icons" ] && sudo mkdir "/var/www/icons" && sudo chown -R www-data:www-data "/var/www/icons"

Für Produktivumgebung

./scripts/install_service.sh

Für Entwicklungsumgebung

./scripts/install_service.sh --env=dev

2.1. Update Script im home-Verzeichnis erstellen

cat <<EOF >~/update_icon_server.sh
#!/usr/bin/env bash

cd ${PWD}/scripts
./update_service.sh
EOF

chmod +x ~/update_icon_server.sh

2.2. nginx Konfiguration hinzufügen

Für den Zugriff unter der Domain icons.locr.com

sudo cp installation_files/nginx/sites-available/icons.locr.com /etc/nginx/sites-available
sudo ln -s /etc/nginx/sites-available/icons.locr.com /etc/nginx/sites-enabled/

Falls noch kein Zertifikat für icons.locr.com ausgestellt wurde, die Konfiguration zunächst anpassen

sudo nano /etc/nginx/sites-available/icons.locr.com

Hinzufügen und Abändern

include snippets/snakeoil.conf;
# ssl_certificate     /etc/letsencrypt/live/icons.locr.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/icons.locr.com/privkey.pem;

Nginx-Konfiguration testen und neustarten

sudo nginx -t
sudo systemctl restart nginx

2.3. Datenbank und Tabellen erstellen

sudo apt install mariadb-server

Das Passwort für den DB-Benutzer root setzen.

sudo mysql

Achtung: das Passwort <my_db_password> aus der Datei /etc/locr/icon-server.ini von oben verwenden!

ALTER USER 'root'@'localhost' IDENTIFIED BY '<my_db_password>';
\q
mysql -u root -p --execute="CREATE DATABASE IF NOT EXISTS icons"
mysql -u root -p icons < sql/mysql/create_tables.sql

3. Backup einspielen

sudo apt install bzip2

Aktuelle Dateien von Hetzner Storage Box runterladen

icon-files-(<Day>).tar.bz2.enc und icons-db-(<Day>).tar.bz2.enc

Dateien entschlüsseln

openssl aes-256-cbc -d -pbkdf2 -in "icon-files-(<Day>).tar.bz2.enc" -out "icon-files-(<Day>).tar.bz2"
openssl aes-256-cbc -d -pbkdf2 -in "icons-db-(<Day>).tar.bz2.enc" -out "icons-db-(<Day>).tar.bz2"

Dateien entpacken

tar xjf "icon-files-(<Day>).tar.bz2"
tar xjf "icons-db-(<Day>).tar.bz2"

Icon Dateien kopieren

sudo cp -rv icons/* /var/www/icons

Rechte der Icon Dateien ändern

sudo chown -R www-data:www-data /var/www/icons/
sudo chmod -R 0777 /var/www/icons/

Datenbank importieren

mysql -u root -p icons < icons.sql