IT-Solutions for Special Requirements

Kategorie: IT-Services Seite 1 von 4

Server

Fast docker with Nginx, MariaDB and Php, Part IV

Nach dem erstellen der :

  • DB Container auf Basis von mariadb:10.1.48
  • PHP Container auf Basis von php:7.4-fpm
  • SCP Container auf Basis von atmoz/sftp

benötigen wir noch einen Nginx Container der zum Host Port 80 freigibt.

Die Konfiguration für den Nginx Container inkl. der Anhängigkeiten zu den Containern aus Part I-III sieht wiefolgt aus:

version: '3'
services:
  web:
    image: nginx:latest
    depends_on: 
      - sftp
      - php
      - db
    ports:
      - '80:80'
    volumes:
      - template-html:/var/www/html    
      - ./container/web/nginx.conf:/etc/nginx/conf.d/default.conf    

Ebenso wie der Php Container und der Sftp Container mountet der Nginx Container das template-html Volume.

Das Config-File ./container/web/nginx.conf wird in das Host-Dateisystem gemounet um einfach editiert zu werden.

Das gesamte Projekt befindet hier auf https://github.com/getit-berlin/fast-docker-php-template

Fast docker with Nginx, MariaDB and Php, Part III

Die Anwendungsdaten unter /var/www/html werden nicht in das Hostsystem gemountet. Das wurde im Fast Docker Part II beschrieben. Das Directory /var/www/html wird in das volume gemountet:

    volumes:
      - template-html:/var/www/html

Um in dem Volume zu schreiben benötigen wir einen weiteren container. Dieses Verfahren beschleunigt radikal die Funktionsweise der Container. Daten werden nicht in das Hostsystem gemountet sondern bleiben im Container und im Besten Fall sogar im Cache und Arbeitsspeicher.

Die Konfiguration des sftp / scp Dienstes sieht wiefolgt aus:

  sftp:
    image: atmoz/sftp
    volumes:
      - template-html:/home/${SFTP_USER}/upload
    ports:
        - "${SFTP_PORT}:22"
    command: ${SFTP_USER}:${SFTP_PASS}:33

Als Basis für den Container wird atmoz/sftp verwendet.

Die entsprechenden Parameter werden über die .env Datei festgelegt.

SFTP_HOST=127.0.0.1
SFTP_PORT=2222
SFTP_USER=runner
SFTP_PASS=pass

Die Zeile:

command: ${SFTP_USER}:${SFTP_PASS}:33

legt fest welcher Systemuser den angemeldeten SCP /SFTP User representiert.

Das entsprechende Github Projekt kann man unter https://github.com/atmoz/sftp finden.

Das gesamte Projekt befindet hier auf https://github.com/getit-berlin/fast-docker-php-template

Fast docker with Nginx, MariaDB and Php, Part II

Im letzen Beitrag zum Thema fast docker Part I habe ich einen einfachen DB Container erstellt. Hier folgt jetzt der dazugehörige Php Container:

  php:
    ports:
      - '22:22'  
    build: ./container/php/.
    volumes:
      - template-html:/var/www/html
      - ./container/php/php.ini:/usr/local/etc/php/php.ini
      - ./container/php/log.conf:/usr/local/etc/php-fpm.d/zz-log.conf      
    environment:
      PHP_OPCACHE_VALIDATE_TIMESTAMPS: 1  

volumes:
  template-html:

Die Datei php.ini wurde nach „außen“ in den Ordner container/php/ gelegt. Damit ist sie im auch nach dem Build und Deploy leicht veränderbar.

Das Volume template-html wird alle Anwendungsdaten beinhalten. Es entspricht dem /var/www/html directory.

Das Volume wird nicht nach außen gemountet.

Das Docker Container File Dockerfile beinhaltet weitere Pakete für den php container, wie z.B. zip, mysql, opcache, gd, composer, git, wget, apcu, imagemagick und basiert auf PHP 7.4-fpm:

FROM php:7.4-fpm
USER root
RUN apt-get update --fix-missing

RUN apt-get install --yes libicu-dev
RUN apt-get install --yes libjpeg62-turbo-dev
RUN apt-get install --yes libfreetype6-dev
RUN apt-get install --yes libpng-dev
	
RUN docker-php-ext-install -j$(nproc) mysqli pdo_mysql opcache
RUN docker-php-ext-configure gd --with-freetype --with-jpeg 
RUN docker-php-ext-install -j$(nproc) gd
RUN docker-php-ext-configure intl && \
    docker-php-ext-install -j$(nproc) intl
	
ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS="0"
ADD opcache.ini "$PHP_INI_DIR/conf.d/opcache.ini"	

RUN cd /usr/src && \
    curl -sS http://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
	
RUN apt-get install --yes sudo
	
RUN apt-get install --yes unzip
RUN apt-get install --yes zip

RUN apt-get install --yes git
RUN apt-get install --yes bzip2	
RUN apt-get install --yes libbz2-dev	
RUN docker-php-ext-install bz2	

RUN apt-get install --yes wget

RUN apt-get install -y default-mysql-client

RUN apt-get install -y \
        libzip-dev \
        zip \
  && docker-php-ext-install zip

# APCU
RUN pecl channel-update pecl.php.net 
RUN pecl install apcu igbinary 
RUN docker-php-ext-enable apcu igbinary 

# IMAGICK
RUN apt-get update && apt-get install -y libmagickwand-dev --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN printf "\n" | pecl install imagick
RUN docker-php-ext-enable imagick
RUN apt-get update && apt-get install -y imagemagick

RUN docker-php-source delete

#USER www-data
USER root

Die Datei opcache.ini wird für den opcache gebraucht.

Das gesamte Projekt befindet hier auf https://github.com/getit-berlin/fast-docker-php-template

Fast docker with Nginx, MariaDB and Php, Part I

Nach vielen Versuchen und Messungen der Perfomance unter Last habe ich folgendes docker-compose.yaml erstellt.

Hier ist erstmal die Definition des DB Containers:

  db:
    image: mariadb:10.1.48
    container_name: ${DB_HOST}
    restart: always
    ports:
      - '3306:3306'
    volumes:
        - template-db:/var/lib/mysql
    command: ['mysqld', '--character-set-server=${DB_CHARSET}', '--collation-server=${DB_COLLATION}']
    environment:
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASS}
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
      
volumes:
  template-db:

Die verschiedenen Variablen werden via .env File festgelegt.

DB_HOST=deployment-db-2
DB_USER=run
DB_PASS=ldisfk24esf
DB_ROOT_PASS=ldiamQa943
DB_NAME=my_db
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci

Die Datenbank ist vom Host unter dem dem Port: 3306 und dem localhost erreichbar. Innerhalb der Docker-Container ist die Datenbank unter dem Host deployment-db-2 erreichbar.

Docker Desktop und WSL2

Um WSL 2 in einer Docker Desktop Umgebung unter Windows zu nutzen bedarf es ein wenig Konfiguration.

wsl.exe -l -v

wsl.exe --set-default-version 2

In den Eigenschaften des Docker Desktops kann man die Distribution unter Settings -> Resources -> WSL Integration einstellen.

Ich empfehle Ubuntu 🥳

Putty auto-login

Natürlich sollte man keine Passwörter einfach so irgendwo ablegen. Aber wenn man es dann doch machen sollte, dann kann man es auch so machen:

putty.exe -ssh groot@127.0.0.1 -pw dasGeheimePasswort

Man kann das auch mit SSH-Keys machen, dann aber im .PPK-Format.

PHP Update unter Laragon

Je nachdem wann man Laragon heruntergeladen und installiert hat, mag es sein, dass man einen alte PHP Version hat.

Das merkt man dann, wenn Composer einem bei:

composer update 

einen Fehler zurück gibt.

Wie macht man das nun bei Laragon? Wie aktualisiert man nun die PHP Version?

„Rechtsklick“ unter Laragon und dann in das Verzeichnis wechseln

Von https://windows.php.net/download/ die entsprechenden Version runterladen und diese in dem Verzeichnis entpacken.

Diese Version dann im Laragon Kontextmenü auswählen und Laragon Dienste restarten. 🥳 Fertig!

Back in buisness …

Ok, enough is enough! Enough cake, enough Binge Watching, enough boardgames and old shool gaming (have you seen remastered versions of our childhood games? 😮🤩) …

More templates: We updated JoomLavel/documentation and we are proud to announce that more templates for JoomLavel/connect will be published on github.com/JoomLavel/templates soon. Templates enhance JoomLavel/connect functionality and are nearly finished.

Laravel Joomla DB Integration: Finally we are about to publish JoomLavel/JoomaDbLink. This component of the JoomLavel platform allows to integrate Joomla Database with Lumen or Laravel in an easy intuitiv way (eloquent).

So stay tuned 🥳

JoomLavel Use Cases

Ok, JoomLavel, allows to integrate Laravel and Joomla but, how does this work? Here are four use cases how to integrate them together.

completeheavy on Joomlaheavy on LaravelOpenAPI
JL/LaravelAdapter
rapidly generate Joomla
component
JL/Connect
rapidly generate Joomla
component
JL/Connect
rapidly generate Joomla
component
JL/JoomlaAdapter
rapidly connect Laravel
to Joomla DB
JL/JoomlaDbLink
rapidly connect Laravel
to Joomla DB
<SETTINGS>
connect api adapter with
adapter component
<SETTINGS>
connect component with
remote laravel api
<SETTINGS>
sync .env with
configuration.php
<SETTINGS>
connect component with
remote OpenAPI definied
endpoint
<DEV>
enchance both adapter
with custom code
<DEV>
enchance laravel
with custom code
<DEV>
develope representation
by custom code
Use Cases for JoomLavel platform

Every step in the integration process is done with RAD tools for rapid developement. A complete integration of Joomla and Laravel can be done in some minutes. Feel free to contact us if you want to know more.

More info on: http://JoomLavel.io or join us in github/joomlavel

JoomLavel Connect, Create Components rapidly (RAD)

we have finished a first MVP of our JoomLavel component generator.

Simply checkout our public github project:

git clone https://github.com/JoomLavel/connect.git & compose

php JoomLavel make:component BobsFirstComponent --zip --verbose

… and enjoy component generation

In the working dirctory you can adjust your new component and import it as a zip file on a Joomla instance.

In general, RAD approaches to software development put less emphasis on planning and more emphasis on an adaptive process.

wikipedia.org/wiki/Rapid_application_development

Seite 1 von 4

Präsentiert von WordPress & Theme erstellt von Anders Norén