So installierst du Monica Personal CRM auf Rocky Linux 9

Normalerweise wird Customer Relationship Management (CRM) Software für Unternehmen entwickelt, um ihre Kunden zu verwalten. CRM-Software hilft Unternehmen dabei, Daten von Kunden zu sammeln und ihnen über verschiedene Kommunikationsmittel zu helfen.

Monica Personal CRM hingegen richtet sich an Einzelpersonen und ihre Beziehungen zu Familie und Freunden. Monica CRM hilft dabei, alles zu organisieren und zu speichern, was es über die Menschen in deinem Umfeld zu wissen gibt. Es ist quelloffen und völlig kostenlos zu benutzen.

In dieser Anleitung lernst du, wie du Monica Personal CRM auf einem Rocky Linux 9 Server installierst.

Voraussetzungen

  • Ein Server mit Rocky Linux 9 und mindestens 1,5 GB RAM. Wenn dein Server weniger als 1,5 GB RAM hat, werden die Yarn-Installationsaufgaben höchstwahrscheinlich fehlschlagen. Rüste auf einen Server mit besserem RAM auf, bevor du mit diesem Tutorial fortfährst, um eine reibungslose Installation zu gewährleisten.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Einen Fully Qualified Domain Name (FQDN) wie monica.example.com, der auf deinen Server zeigt.
  • Ein SMTP-Konto bei einem E-Mail-Dienst wie Amazon SES oder Mailgun.
  • Alles ist auf dem neuesten Stand.
    $ sudo dnf update
    
  • Ein paar wichtige Pakete werden benötigt, damit das Tutorial und Monica CRM laufen. Einige davon befinden sich bereits auf deinem Server.
    $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
    

Schritt 1 – Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Rocky Linux verwendet die Firewalld Firewall. Überprüfe den Status der Firewall.

$ sudo firewall-cmd --state
running

Die Firewall arbeitet mit verschiedenen Zonen, wobei die öffentliche Zone die Standardzone ist, die wir verwenden werden. Liste alle Dienste und Ports auf, die auf der Firewall aktiv sind.

$ sudo firewall-cmd --permanent --list-services

Es sollte die folgende Ausgabe angezeigt werden.

cockpit dhcpv6-client ssh

Lasse HTTP- und HTTPS-Ports zu.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Überprüfe erneut den Status der Firewall.

$ sudo firewall-cmd --permanent --list-services

Du solltest eine ähnliche Ausgabe sehen.

cockpit dhcpv6-client http https ssh

Lade die Firewall neu, um die Änderungen zu aktivieren.

$ sudo firewall-cmd --reload

Schritt 2 – Git installieren

Git ist normalerweise auf Rocky Linux 9 vorinstalliert. Falls es aber nicht installiert ist, kannst du es mit dem folgenden Befehl installieren.

$ sudo dnf install git -y

Überprüfe die Version von Git.

$ git --version
git version 2.39.3

Führe die folgenden Befehle aus, um Git so zu konfigurieren, dass es deinen Namen und deine E-Mail-Adresse aufnimmt.

$ git config --global user.name "Your Name"
$ git config --global user.email "youremail@domain.com"

Schritt 3 – Node installieren

Monica CRM benötigt Node.js, um zu funktionieren.

$ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/nodesource.gpg

Installiere das Nodesource RPM-Paket. Die aktuelle Node LTS Version ist 20.x, aber sie funktioniert nicht mit dem Yarn Paketmanager, deshalb haben wir sie vorerst auf 18.x gesetzt.

$ NODE_MAJOR=18
$ sudo yum install https://rpm.nodesource.com/pub_$NODE_MAJOR.x/nodistro/repo/nodesource-release-nodistro-1.noarch.rpm -y

Installiere Node.js.

$ sudo yum install nodejs -y --setopt=nodesource-nodejs.module_hotfixes=1

Überprüfe, ob es richtig installiert ist.

$ node --version
v18.18.2

Aktualisiere NPM.

$ sudo npm install -g npm@latest

