So installierst du OpenEMR auf Ubuntu 22.04

OpenEMR ist ein Open-Source-Tool für die elektronische Gesundheitsakte und das Praxismanagement. Es ist vom Office of the National Coordinator for Health Information Technology (ONC) zertifiziert und bietet integrierte Gesundheitsakten, Praxismanagement, Terminplanung, elektronische Rechnungsstellung, Internationalisierung, kostenlosen Support und vieles mehr. Es kann die demografischen Daten der Patienten erfassen, die Patienten einplanen, sehr detaillierte Gesundheitsakten mit Laborberichten, Medikamenten und Prozeduren führen, ihre Rezepte verfolgen, bei der medizinischen Abrechnung helfen, detaillierte Berichte erstellen und mehrere Sprachen unterstützen.

In diesem Tutorial erfährst du, wie du die OpenEMR-Software auf einem Server mit Ubuntu 22.04 installierst.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 20.04 läuft.
  • Ein sudo-Benutzer ohne Root-Rechte.
  • Ein vollständig qualifizierter Domainname (FQDN) wie openemr.example.com.
  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo apt update
    $ sudo apt upgrade
    
  • Ein paar Pakete, die dein System benötigt.
    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

    Einige dieser Pakete sind vielleicht schon auf deinem System installiert.

Schritt 1 – Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Ubuntu wird standardmäßig mit ufw (Uncomplicated Firewall) ausgeliefert.

Überprüfe, ob die Firewall aktiv ist.

$ sudo ufw status

Du wirst die folgende Ausgabe erhalten.

Status: inactive

Erlaube den SSH-Port, damit die Firewall die aktuelle Verbindung nicht unterbricht, wenn du sie aktivierst.

$ sudo ufw allow OpenSSH

Lasse auch HTTP- und HTTPS-Ports zu.

$ sudo ufw allow http
$ sudo ufw allow https

Aktiviere die Firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Überprüfe den Status der Firewall erneut.

$ sudo ufw status

Du solltest eine ähnliche Ausgabe sehen.

Status: active

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

Schritt 2 – Nginx installieren

Ubuntu 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 arch=amd64] \
http://nginx.org/packages/ubuntu `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.

$ nginx -v
nginx version: nginx/1.24.0

Starte den Nginx-Server.

$ sudo systemctl start nginx

Schritt 3 – Installiere MySQL

Ubuntu 22.04 wird mit der neuesten Version von MySQL ausgeliefert. Du kannst sie mit einem einzigen Befehl installieren.

$ sudo apt install mysql-server

Überprüfe die Version von MySQL.

$ mysql --version
mysql  Ver 8.0.33-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))

Dieser Schritt ist für die MySQL-Versionen 8.0.28 und höher notwendig. Rufe die MySQL-Shell auf.

$ sudo mysql

Führe den folgenden Befehl aus, um das Passwort für deinen Root-Benutzer festzulegen. Achte darauf, dass es eine Mischung aus Zahlen, Groß- und Kleinbuchstaben und Sonderzeichen enthält.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';

Beende die Shell.

mysql> exit

Führe das Skript für die sichere Installation von MySQL aus.

$ sudo mysql_secure_installation

Zuerst wirst du nach deinem Root-Passwort gefragt. Gib es ein. Als Nächstes wirst du aufgefordert, die Validate Password Component zu installieren. Sie prüft die Stärke der in MySQL verwendeten Passwörter. Drücke Y, um sie zu installieren. Als Nächstes wirst du aufgefordert, die Stufe der Passwortüberprüfung festzulegen. Wähle 2, da dies die stärkste Stufe ist.

Securing the MySQL server deployment.

Enter password for user root:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Using existing password for root.

Estimated strength of the password: 100

Gib N ein, um die Änderung deines Root-Passworts abzulehnen. Gib außerdem Y ein, um anonyme Benutzer zu entfernen, Remote-Root-Logins zu verbieten, die Testdatenbank zu entfernen und die Berechtigungstabellen neu zu laden.

Change the password for root ? ((Press y|Y for Yes, any other key for No) : N

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL 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? (Press y|Y for Yes, any other key for No) : 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? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL 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? (Press y|Y for Yes, any other key for No) : 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? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!

Schritt 4 – MySQL konfigurieren

Melde dich in der MySQL-Shell an. Gib dein Root-Passwort ein, wenn du dazu aufgefordert wirst.

$ sudo mysql -u root -p

Erstelle eine Beispieldatenbank.

mysql> CREATE DATABASE openemr;

Erstelle ein SQL-Benutzerkonto.

mysql> CREATE USER 'openemruser'@'localhost' IDENTIFIED BY 'Your_password2';

Erteile dem Benutzer alle Rechte für die Datenbank.

mysql> GRANT ALL PRIVILEGES ON openemr.* TO 'openemruser'@'localhost';

Lösche die Benutzerrechte.

mysql> FLUSH PRIVILEGES;

Beende die Shell.

mysql> exit

Schritt 5 – Installiere PHP und seine Erweiterungen

Ubuntu 22.04 wird mit der Version PHP 8.1.2 ausgeliefert, die ein wenig veraltet ist. Wir werden die neueste Version von PHP 8.2 mit Hilfe von Ondrejs PHP-Repository installieren.

$ sudo add-apt-repository ppa:ondrej/php

Als Nächstes installierst du PHP und die für OpenEMR erforderlichen Erweiterungen.

$ sudo apt install php8.2-fpm php8.2-mysql php8.2-bcmath php8.2-xml php8.2-zip php8.2-curl php8.2-mbstring php8.2-gd php8.2-tidy php8.2-intl php8.2-cli php8.2-soap imagemagick libtiff-tools php8.2-ldap

Überprüfe die Installation.

$ php --version
PHP 8.2.7 (cli) (built: Jun  8 2023 15:27:40) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.7, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.7, Copyright (c), by Zend Technologies

Schritt 6 – SSL installieren

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

Bei Ubuntu 22.04 ist Snapd standardmäßig installiert. 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

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 openemr.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/openemr.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-Erneuerungsplanerdienst.

$ 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
.....
Sun 2023-02-26 06:32:00 UTC 9h left       Sat 2023-02-25 18:04:05 UTC 2h 59min ago  snap.certbot.renew.timer  snap.certbot.renew.service
Sun 2023-02-26 06:43:20 UTC 9h left       Sat 2023-02-25 10:49:23 UTC 10h ago       apt-daily-upgrade.timer   apt-daily-upgrade.service
Sun 2023-02-26 09:00:06 UTC 11h left      Sat 2023-02-25 20:58:06 UTC 5min ago      apt-daily.timer           apt-daily.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 7 – OpenEMR herunterladen

Besuche die OpenEMR-Downloadseite und hole dir den Link für die neueste Version von OpenEMR. Lade OpenEMR auf den Server herunter.

$ wget https://sourceforge.net/projects/openemr/files/OpenEMR%20Current/7.0.1/openemr-7.0.1.tar.gz

Entpacke die Dateien.

$ tar -pxzf openemr-7.0.1.tar.gz

Erstelle das Verzeichnis /var/www/html.

$ sudo mkdir /var/wwww/html -p

Verschiebe die entpackten Dateien in das Webverzeichnis.

$ sudo mv openemr-7.0.1 /var/www/html/openemr

Erteile dem Nginx-Benutzer Rechte für das Web-Root-Verzeichnis.

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

Schritt 8 – PHP-FPM konfigurieren

Ö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.
; 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 = www-data und listen.group = www-data in der Datei und ändere sie in nginx.

; 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

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

Erhöhe die Ausführungszeit für PHP-FPM und PHP-CLI auf 60 Sekunden.

$ sudo sed -i 's/max_execution_time = 30/max_execution_time = 60/' /etc/php/8.2/fpm/php.ini

Setze den Wert der Variable max_input_time auf 1.

$ sudo sed -i 's/max_input_time = 60/max_input_time = -1/' /etc/php/8.2/fpm/php.ini

Erhöhe das Speicherlimit für PHP-FPM von 128 MB auf 512 MB.

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

Erhöhe die Datei-Upload-Größe auf 30 MB.

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

Erhöhe die Anzahl der maximalen Eingabevariablen auf 3000.

$ sudo sed -i 's/;max_input_vars = 1000/max_input_vars = 3000/g' /etc/php/8.2/fpm/php.ini

Erlaube aus PHP-Sicht den Zugriff auf lokale Dateien mit LOAD DATA-Anweisungen.

$ sudo sed -i 's/;mysqli.allow_local_infile = On/mysqli.allow_local_infile = On/g' /etc/php/8.2/fpm/php.ini

Starte den PHP-FPM-Dienst neu.

$ sudo systemctl restart php8.2-fpm

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

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

Schritt 9 – Nginx konfigurieren

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

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

Füge den folgenden Code in die Datei ein.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  openemr.example.com;

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

    # SSL
    ssl_certificate         /etc/letsencrypt/live/openemr.example.com/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/openemr.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/openemr.example.com/chain.pem;
    ssl_session_timeout  1d;
    ssl_session_cache shared:SSL:50m;
    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;
    # use https://blog.cloudflare.com/announcing-1111 Cloudfare+Apnic labs, It is free and secure
    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] valid=300s;

    root /var/www/html/openemr;

    index index.php;

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

    # Pass PHP Scripts To FastCGI Server
    location ~* \.php$ {
        try_files $uri =404;
        fastcgi_index  index.php;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock; # Depends On The PHP Version
        fastcgi_param SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        include fastcgi_params;
    }

    # deny access to writable files/directories
    location ~* ^/sites/*/(documents|edi|era) {
        deny all;
        return 404;
    }

    # deny access to certain directories
    location ~* ^/(contrib|tests) {
	    deny all;
        return 404;
    }

    # Alternatively all access to these files can be denied
    location ~* ^/(admin|setup|acl_setup|acl_upgrade|sl_convert|sql_upgrade|gacl/setup|ippf_upgrade|sql_patch)\.php {
        deny all;
        return 404;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt  {
        log_not_found off;
        access_log off;
    }

    location ~ /\. {
        deny all;
    }
}

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  openemr.example.com;
    return 301   https://$host$request_uri;
}

Beachte, dass das Stammverzeichnis, das in der Nginx-Konfiguration verwendet werden soll, /var/www/html/wallabag/public/ ist.

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

Ö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.

Überprüfe die Syntax der Nginx-Konfigurationsdatei.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Starte den Nginx-Dienst neu.

$ sudo systemctl restart nginx

Schritt 10 – Installiere OpenEMR

Öffne die URL https://openemr.example.com in deinem Browser und du wirst den folgenden Einrichtungsbildschirm sehen.

OpenEMR-Installationsprüfung

Hier werden die Dateiberechtigungen geprüft und bestätigt, ob du mit Schritt 1 fortfahren kannst oder nicht. Wenn du das Wort ready in grüner Schrift siehst, bedeutet das, dass du fortfahren kannst. Klicke auf die blaue Schaltfläche, um mit Schritt 1 fortzufahren.

OpenEMR Datenbank Setup-Assistent

Auf der nächsten Seite wirst du gefragt, ob du möchtest, dass das Installationsprogramm die Datenbank erstellt oder eine vorgefertigte Datenbank verwendet. Wähle die Option Ich habe die Datenbank bereits erstellt und klicke auf die Schaltfläche, um zu Schritt 2 zu gelangen.

OpenEMR Datenbank und Kontodaten

Auf der nächsten Seite gibst du die Zugangsdaten für die Datenbank ein, die du in Schritt 4 konfiguriert hast. Gib auch die Zugangsdaten für dein Administratorkonto ein. Achte darauf, dass dein Benutzername 12 oder mehr Zeichen lang ist, sonst bekommst du eine Fehlermeldung. Du kannst hier die Zwei-Faktor-Authentifizierung (2FA) aktivieren, aber es wird empfohlen, sie später nach der Installation zu konfigurieren. Klicke auf die Schaltfläche, um die Datenbank und das Benutzerkonto zu erstellen.

OpenEMR Datenbank und Benutzer erstellen

Auf der nächsten Seite wird der Installationsstatus angezeigt und du bekommst den Benutzernamen und das Passwort angezeigt. Klicke auf die Schaltfläche, um mit Schritt 4 fortzufahren.

OpenEMR PHP konfigurieren

Auf der nächsten Seite werden die empfohlenen und aktuellen Werte aus deiner php.ini Datei aufgelistet. Vergewissere dich, dass die aktuellen Werte den Anforderungen entsprechen. Das Installationsprogramm zeigt aus irgendeinem Grund die falschen Werte für die Variablen max_input_time und max_execution_time an, auch wenn du sie richtig gesetzt hast. Du kannst diese ignorieren. Du kannst die aktuellen Werte mit den folgenden Befehlen überprüfen.

OpenEMR PHP Wertüberprüfung

Wenn du zufrieden bist, klicke auf die Schaltfläche, um mit Schritt 5 fortzufahren.

OpenEMR Apache Einstellungen

Im nächsten Schritt werden die Einstellungen für den Apache-Server aufgeführt, die wir ignorieren, da wir den Nginx-Server verwenden. Klicke auf die Schaltfläche, um zur nächsten Seite zu gelangen.

OpenEMR Thema wählen

Hier wirst du aufgefordert, ein Thema für das Administrationspanel auszuwählen. Wähle die Option Aktuell halten und klicke auf die Schaltfläche, um fortzufahren. Du kannst das Thema später im Administrationsbereich ändern, allerdings kannst du dann nicht mehr sehen, wie es aussieht. Wenn du es auf der Installationsseite auswählst, kannst du vor der Auswahl auch sehen, wie es aussieht. Wir bleiben bei dem Standardthema.

OpenEMR-Installation letzter Schritt

Auf der letzten Seite findest du einige abschließende Hinweise zur Software und zu den Anmeldedaten für das Konto. Klicke auf die Schaltfläche Start, um die Anmeldeseite zu öffnen.

OpenEMR-Anmeldeseite

Du bekommst ein OpenEMR-Registrierungs-Popup, um Ankündigungen von deren Website zu erhalten. Du kannst es ignorieren, deine Anmeldedaten eingeben und auf die Schaltfläche Anmelden klicken, um auf das Dashboard zuzugreifen.

OpenEMR Dashboard

Wenn du die Zwei-Faktor-Authentifizierung während der Installation nicht konfiguriert hast, kannst du dies nachholen, indem du oben rechts auf das Avatar-Symbol klickst und die Option MFA Management auswählst.

OpenEMR 2FA Menü

Auf der nächsten Seite wählst du die Authentifizierungsmethode aus dem Dropdown-Menü aus und beginnst mit der Konfiguration.

OpenEMR 2FA Type Page

Von nun an kannst du OpenEMR für die Verwaltung deines Gesundheitsunternehmens nutzen.

Fazit

Damit ist unser Tutorium zur Installation von OpenEMR auf einem Ubuntu 22.04 Server abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …