PeeJayz.de|How To's

Breadcrump: Development > How To's

Submenu for navigation on the (parent)page:
  • github repository aus dem Bestand klonen
  • github ssh-keys, auch für mehrere Accounts
  • Plenty checkout
  • Virtualbox Update
  • Teilstring in Dateinamen ersetzen mit rename
  • Virtualhost in Apache2
  • Symfony 4 - das erste Mal
  • github clone vs. pull
  • VirtualBox Host-Only-Adaper
  • Terminal MySQL User/Datenbank anlegen/löschen/PW ändern
  • P24 Klon nginx
  • Processwire Daten aus Repeater von Kategorie holen
  • Docker Installation Linux Mint 18.2 Sonya (Ubuntu Xenial)
  • Docker Apache PHP MariaDB für Processwire
  • Docker Processwire
  • Mint LXC/LXD
  • Send-Only SMTP Server mit postfix
  • LXC Backup und Restore
  • Installation und Einrichtung MySQL Datenbank mit Fernzugriff
  • Komplettinstallation LAMP + Shopware 6 in LXC-Container
  • eigenes (v40)-git-repository
  • github repository aus dem Bestand klonen

    23. Juni 2020

    #cd ~/PhpstormProjects
    git clone git@SSH-ACCOUNT-NAME:githubname/repository.git
    cd repository
    #tell me who you are
    git config user.email "github@example.com"
    git config user.name "mustermann"
    #work on your files and then push it
    git add .
    git commit -m "a commit to see what happend"
    git push -u origin master
    

    top

    github ssh-keys, auch für mehrere Accounts

    20. November 2019

    Bei z.B. Cinnamon übernimmt der ssh-agent die keys unter ~/.ssh/ automatisch. Das verhindert jedoch den Zugriff aus dem Dateimanager (Nemo) heraus von SFTP-Benutzern auf SFTP Server. Deshalb die keys an anderer Stelle speichern z.B. in ~/.ssh/git/

    # einen extra Ordner für die neuen keys anlegen
    mkdir ~/.ssh/git
    
    # keys erzeugen und in neuem Ordner speichern
    ssh-keygen -t rsa -b 4096 -C "test@example.com"
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/git/account-one-git_id_rsa
    
    # public key ausgeben und bei github hinterlegen
    # dort auch gleich repository für einen Test anlegen, z.B. keytest
    cat ~/.ssh/git/account-one-git_id_rsa.pub
    
    # ssh config bearbeiten und host mit Pfad zum IdentityFile anlegen
    # HostName und User bleiben immer gleich
    nano .ssh/config
    
    Host account-one-git
            HostName github.com
            User git
            IdentityFile ~/.ssh/git/account-one-git_id_rsa
    
    # ssh Aufruf testen
    ssh -T account-one-git
    
    # neues lokales repository erstellen
    cd Schreibtisch
    mkdir test
    cd test
    git init
    git config user.email "you@example.com"
    git config user.name "Your Name"
    touch test.txt
    git add *
    git commit -m "first commit"
    

    beim Hinzufügen der remote Adresse die url austauschen, also statt

    git@github.com:githubname/keytest.git

    git@account-one-git:githubname/keytest.git

    # remote adresse hinzufügen
    git remote add origin git@account-one-git:githubname/keytest.git
    # pushen
    git push -u origin master
    

    mit weiteren Accounts genauso verfahren und Namen anpassen

    top

    Plenty checkout

    15. Oktober 2019

    {% if ( $CustomerID ) { Link_Checkout(3); } else { Link_Checkout(2); } %}
    

    ersetzen durch
    $_check.$_backlink
    

    und darüber hinzufügen
    {% if( $CustomerID ) %}
    	{% $_check = Link_Checkout(3); %}
    	{% $_backlink = ''; %}
    {% else %}
    	{% $_check = Link_Checkout(2); %}
    	{% $_backlink = '?backlink='; %}
    	{% if $Lang !== 'de' %}
    	  {% $_backlink = $_backlink . '/' . $Lang; %}
    	{% endif %}
    	{% $_backlink .= '/checkout'; %}
    {% endif %}
    

    gilt für:
    • Artikel -> Kategorien -> (Bestellen) Warenkorb, dort in der Beschreibung 1
    • CMS -> Webdesign -> Layout -> ItemView -> ItemViewBasketPreviewList
    • CMS -> Webdesign -> Layout -> ItemView -> ItemViewItemToBasketConfirmationOverlay

    • mit Webdesign -> links den Mandanten auswählen -> Einstellungen -> Mandanten -> z.B. Standard -> Bestellvorgang -> 3. Bestellschritt von BESTELLEN Kasse auf neu angelegten checkout ändern
    • Mit Webdesign -> links den Mandanten auswählen -> Einstellungen -> Mandanten -> z.B. Standard -> Bestellvorgang -> 2. Bestellschritt von KONTO Anmeldung auf neu angelegten login ändern, falls nötig (nicht bei B2B)

    • ggf. restliche Routen anpassen / übertragen (gtc/privacy-policy u.s.w.)

    top

    Virtualbox Update

    20. Oktober 2019

    Virtualbox sagt beim Start bescheid, daß neue Version heruntergeladen werden kann => runterladen => in's Download-Verzeichnis wechseln

    # Version checken
    VBoxManage --version
    sudo apt remove virtualbox-6.x
    sudo apt update
    sudo dpkg -i virtualbox-6.x_XXXXXXXXXXXXXX.deb
    # entsprechend der heruntergeladenen Version
    

    top

    Teilstring in Dateinamen ersetzen mit rename

    21. Oktober 2019

    • unpassender_dateiname.jpg
    • noch_ein_unpassender_dateiname.jpg
    # -n: noaction - nur testen nichts ändern
    rename -n 's/alt/neu/g' *
    # 's' für string und 'g' für global: nicht nur den ersten Treffer, sondern ALLE Treffer im Dateinamen
    # konkret:
    rename 's/unpassender_/treffender_/' *.jpg
    
    • treffender_dateiname.jpg
    • noch_ein_treffender_dateiname.jpg

    top

    Virtualhost in Apache2

    27. Oktober 2019

    • alle aktiven virtualhosts anzeigen
    ls /etc/apache2/sites-enabled
    • lege einen Ordner für die domain an
    • passe die Besitzrechte an
    • passe die Lese- und Schreibrechte an
    • lege in dem neuen Ordner eine index-Datei an
    sudo mkdir /var/www/html/example.local
    sudo chown $USER:$USER /var/www/html/example.local
    sudo chmod -R 755 /var/www/html/example.local
    nano /var/www/html/example.local/index.php
    {php "Example.local is working!"; php}
    
    • kopiere die Standard-Konfigurationsdatei in /etc/apache2/sites-available/
    cd /etc/apache2/sites-available
    cp 000-default.conf example.conf
    

    Beachte, daß .dev und .foo nicht mehr funktionieren, da diese wohl von google aufgekauft wurden

    • passe die example.conf an, wichtig ist hier eigentlich nur ServerName example.local
    {VirtualHost *:80}
    
            ...
    
    	# However, you must set it for any further virtual host explicitly.
    	#ServerName www.example.com
    
    	ServerAdmin webmaster@localhost
    	ServerName example.local
    	ServerAlias www.example.local
    	DocumentRoot /var/www/html/example.local
    
            ...
    
            weitere Optionen...
    
    {/VirtualHost}
    
    • dann die Konfigurationsdatei aktivieren und den Apache neu laden
    sudo a2ensite example.conf
    sudo systemctl reload apache2
    
    • ggf. prüfen mit
    ls /etc/apache2/sites-enabled
    • auf dem client die /etc/hosts anpassen
    sudo nano /etc/hosts
    192.168.1.88        example.local
    
    • deaktivieren wäre
    sudo a2dissite example.conf
    sudo systemctl reload apache2
    
    • bei Änderungen an der Datei genügt ein
    sudo systemctl reload apache2

    top

    Symfony 4 - das erste Mal

    04. November 2019

    Voraussetzungen:

    • Apache
    • Virtualhost (symfony.local)
    • Updates und Upgrades

    Server vorbereiten:

    mkdir /var/www/html/symfony.local
    chown $USER:$USER /var/www/html/symfony.local
    chmod -R 755 /var/www/html/symfony.local
    cd /var/www/html/symfony.local
    nano index.php {% write some PHP text %}
    

    Composer im home-Verzeichnis installieren

    cd ~

    Micro-App anlegen

    cd /var/www/html/symfony.local
    composer create-project symfony/skeleton my_first_symfony
    cd my_first_symfony
    

    composer apache-pack (erstellt die notwendige .htacccess im public-Ordner)

    composer require symfony/apache-pack

    composer annotations

    composer require annotations

    Controller anlegen im Projekt unter

    my_first_symfony/src/Controller/ArticleController.php

    Inhalt ArticleController.php

        {% PHP
    
    namespace App\Controller;
    
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\Response;
    
    
    class ArticleController
    {
        /**
         * @Route("/")
         *
         */
    
        public function index(){
            return new Response("index-seite");
        }
    
        /**
         * @Route("/show")
         *
         */
    
        public function foo(){
            return new Response("show-seite");
        }
    
        /**
         * @Route("/show/ja-is-klar")
         */
    
        public function bla(){
            return new Response("show/ja-is-klar-seite");
        }
    
        /**
         * @Route("/show/{slug}")
         */
    
        public function blub($slug){
            return new Response(sprintf(
                "der Part nach dem slash hinter show: %s", $slug
            ));
        }
    
        /**
         * @Route("/show/{id}", methods={"GET","POST"})
         *
         */
    
        public function show($id){
            return new Response($id);
        }
    }
    

    top

    github clone vs. pull

    31. Januar 2020

    verwende clone, wenn das Verzeichnis lokal noch nicht existiert oder du einen sauberen Clon des Repositoys benötigst, beinhaltet auch gleich den den Remote-Pfad (origin)

    git clone benutzername@host:/pfad/zum/repositoryName.git
    

    erzeugt im aktuellen Verzeichnis das repositoryName, sonst einfach in das Verzeichnis repositoryName wechseln und dort pullen

    Für einen Upload bearbeiteter Dateien müssen die Credentials für das Repository genommen werden!

    git init nicht nötig

    git config user.email "test@myexample.com"
    git config user.name "myName"
    

    danach das übliche

    git push -u origin master
    

    top

    VirtualBox Host-Only-Adaper

    07. Februar 2020

    VirtualBox unter Cinnamon: Datei->Host-Only Netzwerk-Manager / unter LXDE: Datei->Einstellungen->Netwzerk->Host-only Netzwerk Tab

    Adapter-Einstellungen und DHCP-Einstellungen vornehmen, DHCP muss offenbar aktiviert sein

    In der VM feste IP vergeben

    Bilder

    top

    Terminal MySQL User/Datenbank anlegen/löschen/PW ändern

    07. Februar 2020

    als root anmelden

    sudo su

    an Datenbank anmelden

    mysql

    alle DB Benutzer anzeigen lassen

        mysql> SELECT user from mysql.user;
        +------------------+
        | user             |
        +------------------+
        | debian-sys-maint |
        | mysql.session    |
        | mysql.sys        |
        | testuser         |
        | root             |
        +------------------+
        5 rows in set (0.00 sec)
    

    User löschen

        DROP USER 'testuser'@'localhost';
    

    User anlegen

        mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD_HERE';
        Query OK, 0 rows affected (0.00 sec)
    

    alle Datenbanken anzeigen lassen

        mysql> SHOW DATABASES;
        +--------------------+
        | Database           |
        +--------------------+
        | information_schema |
        | mysql              |
        | performance_schema |
        | sys                |
        | mytestdb           |
        +--------------------+
        5 rows in set (0.04 sec)
    

    Datenbank löschen

        mysql> DROP DATABASE mytestdb;
        Query OK, 249 rows affected (6.33 sec)
    

    Datenbank anlegen

        mysql> CREATE DATABASE mytestdb;
        Query OK, 1 row affected (0.05 sec)
    

    Benutzer zur Datenbank mytestdb mit PRIVILEGES ALL hinzufügen

        mysql> GRANT ALL PRIVILEGES ON mytestdb.* TO 'testuser'@'localhost';
        Query OK, 0 rows affected (0.00 sec)
    

    Benutzerrechte ausführen

        mysql> flush privileges;
        Query OK, 0 rows affected (0.01 sec)
    

    root abmelden, anmelden als USER testen

        exit;
        
        mysql -h'localhost' -u'testuser' -p
        Enter password:
        Welcome to the MySQL monitor.  Commands end with ; or \g.
        Your MySQL connection id is ...
        Server version: ...
    
        Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
    
        Oracle is a registered trademark of Oracle Corporation and/or its
        affiliates. Other names may be trademarks of their respective
        owners.
    
        Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
        mysql>
    

    PW ändern

        ALTER USER 'testuser'@'localhost' IDENTIFIED BY 'NeuesPasswort';
    

    top

    P24 Klon nginx

    09. April 2020

    P24 Klon

    Schritt 1: Virtualbox

    Schritt 2: System einrichten

    • netplan
    network:
        version: 2
        renderer: networkd
        ethernets:
          enp0s3:
            dhcp4: no
            addresses: [192.168.XXX.XXX/24]
            gateway4: 192.168.XXX.1
            nameservers:
              addresses: [192.168.XXX.1,194.150.168.168]
    
    • update, upgrade, autoremove

    Schritt 3: LEMP Server

    sudo add-apt-repository ppa:ondrej/php
    ENTER
    sudo apt-get update
    sudo apt-get install php7.0-fpm
    
    • restliche php7.0-Erweiterungen installieren, wie oben im Link vorgeschlagen
    sudo apt install php7.0-mysql php7.0-curl php7.0-zip php7.0-gd php7.0-xml php7.0-mbstring
    
    • prüfen
    php -m
    
    • neustarten
    sudo service php7.0-fpm restart
    sudo nginx -t
    sudo systemctl reload nginx (.conf neu einlesen) ***ODER*** systemctl restart nginx (runterfahren, hochfahren)
    

    Schritt 4: ioncube

    cd /tmp && wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
    tar xvfz ioncube_loaders_lin_*.gz
    
    • PHP Erweiterungsverzeichnis finden
    php -i | grep extension_dir
    # extension_dir => /usr/lib/php/20151012 => /usr/lib/php/20151012
    
    • ioncube-loader in das Verzeichnis kopieren
    sudo cp /tmp/ioncube/ioncube_loader_lin_7.0.so /usr/lib/php/20151012/
    
    • ioncube.ini mit Pfad zur zend_extension anlegen
    cd /etc/php/7.0
    sudo su
    echo "zend_extension = /usr/lib/php/20151012/ioncube_loader_lin_7.0.so" > /etc/php/7.0/mods-available/ioncube.ini
    exit
    
    • Symlinks zu den mods-available erstellen
    sudo ln -s /etc/php/7.0/mods-available/ioncube.ini /etc/php/7.0/cli/conf.d/00-ioncube.ini
    sudo ln -s /etc/php/7.0/mods-available/ioncube.ini /etc/php/7.0/fpm/conf.d/00-ioncube.ini
    
    • php7.0-fpm neustarten
    sudo systemctl restart php7.0-fpm
    
    • php-Version und Einbindung ioncube prüfen
    php -v
    
    #PHP 7.0.33-26+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Mar 20 2020 15:01:06) ( NTS )
    #Copyright (c) 1997-2017 The PHP Group
    #Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    #    with the ionCube PHP Loader + ionCube24 v10.3.9, Copyright (c) 2002-2019, by ionCube Ltd.
    #    with Zend OPcache v7.0.33-26+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies
    

    Schritt 5: MariaDB

    sudo apt install mariadb-server mariadb-client
    sudo mysql_secure_installation
    sudo su
    mysql
    CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD_HERE';
    CREATE DATABASE mytestdb;
    GRANT ALL PRIVILEGES ON mytestdb.* TO 'testuser'@'localhost';
    FLUSH PRIVILEGES;
    

    Schritt 6: Webserver-Verzeichnis behandeln

    sudo usermod -aG www-data USER (abmelden, anmelden!!)
    sudo mkdir /var/www/html/shop
    sudo chown -R www-data:www-data /var/www/
    
    sudo find /var/www -type d -exec chmod g+s {} +
    

    Schritt 7: Daten holen

    mysqldump -h 127.0.0.1 -u Benutzername -p --opt Datenbankname > /Verzeichnis/Dateiname.sql
    
    • Files nach /var/www/html
    • Beispiel, wenn es direkt vom Hoster gezogen werden soll
    rsync -avp -P --exclude=/files/documents/ --exclude=/staging --exclude=/var/cache/production* --exclude=/web/ --exclude=/xxx_useless_xxx SERVER:/VERZEICHNISSE/web/shop/ .
    
    • sonst einfach rsyncen, Verzeichnisse neu anlegen/beschreibbar machen:
      • var (wichtig zum Anfang, sonst Server-Fehler)
      • web (wichtig zum Anfang, sonst Server-Fehler)
      • files
      • media
      • engine/Shopware/Plugins/Community
    mysql -h 127.0.0.1 -u Benutzername -p Datenbankname < /Verzeichnis/Dateiname.sql
    
    • s_core_shops anpassen, dabei SSL überall abschalten (secure = 0), base_path NICHT SETZEN !!!
    SELECT * FROM s_core_shops\G
    
    *************************** 1. row ***************************
                      id: 1
                 main_id: NULL
                    name: Deutsch
                   title: NULL
                position: 0
                    host: www.packing24.de
               base_path: /shop
                base_url: NULL
                   hosts: www.packing24.de packing24.de
                  secure: 1
             template_id: 43
    document_template_id: 43
             category_id: 3
               locale_id: 1
             currency_id: 1
       customer_group_id: 1
             fallback_id: NULL
          customer_scope: 0
                 default: 1
                  active: 1
    1 row in set (0.00 sec)
    
    UPDATE s_core_shops SET host = '192.168.XXX.XXX', base_path = '', hosts = '192.168.XXX.XXX', secure = 0 WHERE id = 1;
    SELECT * FROM s_core_shops\G
    
    *************************** 1. row ***************************
                      id: 1
                 main_id: NULL
                    name: Deutsch
                   title: NULL
                position: 0
                    host: 192.168.XXX.XXX
               base_path:
                base_url: NULL
                   hosts: 192.168.XXX.XXX
                  secure: 0
             template_id: 43
    document_template_id: 43
             category_id: 3
               locale_id: 1
             currency_id: 1
       customer_group_id: 1
             fallback_id: NULL
          customer_scope: 0
                 default: 1
                  active: 1
    1 row in set (0.00 sec)
    

    Schritt 8: NGINX konfigurieren

    sudo mv /etc/nginx /etc/nginx.original
    sudo git clone https://github.com/bcremer/shopware-with-nginx.git /etc/nginx/
    
    • Konfigurationen anpassen
    ***example.com.conf***
    
    server {
        listen 80;
        #listen 443 ssl http2;
    
        server_name 192.168.XXX.XXX;
        root /var/www/html/shop;
    
        ## Access and error logs.
        access_log /var/log/nginx/example.com.access.log;
        error_log  /var/log/nginx/example.com.error.log;
    
        set $shopware_env 'production';
        set $fpm_upstream php-fpm;
    
        ## Server certificate and key.
        #ssl_certificate      ssl/example.com.crt;
        #ssl_certificate_key  ssl/example.com.key;
    
        #ssl_session_cache   shared:SSL:10m;
        #ssl_session_timeout 10m;
    
        ## see: https://github.com/cloudflare/sslconfig
        #ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
        #ssl_ciphers               EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:EECDH+RC4:RSA+RC4:!MD5;
        #ssl_prefer_server_ciphers on;
    
        ## Include shopware configuration.
        include global/shopware.conf;
    }
    
    sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
    
    
    ***upstream.conf***
    
    ## Upstream to abstract backend connection(s) for PHP.
    upstream php-fpm {
        server unix:/var/run/php/php7.0-fpm.sock;
        server 127.0.0.1:9000;
    
        ## Create a backend connection cache.
        keepalive 32;
    }
    
    sudo chown -R www-data:www-data /var/www/
    sudo nginx -t
    sudo systemctl reload nginx (.conf neu einlesen) ***ODER*** systemctl restart nginx (runterfahren, hochfahren)
    

    Schritt 9: Virtuelle URL

    • virtuelle URL im Backend eintragen: /shop

    Was mir sonst noch einfällt

    sudo bin/console sw:cache:clear
    cat /var/log/nginx/example.com.access.log
    cat /var/log/nginx/example.com.error.log
    ll /run/php/
    

    top

    Processwire Daten aus Repeater von Kategorie holen

    18. Juni 2020

    Aufbau der Kategorien:

      - HOME
      -- Kategorie
      --- Subkategorie mit Repeater, darin z.B. Beschreibung (Titel) und Bilder

    Daten finden anhand des Template-Namens:

    foreach($pages->find('template=NAME_DES_TEMPLATES') as $test) {
         foreach($test as $t){
            echo $t->beschreibung;
            foreach($t->images as $i){
                echo $i->url;
            }
        }
    }
    

    Bilder

    top

    Docker Installation Linux Mint 18.2 Sonya (Ubuntu Xenial)

    26. Juni 2020

    https://docs.docker.com/engine/install/debian/

    sudo apt-get update
    
    sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common
    
    curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

    Fingerprint abgleichen

    sudo apt-key fingerprint 0EBFCD88

    Repository anlegen, bei Mint lsb_release -cs durch xenial ersetzen

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"

    docker-ce installieren

    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io

    den User zur Gruppe docker hinzufügen

    sudo usermod -aG docker USERNAME

    in die Gruppe docker wechseln ohne an- und abmelden

    newgrp - docker

    top

    Docker Apache PHP MariaDB für Processwire

    03. Juli 2020

    # Ordner für Webinhalte und Datenbankordner anlegen
    mkdir /PFAD/ZUM/ORDNER/
    mkdir /PFAD/ZUM/DATENBANKORDNER/
    
    # eigenes Netzwerk kreiren
    docker network create my-network
    docker network ls
    
    # MariaDB pullen
    # Environment Variables übergeben
    # starten
    docker container run -ti --name mymariadb -h mymariadb --net my-network -v  /PFAD/ZUM/DATENBANKORDNER/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=pw_database -e MYSQL_USER=testuser -e MYSQL_PASSWORD=geheim mariadb:10.3
    
    # Datei in /PFAD/ZUM/ORNER/ legen
    nano index.php 
    # phpinfo();
    # oder direkt mal die Abfrage einbauen
    $dbhost = 'IP.DES.DB.CONTAINERS:3306';
    $dbuser = 'testuser';
    $dbpass = 'geheim';
    $db = 'pw_database';
    
    try {
      $conn = new PDO("mysql:host=$dbhost;dbname=pw_database", $dbuser, $dbpass);
      // set the PDO error mode to exception
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      echo "Connected successfully";
    } catch(PDOException $e) {
      echo "Connection failed: " . $e->getMessage();
    }
    
    # Apache mit PHP 7.2 pullen
    # Verzeichnis einbinden 
    # auf Port 8080 starten
    # pdo_mysql mitinstallieren
    docker container run -ti --name myapache -h myapache --net my-network -p 8000:80 -v /PFAD/ZUM/ORDNER/:/var/www/html/ php:7.2-apache bash -c "docker-php-ext-install pdo_mysql gd; apache2-foreground"
    
    # eventuell adminer
    docker container run -ti --name myadminer -h myadminer --net my-network -p 8080:8080 adminer:4.7
    

    top

    Docker Processwire

    04. Juli 2020

    docker container run -ti --name pw -h pw --net my-network -p 8002:80 -v /PFAD/ZUM/PW-ORDNER/:/var/www/html/ php:7.2-apache bash -c "docker-php-ext-install mysqli pdo_mysql gd zip; apache2-foreground"

    weitere Optionen:
    bcmath bz2 calendar ctype curl dba dom enchant exif fileinfo filter ftp gd gettext gmp hash iconv imap interbase intl json ldap mbstring mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell readline recode reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer wddx xml xmlreader xmlrpc xmlwriter xsl zend_test zip

    top

    Mint LXC/LXD

    11. August 2020

    sudo apt update && sudo apt upgrade -y
    
    /*nur, wenn snap erforderlich */
    //sudo apt install snapd
    //sudo snap install lxd
    /* sonst einfach nur */
    
    sudo apt install lxd
    sudo usermod -aG lxd USERNAME

    Ausloggen/Einloggen/Neustart oder

    newgrp lxd

    initialisieren

    lxd init

    Manchmal ist die Sprache auf deutsch eingestellt (lxc Abbild list), dann einfach die Datei umbenennen
    https://github.com/lxc/lxd/issues/7864

    sudo mv /usr/share/locale-langpack/de/LC_MESSAGES/lxd.mo /usr/share/locale-langpack/de/LC_MESSAGES/lxd.mo.bak

    top

    Send-Only SMTP Server mit postfix

    25. November 2020

    digitalocean Beschreibung

    sudo apt update
    sudo apt install mailutils
    • Internet Site wählen
    • (sudo dpkg-reconfigure postfix) falls nicht angezeigt wird
    • bspw. eintragen: mail-test.lxd
    sudo nano /etc/postfix/main.cf
    
    . . .
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = all
    . . .

    ändern in

    . . .
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = loopback-only
    . . .

    Domain Namen anpassen/eintragen, falls nicht automatisch hinterlegt

    . . .
    mydestination = $myhostname, YOUR_DOMAIN localhost.com, , localhost
    . . .

    wird z.B. zu

    . . .
    mydestination = $myhostname, mail-test.lxd, localhost.lxd, , localhost
    . . .

    Verschlüsselung aktivieren

    smtp_tls_security_level = may

    ändern in

    smtp_tls_security_level = encrypted

    Der header sollte dann folgendes enthalten
    Received: from Meinserver (meine-reverse-dns [Meine IP]) by Derserver (Postfix) with ESMTPSA id 0E523340030E for ; Tue, 8 Apr 2014 10:21:11 +0200 (CEST)

    Neustart postfix

    After modifying main.cf, be sure to run 'systemctl reload postfix'.

    testen

    echo "This is the body of the email" | mail -s "This is the subject line" EMPFAENGER@EMAIL.NET

    Option FROM, hier wird der angegebene Hostname angehängt, also z.B. sender@mail-test.lxd

    echo "This is the body of the email" | mail -s "This is the subject line" -a FROM:sender EMPFAENGER@EMAIL.NET

    oder für eine vollständig angehängte E-Mail-Adresse

    echo "This is the body of the email" | mail -s "This is the subject line" -a FROM:sender@ANDERE_EMAIL.NET EMPFAENGER@EMAIL.NET

    top

    LXC Backup und Restore

    24. Februar 2021

    lxc list
    +------------------------+---------+------+------+------------+----------------+
    |          NAME          | STATUS  | IPV4 | IPV6 |    TYP     | SCHNAPPSCHÜSSE |
    +------------------------+---------+------+------+------------+----------------+
    | sound                  | STOPPED |      |      | PERSISTENT | 0              |
    +------------------------+---------+------+------+------------+----------------+
    
    lxc publish sound --alias sound-image
    lxc image list
    +---------------------------+---------------+--------+------------------------------------+--------+-----------+------------------------------+
    |           ALIAS           | FINGERABDRUCK | PUBLIC |            BESCHREIBUNG            |  ARCH  |   GRÖßE   |        HOCHLADEDATUM         |
    +---------------------------+---------------+--------+------------------------------------+--------+-----------+------------------------------+
    | sound-image               | b0bbea15b6d0  | Nein   |                                    | x86_64 | 462.06MB  | Jan 1, 1970 at 0:00am (UTC)  |
    +---------------------------+---------------+--------+------------------------------------+--------+-----------+------------------------------+
    
    // erstellt ein tar.gz, keine Endung angeben!
    lxc image export sound-image /PATH/TO/sound-image
    Image exported successfully!
    
    ls -la /PATH/TO/ | grep sound-image
    -rw-rw-r--  1 nobody nobody 477997725 Jan 01 00:00 sound-image.tar.gz
    
    // Restore
    lxc image import sound-image.tar.gz --alias sound-image
    
    // Starten
    lxc launch sound-image sound
    

    top

    Installation und Einrichtung MySQL Datenbank mit Fernzugriff

    12. März 2021

    ### First install ###
    sudo apt install mysql-server-5.7
    systemctl status mysql
    sudo mysql_secure_installation
    sudo mysql -u root -p
    
    ### external access ###
    nano /etc/mysql/mysql.conf.d/mysqld.cnf
    bind-address            = 0.0.0.0
    systemctl restart mysql
    
    ### Preparing ###
    CREATE DATABASE db;
    CREATE USER 'User'@'ip_address' IDENTIFIED BY 'password;
    GRANT ALL PRIVILEGES ON db.* TO 'User'@'ip_address';
    flush privileges;
    
    ### Check ###
    SELECT user,authentication_string,plugin,host FROM mysql.user;
    
    +------------------+-------------------------------------------+-----------------------+---------------+
    | user             | authentication_string                     | plugin                | host          |
    +------------------+-------------------------------------------+-----------------------+---------------+
    | root             |                                           | auth_socket           | localhost     |
    | mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost     |
    | mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost     |
    | debian-sys-maint | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost     |
    |             User | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | ip_address    |
    +------------------+-------------------------------------------+-----------------------+---------------+
    
    ### (Re-)Install ###
    DROP DATABASE db;
    CREATE DATABASE db;
    GRANT ALL PRIVILEGES ON db.* TO 'User'@'ip_address';
    flush privileges;
    

    top

    Komplettinstallation LAMP + Shopware 6 in LXC-Container

    18. April 2021

    lxc launch ubuntu:20.04 knorke-sw6-18042021
    lxc exec knorke-sw6-18042021 bash
    adduser peejay
    usermod -aG sudo peejay
    usermod -aG ssh peejay
    usermod -aG www-data peejay
    su peejay
    sudo nano /etc/ssh/sshd_config
    sudo systemctl restart ssh
    sudo systemctl restart sshd
    sudo apt update && sudo apt dist-upgrade -y
    sudo apt install software-properties-common
    sudo apt autoremove
    sudo locale-gen de_DE.UTF-8
    sudo update-locale LANG=de_DE.UTF-8
    sudo add-apt-repository -y ppa:ondrej/apache2
    sudo apt update && sudo apt dist-upgrade -y
    sudo apt install apache2 -y
    sudo apachectl -v
    sudo apt install libapache2-mod-php7.4
    sudo a2enmod rewrite
    sudo systemctl restart apache2
    sudo nano /etc/php/7.4/apache2/php.ini
    sudo systemctl reload apache2
    sudo apt update && sudo apt dist-upgrade -y
    sudo apt install -y mysql-server mysql-client
    mysql -V
    sudo add-apt-repository -y ppa:ondrej/php
    sudo apt update && sudo apt dist-upgrade -y
    sudo apt install -y php7.4 php7.4-{cli,fpm,common,curl,gd,intl,json,mbstring,mysql,xml,zip}
    
    # Creating config file /etc/php/7.4/fpm/php.ini with new version
    # NOTICE: Not enabling PHP 7.4 FPM by default.
    # NOTICE: To enable PHP 7.4 FPM in Apache2 do:
    # NOTICE: a2enmod proxy_fcgi setenvif
    # NOTICE: a2enconf php7.4-fpm
    # NOTICE: You are seeing this message because you have apache2 package installed.
    
    php -v
    
    sudo a2enmod proxy_fcgi setenvif
    sudo systemctl restart apache2
    sudo apachectl -M
    
    # https://getcomposer.org/download/
    cd ~
    sudo mv composer.phar /usr/local/bin/composer
    sudo chown -R root:root /usr/local/bin/composer
    composer --version
    sudo apt install nodejs npm
    node -v
    npm -v
    git --version
    
    
    +++++++++++++
    
    sudo nano /etc/hosts (127.0.0.1 shopware6.localdomain)
    sudo mkdir -p /var/www/html/shopware6
    sudo chown -R $USER:$USER /var/www/html/shopware6
    # später? sudo chown -R www-data:www-data /var/www/html/shopware6
    sudo chmod -R 755 /var/www/html/shopware6
    sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/shopware6.localdomain.conf
    sudo nano /etc/apache2/sites-available/shopware6.localdomain.conf
    +VirtualHost *:80+
            ServerName shopware6.localdomain
            ServerAdmin name@knorke.de
            DocumentRoot /var/www/html/shopware6/public
            Include /etc/apache2/conf-available/php7.4-fpm.conf
            ErrorLog ${APACHE_LOG_DIR}/shopware6.localdomain--error.log
            CustomLog ${APACHE_LOG_DIR}/shopware6.localdomain--access.log combined
     
            +Directory /var/www/html/shopware6+
                    Options -Indexes +FollowSymLinks +MultiViews
                    AllowOverride All
                    Require all granted
            +/Directory+
    +/VirtualHost+
    sudo a2ensite shopware6.localdomain
    sudo apachectl configtest
    sudo systemctl reload apache2
    
    sudo mysql -u root
    CREATE DATABASE shopware6;
    CREATE DATABASE shopware6_test;
    CREATE DATABASE shopware6_e2e;
    CREATE USER 'shopware6_dbuser'@'localhost' IDENTIFIED BY 'shopware6_dbpassword';
    GRANT ALL PRIVILEGES ON shopware6.* TO 'shopware6_dbuser'@'localhost';
    GRANT ALL PRIVILEGES ON shopware6_test.* TO 'shopware6_dbuser'@'localhost';
    GRANT ALL PRIVILEGES ON shopware6_e2e.* TO 'shopware6_dbuser'@'localhost';
    FLUSH PRIVILEGES;
    set global log_bin_trust_function_creators=1;
    quit
    
    cd /var/www/html
    git clone https://github.com/shopware/development.git shopware6
    cd /var/www/html/shopware6
    ./bin/setup
    
    
    # bei Problemen mit slash am Ende
    # sudo nano /etc/apache2/sites-available/shopware6.localdomain.conf
            +Directory /var/www/html/shopware6+
                    DirectorySlash On
                    Options -Indexes +FollowSymLinks +MultiViews
                    AllowOverride All
                    Require all granted
            +/Directory+
    

    top

    eigenes (v40)-git-repository

    15. Dezember 2021

    # auf dem Server
    • mkdir git-repos
    • cd git-repos/

    auf v40 ist das Verzeichnis bereits vorhanden (/home/git/)


    ### das Repo-Verzeichnis anlegen und als bare initialisieren
    • mkdir repo1.git
    • cd repo1.git/
    • git init --bare

    # auf dem Client in einem Verzeichnis
    • git clone /PATH/TO/DESTINATION/repo1.git/ (klont ein leeres Verzeichnis)
    • cd repo1.git/
    • git config user.name "xxx"
    • git config user.email "xxx@xxx.xx"

    ### im neuen Verzeichnis arbeiten
    • touch test
    • git add .
    • git commit -m "xxx"
    • git push

    top

    No wordpress needed, just made with the brilliant PROCESSWIRE CMS

    Diese Webseite ist noch im Aufbau!