Überprüfe die NPM-Version.

$ npm --version
10.2.4

Schritt 4 – Yarn installieren

Yarn ist ein weiterer Javascript-Paketmanager, der neben Node.js von Monica CRM benötigt wird. Die übliche Methode zur Installation von Yarn ist, es global zu installieren. So wird sichergestellt, dass alle Test- und Automatisierungswerkzeuge in einem Projekt dieselbe Version von Yarn verwenden und Inkonsistenzen vermieden werden.

Installiere Yarn mit dem folgenden Befehl.

$ sudo npm install --global yarn

Überprüfe die Installation von Yarn.

$ yarn --version
1.22.21

Schritt 5 – Nginx installieren

Rocky Linux 9 wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, musst du das offizielle Nginx-Repository herunterladen.

Erstelle und öffne die Datei /etc/yum.repos.d/nginx.repo zum Bearbeiten.

$ sudo nano /etc/yum.repos.d/nginx.repo

Füge den folgenden Code in die Datei ein.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Installiere Nginx.

$ sudo dnf install nginx -y

Überprüfe die Installation.

$ nginx -v
nginx version: nginx/1.24.0

Aktiviere und starte den Nginx Serverdienst.

$ sudo systemctl enable nginx --now

Überprüfe den Status des Dienstes.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Thu 2023-11-23 01:10:33 UTC; 1s ago
       Docs: http://nginx.org/en/docs/
    Process: 4560 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 4561 (nginx)
      Tasks: 2 (limit: 10841)
     Memory: 1.9M
        CPU: 11ms
     CGroup: /system.slice/nginx.service
             ??4561 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??4562 "nginx: worker process"

Öffne die IP-Adresse deines Servers in deinem Webbrowser. Du solltest die folgende Seite sehen, d.h. dein Server ist betriebsbereit.

Nginx Standardseite

Schritt 6 – Installiere PHP und Erweiterungen

Rocky Linux 9 wird standardmäßig mit PHP 8.1 ausgeliefert. Um immer auf der neuesten PHP-Version zu bleiben oder wenn du mehrere PHP-Versionen installieren möchtest, müssen wir das REMI-Repository nutzen.

Der erste Schritt besteht darin, das Epel-Repository zu holen.

$ sudo dnf install epel-release -y

Als nächstes installierst du das Remi-Repository.

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

Prüfe, ob PHP-Streams verfügbar sind.

$ dnf module list php -y
Name    Stream              Profiles                                      Summary
php     8.1                 common [d], devel, minimal                    PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name    Stream              Profiles                                      Summary
php     remi-7.4            common [d], devel, minimal                    PHP scripting language
php     remi-8.0            common [d], devel, minimal                    PHP scripting language
php     remi-8.1            common [d], devel, minimal                    PHP scripting language
php     remi-8.2            common [d], devel, minimal                    PHP scripting language
php     remi-8.3            common [d], devel, minimal                    PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Die Standardversion ist 8.1. Aktiviere das PHP 8.2 Repository von Remi.

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.2

Installiere PHP und seine Erweiterungen.

$ sudo dnf install php php-bcmath php-cli php-curl php-common \
    php-fpm php-gd php-gmp php-intl php-mbstring \
    php-mysql php-opcache php-redis php-xml php-zip -y

Überprüfe die installierte Version von PHP.

$ php --version
PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.13, Copyright (c), by Zend Technologies

Aktiviere und starte den PHP-FPM-Dienst.

$ sudo systemctl enable php-fpm --now

Überprüfe den Status des Dienstes.

$ sudo systemctl status php-fpm
? php-fpm.service - The PHP FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; preset: disabled)
     Active: active (running) since Thu 2023-11-23 01:21:11 UTC; 1s ago
   Main PID: 5643 (php-fpm)
     Status: "Ready to handle connections"
      Tasks: 6 (limit: 10841)
     Memory: 15.7M
        CPU: 85ms
     CGroup: /system.slice/php-fpm.service
             ??5643 "php-fpm: master process (/etc/php-fpm.conf)"
             ??5644 "php-fpm: pool www"
             ??5645 "php-fpm: pool www"
             ??5646 "php-fpm: pool www"
             ??5647 "php-fpm: pool www"
             ??5648 "php-fpm: pool www"

Schritt 7 – Composer installieren

Composer dient als Abhängigkeitsmanager für PHP. Er ist auch der Abhängigkeitsmanager des Laravel PHP-Frameworks, auf dem Monica CRM basiert.

Lade das Composer-Installationsskript herunter.

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

Überprüfe das heruntergeladene Installationsprogramm.

$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Du wirst die folgende Ausgabe erhalten.

Installer verified

Führe das Installationsskript aus, um die neueste Version von Composer herunterzuladen.

$ php composer-setup.php

Entferne das Installationsskript.

$ php -r "unlink('composer-setup.php');"

Verschiebe die heruntergeladene Binärdatei in das Verzeichnis /usr/local/bin.

$ sudo mv composer.phar /usr/local/bin/composer

Bestätige die Installation.

$ composer --version
Composer version 2.6.5 2023-10-06 10:11:52

Schritt 8 – MariaDB installieren

MariaDB ist ein Drop-in-Ersatz für MySQL. Das bedeutet, dass die Befehle zum Ausführen und Betreiben von MariaDB die gleichen sind wie die für MySQL.

Rocky Linux 9 wird standardmäßig mit MariaDB 10.5.22 ausgeliefert, das ein wenig veraltet ist. Um die neueste stabile Version von MariaDB zu erhalten, musst du das offizielle Repository verwenden.

Erstelle die Repository-Datei von MariaDB und öffne sie zum Bearbeiten.

$ sudo nano /etc/yum.repos.d/mariadb.repo

Füge den folgenden Code in die Datei ein.

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.11/rhel9-amd64
module_hotfixes=1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1 

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Gib den folgenden Befehl ein, um den MariaDB-Server zu installieren. Beachte, dass der Paketname groß geschrieben wird. Das offizielle MariaDB-Paket, das Rocky Linux ausliefert, heißt einfach mariadb-server. Achte darauf, dass du die beiden nicht verwechselst.

$ sudo dnf install MariaDB-server -y

Überprüfe, ob MariaDB korrekt installiert ist.

$ mysql --version

Du solltest die folgende Ausgabe sehen.

mysql  Ver 15.1 Distrib 10.11.6-MariaDB, for Linux (x86_64) using  EditLine wrapper

Du kannst auch mariadb --version verwenden, um die Version zu überprüfen.

Starte und aktiviere den MariaDB-Dienst.

$ sudo systemctl enable --now mariadb

Der MariaDB-Dienst ist bereits aktiviert und läuft. Überprüfe seinen Status mit dem folgenden Befehl.

$ sudo systemctl status mariadb
? mariadb.service - MariaDB 10.11.6 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled)
    Drop-In: /etc/systemd/system/mariadb.service.d
             ??migrated-from-my.cnf-settings.conf
     Active: active (running) since Thu 2023-11-23 01:23:52 UTC; 2s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 6831 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 6832 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR >
    Process: 6850 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
   Main PID: 6840 (mariadbd)
     Status: "Taking your SQL requests now..."
      Tasks: 10 (limit: 10841)
     Memory: 193.1M
        CPU: 162ms
     CGroup: /system.slice/mariadb.service
             ??6840 /usr/sbin/mariadbd

Führe den folgenden Befehl aus, um die Standardkonfiguration durchzuführen, z. B. ein Root-Passwort zu vergeben, anonyme Benutzer zu entfernen, den Root-Login aus der Ferne zu verbieten und Testtabellen zu löschen.

$ sudo mariadb-secure-installation

Du wirst nach deinem Root-Passwort gefragt. Da wir kein Root-Passwort festgelegt haben, drückst du die Eingabetaste, um fortzufahren.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...

Als Nächstes wirst du gefragt, ob du zum Plugin unix_socket wechseln möchtest. Das unix_socket Plugin ermöglicht es dir, dich mit deinen Linux-Benutzerdaten bei MariaDB anzumelden. Wähle n, um den Wechsel zu überspringen, da du bereits ein geschütztes root Konto hast.

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

Als nächstes wirst du gefragt, ob du dein Root-Passwort ändern möchtest. Unter Rocky Linux 9 ist das Root-Konto für MariaDB eng mit der automatischen Systemwartung verknüpft, daher solltest du die konfigurierten Authentifizierungsmethoden für das Konto nicht ändern. Andernfalls könnte eine Paketaktualisierung das Datenbanksystem zerstören, indem der Zugriff auf das Administratorkonto aufgehoben wird. Gib n ein, um fortzufahren.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

Drücke von nun an y und dann Enter, um die Standardeinstellungen für alle folgenden Fragen zu akzeptieren. Dadurch wird der Zugang für anonyme Benutzer entfernt, die Datenbanken werden getestet, die Remote-Root-Anmeldung wird deaktiviert und die Änderungen werden geladen.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Das war’s schon. Wenn du dich das nächste Mal bei der MariaDB-Shell anmelden willst, verwende den folgenden Befehl.

$ sudo mysql

Gib dein Linux-Root-Passwort ein, wenn du dazu aufgefordert wirst.

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.11.6-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Drücke exit, um die MariaDB-Shell zu schließen.

Schritt 9 – MariaDB konfigurieren

Melde dich in der MariaDB-Shell an.

$ sudo mysql

Erstelle eine neue MySQL-Datenbank, einen Datenbankbenutzer und ein Passwort für deine Monica CRM-Installation.

MariaDB> CREATE DATABASE monica CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB> CREATE USER 'monicauser'@'localhost' IDENTIFIED BY 'yourpassword';
MariaDB> GRANT ALL PRIVILEGES ON monica.* TO 'monicauser'@'localhost';

Ersetze monica, monicauser und yourpassword durch die Anmeldedaten deiner Wahl. Wähle ein sicheres Passwort.

Erstelle außerdem einen administrativen Benutzer mit denselben Fähigkeiten wie das Root-Konto.

MariaDB> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Flush die Berechtigungen, um sicherzustellen, dass sie in der aktuellen Sitzung gespeichert werden.

MariaDB> FLUSH PRIVILEGES;

Beende die MariaDB-Shell.

MariaDB> exit

Schritt 10 – Herunterladen von Monica

Erstelle das Web-Root-Verzeichnis für Monica CRM.

$ sudo mkdir /var/www/html/monica -p

Setze den aktuell angemeldeten Benutzer als Eigentümer dieses Verzeichnisses.

$ sudo chown -R $USER:$USER /var/www/html/monica

Wechsle in das Verzeichnis.

$ cd /var/www/html/monica

Klone das offizielle Monica-Github-Repository an dieser Stelle. Beachte den Punkt (.) am Ende des Befehls, der bedeutet, dass Monica in das aktuelle Verzeichnis und nicht in ein Unterverzeichnis geklont wird.

$ git clone https://github.com/monicahq/monica.git .

Hol dir die neuesten Daten von GitHub.

$ git fetch

Checke die neueste Version von Monica aus. Die aktuellste Version findest du auf der Seite Monica releases. Zum Zeitpunkt der Erstellung dieses Tutorials ist die neueste Version 4.0.0. Ersetze 4.0.0 durch die Version, die du installieren willst, in dem unten stehenden Befehl.

$ git checkout tags/v4.0.0

Du erhältst dann die folgende Ausgabe.

Note: switching to 'tags/v4.0.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e1a3e1315 build: delete heroku workflow (#6540)

Schritt 11 – Installation von Monica

Vergewissere dich, dass du dich im Stammverzeichnis von Monica befindest.

$ cd /var/www/html/monica

Kopiere die Beispiel-Umgebungsvariablendatei, um eine Datei für die Konfiguration von Monica CRM zu erstellen.

