So installierst du Monica Personal CRM unter Debian 12

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 persönlichen 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. Es wurde mit dem Laravel PHP Web Framework entwickelt.

In dieser Anleitung lernst du, wie du Monica Personal CRM auf einem Debian 12 Server installierst.

Voraussetzungen

  • Ein Server mit Debian 12 und mindestens 1,5 GB RAM. Wenn dein Server weniger als 1,5 GB RAM hat, wird die Installation von Yarn höchstwahrscheinlich fehlschlagen. Rüste auf einen Server mit besserem RAM auf, bevor du mit dieser Anleitung fortfährst, um eine reibungslose Installation zu gewährleisten.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Die Uncomplicated Firewall (UFW) ist aktiviert und läuft.
  • Ein 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 apt update && sudo apt upgrade
    
  • Ein paar wichtige Pakete werden benötigt, damit das Tutorial und Monica CRM laufen. Einige davon befinden sich bereits auf deinem Server.
    $ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y
    

Schritt 1 – Firewall konfigurieren

Der erste Schritt vor der Installation der Pakete ist die Konfiguration der Firewall, um HTTP- und HTTPS-Verbindungen zuzulassen.

Überprüfe den Status der Firewall.

$ sudo ufw status

Du solltest etwas wie das Folgende sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Erlaube HTTP- und HTTPs-Ports.

$ sudo ufw allow http
$ sudo ufw allow https

Überprüfe den Status zur Bestätigung noch einmal.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Schritt 2 – Git installieren

Git ist bei Debian 12 normalerweise vorinstalliert, aber falls es nicht installiert ist, führe den folgenden Befehl aus, um es zu installieren.

$ sudo apt install git -y

Überprüfe die Version von Git.

$ git --version
git version 2.39.2

Führe die folgenden Befehle aus, um Git so zu konfigurieren, dass dein Name und deine E-Mail-Adresse hinzugefügt werden.

$ 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. Importiere den Nodesource GPG-Schlüssel.

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

Erstelle das Nodesource deb Repository. 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
$ echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

Aktualisiere die Liste der System-Repositories.

$ sudo apt update

Installiere Node.js.

$ sudo apt install nodejs -y

Ü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

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

Importiere den Signierschlüssel von Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Füge das Repository für die stabile Version von Nginx hinzu.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Aktualisiere die System-Repositories.

$ sudo apt update

Installiere Nginx.

$ sudo apt install nginx

Überprüfe die Installation. Auf Debian-Systemen funktioniert der folgende Befehl nur mit sudo.

$ sudo nginx -v
nginx version: nginx/1.24.0

Starten Sie den Nginx-Server.

$ sudo systemctl start nginx

Überprüfe den Status des Dienstes.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Mon 2023-11-20 13:24:40 UTC; 4s ago
       Docs: https://nginx.org/en/docs/
    Process: 16778 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 16779 (nginx)
      Tasks: 2 (limit: 2315)
     Memory: 1.7M
        CPU: 8ms
     CGroup: /system.slice/nginx.service
             ??16779 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??16780 "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

Debian 12 wird standardmäßig mit PHP 8.2 ausgeliefert. Du kannst es und die Erweiterungen, die für Monica CRM benötigt werden, mit folgendem Befehl installieren.

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

Wenn du immer die neueste Version von PHP verwenden oder mehrere PHP-Versionen installieren möchtest, füge Ondrejs PHP-Repository hinzu.

Importiere zunächst den PHP-GPG-Schlüssel von Sury’s Repository.

$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

Füge das PHP-Repository von Ondrej Sury hinzu.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

Aktualisiere die Repository-Liste deines Systems.

$ sudo apt update

Du wirst wahrscheinlich Informationen über anstehende Upgrades erhalten. Führe sie aus.

$ sudo apt upgrade

Installiere PHP und seine Erweiterungen.

$ sudo apt install php8.2 php8.2-bcmath php8.2-cli php8.2-curl php8.2-common \
    php8.2-fpm php8.2-gd php8.2-gmp php8.2-intl php8.2-mbstring \
    php8.2-mysql php8.2-opcache php8.2-redis php8.2-xml php8.2-zip

Überprüfe die installierte Version von PHP.

$ php --version
PHP 8.2.12 (cli) (built: Oct 27 2023 13:00:10) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.12, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.12, Copyright (c), by Zend Technologies

Schritt 7 – PHP-FPM konfigurieren

Öffne php.ini zur Bearbeitung.

$ sudo nano /etc/php/8.2/fpm/php.ini

Um die Datei-Upload-Größen festzulegen, ändere 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/8.2/fpm/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 10M/' /etc/php/8.2/fpm/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/8.2/fpm/php.ini

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

