Installazione software · 13 min read · Sep 24, 2025

Come installare OpenEMR su Ubuntu 22.04

OpenEMR è uno strumento open-source per la gestione delle cartelle cliniche elettroniche e della pratica medica. È certificato dall’Ufficio del Coordinatore Nazionale per la Tecnologia dell’Informazione Sanitaria (ONC) e presenta cartelle cliniche integrate, gestione della pratica, programmazione, fatturazione elettronica, internazionalizzazione, supporto gratuito e molto altro. Può tenere traccia della demografia dei pazienti, programmare appuntamenti, mantenere cartelle cliniche estremamente dettagliate con referti di laboratorio, farmaci e procedure, monitorare le prescrizioni, aiutare con la fatturazione medica, generare report dettagliati e supportare più lingue.

In questo tutorial, imparerai come installare il software OpenEMR su un server che esegue Ubuntu 22.04.

Prerequisiti

  • Un server che esegue Ubuntu 20.04.
  • Un utente sudo non root.
  • Un nome di dominio completamente qualificato (FQDN) come openemr.example.com.
  • Assicurati che tutto sia aggiornato. $ sudo apt update $ sudo apt upgrade
  • Alcuni pacchetti di cui il tuo sistema ha bisogno. $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y Alcuni di questi pacchetti potrebbero già essere installati sul tuo sistema.

Passo 1 - Configurare il Firewall

Il primo passo è configurare il firewall. Ubuntu viene fornito di default con ufw (Uncomplicated Firewall).

Controlla se il firewall è attivo.

$ sudo ufw status

Otterrai il seguente output.

Status: inactive

Consenti la porta SSH in modo che il firewall non interrompa la connessione attuale al momento dell’abilitazione.

$ sudo ufw allow OpenSSH

Consenti anche le porte HTTP e HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Abilita il Firewall

$ sudo ufw enable
Il comando potrebbe interrompere le connessioni ssh esistenti. Procedere con l'operazione (y|n)? y
Il firewall è attivo e abilitato all'avvio del sistema

Controlla di nuovo lo stato del firewall.

$ sudo ufw status

Dovresti vedere un output simile.

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)

Passo 2 - Installare Nginx

Ubuntu include una versione più vecchia di Nginx. Per installare l’ultima versione, devi scaricare il repository ufficiale di Nginx.

Importa la chiave di firma di Nginx.

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

Aggiungi il repository per la versione stabile di Nginx.

$ 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

Aggiorna i repository di sistema.

$ sudo apt update

Installa Nginx.

$ sudo apt install nginx

Verifica l’installazione.

$ nginx -v
nginx version: nginx/1.24.0

Avvia il server Nginx.

$ sudo systemctl start nginx

Passo 3 - Installare MySQL

Ubuntu 22.04 include l’ultima versione di MySQL. Puoi installarlo con un solo comando.

$ sudo apt install mysql-server

Controlla la versione di MySQL.

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

Questo passaggio è necessario per le versioni di MySQL 8.0.28 e superiori. Entra nella Shell di MySQL.

$ sudo mysql

Esegui il seguente comando per impostare la password per il tuo utente root. Assicurati che abbia una combinazione di numeri, lettere maiuscole, minuscole e caratteri speciali.

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

Esci dalla shell.

mysql> exit

Esegui lo script di installazione sicura di MySQL.

$ sudo mysql_secure_installation

Per prima cosa, ti verrà chiesta la password per l’utente root. Inseriscila. Successivamente, ti verrà chiesto di installare il componente di validazione della password. Controlla la forza delle password utilizzate in MySQL. Premi Y per installarlo. Successivamente, ti verrà chiesto di impostare il livello della politica di validazione della password. Scegli 2 poiché è il più forte.

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

Successivamente, inserisci N per rifiutare di cambiare la tua password root. Inoltre, inserisci Y per rimuovere gli utenti anonimi, vietare i login remoti per root, rimuovere il database di test e ricaricare le tabelle dei privilegi.

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!

Passo 4 - Configurare MySQL

Accedi alla shell di MySQL. Inserisci la tua password root quando richiesto.

$ sudo mysql -u root -p

Crea un database di esempio.

mysql> CREATE DATABASE openemr;

Crea un account utente SQL.

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

Concedi tutti i privilegi sul database all’utente.

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

Flush dei privilegi utente.

mysql> FLUSH PRIVILEGES;

Esci dalla shell.

mysql> exit

Passo 5 - Installare PHP e le sue estensioni

Ubuntu 22.04 include la versione PHP 8.1.2 che è un po’ obsoleta. Installeremo l’ultima versione PHP 8.2 utilizzando il repository PHP di Ondrej.

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

Successivamente, installa PHP e le sue estensioni richieste da OpenEMR.

$ 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

Verifica l’installazione.

$ 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

Passo 6 - Installare SSL

Dobbiamo installare Certbot per generare il certificato SSL. Puoi installare Certbot utilizzando il repository di Ubuntu o scaricare l’ultima versione utilizzando lo strumento Snapd. Utilizzeremo la versione Snapd.

Ubuntu 22.04 viene fornito con Snapd installato di default. Esegui i seguenti comandi per assicurarti che la tua versione di Snapd sia aggiornata.

$ sudo snap install core && sudo snap refresh core

Installa Certbot.

$ sudo snap install --classic certbot

Usa il seguente comando per assicurarti che il comando Certbot possa essere eseguito creando un collegamento simbolico alla directory /usr/bin.

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

Esegui il seguente comando per generare un certificato SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d openemr.example.com

Il comando sopra scaricherà un certificato nella directory /etc/letsencrypt/live/openemr.example.com sul tuo server.

Genera un certificato Diffie-Hellman group.

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

Controlla il servizio di pianificazione del rinnovo di Certbot.

$ sudo systemctl list-timers

Troverai snap.certbot.renew.service come uno dei servizi programmati per l’esecuzione.

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

Fai una prova del processo per controllare se il rinnovo SSL funziona correttamente.

$ sudo certbot renew --dry-run

Se non vedi errori, sei a posto. Il tuo certificato si rinnoverà automaticamente.

Passo 7 - Scarica OpenEMR

Visita la pagina di download di OpenEMR e prendi il link per l’ultima versione di OpenEMR. Scarica OpenEMR sul server.

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

Estrai i file.

$ tar -pxzf openemr-7.0.1.tar.gz

Crea la directory /var/www/html.

$ sudo mkdir /var/wwww/html -p

Sposta i file estratti nella directory web.

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

Dai permessi all’utente Nginx sulla directory radice web.

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

Passo 8 - Configurare PHP-FPM

Apri il file /etc/php/8.2/fpm/pool.d/www.conf.

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

Dobbiamo impostare l’utente/gruppo Unix dei processi PHP su nginx. Trova le righe user=www-data e group=www-data nel file e cambiale 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
...

Trova le righe listen.owner = www-data e listen.group = www-data nel file e cambiale 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

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Aumenta il tempo di esecuzione per PHP-FPM e PHP-CLI a 60 secondi.

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

Imposta il valore della variabile max_input_time su 1.

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

Aumenta il limite di memoria per PHP-FPM da 128MB a 512MB.

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

Aumenta la dimensione massima del file di upload a 30MB.

$ 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

Aumenta il numero massimo di variabili di input a 3000.

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

Consenti l’accesso, dal punto di vista di PHP, ai file locali con le istruzioni LOAD DATA.

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

Riavvia il servizio PHP-FPM.

$ sudo systemctl restart php8.2-fpm

Cambia il gruppo della directory delle sessioni PHP in Nginx.

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

Passo 9 - Configurare Nginx

Crea e apri il file /etc/nginx/conf.d/openemr.conf per la modifica.

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

Incolla il seguente codice.

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;
}

Nota che la directory radice da utilizzare nella configurazione di Nginx è /var/www/html/wallabag/public/.

Salva il file premendo Ctrl + X e inserendo Y quando richiesto al termine.

Apri il file /etc/nginx/nginx.conf per la modifica.

$ sudo nano /etc/nginx/nginx.conf

Aggiungi la seguente riga prima della riga include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Verifica la sintassi del file di configurazione di Nginx.

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

Riavvia il servizio Nginx.

$ sudo systemctl restart nginx

Passo 10 - Installare OpenEMR

Apri l’URL https://openemr.example.com nel tuo browser e vedrai la seguente schermata di configurazione.

Controllo installazione OpenEMR

Qui controlla i permessi dei file e conferma se puoi procedere al passo 1 o meno. Se vedi la parola ready in verde, significa che puoi procedere. Clicca sul pulsante blu per procedere al passo 1.

Procedura guidata di configurazione del database OpenEMR

Nella pagina successiva, ti verrà chiesto se desideri che l’installatore crei il database o utilizzi uno già creato. Seleziona l’opzione Ho già creato il database e clicca sul pulsante per procedere al passo 2.

Dettagli database e account OpenEMR

Nella pagina successiva, compila le credenziali del database che hai configurato nel passo 4 in precedenza. Inserisci anche le credenziali del tuo account amministratore. Assicurati che il tuo nome utente sia lungo 12 caratteri o più, altrimenti riceverai un errore. Puoi abilitare l’autenticazione a due fattori (2FA) qui, ma è consigliato configurarla successivamente dopo l’installazione. Clicca sul pulsante per creare il database e l’account utente.

Crea database e utente OpenEMR

La pagina successiva mostrerà lo stato dell’installazione e ti mostrerà il nome utente e la password. Clicca sul pulsante per procedere al passo 4.

Configura PHP OpenEMR

La pagina successiva elencherà i valori raccomandati e correnti dal tuo file php.ini. Assicurati che i valori correnti soddisfino i requisiti. L’installatore mostra i valori errati per le variabili max_input_time e max_execution_time per qualche motivo, anche se li hai impostati correttamente. Puoi ignorarli. Puoi verificare i valori correnti utilizzando i seguenti comandi.

Una volta che sei soddisfatto, clicca sul pulsante per procedere al passo 5.

Impostazioni Apache OpenEMR

Il passo successivo elenca le impostazioni del server Apache che ignoreremo poiché stiamo utilizzando il server Nginx. Clicca sul pulsante per procedere alla pagina successiva.

Seleziona tema OpenEMR

Qui ti verrà chiesto di selezionare un tema per il pannello di amministrazione. Seleziona l’opzione Mantieni attuale e clicca sul pulsante per procedere. Puoi cambiare il tema dal pannello di amministrazione in seguito, tuttavia non sarai in grado di vedere come appaiono. Se scegli dalla pagina dell’installatore, puoi anche controllare come appaiono prima di selezionarli. Rimaniamo con il tema predefinito.

Passo finale di installazione OpenEMR

L’ultima pagina elenca alcune note finali sul software e sulle credenziali dell’account. Clicca sul pulsante Inizia per aprire la pagina di accesso.

Pagina di accesso OpenEMR

Riceverai un popup di registrazione OpenEMR per ricevere annunci dal loro sito. Puoi ignorarlo e inserire le tue credenziali e cliccare sul pulsante Login per accedere al dashboard.

Dashboard OpenEMR

Se non hai configurato l’autenticazione a due fattori durante l’installazione, fallo cliccando sull’icona dell’avatar in alto a destra e selezionando l’opzione Gestione MFA.

Menu 2FA OpenEMR

Nella pagina successiva, seleziona il metodo di autenticazione dal menu a discesa e inizia a configurare.

Pagina tipo 2FA OpenEMR

Puoi iniziare a utilizzare OpenEMR per gestire la tua attività sanitaria da qui in poi.

Conclusione

Questo conclude il nostro tutorial su come installare OpenEMR su un server Ubuntu 22.04. Se hai domande, postale nei commenti qui sotto.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.