$ cp .env.example .env

Ändere die folgenden Werte wie gezeigt. Setze die Variable APP_ENV auf production. Damit wird das HTTPS-Protokoll erzwungen. Setze die Variable APP_URL auf den Domänennamen von Monica zusammen mit dem HTTPS-Protokoll. Lege die Anmeldedaten für die Datenbank fest, die du im vorherigen Schritt erstellt hast. In unserem Lernprogramm verwenden wir den SES SMTP-Dienst von Amazon. Gib die Details für den Dienst ein, den du verwenden willst. Wenn du keinen verwendest, kannst du diese Felder auslassen.

APP_ENV=production
...
APP_URL=https://monica.example.com
...
DB_DATABASE=monicadb
DB_USERNAME=monicauser
DB_PASSWORD=YourPassword23!
...
MAIL_MAILER=smtp
MAIL_HOST=email-smtp.us-west-2.amazonaws.com
MAIL_PORT=587
MAIL_USERNAME=SESID
MAIL_PASSWORD=SESKey
MAIL_ENCRYPTION=tls
# Outgoing emails will be sent with these identity
MAIL_FROM_ADDRESS=name@example.com
MAIL_FROM_NAME="Monica CRM"
# New registration notification sent to this email
APP_EMAIL_NEW_USERS_NOTIFICATION=name@example.com
...

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Installiere alle benötigten Pakete für Monica mit Composer.

$ composer install --no-interaction --no-dev

Verwende Yarn, um die Frontend-Pakete zu installieren und die Assets (JS, CSS und Schriftarten) zu erstellen.

$ yarn install
$ yarn run production

Erstelle den Wert APP_KEY und fülle ihn automatisch in der Datei .env aus. Du wirst mit einer Ja- oder Nein-Frage gefragt, ob du fortfahren möchtest. Gib Ja ein, um fortzufahren.

$ php artisan key:generate

Gib den folgenden Befehl ein, um Migrationen durchzuführen, die Datenbank zu seeden und Symlink-Verzeichnisse zu erstellen. Du wirst mit einer Ja- oder Nein-Frage gefragt, ob du fortfahren möchtest. Gib Ja ein, um fortzufahren. Gib deine E-Mail-Adresse und dein Passwort ein, um einen Standardbenutzer zu erstellen, und verwende diese Werte in dem Befehl.

$ php artisan setup:production --email=your@email.com --password=yourpassword -v

Du erhältst die folgende Ausgabe, die dich über die erfolgreiche Installation informiert.

Monica v4.0.0 is set up, enjoy.
? Filling database
   INFO  Seeding database.


-----------------------------
|
| Welcome to Monica v4.0.0
|
-----------------------------
| You can now sign in to your account:
| username: your@email.com
| password: <hidden>
| URL:      https://monica.example.com
-----------------------------
Setup is done. Have fun.

Schritt 12 – SSL installieren

Wir müssen Certbot installieren, um das SSL-Zertifikat zu erzeugen. Dazu verwenden wir den Snapd-Paketinstaller. Da Rocky Linux nicht mit diesem Paket ausgeliefert wird, installierst du den Snapd-Installer. Er benötigt das EPEL (Extra Packages for Enterprise Linux) Repository, um zu funktionieren. Da wir es aber bereits in Schritt 3 installiert haben, können wir direkt fortfahren.

Installiere Snapd.

$ sudo dnf install -y snapd

Aktiviere und starte den Snap-Dienst.

$ sudo systemctl enable snapd --now

Installiere das Snap-Kernpaket und vergewissere dich, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core && sudo snap refresh core

Erstelle die notwendigen Links, damit Snapd funktioniert.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Installiere Certbot.

$ sudo snap install --classic certbot

Stelle mit dem folgenden Befehl sicher, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link auf das Verzeichnis /usr/bin erstellst.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Überprüfe, ob Certbot richtig funktioniert.

$ certbot --version
certbot 2.7.4