$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Wir müssen den Unix-Benutzer/die Unix-Gruppe der PHP-Prozesse auf nginx setzen. Finde die Zeilen user=www-data und group=www-data 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.
user = nginx
group = nginx
...

Finde auch die Zeilen listen.owner=www-data und listen.group=www-data in der Datei und ändere sie in nginx.

listen.owner = nginx
listen.group = nginx

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. Andernfalls wird er fehlschlagen, da er die Gruppe nginx nicht finden kann.

$ sudo systemctl restart php8.2-fpm

Schritt 8 – 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 9 – 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.

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

Importiere den GPG-Schlüssel von MariaDB.

$ sudo curl -o /usr/share/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'

Erstelle die Repository-Datei von MariaDB.

$ echo "deb [signed-by=/usr/share/keyrings/mariadb-keyring.pgp] https://deb.mariadb.org/10.11/debian `lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/mariadb-server.list

Aktualisiere die Liste der System-Repositorys.

$ sudo apt update

Gib den folgenden Befehl ein, um den MariaDB-Server zu installieren.

$ sudo apt install mariadb-server -y

Überprüfe, ob MariaDB korrekt installiert wurde.

$ mysql --version

Du solltest die folgende Ausgabe sehen.

mysql  Ver 15.1 Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper

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

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 (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/mariadb.service.d
             ??migrated-from-my.cnf-settings.conf
     Active: active (running) since Tue 2023-11-21 07:49:48 UTC; 8min ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 28307 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
    Process: 28308 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 28310 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: 28350 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 28352 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
   Main PID: 28339 (mariadbd)
     Status: "Taking your SQL requests now..."
      Tasks: 8 (limit: 2315)
     Memory: 213.3M
        CPU: 585ms
     CGroup: /system.slice/mariadb.service
             ??28339 /usr/sbin/mariadbd

Führe den folgenden Befehl aus, um die Standardkonfiguration vorzunehmen, 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 Debian 12 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 administrative Konto entfernt 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, benutze 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 38
Server version: 10.11.6-MariaDB-1:10.11.6+maria~deb12 mariadb.org binary distribution

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 10 – 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 11 – Herunterladen von Monica

Erstelle das Web-Root-Verzeichnis.

$ sudo mkdir /var/www/html -p

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

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

Wechsle in das Verzeichnis.

$ cd /var/www/html

Klone das offizielle Monica-Github-Repository an dieser Stelle.

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

Wechsle in das geklonte Verzeichnis.

$ cd monica

Hol dir die neuesten Daten von GitHub.

$ git fetch

Checke die neueste Version von Monica aus. Die aktuellste Version findest du auf der Seite mit den Monica-Versionen. Zum Zeitpunkt der Erstellung dieses Tutorials ist die neueste Version 4.0.0. Ersetze 4.0.0 durch die Version, die du installieren möchtest, 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 12 – 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 13 – SSL installieren

Wir müssen Certbot installieren, um das SSL-Zertifikat zu erzeugen. Du kannst Certbot entweder über das Repository von Debian installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.

Bei Debian 12 ist Snapd noch nicht installiert. Installiere das Snapd-Paket.

$ sudo apt install snapd

Führe die folgenden Befehle aus, um sicherzustellen, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core && sudo snap refresh core

Installiere Certbot.

$ sudo snap install --classic certbot

Verwende den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link zum 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     
---------------------------------------------------------------------------------------------------------------------------               
Tue 2023-11-21 11:39:00 UTC 4min 54s left Tue 2023-11-21 11:09:07 UTC 24min ago    phpsessionclean.timer     phpsessionclean.service
Tue 2023-11-21 12:57:00 UTC 1h 22min left -                           -            snap.certbot.renew.timer  snap.certbot.renew.service
Wed 2023-11-22 00:00:00 UTC 12h left      Tue 2023-11-21 00:00:03 UTC 11h ago      dpkg-db-backup.timer      dpkg-db-backup.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 14 – Nginx konfigurieren

Erlaube Nginx den Zugriff auf das Monica-Stammverzeichnis.

$ 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/php8.2-fpm.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 15 – 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 16 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.

$ sudo crontab -u nginx -e

Wenn du crontab zum ersten Mal ausführst, wirst du nach einem Editor deiner Wahl gefragt.

no crontab for nginx - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny

Choose 1-3 [1]: 1

Gib 1 ein, um den nano-Editor zu wählen, da er am einfachsten zu bedienen ist. 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 17 – 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. Dadurch 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 Monica-Verzeichnisberechtigungen für den Benutzer nginx wieder her.

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

Fazit

Damit ist unser Tutorium abgeschlossen, in dem du gelernt hast, wie du die Monica CRM-Software auf einem Debian 12-Server installierst. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …