Virtueller Server mit VirtualBox und Arch Linux Teil 1

Webserver inkl. PHP, MySQL und phpMyAdmin

Dafür braucht man erst einmal die ganzen im folgenden verwendeten Programme. Installiere diese:

sudo pacman -S php php-mcrypt php-fpm nginx phpmyadmin mysql 

Damit die Dienste auch nach einem Neustart gestartet werden, ändere als nächstes

sudo nano /etc/rc.conf
...
DAEMONS=(syslog-ng @network crond @sshd @nginx @php-fpm @mysqld)

nginx Einrichten

Damit der Webserver für den Test eine Webseite bereitstellen kann erstelle zunächst wie folgt eine Test Webseite:

sudo nano /etc/nginx/html/index.html

mit folgendem Inhalt

test

Nun starte zum Test den Webserver nginx:

sudo rc.d start nginx

Wenn du im Browser jetzt zu der Adresse 192.168.0.100 navigierst, sollte die Testseite angezeigt werden.

PHP Installation und Konfiguration

Um PHP zu verwenden muss, falls noch nicht geschehen php-fpm gestartet werden:

sudo rc.d start php-fpm

Damit nginx PHP verwendet muss die Konfiguration von nginx geändert werden.

...
server {
...
root /srv/http/nginx/html;

location / {
      index   index.php index.html index.htm;
}
...
location ~ \.php$ {
      try_files $uri =404;
      fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
      fastcgi_index  index.php; 
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include        fastcgi_params;
 }
...
}
...

Damit der Pfad /srv/http/nginx/html verfügbar ist, mache folgendes:

sudo su
cd /srv/http
mkdir nginx
cd nginx
ln -s /usr/share/nginx/html html
exit

Danach hast du als root einen symbolischen Link von /srv/http/nginx/html nach /usr/share/nginx/html erstellt.

Danach muss nginx natürlich neu gestartet werden:

sudo rc.d restart nginx

Zum Test erstelle noch die folgende Datei als root (mit sudo):

<?php phpinfo(); ?>

Wenn du jetzt die Adresse 192.168.0.100/index.php eingibst, sollten Informationen über PHP auf der Webseite zu finden sein.

Einrichten von MySQL und phpMyAdmin

Zum Starten und Einrichten führe folgendes aus:

sudo rc.d start mysqld 
sudo mysql_secure_installation
sudo rc.d restart mysqld

Zur Administration von MySQL soll phpMyAdmin benutzt werden. Um dieses verfügbar zu machen fahre wie folgt fort:

sudo ln -s /usr/share/webapps/phpMyAdmin /srv/http/nginx/html/phpmyadmin

Zusätzlich musst du noch die PHP.ini wie folgt ändern:

...
extension=gd.so
extension=mcrypt.so
extension=mysqli.so
extension=pdo_mysql.so
...
open_basedir = /usr/share/nginx/:/srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/
...

Danach muss php-fpm und nginx neu gestartet werden:

sudo rc.d restart php-fpm
sudo rc.d restart nginx

Nun sollte unter 192.168.0.100/phpmyadmin die phpMyAdmin Oberfläche erscheinen.

Falls man möchte, dass der MySQL-Server direkt auch über das Netzwerk erreichbar ist muss man folgendes machen.

...
#skip-networking
...

nginx mit SSL einrichten

Um TLS/SSL verwenden zu können benötigt nginx ein Zertifikat.

Dafür erstellst du folgendes Verzeichnis als root:

mkdir /etc/nginx/cert

Dort lässt du dir von openssl ein neues Zertifikat generieren:

cd /etc/nginx/cert
openssl genrsa -des3 -out server.key 4096
openssl req -new -key server.key -out server.csr #kein challenge passwort
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 1825 -in server.csr -signkey server.key -out server.crt

Der Zugriff auf die erstellten Dateien sollte nur für den root Benutzer möglich sein:

sudo chmod og-r server.*

Danach muss noch in der nginx.conf ein neuer „server {}“-Eintrag angelegt werden:

....
server {
        listen 443;
		ssl on;
        server_name localhost;
        ssl_certificate /etc/nginx/cert/server.crt;
        ssl_certificate_key /etc/nginx/cert/server.key;
        root    /srv/http/nginx/html;

        #access_log  logs/host.access.log  main;

        location / {
            index  index.php index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   50x.html;
        }

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
         }

    }
...

Nun muss nginx noch neugestartet werden:

sudo rc.d restart nginx

Jetzt sollte per https://192.168.0.100 eine SSL geschützte Verbindung aufgebaut werden können.
(Da das Zertifikat selber unterschrieben ist und auch noch per IP-Adresse zugegriffen wird kommt es zu einer Fehlermeldung eines ungültigen Zertifikats)

Auf der letzten Seite finden sich die verwendeten Quellen auf der diese Anleitung basiert.

Dieser Beitrag wurde am von in Tutorials veröffentlicht. Schlagworte: , , , , , , , , , .

Über Kai

Ich habe Informatik im Masterstudiengang an der Universität Stuttgart studiert. Im Studium habe ich, wie mein Kollege und Kommilitone, die Vertiefungslinien "Theoretische Informatik und Wissenschaftliches Rechnen" und "Visualisierung und Interaktive Systeme" belegt. Auch in meiner Freizeit beschäftige ich mich oft mit Softwareentwicklung, im Speziellen der Softwarearchitektur, sowie mit der, teils ehrenamtlichen, Betreuung und Weiterentwicklung von Webplattformen. Darüberhinaus gehe ich dem Leistungssport Schwimmen nach, um für einen gesunden Ausgleich mit Sport zu sorgen. Mehr über mich unter kmindi.de.