Cómo instalar OpenEMR en Ubuntu 22.04
OpenEMR es una historia clínica electrónica y una herramienta de gestión de consultas médicas de código abierto. Está certificada por la Oficina del Coordinador Nacional de Tecnología de la Información Sanitaria (ONC) y ofrece historiales médicos integrados, gestión de consultas, programación, facturación electrónica, internacionalización, asistencia gratuita y mucho más. Puede realizar un seguimiento de los datos demográficos de los pacientes, programar citas, mantener historiales médicos extremadamente detallados con informes de laboratorio, medicamentos y procedimientos, realizar un seguimiento de sus recetas, ayudar con la facturación médica, generar informes detallados y soporte multilingüe.
En este tutorial, aprenderás a instalar el software OpenEMR en un servidor con Ubuntu 22.04.
Requisitos previos
- Un servidor con Ubuntu 20.04.
- Un usuario sudo no root.
- Un nombre de dominio completo (FQDN) como
openemr.example.com
. - Asegúrate de que todo está actualizado.
$ sudo apt update $ sudo apt upgrade
- Pocos paquetes que necesite tu sistema.
$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
Puede que algunos de estos paquetes ya estén instalados en tu sistema.
Paso 1 – Configurar el Cortafuegos
El primer paso es configurar el cortafuegos. Ubuntu viene con ufw (Uncomplicated Firewall) por defecto.
Comprueba si el cortafuegos se está ejecutando.
$ sudo ufw status
Obtendrás la siguiente salida.
Status: inactive
Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al activarlo.
$ sudo ufw allow OpenSSH
Permite también los puertos HTTP y HTTPS.
$ sudo ufw allow http $ sudo ufw allow https
Habilita el cortafuegos
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Comprueba de nuevo el estado del cortafuegos.
$ sudo ufw status
Deberías ver un resultado similar.
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)
Paso 2 – Instala Nginx
Ubuntu incluye una versión antigua 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
Añadir el repositorio de 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
Iniciar el servidor Nginx.
$ sudo systemctl start nginx
Paso 3 – Instalar MySQL
Ubuntu 22.04 incluye la última versión de MySQL. Puedes instalarla con un solo comando.
$ sudo apt install mysql-server
Comprueba la versión de MySQL.
$ mysql --version mysql Ver 8.0.33-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))
Este paso es necesario para las versiones de MySQL 8.0.28 y superiores. Entra en la Shell de MySQL.
$ sudo mysql
Ejecuta el siguiente comando para establecer la contraseña de tu usuario root. Asegúrate de que tiene 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 intérprete de comandos.
mysql> exit
Ejecuta el script de instalación segura de MySQL.
$ sudo mysql_secure_installation
Primero se te pedirá la contraseña de root. Introdúcela. A continuación, se te pedirá que instales el Componente Validar Contraseña. Comprueba la seguridad de las contraseñas utilizadas en MySQL. Pulsa Y para instalarlo. A continuación, 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.
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
A continuación, introduce N para negarte a cambiar la contraseña de root. Además, introduce Y para eliminar usuarios anónimos, no permitir inicios de sesión remotos de root, eliminar la base de datos de prueba y recargar las tablas de privilegios.
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!
Paso 4 – Configurar MySQL
Accede al shell de MySQL. Introduce tu contraseña de root cuando se te solicite.
$ sudo mysql -u root -p
Crea una base de datos de prueba.
mysql> CREATE DATABASE openemr;
Crea una cuenta de usuario SQL.
mysql> CREATE USER 'openemruser'@'localhost' IDENTIFIED BY 'Your_password2';
Concede al usuario todos los privilegios sobre la base de datos.
mysql> GRANT ALL PRIVILEGES ON openemr.* TO 'openemruser'@'localhost';
Elimina los privilegios del usuario.
mysql> FLUSH PRIVILEGES;
Sal del intérprete de comandos.
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 obsoleta. Instalaremos la última versión PHP 8.2 utilizando el repositorio PHP de Ondrej.
$ sudo add-apt-repository ppa:ondrej/php
A continuación, instala PHP y las extensiones necesarias para 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 utilizando el repositorio de Ubuntu o descargar la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión 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
Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot 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
de tu servidor.
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Comprueba el servicio programador de renovaciones 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 ..... 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
Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.
$ sudo certbot renew --dry-run
Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.
Paso 7 – Descarga OpenEMR
Visita la página de descargas de OpenEMR y coge el enlace de 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
Da permisos al usuario 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. Busca las líneas user=www-data
y group=www-data
en el archivo y cámbialas por 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 ...
Busca las líneas listen.owner = www-data
y listen.group = www-data
en el archivo y cámbialas por 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
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Aumenta el tiempo de ejecución de 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
en 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 de subida 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 sentencias 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 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 editarlo.
$ sudo nano /etc/nginx/conf.d/openemr.conf
Pega en él el siguiente código.
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; }
Observa que el directorio raíz que se utilizará en la configuración de Nginx es /var/www/html/wallabag/public/
.
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida una vez hayas terminado.
Abre el archivo /etc/nginx/nginx.conf
para editarlo.
$ sudo nano /etc/nginx/nginx.conf
Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Verifica la sintaxis del archivo de configuración de 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
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.
Aquí comprueba los permisos de los archivos y confirma si puedes continuar con el paso 1 o no. Si ves la palabra ready
en verde, significa que puedes continuar. Pulsa el botón azul para continuar con el paso 1.
En la página siguiente, se te preguntará si quieres que el instalador cree la base de datos o utilice una ya creada. Selecciona la opción Ya he creado la base de datos y pulsa el botón para proceder al paso 2.
En la página siguiente, introduce las credenciales de la base de datos que configuraste anteriormente en el paso 4. Introduce también las credenciales de tu cuenta de administrador. Asegúrate de que tu nombre de usuario tiene 12 o más caracteres, de lo contrario, aparecerá un error. Aquí puedes activar la autenticación de dos factores (2FA), 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.
La siguiente página mostrará el estado de la instalación y te indicará el nombre de usuario y la contraseña. Pulsa el botón para pasar al paso 4.
La siguiente página mostrará los valores recomendados y actuales de tu archivo php.ini
. Asegúrate de que los valores actuales satisfacen los requisitos. Por alguna razón, el instalador muestra valores erróneos para las variables max_input_time
y max_execution_time
aunque las hayas configurado correctamente. Puedes ignorarlos. Puedes verificar los valores actuales utilizando los siguientes comandos.
Cuando estés satisfecho, pulsa el botón para continuar con el paso 5.
El siguiente paso enumera la configuración del servidor Apache, que ignoraremos puesto que estamos utilizando el servidor Nginx. Pulsa el botón para pasar a la página siguiente.
Aquí se te pedirá que selecciones un tema para el panel de administración. Selecciona la opción Mantener actual y pulsa el botón para continuar. Puedes cambiar el tema desde el panel de administración más adelante, pero no podrás ver su aspecto. Si eliges desde la página del instalador, también podrás comprobar cómo quedan antes de seleccionarlos. Nosotros nos quedaremos con el tema por defecto.
La última página contiene algunas notas finales sobre el software y las credenciales de la cuenta. Haz clic en el botón Inicio para abrir la página de acceso.
Aparecerá una ventana emergente de registro en OpenEMR para obtener anuncios de su sitio web. Puedes ignorar e introducir tus credenciales y hacer clic en el botón Iniciar sesión para acceder al panel de control.
Si no configuraste la autenticación de dos factores durante la instalación, hazlo haciendo clic en el icono del avatar de la parte superior derecha y seleccionando la opción Gestión MFA.
En la página siguiente, selecciona el método de autenticación en el menú desplegable y empieza a configurarlo.
A partir de aquí ya puedes empezar a utilizar OpenEMR para gestionar tu negocio sanitario.
Conclusión
Con esto concluye nuestro tutorial sobre la instalación de OpenEMR en un servidor Ubuntu 22.04. Si tienes alguna pregunta, publícala en los comentarios a continuación.