Führe den folgenden Befehl aus, um ein SSL-Zertifikat zu erzeugen.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d monica.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/monica.example.com auf deinem Server heruntergeladen.

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Überprüfe den Certbot-Erneuerungszeitplanungsdienst.

$ sudo systemctl list-timers

Du findest snap.certbot.renew.service als einen der Dienste, die für die Ausführung vorgesehen sind.

NEXT                        LEFT           LAST                        PASSED      UNIT                      ACTIVATES     
---------------------------------------------------------------------------------------------------------------------------               
Thu 2023-11-23 02:34:37 UTC 45min left Thu 2023-11-23 00:57:54 UTC 51min ago    dnf-makecache.timer          dnf-makecache.service
Thu 2023-11-23 08:49:00 UTC 6h left    -                           -            snap.certbot.renew.timer     snap.certbot.renew.service
Fri 2023-11-24 00:00:00 UTC 22h left   Thu 2023-11-23 00:30:29 UTC 1h 18min ago logrotate.timer              logrotate.service

Führe einen Probelauf des Prozesses durch, um zu prüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert.

Schritt 13 – SELinux konfigurieren

Ändere den Dateisicherheitskontext für OpenEMR.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/monica(/.*)?"

Wende die Richtlinie an.

$ sudo restorecon -Rv /var/www/html/monica/

Wende die Richtlinie an, um Nginx den Zugriff auf MariaDB zu ermöglichen.

$ sudo setsebool -P httpd_can_network_connect_db 1

Wende die Richtlinie an, um Verbindungen zu externen Hosts zu erlauben. Dies wird für den Versand von E-Mails benötigt.

$ sudo setsebool -P httpd_can_network_connect 1

Mit MariaDB 10.11 wirst du mit einem weiteren Problem konfrontiert: SELinux verhindert, dass sich PHP-FPM mit MariaDB verbindet. Das kann durch die Installation eines SELinux-Moduls gelöst werden. Der erste Schritt besteht darin, eine Datei type enforcement zu erstellen.

Erstelle die Datei my-phpfpm.te in deinem Home-Verzeichnis und öffne sie zum Bearbeiten.

$ cd ~
$ nano my-phpfpm.te

Füge den folgenden Code in die Datei ein.

module my-phpfpm 1.0;

require {
        type unconfined_service_t;
        type httpd_t;
        type httpd_sys_content_t;
        class dir write;
        class unix_stream_socket connectto;
}

#============= httpd_t ==============

#!!!! This avc is allowed in the current policy
allow httpd_t httpd_sys_content_t:dir write;

#!!!! This avc is allowed in the current policy
allow httpd_t unconfined_service_t:unix_stream_socket connectto;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Im nächsten Schritt wandelst du sie mit folgendem Befehl in ein Richtlinienmodul um. Ändere den Dateinamen in dem Befehl nicht, sonst funktioniert er nicht. Das Modul heißt my-phpfpm und der Dateiname sollte mit dem Namen des Moduls übereinstimmen.

$ sudo checkmodule -M -m -o my-phpfpm.mod my-phpfpm.te

Als Nächstes müssen wir das Richtlinienmodul kompilieren, um ein Richtlinienpaket zu erstellen.

$ sudo semodule_package -o my-phpfpm.pp -m my-phpfpm.mod

Der letzte Schritt besteht darin, das Richtlinienpaket mit dem Befehl semodule zu laden, der die zu verwendende Richtlinie installiert.

$ sudo semodule -i my-phpfpm.pp

Schritt 14 – PHP-FPM konfigurieren

Öffne php.ini zur Bearbeitung.

$ sudo nano /etc/php.ini

Um die Datei-Upload-Größen festzulegen, änderst du die Werte der Variablen upload_max_filesize und post_max_size. Dieser Wert bestimmt die Größe der Datei, die du auf Monica hochladen kannst. Standardmäßig ist er auf 10 MB eingestellt, was wir mit PHP konfigurieren werden.

$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 10M/' /etc/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 10M/' /etc/php.ini

