• 1
irisdina

froxlor
[Howto] Froxlor + MariaDB + NGINX + PHP7.0

Question

Hier mal ein kleines TUT wie man Froxlor mit NGINX (inkl. HTTP2), MARIADB und PHP7/1.0 betreibt.

Ausgehend von Debian (9) Stretch
Debian Stretch ist der neuste Stable rel. aber leider sind einige Sachen schon wieder veraltet bzw. alte Repos vorhanden, in den Debian Repos. Bsp. Nginx und MARIADB daher braucht man einige Sources wo man neuere Repos. Pakete bekommt.

1. apt install curl wget apt-transport-https dirmngr subversion git

2. Keys laden

wget http://www.deb-multimedia.org/pool/main/d/deb-multimedia-keyring/deb-multimedia-keyring_2016.8.1_all.deb && dpkg -i deb-multimedia-keyring_2016.8.1_all.deb && wget https://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key && apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8

3. Debian Stretch Source.list (/etc/apt/sources.list)

Quote

###### Debian Main Repos
deb http://ftp.de.debian.org/debian/ stable main contrib non-free
deb-src http://ftp.de.debian.org/debian/ stable main contrib non-free

deb http://ftp.de.debian.org/debian/ stable-updates main contrib non-free
deb-src http://ftp.de.debian.org/debian/ stable-updates main contrib non-free

deb http://security.debian.org/ stable/updates main
deb-src http://security.debian.org/ stable/updates main

deb http://ftp.debian.org/debian stretch-backports main
deb-src http://ftp.debian.org/debian stretch-backports main

###### Extra Repos


###Debian Multimedia
deb [arch=i386,amd64] http://www.deb-multimedia.org stretch main non-free

###MariaDB
deb [arch=i386,amd64] http://ftp.hosteurope.de/mirror/mariadb.org/repo/10.2/debian stretch main
deb-src http://ftp.hosteurope.de/mirror/mariadb.org/repo/10.2/debian stretch main

###nginx
deb [arch=amd64,i386] http://nginx.org/packages/debian/ stretch nginx
deb-src [arch=amd64,i386] http://nginx.org/packages/debian/ stretch nginx

 

 

 

4. apt-get update && apt-get dist-upgrade && apt-get autoclean

Sollte Punkt 4 keine Fehler angezegt haben, fangen wir mit der Installation von MariaDB an.

5. apt install mariadb-server mariadb-client

f6c5520424.jpg

Wärend der Installation werdet ihr nach dem Setzen den MySQL-Root PW's gefragt.

eff9e95a58.jpg

14e3ce2399.jpg

nun sollte MariaDB installiert sein:

mit mysql --version könnt ihr die version prüfen.

bb862a3605.jpg

und nun können wir NGINX installieren. In Debian Stretch wird version 11.9 von NGINX ausgeliefert, wir wollen aber mindestens vers. 1.12+ haben, weil da einige Fixes dabei sind.

Quote
2017-04-12

nginx-1.12.0 stable version has been released, incorporating new features and bug fixes from the 1.11.x mainline branch - including variables support and other improvements in the stream module, HTTP/2 fixes, support for multiple SSL certificates of different types, improved dynamic modules support, and more.

6. NGINX

apt-get install nginx

3e2bb5337e.jpg

mit nginx -v können wir die version überprüfen.

d896c55224.jpg

6.1 

mkdir /etc/nginx/sites-available

mkdir /etc/nginx/sites-enabled

6.2

Wenn man NGINX direkt von nginx.org per Repo bezieht, wird nur eine sehr minimale Struktur installiert, daher müssen wir da noch etwas Hand anlegen.

Als erstes nehmen wir uns die nginx.conf (/etc/nginx/nginx.conf) vor mit nano /etc/nginx/nginx.conf wenn man den Editor nano nicht benutzen möchte kann man auch Vi oder dass Programm WinSCP benutzen

a29fbe3c92.png

wir löschen den ganzen inhalt und fügen dies ein

Quote

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


#mail {
#    # See sample authentication script at:
#    # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript

#    # auth_http localhost/auth.php;
#    # pop3_capabilities "TOP" "USER";
#    # imap_capabilities "IMAP4rev1" "UIDPLUS";

