Kategorien
Ansible Server Administration

PHP7 mit Ansible installieren

Mit Ansible kann man sehr einfach alle PHP7 von Ondrej’s Respository installieren mittels der Befehle:

- name: Remove old PHP7 ppa repository
  apt_repository: repo='ppa:ondrej/php-7.0' state=absent

- name: Add PHP7 ppa repository
  apt_repository: repo='ppa:ondrej/php'

- name: Install packages
  apt: pkg={{ item }} state=latest update_cache=yes
  with_items:
   - mysql-client
   - nginx
   - php7.0-cli
   - php7.0-fpm
   - php7.0-dev
   - php7.0-curl
   - php7.0-gd
   - php7.0-mbstring
   - php7.0-mcrypt
   - php7.0-mysql
   - php7.0-soap
   - php7.0-sqlite3
   - php7.0-xml
   - php7.0-zip
   - php7.0-bcmath
   - php7.0-ssh2
   - php-rrd
   - git
   - zlibc
  tags:
   - php
Kategorien
PHP Server Administration

Analyse von sehr großen gzip/bzip2 gepackten Log-Dateien per Stream

Man kann per Stream in PHP beim verarbeiten der Daten sehr große Log-Dateien, die mehrere GB groß sind, sehr leicht analysieren mit Hilfe von Stream Compression Filter.

Damit kann die Datei ohne sie komplett in den Speicher laden zu müssen entpackt und analysiert werden beim Einlesen der Datei.

Dadurch kann man während des einlesens der Log-Datei schon nach beliebigen Stellen im Code suchen:

$file = 'X:/file.log.bz2';
$searchString = '2017-01-01';

if(file_exists($file)){
   $handle = fopen($file, 'r');
   stream_filter_append($handle, 'bzip2.decompress');
   while(!feof($handle)){
      $line = fgets($handle);
      if(strpos($line, $searchString) !== false){
         echo $line;
      }
   }
   fclose($handle);
}
Kategorien
MySQL Server Administration

MySQL Monitoriong der ProcessList / Queries mit einem Konsolen Befehl

Ein hilreicher Befehl für die problem-Analyse von MySQL Servern ist sich die ProcessList anzuschauen, um zu sehen, welche Quueries aktuell ausgeführt werden. Wenn man dies kombiniert mit dem watch Befehl und diesen 1 mal pro Sekunde neuladen lässt und auf die Queries reduziert, hat man eine guter Übersicht, was auf dem MySQL Server los ist und welche Queries problematisch seien könnten:

watch -n 1 "mysql -u root --password='XXX' -h localhost -s -e 'SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE Command=\"Query\";'"

Wichtig ist, den Befehl als root laufen zu lassen, um auch alle Queries zu sehen.

Mit Hilfe des Parameter -n kann man die Aktualisierungrate in Sekunden angeben.

Das MySQL root-Passwort ist zu ergänzen.

 

Ausgabe:

5361925476      user     localhost       NULL    Query   0       executing       SELECT * FROM xxx WHERE yyy

5361925477      user     localhost       NULL    Query   0       executing       UPDATE zzz WHERE zzz
Kategorien
Server Administration

Untersuchung des Traffics zwischen lokaler Rechner und Server am Beispiel von XDebug

Wenn man untersuchen will, was an der Kommunikation vom lokalen Rechner und Server bei XDebug nicht funktioniert, kann man sich den Traffic anschauen auf dem Port 9000, der am Server ankommt:

watch -n 1 "netstat | grep 9000"

//Ausgabe
Every 1.0s: netstat | grep 9000                                                                                          Tue Feb  7 16:01:50 2017

tcp        0      0 name:58572        host.server:9000 ESTABLISHED

und am lokalen PC kann man den Traffic beobachtet:

C:\>netstat  1 | find /i "9000"

//Ausgabe
  TCP    172.17.20.65:9000      server:58440    HERGESTELLT
  TCP    172.17.20.65:9000      server:58440    HERGESTELLT

Wenn Xdebug bis zum lokalen System kommt, erhält man eine Ausgabe wie oben sichtbar (Windows).

Kategorien
PHP Server Administration

PHP auf Linux Konsole on-the-fly ausführen

Wenn man einen kurzen PHP Befehl ausführen will auf der Konsole, kann man mit dem –run Parameter Code schnell und unkompliziert ausführen

php -r "echo 'hello world';"

//Ausgabe
hello world
Kategorien
Server Administration

Linux löschen aller Datein mit Namen Regex

Um alle Dateien zu löschen, die einem bestimmten Regex entsprechen, kann man find benutzen:

find . -type f -iname "*error.log\.?"
//findet:
xxerror.log.1
yyyError.log.2
fatalError.log.1

Löschen kann man die gefundenen Dateien mittels des Linux Befehls:

find . -type f -iname "*error.log\.?" -exec rm {} \;
Kategorien
PHP Server Administration

Stress Testing Tools

Zum Stress- bzw. Last-Testen von PHP Applikationen kann man das Tool Apache bench  oder Seige benutzen.

Damit lässt sich das Verhalten einer Applkation unter hoher Last testen.

Kategorien
PHP Server Administration Webdeveloper Tools

Server Management mit Forge

Ein sehr einfaches und gutes Tool für das Server Management von PHP Applikationen ist Laravel Forge, mit dem man seine App auf AWS, Digital Ocean oder Linode betreiben kann inkl.

  • Load Balancing
  • Cron Jobs
  • Domain-Management
  • SSL Zertifikate
  • Queues
Kategorien
Server Administration

Bash Script um Konsolen Befehle auf mehreren Servern auszuführen

Wenn man einen Cluster von Severn administrieren muss, hilft es sehr, wenn man Befehler „in einem Rutsch“ auf allen Mitgliedern des Clusters ausführen kann mit Hilfe eines einzigen Konsolen Befehls.

Wenn man z.B. den Befehl: apt-get update ausführen will auf 3 Servern, kann man folgendes Script benutzen (Dateiname ist „each“ und auf dem Master abzulegen):

#!/bin/bash
echo -e "\nServer1:"
ssh serverName1$*
echo -e "\nnServer2:"
ssh serverName2$*
echo -e "\nnServer3:"
ssh serverName3$*

Der Aufruf erfolgt folgender Maßen auf der Konsole:

each "apt-get update"

Das Skript verbindet sich dann per SSH auf die Server und führt auf jedem den Befehl apt-get update aus und zeigt das Ergebnis der Operation auf der Konsole an. Vorrausetzung ist, dass die Server ohne Passwort Zugriff aufeinander haben, was in einem Cluster der Fall sein sollte. Der Befehl sollte vom Master des Clusters aus ausgeführt werden.

Kategorien
Apache Webserver

Apache Virtual Hosts einrichten unter MAC und Windows

Wenn man eine Seite lokal mit einem Werbserver wie Apache entwicklen will und die URL-Struktur Einfluss auf die Funktonsweise der Webseite hat, empfielt es sich Virtual Hosts einzurichten. Damit kann die Seite im Browser unter der späteren URL wie sebastianviereck.de erreichbar gemacht werden, obwohl Sie für andere noch nicht Online ist oder man die Domain noch nicht besitzt.

Normalerweise ruft man lokale Webseiten mit der URL wie:

http://localhost/sebastianviereck/

auf.

Wenn man stattdessen lieber die URL

http://sebastianviereck.local/

aurufen will, muss man einfach folgendes machen:

1. Die Datei

bei Windows xampp\apache\conf\extra\ httpd-vhosts.conf

bei MAC  /Applications/XAMPP/xamppfiles/apache2/conf/httpd.conf

ändern:

<Directory /xampp/htdocs    >   
    Order Allow,Deny   
    Allow from all 
</Directory>

NameVirtualHost *:80

<VirtualHost *:80>   
    DocumentRoot "/xampp/htdocs"
    ServerName localhost 
</VirtualHost> 

<VirtualHost *:80>   
    DocumentRoot "/xampp/htdocs/sebastianviereck"
    ServerName sebastianviereck.local
</VirtualHost>

2. Die Datei

bei Windows: C:\Windows\System32\drivers\etc\hosts

bei MAC /private/etc/hosts

ändern:

127.0.0.1  sebastianviereck.local
127.0.0.1   localhost   #damit localhost noch funktioniert, am Ende einfügen

3. Apache neu starten.

4. Im Browser erscheint dann bei der Eingabe von sebastianviereck.local die eigene lokale Webseite.