Konfiguriere das Speicherlimit von PHP je nach den Ressourcen und Anforderungen deines Servers.

$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php.ini

Öffne die Datei /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Wir müssen den Unix-Benutzer/die Unix-Gruppe der PHP-Prozesse auf nginx setzen. Finde die Zeilen user=apache und group=apache in der Datei und ändere sie in nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Finde die Zeilen listen.owner = nobody, listen.group = nobody, listen.mode = 0660 in der Datei und ändere sie wie folgt, nachdem du sie auskommentiert hast.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den PHP-fpm-Prozess neu. Vergewissere dich, dass Nginx installiert ist, bevor du den PHP-Dienst neu startest, sonst schlägt er fehl, da er die Gruppe nginx nicht finden kann.

$ sudo systemctl restart php-fpm

Ändere die Gruppe des PHP-Sessions-Verzeichnisses auf Nginx.

$ sudo chgrp -R nginx /var/lib/php/session

Schritt 15 – Nginx konfigurieren

Erlaube Nginx den Zugriff auf das Stammverzeichnis Monica.

$ sudo chown -R nginx:nginx /var/www/html/monica

Setze die richtigen Verzeichnisberechtigungen für das Verzeichnis storage.

$ sudo chmod -R 775 /var/www/html/monica/storage

Öffne die Datei /etc/nginx/nginx.conf zum Bearbeiten.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size  64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Erstelle und öffne die Datei /etc/nginx/conf.d/monica.conf zum Bearbeiten.

$ sudo nano /etc/nginx/conf.d/monica.conf

Füge den folgenden Code in die Datei ein. Ersetze monica.example.com durch deinen Domainnamen. Vergewissere dich, dass der Wert von client_max_body_size auf 10 MB eingestellt ist, was der Standard-Uploadgröße von Dateien in Monica entspricht. Es ist derselbe Wert, den wir zuvor mit PHP konfiguriert haben.

server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name monica.example.com;
    root /var/www/html/monica/public;

    index index.php;
    client_max_body_size 10M;

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

    ssl_certificate      /etc/letsencrypt/live/monica.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/monica.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/monica.example.com/chain.pem;
    
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_keep_conn on;
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  monica.example.com;
    return 301   https://$host$request_uri;
}

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Überprüfe deine Nginx-Konfiguration.

$ sudo nginx -t

Starte den Nginx-Server neu.

$ sudo systemctl restart nginx

Schritt 16 – Zugriff auf Monica CRM

Öffne die URL https://monica.example.com in deinem Browser und du gelangst zur Anmeldeseite wie unten dargestellt.

Monica CRM Anmeldeseite

Gib die E-Mail-Adresse und das Passwort ein, die du in Schritt 12 konfiguriert hast, und klicke auf die Schaltfläche Anmelden, um fortzufahren. Du gelangst zum Willkommensbildschirm, von dem aus du die Anwendung nutzen kannst.

Monica CRM Willkommensbildschirm

Schritt 17 Cron einrichten

Monica CRM benötigt mehrere Hintergrundprozesse, um einen reibungslosen Ablauf zu gewährleisten. Diese werden mit der Cron-Funktion verwaltet. Dazu richtest du einen Cron ein, der jede Minute den Befehl php artisan schedule:run ausführt.

Starte den crontab-Editor. Wir geben nginx als Benutzer an, da dieser Zugriff auf das Verzeichnis /var/www/html/monica hat. Im Befehl selbst geben wir nano als Editor an, was der einfachste Weg ist, um loszulegen.

$ sudo editor=NANO crontab -u nginx -e

Als Nächstes wirst du zum crontab-Editor weitergeleitet. Füge diese Zeile am Ende der Datei ein.

* * * * * php /var/www/html/monica/artisan schedule:run >> /dev/null 2>&1

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst. Das war’s schon. Monicas geplante Aufgaben werden nun regelmäßig über die Cron-Funktionalität ausgeführt.

Schritt 18 – Monica CRM aktualisieren