#    server {
#        listen     localhost:110;
#        protocol   pop3;
#        proxy      on;
#    }

#    server {
#        listen     localhost:143;
#        protocol   imap;
#        proxy      on;
#    }
#}
 

und Speichern den inhalt und Prüfen kurz die nginx.conf mit nginx -t

5858c6c3a1.png

NGINX ist nun bereit und wir gehen über zu PHP.

 

7. PHP 7.0 Installieren

Ohne PHP geht gar nichts mit dem Webserver, daher müssen wir jetzt einige Pakete installieren.

Quote

apt-get update && apt-get install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-memcached php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext php7.0-fpm php7.0-cli php7.0-cgi php-bcmath php-zip

9366c5f720.png

Prüfen wir hier auch die kurz die vers. von PHP mit php -v

d085763569.png

jetzt starten wir kurz mal NGINX und PHP7.0-FPM neu mit

service nginx restart

service php7.0-fpm restart

Sollten die zwei services ohne Probleme neu gestartet sein, prüfen wir kurz per Browser ob unser Webserver richtig läuft.

Dazu nehmen wir einen Browser und rufen per IP oder Domain unseren Server auf und bekommen eine schöne Meldung, wenn alles läuft wie es soll.

ad36980edf.png

8. Jetzt können wir Froxlor installieren.

8.1 Als erstes sollten wir einen separaten vhost für Froxlor anlegen und nicht direkt per IP aufrufen.

Dazu benutzen wir jetzt nano (oder einen anderen Editor deiner Wahl: siehe Punkt 6.2)

nano /etc/nginx/sites-enabled/frox

und fügen diesen inhalt ein

Quote

server { 
    listen    deine IP:80 default;
    server_name    deine subdomain etc.;
    access_log      /var/log/nginx/access.log;
    root     /usr/share/nginx/;
    location / {
        index    index.php index.html index.htm;
    }
    
    location ~ \.php {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        try_files $fastcgi_script_name =404;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
    }
}

Wie ihr seht, benutze ich php7.0-fpm.sock anstatt php-fcgi (127.0.0.1:8888) dazu aber gleich mehr

und Speichere die Datei und überprüfen mit nginx -t ob alles OK ist, falls Ja starten wir den Server mit service nginx restart neu.

8.3 Nun wechseln wir ein passenden Verzeichnis wo wir Froxlor hin haben wollen. als Bsp. habe ich jetzt /usr/share/nginx/ genommen.

cd /usr/share/nginx/ und laden Froxlor per git (von GitHub) herunter. 

dazu geben wir ein git clone https://github.com/Froxlor/Froxlor.git

b4ed4dcf2b.png

(Empfehlung den Froxlor Ordner immer umbennen bsp. per mv /usr/share/nginx/Froxlor /usr/share/nginx/dein wunsch name)

 

8.4  Jetzt können wir Froxlor mit der http://www.SubDomain/dein frox verz./ (die wir dafür eingerichtet haben aufrufen)

34d75250a6.png

 

Sollte keine Fehler anzeigen gehen wir zum nächsten Schritt.

Und geb deine Daten ein. (Ändert auch den Datenbank Name und den Benutzer für die Froxlor SQL)

09a85978ac.png

