OpenEMR — это инструмент с открытым исходным кодом для ведения электронных медицинских карт и управления медицинской практикой. Он сертифицирован Управлением национального координатора по информационным технологиям в здравоохранении (ONC) и включает в себя интегрированные медицинские карты, управление практикой, планирование, электронное выставление счетов, интернационализацию, бесплатную поддержку и многое другое. Он позволяет отслеживать демографические данные пациентов, планировать их посещения, вести чрезвычайно подробные медицинские записи с лабораторными отчетами, лекарствами и процедурами, отслеживать их рецепты, помогать с медицинским биллингом, генерировать подробные отчеты и обеспечивает многоязычную поддержку.
В этом руководстве вы узнаете, как установить программное обеспечение OpenEMR на сервере под управлением Debian 12.
Необходимые условия
- Сервер под управлением Debian 12.
- Пользователь sudo, не являющийся root.
- Полное доменное имя (FQDN), например
openemr.example.com. - Убедитесь, что все обновлено.
$ sudo apt update $ sudo apt upgrade
- Несколько пакетов, необходимых вашей системе.
$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
Некоторые из этих пакетов, возможно, уже установлены в вашей системе.
Шаг 1 — Настройка брандмауэра
Первый шаг — настройка брандмауэра. Debian по умолчанию поставляется с ufw (Uncomplicated Firewall).
Проверьте, работает ли брандмауэр.
$ sudo ufw status
Вы получите следующий вывод.
Status: inactive
Разрешите порт SSH, чтобы брандмауэр не прервал текущее соединение при его включении.
$ sudo ufw allow OpenSSH
Разрешите также порты HTTP и HTTPS.
$ sudo ufw allow http $ sudo ufw allow https
Включите брандмауэр
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Снова проверьте состояние брандмауэра.
$ sudo ufw status
Вы должны увидеть похожий вывод.
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)
Шаг 2 — Установка Nginx
Debian 12 поставляется с более старой версией Nginx. Чтобы установить последнюю версию, вам нужно загрузить официальный репозиторий Nginx.
Импортируйте ключ подписи Nginx.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Добавьте репозиторий стабильной версии Nginx.
$ 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
Обновите системные репозитории.
$ sudo apt update
Установите Nginx.
$ sudo apt install nginx
Проверьте установку. В системах Debian следующая команда будет работать только с sudo.
$ sudo nginx -v nginx version: nginx/1.24.0
Запустите сервер Nginx.
$ sudo systemctl start nginx
Проверьте статус службы.
? nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Tue 2023-08-08 02:03:03 UTC; 5s ago
Docs: https://nginx.org/en/docs/
Process: 4929 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 4930 (nginx)
Tasks: 2 (limit: 2315)
Memory: 1.8M
CPU: 12ms
CGroup: /system.slice/nginx.service
??4930 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??4931 "nginx: worker process"
Шаг 3 — Установка MariaDB
Debian 12 по умолчанию не поставляется с MySQL, и официальный пакет для него еще не выпущен. Поэтому мы будем использовать MariaDB. Для MariaDB также нет официального пакета для Debian 12, но она поставляется в составе Debian. Поэтому установите ее с помощью следующей команды.
$ sudo apt install mariadb-server
Проверьте версию MySQL.
$ mysql --version mysql Ver 15.1 Distrib 10.11.3-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Запустите скрипт безопасной установки MariaDB.
$ sudo mysql_secure_installation
Вам будет предложено ввести пароль root. Нажмите Enter так как мы не устанавливали для него никакого пароля.
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):
Далее вам будет предложено переключиться на метод аутентификации через сокет Unix. Плагин unix_socket позволяет использовать учетные данные вашей операционной системы для подключения к серверу MariaDB. Поскольку у вас уже есть защищенная учетная запись root, введите n чтобы продолжить.
OK, successfully used password, moving on... 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
Далее вам будет предложено изменить пароль root. В Debian 12 пароль root тесно связан с автоматизированным обслуживанием системы, поэтому его следует оставить без изменений. Введите n чтобы продолжить.
... skipping. You already have your root account protected, so you can safely answer 'n'. Change the root password? [Y/n] n
Далее вам будут заданы некоторые вопросы для повышения безопасности MariaDB. Введите Y чтобы удалить анонимных пользователей, запретить удаленный вход пользователя root, удалить тестовую базу данных и перезагрузить таблицы привилегий.
... skipping. 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!
Вы можете войти в оболочку MariaDB, набрав sudo mysql или sudo mariadb в командной строке.
Шаг 4 — Настройка MariaDB
Войдите в оболочку MariaDB.
$ sudo mysql
Создайте базу данных OpenEMR.
mysql> CREATE DATABASE openemr;
Создайте учетную запись пользователя OpenEMR.
mysql> CREATE USER 'openemruser'@'localhost' IDENTIFIED BY 'Your_password2!';
Предоставьте пользователю все привилегии на базу данных.
mysql> GRANT ALL PRIVILEGES ON openemr.* TO 'openemruser'@'localhost';
Поскольку мы не изменяем права пользователя root, вам следует создать другого пользователя SQL для выполнения административных задач, использующих аутентификацию по паролю. Выберите надежный пароль для этого пользователя.
MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;
Очистите привилегии пользователя.
mysql> FLUSH PRIVILEGES;
Выйдите из оболочки.
mysql> exit
Шаг 5 — Установка PHP и его расширений
Debian 12 по умолчанию поставляется с PHP 8.2. Вы можете установить его, выполнив следующую команду.
$ sudo apt install php-fpm php-mysql php-bcmath php-xml php-zip php-curl php-mbstring php-gd php-tidy php-intl php-cli php-soap imagemagick libtiff-tools php-ldap
Чтобы всегда использовать последнюю версию PHP или если вы хотите установить несколько версий PHP, добавьте репозиторий PHP от Ondrej.
Сначала импортируйте GPG-ключ репозитория PHP от Sury.
$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
Добавьте репозиторий PHP от Ondrej Sury.
$ 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'
Обновите список системных репозиториев.
$ sudo apt update
Затем установите PHP и его расширения, необходимые для 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
Проверьте установку.
$ php --version
PHP 8.2.8 (cli) (built: Jul 16 2023 11:00:43) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.8, Copyright (c) Zend Technologies
with Zend OPcache v8.2.8, Copyright (c), by Zend Technologies
Шаг 6 — Установка SSL
Нам нужно установить Certbot для генерации SSL-сертификата. Вы можете установить Certbot из репозитория Debian или загрузить последнюю версию с помощью инструмента Snapd. Мы будем использовать версию Snapd.
В Debian 12 Snapd не установлен по умолчанию. Установите пакет Snapd.
$ sudo apt install snapd
Выполните следующие команды, чтобы убедиться, что ваша версия Snapd обновлена.
$ sudo snap install core && sudo snap refresh core
Установите Certbot.
$ sudo snap install --classic certbot
Используйте следующую команду, чтобы убедиться, что команда Certbot может быть запущена, создав символическую ссылку на каталог /usr/bin .
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Проверьте, правильно ли работает Certbot.
$ certbot --version certbot 2.6.0
Выполните следующую команду, чтобы сгенерировать SSL-сертификат.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d openemr.example.com
Вышеуказанная команда загрузит сертификат в каталог /etc/letsencrypt/live/openemr.example.com на вашем сервере.
Сгенерируйте сертификат группы Диффи-Хеллмана .
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Проверьте службу планирования обновления Certbot.
$ sudo systemctl list-timers
Вы увидите snap.certbot.renew.service в списке запланированных к запуску служб.
NEXT LEFT LAST PASSED UNIT ACTIVATES ..... Tue 2023-08-08 03:09:00 UTC 23min left Tue 2023-08-08 02:39:00 UTC 6min ago phpsessionclean.timer phpsessionclean.service Tue 2023-08-08 04:21:00 UTC 1h 35min left - - snap.certbot.renew.timer snap.certbot.renew.service Tue 2023-08-08 06:25:00 UTC 3h 39min left Mon 2023-08-07 13:54:08 UTC 12h ago ntpsec-rotate-stats.timer ntpsec-rotate-stats.service
Проведите пробный запуск процесса, чтобы проверить, работает ли обновление SSL нормально.
$ sudo certbot renew --dry-run
Если вы не видите ошибок, все готово. Ваш сертификат будет обновляться автоматически.
Шаг 7 — Загрузите OpenEMR
Перейдите на страницу загрузки OpenEMR и скопируйте ссылку на последнюю версию OpenEMR. Загрузите OpenEMR на сервер.
$ wget https://sourceforge.net/projects/openemr/files/OpenEMR%20Current/7.0.1/openemr-7.0.1.tar.gz
Распакуйте файлы.
$ tar -pxzf openemr-7.0.1.tar.gz
Создайте каталог /var/www/html каталог.
$ sudo mkdir /var/www/html -p
Переместите извлеченные файлы в веб-каталог.
$ sudo mv openemr-7.0.1 /var/www/html/openemr
Предоставьте пользователю Nginx права доступа к корневому веб-каталогу.
$ sudo chown -R nginx:nginx /var/www/html/openemr
Шаг 8 — Установка phpMyAdmin
Прежде чем настраивать PHP-FPM, мы установим phpMyAdmin, который можно использовать для просмотра и редактирования базы данных.
Загрузите архивный файл phpMyAdmin на английском языке. Воспользуйтесь ссылкой на последнюю версию со страницы загрузки phpMyAdmin .
$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-english.tar.gz
Распакуйте архив в каталог public.
$ sudo tar -xzf phpMyAdmin-5.2.1-english.tar.gz -C /var/www/html/openemr
Перейдите в каталог public.
$ cd /var/www/html/openemr
Переименуйте распакованный каталог на что-нибудь непонятное для повышения безопасности.
$ sudo mv phpMyAdmin-5.2.1-english sm175
Шаг 9 — Настройте phpMyAdmin
Скопируйте пример файла конфигурации.
$ sudo cp sm175/config.sample.inc.php sm175/config.inc.php
Откройте файл конфигурации для редактирования.
$ sudo nano sm175/config.inc.php
Найдите строку $cfg['blowfish_secret'] = ''; и введите случайную строку из 32 символов для аутентификации на основе cookie.
Вы можете использовать онлайн-генератор blowfish от phpSolved или сделать это через командную строку.
Скопируйте значение и вставьте его, как показано.
$cfg['blowfish_secret'] = 'Tc/HfLPBOAPxJ-rhQP}HJoZEK69c3j:m';
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Измените владельца каталога phpMyAdmin на сервер Nginx.
$ sudo chown -R nginx:nginx /var/www/html/openemr/sm175
Удалите каталог установки phpMyAdmin.
$ sudo rm -rf /var/www/html/openemr/sm175/setup
Шаг 10 — Настройте PHP-FPM
Откройте файл /etc/php/8.2/fpm/pool.d/www.conf.
$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf
Нам нужно установить пользователя/группу Unix для процессов PHP как nginx. Найдите строки user=www-data и group=www-data в файле и измените их на nginx.
; Unix user/group of the child processes. This can be used only if the master ; process running user is root. It is set after the child process is created. ; The user and group can be specified either by their name or by their numeric ; IDs. ; Note: If the user is root, the executable needs to be started with ; --allow-to-run-as-root option to work. ; Default Values: The user is set to master process running user by default. ; If the group is not set, the user's group is used. user = nginx group = nginx ...
Найдите в файле строки listen.owner = www-data и listen.group = www-data и измените их на 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: Owner is set to the master process running user. If the group ; is not set, the owner's group is used. Mode is set to 0660. listen.owner = nginx listen.group = nginx
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Увеличьте время выполнения для PHP-FPM и PHP-CLI до 60 секунд.
$ sudo sed -i 's/max_execution_time = 30/max_execution_time = 60/' /etc/php/8.2/fpm/php.ini
Установите значение переменной max_input_time равным 1.
$ sudo sed -i 's/max_input_time = 60/max_input_time = -1/' /etc/php/8.2/fpm/php.ini
Увеличьте лимит памяти для PHP-FPM с 128 МБ до 512 МБ.
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/' /etc/php/8.2/fpm/php.ini
Увеличьте размер загружаемого файла до 30 МБ.
$ 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
Увеличьте максимальное количество входных переменных до 3000.
$ sudo sed -i 's/;max_input_vars = 1000/max_input_vars = 3000/g' /etc/php/8.2/fpm/php.ini
Разрешить доступ, с точки зрения PHP, к локальным файлам с помощью операторов LOAD DATA.
$ sudo sed -i 's/;mysqli.allow_local_infile = On/mysqli.allow_local_infile = On/g' /etc/php/8.2/fpm/php.ini
Перезапустить службу PHP-FPM.
$ sudo systemctl restart php8.2-fpm
Изменить группу каталога сессий PHP на Nginx.
$ sudo chgrp -R nginx /var/lib/php/sessions
Шаг 11 — Настройка Nginx
Создайте и откройте файл /etc/nginx/conf.d/openemr.conf для редактирования.
$ sudo nano /etc/nginx/conf.d/openemr.conf
Вставьте в него следующий код.
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-fpm/www.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;
}
Обратите внимание, что корневой каталог, который будет использоваться в конфигурации Nginx, — это /var/www/html/wallabag/public/.
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса по завершении.
Откройте файл /etc/nginx/nginx.conf для редактирования.
$ sudo nano /etc/nginx/nginx.conf
Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.
server_names_hash_bucket_size 64;
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Проверьте синтаксис файла конфигурации 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
Перезапустите службу Nginx.
$ sudo systemctl restart nginx
Шаг 12 — Установка OpenEMR
Откройте URL https://openemr.example.com в браузере, и вы увидите следующий экран настройки.

Здесь проверяются права доступа к файлам и подтверждается, можете ли вы перейти к шагу 1. Если вы видите слово ready зеленым цветом, это означает, что вы можете продолжить. Нажмите синюю кнопку, чтобы перейти к шагу 1.

На следующей странице вам будет предложено выбрать, хотите ли вы, чтобы установщик создал базу данных или использовать уже готовую. Выберите вариант Я уже создал базу данных.
На следующей странице введите учетные данные базы данных, которые вы настроили ранее в шаге 4. Также введите учетные данные вашей учетной записи администратора. Убедитесь, что ваше имя пользователя состоит из 12 или более символов, иначе вы получите ошибку. Здесь вы можете включить двухфакторную аутентификацию (2FA), но рекомендуется настроить ее позже, после установки. Нажмите кнопку, чтобы создать базу данных и учетную запись пользователя.

На следующей странице будет отображен статус установки, а также имя пользователя и пароль. Нажмите кнопку, чтобы перейти к шагу 4.

На следующей странице будут перечислены рекомендуемые и текущие значения из вашего файла php.ini . Убедитесь, что текущие значения соответствуют требованиям. Установщик по какой-то причине показывает неверные значения для переменной max_execution_time по какой-то причине, даже если вы установили его правильно. Вы можете игнорировать это. Вы можете проверить текущее значение с помощью следующей команды.
![]()
Если все устраивает, нажмите кнопку, чтобы перейти к шагу 5.

На следующем шаге перечислены настройки сервера Apache, которые мы проигнорируем, так как используем сервер Nginx. Нажмите кнопку, чтобы перейти на следующую страницу.

Здесь вам будет предложено выбрать тему для панели администрирования. Выберите опцию Сохранить текущую и нажмите кнопку, чтобы продолжить. Вы сможете изменить тему позже в панели администрирования, однако не сможете увидеть, как она выглядит. Если выберете на странице установщика, то сможете проверить внешний вид перед выбором. Мы останемся при теме по умолчанию.

На последней странице приведены некоторые заключительные замечания о программном обеспечении и учетных данных. Нажмите кнопку «Начать» чтобы открыть страницу входа.
Появится всплывающее окно с предложением зарегистрироваться в OpenEMR, чтобы получать уведомления с их сайта. Вы можете проигнорировать его, ввести свои учетные данные и нажать кнопку Вход чтобы перейти на панель управления.

Если вы не настроили двухфакторную аутентификацию во время установки, сделайте это, нажав на значок аватара в правом верхнем углу и выбрав опцию Управление MFA .

На следующей странице выберите метод аутентификации из раскрывающегося меню и начните настройку.
