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
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.
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.
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.
Nagios Plugins zum Monitoring von Servern und Funktionalitäten kann man in jeder verfügbaren Sprache schreiben. Die einzige Regel, an die man sich halten muss ist, dass der Return Code des Scriptes und der Response Text (enthält auch die Performance Daten) nach einem bestimmten Schema aufgebaut werden muss.
Als Hilfe kann man die Klasse NagiosPlugin benutzen, um Plugins zu schreiben:
abstract class NagiosPlugin {
/**
* @var boolean
*/
protected $verbose = false;
/**
* setVerboseModeFromArgv
* @see https://nagios-plugins.org/doc/guidelines.html#AEN41
*
* @param $argv
* @return void
*/
public function setVerboseModeFromArgv($argv) {
if(in_array('-v', $argv)){
$this->verbose = true;
}
}
/**
* addVerboseMessage
*
* @param $message
* @return void
*/
protected function displayVerboseMessage($message){
if($this->verbose){
echo $message.PHP_EOL;
}
}
/**
* endWithStatusOk
* @see https://nagios-plugins.org/doc/guidelines.html#AEN200
*
* @param string $message
* @param string $performanceData has format "nameOfData=value"
* @return void
*/
protected function endWithStatusOk($message, $performanceData){
print "OK - $message".$this->addPerformaceData($performanceData);
exit(0);
}
/**
* endWithStatusWarning
*
* @param string $message
* @param string $performanceData
* @return void
*/
protected function endWithStatusWarning($message, $performanceData){
print "WARNING - $message".$this->addPerformaceData($performanceData);
exit(1);
}
/**
* endWithStatusCritical
*
* @param string $message
* @param string $performanceData
* @return void
*/
protected function endWithStatusCritical($message, $performanceData){
print "CRITICAL - $message".$this->addPerformaceData($performanceData);
exit(2);
}
/**
* endWithStatusUnknown
*
* @param string $message
* @param string $performanceData
* @return void
*/
protected function endWithStatusUnknown($message, $performanceData){
print "UNKNOWN - $message".$this->addPerformaceData($performanceData);
exit(3);
}
/**
* addPerformaceData
*
* @param string $performanceData
* @return string
*/
private function addPerformaceData($performanceData){
$result = '';
if(!empty($performanceData)){
$result = ' | '.$performanceData;
}
return $result;
}
}
Für die lokale Entwicklung mit Symfony3 und PHP7 habe ich mir das folgende Docker Image zusammengebaut, welches die folgenden Features beinhaltet:
Mit diesem Konsolenbefehl lässt sich der private und der public key (.pub) auf dem Mac generieren:
ssh -keygen -t rsa -C "foo@bar.de"
Fehlermeldung:
Error running connection boilerplate: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.100:2376": dial tcp 192.168.99.100:2376: i/o timeout You can attempt to regenerate them using 'docker-machine regenerate-certs name'. Be advised that this will trigger a Docker daemon restart which will stop running containers.
Bei der Fehlermledung, die TLS Zertifikate neu regenerieren zu lassen, hat bei mir ncht geholfen, wie empfohlen von anderen, Virtual Box zu updaten auf die aktuelle Version, sondern nur, das default -Image, welches Docker selbst erzegt mit den Zertifikaten zusammen neu generieren zu lassen.
Unter Windows kann man mit einem Befehl sehr leicht alle Daten exportieren in MySQL mit mysqldump:
cd C:\xampp\mysql\bin mysqldump.exe -u root -p --opt --all-databases --verbose > C:\export.sql
–opt: Export alle DBs, ohne „system“ databases wie mysql, information_schema, performance_schema und test
–verbose: um log Meldungen anzuzeigen auf dem Bildschirm, es sind nicht viele, so dass die Performance nicht beeinflusst wird großartig
Gerade ist eine schlimme Sicherheitslücke, mit der man den ganzen Server kompromittieren kann durch ein FTP Programm, welches auf fast jedem Server mit Xampp Installation läuft. Siehe Heise Artkel.
Um seine eigenen Server abzusichern, kann man auf der Linux Shell folgenden Test machen:
telnet myserver.de 21 site cpfr /etc/passwd
Wenn als Antwort ein Fehler 350 zurückkommt, dann gibt es drigenden Handlungsbedarf!
Beim Versenden von Mails an Google Mail/Gmail kam es bei mir immer zu einer Bounce E-Mail von Google mit der folgenden Nachricht:
gmail-smtp-in.l.google.com[2a00:1450:4013:c01::1a] said: 550-5.7.1
[2a01:4f8:160:61b3::2 12] Our system has detected that this 550-5.7.1
message is likely unsolicited mail. To reduce the amount of spam sent
550-5.7.1 to Gmail, this message has been blocked. Please visit 550-5.7.1
http://support.google.com/mail/bin/answer.py?hl=en&answer=188131 for 550
5.7.1 more information. u49si23102713eef.172 - gsmtp (in reply to end of
DATA command)
Die Nachricht ist sehr allgemein und unter dem Link findet man keine direkte Lösung. Bei mir hat folgendes geholfen:
Die Nachricht deutete daraufhin das der Absender-Mail von einer IPV6 Adresse gesendet worden ist: 2a01:4f8:160:61b3::2 und deshalb habe ich Postfix umgestellt auf IPV4 und voila, es hat geklappt:
vi /etc/postfix/main.cf
Zeile ändern: inet_protocols = ipv4 und Postfix neustarten und fetig – keine Boune Mail von Gmail!