Und klicken auf Installation fortführen. (Meistens kommt jetzt die Meldung dass die userdata.inc.php nicht im /lib/ verzeichnis gespeichert werden konnte sondern im /tmp/ verzeichnis, daher müssen wir diese kurz verschieben.

mv /tmp/userdata.inc.php /usr/share/nginx/euer froxlor verz./lib/

solltet ihr die Datei verschoben haben, login wir uns nun in Froxlor ein und fangen an es einzurichten (ich zeige jetzt nur wenige dinge!)

Wichtig:

Jetzt sollten wir auch die Vhost Datei wieder löschen mit rm /etc/nginx/site-enable/frox aber nginx noch nicht neu Starten, dies macht Froxlor gleich von selbst. 

(Hat den Hintergrund, das Froxlor gleich seine eigene Vhost conf erstellt und dies dann mit unseren Probleme macht und nginx nicht startet)

 

8.5 Da wir php7.0-fpm benutzen müssen wir in den Einstellungen etwas ändern:

Einstellungen => NGINX Einstellungen und gehen runter zu Nginx-PHP-Backend hier steht drin: 127.0.0.1:8888 dies ändern wir jetzt zu: unix:/run/php/php7.0-fpm.sock und klickt danach auf Speichern.

097d0f4173.png

Dies hat den Hintergrund da wir keine php-fcgi Datei brauchen/wollen.

 

8.6 Jetzt erstellen wir kurz die cronjob Datei für Froxlor, dazu gehen wir

Konfiguration » Debian Jessie (8.x) » Sonstige (System) » Cronjob for froxlor 

und befolgt dort die Anweisungen. (in den jeweiligen Zeilen steht (/usr/bin/nano xxxxx es reicht wenn ihr nur nano xxxx) ein gebt bzw. dann geht dies auch nur mit dem Editor.

 

Anmerkung:

Falls ihr in Konfiguration » Debian Jessie (8.x) » Webserver (HTTP) » nginx reingeht braucht ihr 98% der Texte dort nicht zu beachten, weil diese nicht benötigt werden.

Ihr braucht nur diesen Block (der letzte)

Quote

mkdir -p /etc/nginx/sites-enabled/
chown root:0 /etc/nginx/sites-enabled/
chmod 0600 /etc/nginx/sites-enabled/
mkdir -p /etc/nginx/sites-enabled/
chown root:0 /etc/nginx/sites-enabled/
chmod 0600 /etc/nginx/sites-enabled/
mkdir -p /home/customers/webs/
mkdir -p /var/customers/logs/
mkdir -p /var/customers/tmp
chmod 1777 /var/customers/tmp
/etc/init.d/nginx restart

und ggf. den für die acme.conf (Falls ihr SSL benutzt) zu beachten, den Rest braucht ihr nicht!

 

Hoffe diese kleine Anleitung hilft euch weiter, bei fragen einfach melden :)

Share this post


Link to post
Share on other sites

3 answers to this question

  • 0
10 hours ago, J-B said:

Was spricht denn gegen die MariaDB von Debian Stretch?

seitens froxlor selbst nix :)

Share this post


Link to post
Share on other sites
  • 0
12 hours ago, J-B said:

Was spricht denn gegen die MariaDB von Debian Stretch?

In den Alten Versionen gab es ein Problem/Bug/Feature, dass man kein PW ändern konnte bzw. bei dem Install setzen konnte und später erst nervig ein PW einstellen konnte.

 

2 hours ago, d00p said:

seitens froxlor selbst nix :)

will man doch hoffen, das Froxlor nichts dagegen hat :P

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • By NitroxydeX
      Hallo Community und Staff,
      bezüglich eines Serverwechsel stande nun auch eine Änderung des Control Panels an, da unser bisher genutztes einfach zu wenig geupdatet wurde und Fehler selbst gefixt werden mussten.
      Es blieb eigentlich nur Froxlor übrig. Allerdings haben wir nun feststellen müssen, dass man bei Froxlor nicht die Möglichkeit hat den Datenbanknamen und Nutzer frei zu wählen, was viele als hohes Sicherheitsrisiko werten. Warum ist dies so gewählt? Und gibt es bereits jetzt schon eine Möglichkeit das zu aktivieren?
      Zum anderen Problem: Froxlor scheint magisch alles abzufangen. Bislang hatte ich Apache so konfiguriert, dass alle nicht vorhanden Vhosts ins 403-Forbidden Nirvana gesendet werden. Gleiche Konfiguration habe ich nun auch mit Froxlor versucht und mein Abfangen als 01-beginnende Apache config hinterlegt. Dies fängt auch direkte Aufrufe der IP ab, allerdings funktioniert dies weder mit der IP noch mit nicht angelegten (Sub)-Domains. Es wird immer automatisch auf den FQDN des Panels umgeleitet, was eigentlich gar nicht möglich sein sollte. 
       
      Vielen Dank schon mal für die Antworten
    • By nurtext
      Moin,
      anscheinend schlägt Let's Encrypt bei Subdomains fehl, weil es gerne auch eine weitere "www"-Subdomain an die bestehende hängen würde. Siehe Log:
      root@meine-tolle-domain:/root# /usr/bin/php5 -q /var/www/froxlor/scripts/froxlor_master_cronjob.php --letsencrypt --debug [information] Updating Let's Encrypt certificates [information] Updating hilfe.meine-tolle-domain.de [information] Adding SAN entry: hilfe.meine-tolle-domain.de [information] Adding SAN entry: www.hilfe.meine-tolle-domain.de [information] letsencrypt Using 'https://acme-v01.api.letsencrypt.org' to generate certificate [information] letsencrypt Creating new account key [information] letsencrypt Starting new account registration [information] letsencrypt Sending registration to letsencrypt server [information] letsencrypt Sending signed request to /acme/new-reg [information] letsencrypt New account registered. [information] letsencrypt Accepting lets encrypt Terms of Service [information] letsencrypt Accepting agreement at URL: https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf [information] letsencrypt Sending signed request to /acme/reg/18369331 [information] letsencrypt Lets encrypt Terms of Service accepted [information] letsencrypt Starting certificate generation process for domains [information] letsencrypt Requesting challenge for hilfe.meine-tolle-domain.de [information] letsencrypt Sending signed request to /acme/new-authz [information] letsencrypt Got challenge token for hilfe.meine-tolle-domain.de [information] letsencrypt Token for hilfe.meine-tolle-domain.de saved at /var/www/froxlor/.well-known/acme-challenge/5lbwRluW103CyNPdbmq7p_kd7p3blY8WGNSV0N0RNBY and should be available at http://hilfe.meine-tolle-domain.de/.well-known/acme-challenge/5lbwRluW103CyNPdbmq7p_kd7p3blY8WGNSV0N0RNBY [information] letsencrypt Sending request to challenge [information] letsencrypt Sending signed request to https://acme-v01.api.letsencrypt.org/acme/challenge/ZXmZ4SU2Oy0__ipk-ihaPtDq39OyNfBKAEHzfMvmO5U/1478709781 [information] letsencrypt Verification pending, sleeping 1s [information] letsencrypt Verification ended with status: valid [information] letsencrypt Requesting challenge for www.hilfe.meine-tolle-domain.de [information] letsencrypt Sending signed request to /acme/new-authz [information] letsencrypt Got challenge token for www.hilfe.meine-tolle-domain.de [information] letsencrypt Token for www.hilfe.meine-tolle-domain.de saved at /var/www/froxlor/.well-known/acme-challenge/eJnDjhknVPim732szZ9rZt22T9DoKP2xkQI6-A1c4KE and should be available at http://www.hilfe.meine-tolle-domain.de/.well-known/acme-challenge/eJnDjhknVPim732szZ9rZt22T9DoKP2xkQI6-A1c4KE [error] letsencrypt Please check http://www.hilfe.meine-tolle-domain.de/.well-known/acme-challenge/eJnDjhknVPim732szZ9rZt22T9DoKP2xkQI6-A1c4KE - token not available; PHP error: {"type":2,"message":"file_get_contents(http:\/\/www.hilfe.meine-tolle-domain.de\/.well-known\/acme-challenge\/eJnDjhknVPim732szZ9rZt22T9DoKP2xkQI6-A1c4KE): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known","file":"\/var\/www\/froxlor\/lib\/classes\/ssl\/class.lescript.php","line":232} [information] letsencrypt Sending request to challenge [information] letsencrypt Sending signed request to https://acme-v01.api.letsencrypt.org/acme/challenge/4ZX-ZuA9abbaOpoUhAnqyhnLDUzWp7xm5YPUZns7orA/1478709934 [information] letsencrypt Verification pending, sleeping 1s [error] Could not get Let's Encrypt certificate for hilfe.meine-tolle-domain.de: Verification ended with error: {"identifier":{"type":"dns","value":"www.hilfe.meine-tolle-domain.de"},"status":"invalid","expires":"2017-07-11T15:20:54Z","challenges":[{"type":"http-01","status":"invalid","error":{"type":"urn:acme:error:connection","detail":"DNS problem: NXDOMAIN looking up A for www.hilfe.meine-tolle-domain.de","status":400},"uri":"https:\/\/acme-v01.api.letsencrypt.org\/acme\/challenge\/4ZX-ZuA9abbaOpoUhAnqyhnLDUzWp7xm5YPUZns7orA\/1478709934","token":"eJnDjhknVPim732szZ9rZt22T9DoKP2xkQI6-A1c4KE","keyAuthorization":"eJnDjhknVPim732szZ9rZt22T9DoKP2xkQI6-A1c4KE.lzkNGm6yCkkELPqgqQ8h9v-MfPi-5gRkb9yf76fy86s","validationRecord":[{"url":"http:\/\/www.hilfe.meine-tolle-domain.de\/.well-known\/acme-challenge\/eJnDjhknVPim732szZ9rZt22T9DoKP2xkQI6-A1c4KE","hostname":"www.hilfe.meine-tolle-domain.de","port":"80","addressesResolved":[],"addressUsed":"","addressesTried":[]}]},{"type":"tls-sni-01","status":"pending","uri":"https:\/\/acme-v01.api.letsencrypt.org\/acme\/challenge\/4ZX-ZuA9abbaOpoUhAnqyhnLDUzWp7xm5YPUZns7orA\/1478709935","token":"S1kgT_jIG8reMxRvGEf9niDf4WIiPyr5XslKbIFQ6eY"},{"type":"dns-01","status":"pending","uri":"https:\/\/acme-v01.api.letsencrypt.org\/acme\/challenge\/4ZX-ZuA9abbaOpoUhAnqyhnLDUzWp7xm5YPUZns7orA\/1478709936","token":"mp8J-ChoyV2gMPQyuJQoZaRlH2ePfcBYcb0v-cZ1zmU"}],"combinations":[[1],[0],[2]]} [information] Let's Encrypt certificates have been updated [notice] Checking system's last guid root@meine-tolle-domain:/root/ Irgendwie sieht das für mich nicht gewollt aus, oder? 🤔
    • By k3ule
      Hallo.
      Und zwar habe ich das Problem das ich einen root Server mit Ubuntu 16.04 habe aber bei der Froxlor Konfiguration kann man maximal Ubuntu 14.04 auswählen. Wie kann ich da jetzt Froxlor fertig konfigurieren und was muss ich dann auswählen?
       
      LG K3ule
    • By OliverRahner
      Hi,
      because I had some issues with HTTP2 and php via fcgid under Apache I tried to switch to php_fpm.
      While I was at it, I noticed a problem that I couldn't pinpoint and decided to try nginx. The issue stayed the same, basically these log entries:
      nginx:
      connect() to unix:/var/lib/apache2/fastcgi/domainname.de-php-fpm.socket failed (13: Permission denied) while connecting to upstream, client: xx.xx.xx.xx, server: domainname.de, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://unix:/var/lib/apache2/fastcgi/domainname.de-php-fpm.socket:", host: "domainname.de", referrer: "https://domainname.de/" Apache:
      (13)Permission denied: [client xx.xx.xx.xx:63318] FastCGI: failed to connect to server "/var/www/php-fpm/web2/domainname.de/ssl-fpm.external": connect() failed The way I understand this problem:
      By design, php-fpm sockets created by Froxlor have permissions which only allow the vhost user to connect.
      But neither Apache nor nginx are told anywhere under which identity to connect to the socket.
      The SuExecUserGroup line in the vhost config file for Apache which does this for fcgid vanished when switching to php-fpm.
      I currently solved the problem by changing the line "listen.owner" inside the php-fpm pools to "www-data".
      That should not lower security, because php-fpm in itself takes care that the php process runs as the vhost user.
       
      Can someone tell me where I misunderstood the whole concept?
    • By headtrick
      Hello there.
      After updating to PHP 7.1 with FPM my customer sites work perfectly, however I cannot access the Froxlor backend (as well as phpmyadmin) anymore, I get an error 503. Froxlor is supposed to also run with FPM.
      I am running on Debian8, Apache 2.4, PHP 7.1, PHP 7.1-FPM
      The apache error log reads:
      [Tue Jun 06 21:56:28.394119 2017] [proxy:error] [pid 6572] (2)No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /run/php/php7.1-fpm.sock (*) failed [Tue Jun 06 21:56:28.394177 2017] [proxy_fcgi:error] [pid 6572] [client x.x.x.x:35356] AH01079: failed to make connection to backend: httpd-UDS php7.1-fpm status seems ok, and the logfile is empty besides from restarts.
      Could it be related to the fact that the customer sites all run with ssl, the froxlor and phpmyadmin not yet?

      Where else can I look? Some help would be appreciated
      Best, Michael