Der erste Schritt zur Sicherung von Monica CRM besteht darin, sicherzustellen, dass es gesichert ist. Du kannst das SQL von der Einstellungsseite aus sichern. Klicke auf das Symbol Einstellungen oben rechts im Dashboard, um die Seite Kontoeinstellungen zu öffnen. Öffne dann die Seite Daten exportieren aus dem linken Menü.

Monica Daten exportieren Seite

Klicke auf die Schaltfläche Nach SQL exportieren, um die Datenbank zu exportieren. Es gibt auch eine Option Export nach Json, die viel mehr als nur die SQL-Daten sichert, aber es gibt keine Möglichkeit, sie zu importieren. Wahrscheinlich wird der Status für beide Exporte als fehlgeschlagen angezeigt, aber wenn du das Verzeichnis /var/www/html/monica/storage/app/public/exports auf deinem Server durchsuchst, solltest du beide Dateien sehen.

$ ls /var/www/html/monica/storage/app/public/exports -al
total 84
drwxr-xr-x 2 nginx nginx  4096 Nov 22 09:47 .
drwxrwxr-x 4 nginx nginx  4096 Nov 22 09:47 ..
-rw-r--r-- 1 nginx nginx 53712 Nov 22 09:47 cvlK5RAl7VVLdYLplnSZ8SFGHHwDZy9cjRhtoOWB.json
-rw-r--r-- 1 nginx nginx 17050 Nov 22 09:47 dgZf5T0SnXeAuZ67HfaFLu2JosyUsByJcp2C8nlv.sql

Jetzt, wo wir die Daten gesichert haben, ist es Zeit für ein Update.

Wechsle in das Verzeichnis Monica.

$ cd /var/www/html/monica

Da die Berechtigungen für das Verzeichnis auf nginx gesetzt sind, müssen wir sudo verwenden, um Befehle auszuführen. Es ist jedoch besser, die Berechtigungen vorübergehend zu ändern, anstatt sudo zu verwenden, was wir auch tun werden.

$ sudo chown -R $USER:$USER /var/www/html/monica

Hol dir die neuesten Git-Änderungen.

$ git fetch

Klone die gewünschte Version. Für unseren Lehrgang beziehen wir uns auf die Beta-Version. Verwende sie nicht auf einem Produktionsserver.

$ git checkout tags/v5.0.0-beta.3

Aktualisiere die Abhängigkeiten.

$ composer install --no-interaction --no-dev

Installiere die Frontend-Pakete.

$ yarn install

Baue die JavaScript- und CSS-Assets.

$ yarn run production

Führe den folgenden Befehl aus, um die Instanz zu aktualisieren. Dabei werden die Migrationsskripte für die Datenbank ausgeführt und alle Caches für Config, Route und View geleert, um den Prozess zu optimieren.

$ php artisan monica:update --force

Wenn du die SQL-Datenbank in einer anderen Monica-Instanz wiederherstellen willst, musst du sicherstellen, dass deine Instanz komplett leer ist, d.h. keine Tabellen und keine Daten enthält. Wenn du das sichergestellt hast, führst du den folgenden Befehl aus, um den Datenbankmigrationsprozess zu starten.

$ php artisan migrate

Als nächstes importierst du die Datei monica.sql mit dem folgenden Befehl.

$ sudo mysqlimport -u monicauser -p monica /var/www/html/monica/storage/app/public/exports/dgZf5T0SnXeAuZ67HfaFLu2JosyUsByJcp2C8nlv.sql

Du wirst nach deinem Monica-Benutzer-DB-Passwort gefragt, das du zuvor festgelegt hast. Melde dich dann mit den Anmeldedaten der alten Instanz an.

Wenn du damit fertig bist, stellst du die Rechte für das Monica-Verzeichnis für den Benutzer nginx wieder her.

$ sudo chown -R nginx:nginx /var/www/html/monica

Fazit

Dies ist der Abschluss unseres Tutorials, in dem du gelernt hast, wie du die Monica CRM Software auf einem Rocky Linux 9 Server installierst. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …