Instalación OpenEMR · 14 min read · Sep 24, 2025

Cómo instalar OpenEMR en Ubuntu 22.04

OpenEMR es una herramienta de gestión de registros médicos electrónicos y de práctica médica de código abierto. Está certificada por la Oficina del Coordinador Nacional de Tecnología de la Información en Salud (ONC) y cuenta con registros de salud integrados, gestión de prácticas, programación, facturación electrónica, internacionalización, soporte gratuito y mucho más. Puede rastrear la demografía de los pacientes, programar citas, mantener registros de salud extremadamente detallados con informes de laboratorio, medicamentos y procedimientos, rastrear sus recetas, ayudar con la facturación médica, generar informes detallados y soporte multilingüe.

En este tutorial, aprenderás cómo instalar el software OpenEMR en un servidor que ejecute Ubuntu 22.04.

Prerrequisitos

  • Un servidor que ejecute Ubuntu 20.04.
  • Un usuario sudo no root.
  • Un nombre de dominio completamente calificado (FQDN) como openemr.example.com.
  • Asegúrate de que todo esté actualizado. $ sudo apt update $ sudo apt upgrade
  • Algunos paquetes que tu sistema necesita. $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y Algunos de estos paquetes pueden ya estar instalados en tu sistema.

Paso 1 - Configurar el Firewall

El primer paso es configurar el firewall. Ubuntu viene con ufw (Firewall sin complicaciones) por defecto.

Verifica si el firewall está en funcionamiento.

$ sudo ufw status

Obtendrás la siguiente salida.

Estado: inactivo

Permite el puerto SSH para que el firewall no interrumpa la conexión actual al habilitarlo.

$ sudo ufw allow OpenSSH

Permite también los puertos HTTP y HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Habilita el Firewall

$ sudo ufw enable
El comando puede interrumpir las conexiones ssh existentes. ¿Proceder con la operación (y|n)? y
El firewall está activo y habilitado al inicio del sistema

Verifica el estado del firewall nuevamente.

$ sudo ufw status

Deberías ver una salida similar.

Estado: activo

Para                         Acción      Desde
--                         ------      ----
OpenSSH                    PERMITIR    En cualquier lugar
80/tcp                     PERMITIR    En cualquier lugar
443                        PERMITIR    En cualquier lugar
OpenSSH (v6)               PERMITIR    En cualquier lugar (v6)
80/tcp (v6)                PERMITIR    En cualquier lugar (v6)
443 (v6)                   PERMITIR    En cualquier lugar (v6)

Paso 2 - Instalar Nginx

Ubuntu viene con una versión anterior de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

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

Agrega el repositorio para la versión estable de 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

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.24.0

Inicia el servidor Nginx.

$ sudo systemctl start nginx

Paso 3 - Instalar MySQL

Ubuntu 22.04 viene con la última versión de MySQL. Puedes instalarlo con un solo comando.

$ sudo apt install mysql-server

Verifica la versión de MySQL.

$ mysql --version
mysql  Ver 8.0.33-0ubuntu0.22.04.2 para Linux en x86_64 ((Ubuntu))

Este paso es necesario para las versiones de MySQL 8.0.28 y superiores. Ingresa al Shell de MySQL.

$ sudo mysql

Ejecuta el siguiente comando para establecer la contraseña para tu usuario root. Asegúrate de que tenga una mezcla de números, mayúsculas, minúsculas y caracteres especiales.

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

Sal del shell.

mysql> exit

Ejecuta el script de instalación segura de MySQL.

$ sudo mysql_secure_installation

Primero, se te pedirá tu contraseña de root. Ingrésala. A continuación, se te pedirá que instales el Componente de Validación de Contraseña. Verifica la fortaleza de las contraseñas utilizadas en MySQL. Presiona Y para instalarlo. Luego, se te pedirá que establezcas el nivel de la política de validación de contraseñas. Elige 2 ya que es el más fuerte.

Asegurando la implementación del servidor MySQL.

Ingresa la contraseña para el usuario root:

EL COMPONENTE DE VALIDACIÓN DE CONTRASEÑA se puede usar para probar contraseñas
y mejorar la seguridad. Verifica la fortaleza de la contraseña
y permite a los usuarios establecer solo aquellas contraseñas que son
es suficientemente seguras. ¿Te gustaría configurar el componente de VALIDACIÓN DE CONTRASEÑA?

Presiona y|Y para Sí, cualquier otra tecla para No: Y

Hay tres niveles de política de validación de contraseñas:

BAJO    Longitud >= 8
MEDIO Longitud >= 8, numérico, mayúsculas y minúsculas, y caracteres especiales
FUERTE Longitud >= 8, numérico, mayúsculas y minúsculas, caracteres especiales y archivo de diccionario

Por favor ingresa 0 = BAJO, 1 = MEDIO y 2 = FUERTE: 2
Usando la contraseña existente para root.

Fortaleza estimada de la contraseña: 100

A continuación, ingresa N para rechazar cambiar tu contraseña de root. También, ingresa Y para eliminar usuarios anónimos, deshabilitar inicios de sesión remotos de root, eliminar la base de datos de prueba y recargar las tablas de privilegios.

¿Cambiar la contraseña para root? ((Presiona y|Y para Sí, cualquier otra tecla para No) : N

 ... omitiendo.
Por defecto, una instalación de MySQL tiene un usuario anónimo,
permitiendo que cualquiera inicie sesión en MySQL sin tener que tener
una cuenta de usuario creada para ellos. Esto está destinado solo para
testing, y para hacer que la instalación sea un poco más fluida.
Deberías eliminarlos antes de pasar a un entorno de producción.

¿Eliminar usuarios anónimos? (Presiona y|Y para Sí, cualquier otra tecla para No) : Y
Éxito.

Normalmente, solo se debería permitir que root se conecte desde
'localhost'. Esto asegura que alguien no pueda adivinar la
contraseña de root desde la red.

¿Deshabilitar el inicio de sesión remoto de root? (Presiona y|Y para Sí, cualquier otra tecla para No) : Y
Éxito.

Por defecto, MySQL viene con una base de datos llamada 'test' que
cualquiera puede acceder. Esto también está destinado solo para
testing, y debería eliminarse antes de pasar a un entorno de producción.

¿Eliminar la base de datos de prueba y el acceso a ella? (Presiona y|Y para Sí, cualquier otra tecla para No) : Y
 - Eliminando la base de datos de prueba...
Éxito.

 - Eliminando privilegios en la base de datos de prueba...
Éxito.

Recargar las tablas de privilegios asegurará que todos los cambios
realizados hasta ahora surtan efecto de inmediato.

¿Recargar tablas de privilegios ahora? (Presiona y|Y para Sí, cualquier otra tecla para No) : Y
Éxito.

¡Todo listo!

Paso 4 - Configurar MySQL

Inicia sesión en el shell de MySQL. Ingresa tu contraseña de root cuando se te pida.

$ sudo mysql -u root -p

Crea una base de datos de muestra.

mysql> CREATE DATABASE openemr;

Crea una cuenta de usuario SQL.

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

Otorga todos los privilegios en la base de datos al usuario.

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

Actualiza los privilegios del usuario.

mysql> FLUSH PRIVILEGES;

Sal del shell.

mysql> exit

Paso 5 - Instalar PHP y sus extensiones

Ubuntu 22.04 viene con la versión PHP 8.1.2 que está un poco desactualizada. Instalaremos la última versión PHP 8.2 usando el repositorio PHP de Ondrej.

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

A continuación, instala PHP y sus extensiones requeridas por 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 la instalación.

$ 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

Paso 6 - Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot usando el repositorio de Ubuntu o obtener la última versión usando la herramienta Snapd. Usaremos la versión de Snapd.

Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd esté actualizada.

$ sudo snap install core && sudo snap refresh core

Instala Certbot.

$ sudo snap install --classic certbot

Usa el siguiente comando para asegurarte de que el comando Certbot pueda ejecutarse creando un enlace simbólico al directorio /usr/bin.

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

Ejecuta el siguiente comando para generar un Certificado SSL.

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

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/openemr.example.com en tu servidor.

Genera un certificado de grupo Diffie-Hellman.

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

Verifica el servicio programador de renovación de Certbot.

$ sudo systemctl list-timers

Encontrarás snap.certbot.renew.service como uno de los servicios programados para ejecutarse.

NEXT                        LEFT          LAST                        PASSED        UNIT                      ACTIVATES
.....
Dom 2023-02-26 06:32:00 UTC 9h left       Sáb 2023-02-25 18:04:05 UTC 2h 59min ago  snap.certbot.renew.timer  snap.certbot.renew.service
Dom 2023-02-26 06:43:20 UTC 9h left       Sáb 2023-02-25 10:49:23 UTC 10h ago       apt-daily-upgrade.timer   apt-daily-upgrade.service
Dom 2023-02-26 09:00:06 UTC 11h left      Sáb 2023-02-25 20:58:06 UTC 5min ago      apt-daily.timer           apt-daily.service

Haz una prueba del proceso para verificar si la renovación de SSL está funcionando correctamente.

$ sudo certbot renew --dry-run

Si no ves errores, estás listo. Tu certificado se renovará automáticamente.

Paso 7 - Descargar OpenEMR

Visita la página de descarga de OpenEMR y obtén el enlace para la última versión de OpenEMR. Descarga OpenEMR en el servidor.

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

Extrae los archivos.

$ tar -pxzf openemr-7.0.1.tar.gz

Crea el directorio /var/www/html.

$ sudo mkdir /var/wwww/html -p

Mueve los archivos extraídos al directorio web.

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

Dale permisos al usuario de Nginx sobre el directorio raíz web.

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

Paso 8 - Configurar PHP-FPM

Abre el archivo /etc/php/8.2/fpm/pool.d/www.conf.

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

Necesitamos establecer el usuario/grupo Unix de los procesos PHP a nginx. Encuentra las líneas user=www-data y group=www-data en el archivo y cámbialas a nginx.

...
; Usuario/grupo Unix de los procesos
; Nota: El usuario es obligatorio. Si el grupo no está establecido, se usará el grupo del usuario predeterminado
;       se usará.
; RPM: usuario de apache elegido para proporcionar acceso a los mismos directorios que httpd
user = nginx
; RPM: Mantener un grupo permitido para escribir en el directorio de registro.
group = nginx
...

Encuentra las líneas listen.owner = www-data y listen.group = www-data en el archivo y cámbialas a nginx.

; Establecer permisos para el socket unix, si se usa uno. En Linux, se deben establecer permisos de lectura/escritura
; para permitir conexiones desde un servidor web. Muchos
; sistemas derivados de BSD permiten conexiones independientemente de los permisos. El propietario
; y el grupo pueden especificarse ya sea por nombre o por sus ID numéricos.
; Valores predeterminados: el usuario y el grupo se establecen como el usuario en ejecución
;                 el modo se establece en 0660
listen.owner = nginx
listen.group = nginx

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.

Aumenta el tiempo de ejecución para PHP-FPM y PHP-CLI a 60 segundos.

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

Establece el valor de la variable max_input_time a 1.

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

Aumenta el límite de memoria para PHP-FPM de 128MB a 512MB.

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

Aumenta el tamaño máximo de carga de archivos 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 el número de variables de entrada máximas a 3000.

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

Permite acceder, desde la perspectiva de PHP, a archivos locales con declaraciones LOAD DATA.

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

Reinicia el servicio PHP-FPM.

$ sudo systemctl restart php8.2-fpm

Cambia el grupo del directorio de sesiones de PHP a Nginx.

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

Paso 9 - Configurar Nginx

Crea y abre el archivo /etc/nginx/conf.d/openemr.conf para editar.

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

Pega el siguiente código en él.

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;
    # usa https://blog.cloudflare.com/announcing-1111 Cloudfare+Apnic labs, es gratis y seguro
    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;
    }

    # Pasar scripts PHP al servidor FastCGI
    location ~* \.php$ {
        try_files $uri =404;
        fastcgi_index  index.php;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock; # Depende de la versión de PHP
        fastcgi_param SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        include fastcgi_params;
    }

    # denegar acceso a archivos/directorios escribibles
    location ~* ^/sites/*/(documents|edi|era) {
        deny all;
        return 404;
    }

    # denegar acceso a ciertos directorios
    location ~* ^/(contrib|tests) {
        deny all;
        return 404;
    }

    # Alternativamente, se puede denegar todo acceso a estos archivos
    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;
    }
}

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

Nota que el directorio raíz que se usará en la configuración de Nginx es /var/www/html/wallabag/public/.

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida una vez que termines.

Abre el archivo /etc/nginx/nginx.conf para editar.

$ sudo nano /etc/nginx/nginx.conf

Agrega la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.

Verifica la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: el archivo de configuración /etc/nginx/nginx.conf la sintaxis es correcta
nginx: prueba del archivo de configuración /etc/nginx/nginx.conf exitosa

Reinicia el servicio Nginx.

$ sudo systemctl restart nginx

Paso 10 - Instalar OpenEMR

Abre la URL https://openemr.example.com en tu navegador y verás la siguiente pantalla de configuración.

Verificación de instalación de OpenEMR

Aquí se verifica los permisos de archivo y se confirma si puedes proceder al paso 1 o no. Si ves la palabra listo en verde, significa que puedes proceder. Haz clic en el botón azul para continuar al paso 1.

Asistente de configuración de base de datos de OpenEMR

En la siguiente página, se te preguntará si deseas que el instalador cree la base de datos o use una preexistente. Selecciona la opción Ya he creado la base de datos y haz clic en el botón para continuar al paso 2.

Detalles de base de datos y cuenta de OpenEMR

En la siguiente página, completa las credenciales de la base de datos que configuraste en el paso 4 antes. También, ingresa las credenciales de tu cuenta de administrador. Asegúrate de que tu nombre de usuario tenga 12 o más caracteres, de lo contrario, recibirás un error. Puedes habilitar la autenticación de dos factores (2FA) aquí, pero se recomienda configurarla más tarde después de la instalación. Haz clic en el botón para crear la base de datos y la cuenta de usuario.

Crear base de datos y usuario de OpenEMR

La siguiente página mostrará el estado de la instalación y te mostrará el nombre de usuario y la contraseña. Haz clic en el botón para continuar al paso 4.

Configurar PHP de OpenEMR

La siguiente página enumerará los valores recomendados y actuales de tu archivo php.ini. Asegúrate de que los valores actuales satisfagan los requisitos. El instalador muestra los valores incorrectos para las variables max_input_time y max_execution_time por alguna razón, incluso si los has establecido correctamente. Puedes ignorarlos. Puedes verificar los valores actuales usando los siguientes comandos.

Una vez que estés satisfecho, haz clic en el botón para continuar al paso 5.

Configuraciones de Apache de OpenEMR

El siguiente paso enumera las configuraciones del servidor Apache que ignoraremos ya que estamos usando el servidor Nginx. Haz clic en el botón para continuar a la siguiente página.

Seleccionar tema de OpenEMR

Aquí se te pedirá que selecciones un tema para el panel de administración. Selecciona la opción Mantener actual y haz clic en el botón para continuar. Puedes cambiar el tema desde el panel de administración más tarde, sin embargo, no podrás ver cómo lucen. Si eliges desde la página del instalador, también puedes verificar cómo lucen antes de seleccionar. Nos quedaremos con el tema predeterminado.

Último paso de instalación de OpenEMR

La última página enumera algunas notas finales sobre el software y las credenciales de la cuenta. Haz clic en el botón Iniciar para abrir la página de inicio de sesión.

Página de inicio de sesión de OpenEMR

Recibirás un popup de registro de OpenEMR para recibir anuncios de su sitio. Puedes ignorarlo e ingresar tus credenciales y hacer clic en el botón Iniciar sesión para acceder al panel de control.

Panel de control de OpenEMR

Si no configuraste la autenticación de dos factores durante la instalación, hazlo haciendo clic en el ícono de avatar en la parte superior derecha y seleccionando la opción Gestión de MFA.

Menú 2FA de OpenEMR

En la siguiente página, selecciona el método de autenticación del menú desplegable y comienza a configurarlo.

Página de tipo 2FA de OpenEMR

Puedes comenzar a usar OpenEMR para gestionar tu negocio de salud a partir de aquí.

Conclusión

Esto concluye nuestro tutorial sobre la instalación de OpenEMR en un servidor Ubuntu 22.04. Si tienes alguna pregunta, publícalas en los comentarios a continuación.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.