Menu

CRM-Server installieren

In dieser Anleitung erfahren Sie, wie Sie einen Webserver für das CRM-System 1CRM installieren und einrichten. 1CRM ist webbasiert, d. h. Sie können sich das CRM-System wie eine Website vorstellen, die auf einem Webserver platziert werden muss. Befindet sich 1CRM auf einem geeigneten Webserver, dann können Sie den 1CRM-Installationsassistenten in Form einer Webadresse aufrufen, z. B. mein-webserver.de/1CRM.

Voraussetzungen

Zielgruppen: Admin
Produkte: 1CRM On-Premises

Schnellanleitung

  1. Ubuntu LTS installieren
  2. Ubuntu für ISPConfig vorbereiten
  3. Webserver installieren
  4. ISPConfig installieren
  5. Webserver für 1CRM vorbereiten

Diese Anleitung basiert auf Ubuntu 16.04 LTS. Momentan ist Ubuntu Server 18.04 die aktuelle LTS-Version und wir empfehlen PHP 7.0 als Basis für 1CRM. Die Anleitungen werden wir so bald wie möglich aktualisieren.

Die Schritt-für-Schritt-Anleitung ist keine Garantie für einen funktionierenden oder sicheren CRM-Server, da diese beiden (sehr wünschenswerten) Eigenschaften entscheidend von einer Vielzahl von externen Parametern abhängen.

CRM-Server mit Ubuntu und ISPConfig einrichten

Wie bereits beschrieben, setzen wir bei der Verwaltung unserer Server auf Ubuntu LTS und ISPConfig als Verwaltungsoberfläche.

In diesem HowTo gehen wir etwas weiter in die Tiefe und setzen ein gewisses Linux-Grundwissen voraus. Damit Sie den CRM-Server auch später sinnvoll verwalten können, ist ein wenig Linux-Wissen hilfreich und sogar dringend erforderlich, wenn Sie den Server später über das Internet erreichbar machen wollen.

 

Was ist ISPConfig?

ISPConfig steht für Internet Service Provider Configuration und ist eine Open-Source-Software zur Verwaltung der für Webserver relevanten Dienste wie ftp, E-Mail, MySQL und Firewall. Mit ISPConfig lassen sich auch Kunden von Webhostern verwalten und damit deren Internet-Domains, E-Mail-Konten etc. ISPConfig bringt nicht nur Vorteile für spezialisierte Webhoster. Wenn Sie es im Intranet als Basis des CRM-Systems verwenden, können Sie über ISPConfig alle Einstellungen des Webservers verwalten und ohne großen Aufwand ein Testsystem einrichten und z. B. auch Backups verwalten.

 

Das brauchen Sie für Ihren CRM-Server

Meistens ist es bei uns so, dass z. B. ein Mailserver bereits existiert, genau wie der DNS. FTP wollen wir auf unseren Servern gar nicht haben, daher reduziert sich die Einrichtung im Vergleich zu einem vollständigen Webserver-System mit ISPConfig auf:

  • den Webserver und Mysql,
  • einen Basis-MTA zum Mailversand,
  • ISPConfig und
  • noch einige nützliche weitere Werkzeuge.

Betriebssystem installieren: Ubuntu Server

Schritt für Schritt Anleitung

SCHRITT 1:

Laden Sie sich die aktuelle LTS-Version des Ubuntu Servers herunter.

SCHRITT 2:

Installieren Sie Ubuntu von einer CD oder einem USB-Stick.

SCHRITT 3:

Wählen Sie die Basispakete und den openssh-Server aus.

SCHRITT 4:

Updaten Sie das System nach der Installation mit folgenden Linux-Befehlen:

# System updaten
apt update
apt upgrade

SCHRITT 5:

Aktivieren Sie den neuen Kernel mit folgendem Befehl:

# Ubuntu neustarten
reboot

Den Server für ISPConfig vorbereiten

Schritt für Schritt Anleitung

SCHRITT 1:

Wechseln Sie von der Systemshell Dash auf Bash als Default-Shell mit folgendem Befehl und wählen Sie anschließend No:

dpkg-reconfigure dash

ISPConfig hat mit der Ubuntu-Standard-Shell Dash Probleme und lässt sich nur mit der Bash-Shell installieren.

SCHRITT 2:

Deaktivieren Sie AppArmor mit folgendem Code:

# AppArmor deaktivieren und entfernen
service apparmor stop
update-rc.d -f apparmor remove
apt remove apparmor apparmor-utils

AppArmor ist eine Sicherheitssoftware, mit der sich Zugriffe von Programmen über das Netzwerk kontrollieren lassen. An sich eine gute Sache. Doch leider führt der Einsatz von AppArmor immer wieder zu Problemen: Zugriffe, die wir haben wollen, werden als negativ eingestuft und gesperrt. Aus diesem Grund deaktivieren wir AppArmor und schützen uns an anderer Stelle mit einer sinnvoll konfigurierten Firewall.

SCHRITT 3:

Stellen Sie die automatische Zeitsynchronisation über NTP ein:

# Automatische Zeitsynchronisation installieren
apt -y install ntp ntpdate

SCHRITT 4:

Installieren Sie den MTA Postfix, MariaDB, OpenSSL und den Rootkit-Scanner RKHunter:

apt -y install postfix postfix-doc mariadb-client mariadb-server openssl rkhunter binutils

Bei der Installation von Postfix öffnet sich ein Fenster für die Konfiguration des E-Mail-Dienstes.

SCHRITT 5:

Variante 1: Wählen Sie Smarthost, wenn Ihr Server nur lokal erreichbar sein soll.

Variante 2: Wählen Sie Internet-Site, wenn Ihr Server öffentlich über das Internet erreichbar sein soll.

SCHRITT 6:

Konfigurieren Sie nun MariaDB folgendermaßen, damit die CRM-Datenbank über das Netz erreichbar ist:

Aufrufen der Konfigurationsdatei:
# Konfigurationsdatei mit dem Editor Vi aufrufen
vi /etc/mysql/mariadb.conf.d/50-server.cnf

Ändern Sie die Datei folgendermaßen ab:
[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure
#bind-address = 127.0.0.1
[...]

In der Standard-Konfiguration lässt MySQL einen Netzwerk-Zugriff nur über den Localhost zu.

SCHRITT 7:

Starten Sie anschließend MySQL neu:

service mysql restart

SCHRITT 8:

Konfigurieren Sie nun das Passwort und Benutzerrechte von MariaDB:

mysql_secure_installation

Wählen Sie bei den Abfragen folgende Werte:

Enter current password for root (enter for none): Enter drücken
Set root password? [Y/n]: y für Ja
New password: MariaDB Root-Passwort eingeben
Re-enter new password: Passwort wiederholen
Remove anonymous users? [Y/n]: y für Ja
Disallow root login remotely? [Y/n]: y für Ja
Reload privilege tables now? [Y/n]: y für Ja

Webserver installieren: NGINX statt Apache

Bei dieser Anleitung setzen wir nicht auf den Standard-LAMP-Stack, sondern ersetzen den Apache durch NGINX. Mit NGINX haben wir hervorragende Performance-Erfahrungen in Kombination mit PHP 5.5 und 1CRM als CRM-System gemacht.

Teilweise erreicht die unten beschriebene Konfiguration etwa 40 % mehr Geschwindigkeit als unsere Apache-Fcgi-PHP Konfigurationen. Eine allgemeine Aussage kann man hiervon jedoch nicht ableiten. Wir werden die unterschiedlichen Systeme aber natürlich im Auge behalten und weitere Erfahrungen berichten.

Schritt für Schritt Anleitung

SCHRITT 1:

Installieren Sie NGINX:

# NGINX installieren
apt install -y nginx
# NGINX starten
service nginx start

SCHRITT 2:

Installieren Sie PHP 7.0:

#PHP-Installation vorbereiten
apt install -y python-software-properties
add-apt-repository -y ppa:ondrej/php
apt update
apt upgrade
#PHP installieren
apt -y install php7.0-opcache php7.0-fpm php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap php7.0-cli php7.0-cgi php-pear php-authp php7.0-mcrypt mcrypt imagemagick php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl memcached php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring php7.0-soap

Optional können Sie PHP 7.1 installieren:

apt -y install php7.1-opcache php7.1-fpm php7.1 php7.1-common php7.1-gd php7.1-mysql php7.1-imap php7.1-cli php7.1-cgi php7.1-mcrypt php7.1-curl php7.1-intl php7.1-pspell php7.1-recode php7.1-sqlite3 php7.1-tidy php7.1-xmlrpc php7.1-xsl php7.1-zip php7.1-mbstring php7.1-soap

SCHRITT 3:

Aktivieren Sie einige Module:

phpenmod mcrypt
phpenmod mbstring
phpenmod imap
phpenmod soap

SCHRITT 4:

Installieren Sie APC als PHP-Cache, um die Performance zu verbessern:

apt install -y php-apcu

SCHRITT 5:

Passen Sie folgende Einstellungen in der PHP-Konfiguration an:

vi /etc/php/7.0/fpm/php.ini

[...]
cgi.fix_pathinfo=0
[...]
date.timezone="Europe/Berlin"
[...]
memory_limit = 512M
[...]
post_max_size = 200M
[...]
upload_max_filesize = 100M
[...]
memory_limit und die Upload-Größen werden später von 1CRM benörigt.

SCHRITT 6:

Starten Sie anschließend php-fpm neu:

service php7.0-fpm reload

SCHRITT 7:

Installieren Sie Letsencrypt:

add-apt-repository ppa:certbot/certbot
apt update
apt install certbot

SCHRITT 8:

Installieren und aktivieren Sie Quota:

apt install -y quota quotatool

Hierzu muss die Datei /etc/fstab angepasst werden:

# mount -o remount /
# quotacheck -avugm

Fehlermeldungen sind dabei normal:

quotaon -avug

SCHRITT 9:

Installieren Sie Jailkit, um geChrootete SSH-Benutzer zu ermöglichen:

apt -y install build-essential autoconf automake1.11 libtool flex bison debhelper binutils
cd /tmp
wget https://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz
tar xvfz jailkit-2.19.tar.gz
cd jailkit-2.19
./debian/rules binary
cd ..
dpkg -i jailkit_2.19-1_*.deb
rm -rf jailkit-2.19*

SCHRITT 10:

Installieren Sie Fail2ban:

apt install -y fail2ban

ISPConfig installieren

Schritt für Schritt Anleitung

SCHRITT 1:

Stellen Sie als erstes sicher, dass NGINX läuft:

service nginx restart

SCHRITT 2:

Installieren Sie ISPConfig:

cd /tmp
wget -O ispconfig.tar.gz https://git.ispconfig.org/ispconfig/ispconfig3/repository/archive.tar.gz?ref=stable-3.1
tar xfz ispconfig.tar.gz
cd ispconfig3*/install/
php -q install.php

SCHRITT 3:

Verwenden Sie den Experten-Modus, da nicht alle möglichen Dienste für ISPConfig installiert wurden, sondern nur die erforderlichen für einen CRM-Web-Server und wählen Sie folgende Antworten:

Configure Mail (y,n) [y]: n für Nein
Force configure pureftpd (y,n) [y]: n für Nein
Configure DNS Server (y,n) [y]: n für Nein
Configure Web Server (y,n) [y]: y für Ja
Force configure OpenVZ (y,n) [y]: n für Nein
Configure Firewall Server (y,n) [y]: n für Nein
Force configure Metronome XMPP Server (y,n) [y]: n für Nein

Es gibt ein hervorragendes Handbuch für ISPConfig, was Till Brehm und Falko Timme für 5 € verkaufen – bitte schlagen Sie zu und unterstützen Sie die Weiterentwicklung von ISPConfig:  https://www.howtoforge.com/download-the-ispconfig-3-manual.

Jetzt ist ISPConfig über https://ihr.server.de:8080. Das Standard-Passwort admin für den Benutzer sollte so schnell wie möglich geändert werden!

1CRM-Server konfigurieren

Schritt für Schritt Anleitung

SCHRITT 1:

Passen Sie die NGINX vhost-Konfiguration etwas an, damit jsmin und die API unter 1CRM auszuführen. Diese muss vor der Bearbeitung in den custom-Konfigurationsordner kopiert werden:

cd /usr/local/ispconfig/server
cp conf/nginx_vhost.conf.master conf-custom/
vi conf-custom/nginx_vhost.conf.master

SCHRITT 2:

ISPConfig bindet PHP im Standard über die Verwendung eines @php-Templates ein. Entfernen Sie dieses und verwenden stattdessen einen regulären Ausdruck, der auch ein Routing über eine PHP-Datei erlaubt, wie es z.B. jsmin oder diverse PHP-Frameworks machen. Entfernen Sie HHVM komplett aus der Konfiguration, da es nicht installiert wurde. Das Diff sieht wie folgt aus:

--- ../conf/nginx_vhost.conf.master     2017-06-28 12:12:21.042308712 +0200 
+++ nginx_vhost.conf.master     2017-06-28 13:30:17.126343612 +0200 
@@ -150,57 +150,30 @@ 
             alias /usr/share/awstats/icon; 
         } 
 
-        location ~ \.php$ { 
-            try_files <tmpl_var name='rnd_php_dummy_file'> @php; 
-        } 
 
 <tmpl_if name='php' op='==' value='php-fpm'> 
-        location @php { 
-            try_files $uri =404; 
-            include /etc/nginx/fastcgi_params; 
+        location ~ ^(.+\.php)(.*)$ { 
+            fastcgi_split_path_info ^(.+\.php)(.*)$; 
+            if (!-f $document_root$fastcgi_script_name) { 
+               return 404; 
+            }
+            include /etc/nginx/fastcgi_params; 
 <tmpl_if name='use_tcp'> 
          fastcgi_pass 127.0.0.1:<tmpl_var name='fpm_port'>; 
 </tmpl_if> 
 <tmpl_if name='use_socket'> 
          fastcgi_pass unix:<tmpl_var name='fpm_socket'>; 
 </tmpl_if> 
-         fastcgi_index index.php; 
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
-         #fastcgi_param PATH_INFO $fastcgi_script_name; 
+         fastcgi_param PATH_INFO $fastcgi_path_info; 
          fastcgi_intercept_errors on; 
+         fastcgi_read_timeout 600s; 
+         fastcgi_buffer_size 128k; 
+         fastcgi_buffers 8 256k; 
+         fastcgi_busy_buffers_size 256k; 
+         fastcgi_pass_header Authorization; 
         }
 </tmpl_else> 
-       <tmpl_if name='php' op='==' value='hhvm'> 
-              location @php { 
-                   try_files $uri =404; 
-                   include /etc/nginx/fastcgi_params; 
-                   fastcgi_pass unix:/var/run/hhvm/hhvm.<tmpl_var name='system_user'>.sock; 
-                   fastcgi_index index.php; 
-                   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
-                   #fastcgi_param PATH_INFO $fastcgi_script_name; 
-                   fastcgi_intercept_errors on; 
-                   error_page 500 501 502 503 = @phpfallback; 
-               } 
- 
-                   location @phpfallback { 
-                       try_files $uri =404; 
-                       include /etc/nginx/fastcgi_params; 
-<tmpl_if name='use_tcp'> 
-                       fastcgi_pass 127.0.0.1:<tmpl_var name='fpm_port'>; 
-</tmpl_if> 
-<tmpl_if name='use_socket'> 
-                       fastcgi_pass unix:<tmpl_var name='fpm_socket'>; 
-</tmpl_if> 
-                       fastcgi_index index.php; 
-                       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
-                       #fastcgi_param PATH_INFO $fastcgi_script_name; 
-                       fastcgi_intercept_errors on; 
-                    } 
-   </tmpl_else> 
- 
-     location @php { 
+        location ~ ^(.+\.php)(.*)$ { 
             deny all; 
         } 
-   </tmpl_if> 
 </tmpl_if> 

 <tmpl_if name='cgi' op='==' value='y'>