IT-Solutions for Special Requirements

Schlagwort: git

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

Git Cheat: Merge

git branch development
git add *
git commit -m "My initial commit message"
git push -u origin development

git checkout master
git merge development
git push -u origin master

Hier eine kleiner Codeschnipsel für eine git merge. Hier findet man die offiziele man-page: https://git-scm.com/docs/git-merge

Git Cheat: User

Anzeigen
git config --global --list
git config --global user.name
git config --global user.email

Editieren
git config --global user.name="xxx"
git config --global user.email="xx@xx.xx"

Löschen
git config --unset user.name
git config --unset user.email

Hier ein Codeschnipsel zur manipulation des Git-Users. Hier findet man die offiziele man-page: https://git-scm.com/docs/git-config

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

make configuration.php beautiful

Joomla has a quite ugly configuration file. configuration.php is cluttered and sorted i a very strange way?

<?php
class JConfig {
	public $offline = '1';
	public $offline_message = 'Wartungsmodus';
	public $display_offline_message = '1';
	public $offline_image = '';
	public $sitename = 'joomlavel-joomla-dev';
	public $editor = 'tinymce';
	public $captcha = '0';
	public $list_limit = '20';
	public $access = '1';
	public $debug = '0';
	...
	...
	...
	public $feed_email = 'none';
	public $log_path = '/logs';
	public $tmp_path = '/tmp';
	public $lifetime = '15';
	public $session_handler = 'database';
	public $shared_session = '0';
}

I really like https://12factor.net/ and its twelve-factor app approach. configuration recommendation is to seperate config in a way that they are language- and OS-agnostic. But how to do this? Here is our approach:

    public function __construct(){
		if (file_exists(SELF::JoomLavelApiDirectory.'.env')) {
			$env = parse_ini_file (SELF::JoomLavelApiDirectory.'.env',false, INI_SCANNER_RAW);
			$this->sitename = $env['APP_NAME'];
			$this->debug = (int)filter_var($env['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN);;
			$this->live_site = $env['APP_URL'];
			$this->dbtype = $env['DB_CONNECTION'].'i';
			$this->host = $env['DB_HOST'];
			$this->db = $env['DB_DATABASE'];
			$this->user = $env['DB_USERNAME'];
			$this->password = $env['DB_PASSWORD'];
			
			$this->mailfrom = $env['MAIL_FROM_ADDRESS'];
			$this->fromname = $env['MAIL_FROM_NAME'];
			$this->smtpport = $env['MAIL_PORT'];
			$this->smtphost = $env['MAIL_HOST'];
			$this->smtpuser = $env['MAIL_USERNAME'];
			$this->smtppass = $env['MAIL_PASSWORD'];	
		}
		
    }

The configuration.php could also be seperated in blocks:

	#APP
	public $live_site = '';
	public $sitename = "joomla";
	
	#DB
	public $dbtype = 'mysqli';
	public $host = 'localhost';
	public $user = 'groot';
	public $password = '';
	public $db = 'joomlavel-dev';
	public $dbprefix = 'f862e_';
	
	#SESSION
	public $session_handler = 'database';
	public $shared_session = '0';
	public $lifetime = '15';

You can see the files in our Github::JoomLavel project.

We have a baby, we have called it: JoomLavel,

In the last 2 years we have worked in complicated Joomla CMS project. The project has grown and we hit joomla limitations.

How to leave a vendor-lockin and joomla limitations? A REST API might be the solution. The Separation_of_concerns principle describes a seperation of a computer program in distinct sections.

JoomLavel allows you to use a modern laravel API backend in combination with your own joomla application. You can easily add functionalities in the laravel api to enchance joomla functionalities without changing the joomla framework code or joomla components or plugins.

joomLavel name creation

Checkout our Github documentation page:

https://github.com/JoomLavel/documentation

More informations will be published the next days:

Der Kampf um die DEV begonnen hat … Laragon

Laragon = WAMP + Composer + GIT + Framework/CMS Support …

Natürlich mögen wir Vagrant Homestead oder eine schöne Docker Instance, vieleicht auch eine VM oder einen Rootserver.

Laragon hat trotzdem seine Vorteile, Es ist eine „Turnkey“-Solution und das erleichtert das Deployment immens.

Ich brauche schnell eine lokale Joomla Instanz um ein Plugin oder eine Componente zu testen? Ist das WordPress Backup lauffähig? Dann schnell mal ein lokales WP aufsetzen. Ich will entwickeln und brauche eine Lumen oder Laravel basis.

Laragon – Schnell lokale Webseite erstellen

Die einzelnen „Muster“ für das automatische Deployment werden über die „Konfiguration“ eingestellt.

Die sites.conf sieht wie folgt aus:

...
# WordPress
WordPress=https://wordpress.org/latest.tar.gz 

# Joomla
Joomla=https://github.com/joomla/joomla-cms/releases/download/3.9.8/Joomla_3.9.8-Stable-Full_Package.tar.gz

...
# Laravel
Laravel=composer create-project laravel/laravel %s --prefer-dist
Laravel (zip)=https://github.com/leokhoa/quick-create-laravel/releases/download/5.6.21/laravel-5.6.21.7z

Lumen=composer create-project laravel/lumen  %s --prefer-dist
...

Die automatischen vhost sind nützlich. HeidiSQL, Composer, GIT gehören immer dazu und sind dabei.

In Verbindung mit JetBrains IDE Tools z.B. PhpStorm kann man schnell eingene Anwendungen entwickeln.

Github und 1&1

Seit Github seine Politik mit internen Projekten geändert hat, setzen wir es exzessiv ein. *träum* Siehe auch unser Getit-Berlin Github. Oder meine eigene JWalczak Github.

Wie man vielleicht schon mal schmerzlich feststellen musste, kann man von bestimmten 1&1 Verträgen (unser geehrter Kunde hat da ein Paket) nicht so einfach zu Github „pull“en.

Folgender Codesnippsel erleichtert uns die Arbeit …

pl.sh
GIT_SSH=/kunden/homepages/yy/dxxxxxx/htdocs/ssh git pull

und

pu.sh
GIT_SSH=/kunden/homepages/yy/dxxxxxx/htdocs/ssh git push --set-upstream origin master

Man schau sich blos den Dateinamen an 😉 „pu.sh“

Natürlich muss man noch die ssh Datei hinzufügen. Die enhält folgendes:

ssh -o UserKnownHostsFile=/dev/null -i /kunden/homepages/yy/dxxxxxx/htdocs/id_rsa -o StrictHostKeyChecking=no $*

Die id_rsa Datei enthält unseren Github ssh-key. Et voilà push und pull funktionieren wie gewohnt. *puhhh*

NACHTRAG: Natürlich noch chown Rechte beachten.

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