Установка OpenEMR на Debian 12
OpenEMR — бесплатная система электронных медицинских записей. В этой пошаговой инструкции описана установка на Debian 12: настройка брандмауэра, Nginx, MariaDB, PHP, SSL (Certbot), загрузка OpenEMR и финальная настройка через веб-инсталлятор. Включены чеклисты, контрольные тесты и рекомендации по безопасности.
Краткое описание

OpenEMR — это open-source система для ведения электронных медицинских записей и управления медицинской практикой. Приложение сертифицировано ONC (Office of the National Coordinator for Health Information Technology) и предоставляет функции: учёт демографии пациентов, планирование приёмов, подробные медицинские записи с результатами лабораторий, рецепты, электронный биллинг, отчёты и мультиязычный интерфейс.
В этом руководстве пошагово показано, как установить OpenEMR на сервер под управлением Debian 12. Инструкция ориентирована на системного администратора или инженера DevOps, который имеет доступ к серверу с sudo-доступом.
Важное: перед началом убедитесь, что у вас есть резервные копии и возможность доступа к консоли (консольный доступ или KVM) на случай сетевых проблем.
Предпосылки
- Сервер под Debian 12, с доступом по SSH.
- Пользователь с 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Некоторые пакеты могут уже быть установлены на вашей системе.
Что вы получите в конце
- Рабочий экземпляр OpenEMR, доступный по HTTPS.
- Настроенный Nginx + PHP-FPM, MariaDB, phpMyAdmin для администрирования БД.
- Автоматическое обновление сертификатов Let’s Encrypt через Certbot (snap).
Important: Эта инструкция рассчитана на новую чистую систему. Если у вас есть существующие службы (Apache, MySQL), их конфигурации могут конфликтовать.
Шаг 1 — Настройка брандмауэра
Debian включает ufw (Uncomplicated Firewall). Проверяем состояние:
$ sudo ufw statusОжидаемый ответ при неактивном ufw:
Status: inactiveРазрешите SSH, чтобы не потерять соединение после включения брандмауэра:
$ sudo ufw allow OpenSSHРазрешите HTTP и HTTPS:
$ sudo ufw allow http
$ sudo ufw allow httpsВключите брандмауэр:
$ sudo ufw enableПроверьте статус ещё раз:
$ sudo ufw statusВы должны увидеть разрешения для OpenSSH и портов 80/443.
Примечание: если вы используете нестандартный порт SSH, разрешите его вместо правила OpenSSH.
Шаг 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Обновите списки пакетов и установите Nginx:
$ sudo apt update
$ sudo apt install nginxПроверьте версию и запустите сервис:
$ sudo nginx -v
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo systemctl status nginxВажно: если у вас уже установлен веб-сервер (например, Apache), его нужно остановить и отключить, чтобы избежать конфликтов портов.
Альтернатива: вы можете использовать Apache вместо Nginx. В таких случаях конфигурация PHP-FPM и маршрутов differ — учитывайте это при выборе.
Шаг 3 — Установка MariaDB
Debian 12 по умолчанию может не включать MySQL, поэтому используется MariaDB. Установите сервер:
$ sudo apt install mariadb-serverПроверьте версию:
$ mysql --versionЗащитите установку с помощью встроенного скрипта:
$ sudo mysql_secure_installationИнструкция подскажет удалить анонимных пользователей, отключить удалённый доступ root и удалить тестовую базу — рекомендуется отвечать “Y” при предложении.
После успешного выполнения вы можете войти в shell MariaDB:
$ sudo mysqlЕсли у вас есть требования к отдельному пользователю администратора базы (не root), создайте его позже (см. шаг 4).
Шаг 4 — Настройка MariaDB для OpenEMR
Войдите в MariaDB shell:
$ 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';Если вам нужен отдельный администратор БД с глобальными привилегиями, создайте его (замените имя и пароль):
MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;Не забудьте выполнить:
mysql> FLUSH PRIVILEGES;
mysql> exitСовет по безопасности: ограничьте доступ пользователя только с localhost, используйте сложные пароли и, при возможности, контролируйте доступ через unix_socket или socket-авторизацию для автоматизации задач.
Шаг 5 — Установка PHP и расширений
Debian 12 включает PHP 8.2. Установите PHP-FPM и необходимые расширения:
$ 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 или всегда иметь актуальные пакеты, можно добавить репозиторий Ondřej Surý (Sury). Импортируйте ключ и добавьте репозиторий:
$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
$ 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 8.2:
$ 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:
$ php --versionВажно: OpenEMR может требовать некоторых расширений PHP — проверьте лог установщика и установите недостающие расширения.
Шаг 6 — Установка SSL (Certbot через snap)
Для HTTPS установим Certbot. На Debian 12 рекомендуется snap-версия Certbot для получения последних функций.
Установите snapd и актуализируйте core:
$ sudo apt install snapd
$ sudo snap install core && sudo snap refresh coreУстановите Certbot:
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
$ certbot --versionСгенерируйте сертификат (замените email и домен):
$ 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И сделайте пробный прогон обновления:
$ sudo certbot renew --dry-runЕсли ошибок нет, автоматическое обновление сертификатов настроено.
Note: в некоторых окружениях (firewall, proxy) Certbot с опцией –nginx может не уметь правильно настроить конфигурацию — тогда используйте certonly и вручную внесите пути к сертификатам в конфиг Nginx.
Шаг 7 — Загрузка OpenEMR
Скачайте архив с последней версией OpenEMR (пример для версии 7.0.1):
$ 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
$ sudo mkdir -p /var/www/html
$ sudo mv openemr-7.0.1 /var/www/html/openemr
$ sudo chown -R nginx:nginx /var/www/html/openemrУбедитесь, что владельцем и группой веб-каталога являются учётные записи, под которыми запущены Nginx и PHP-FPM (в инструкциях ниже используется nginx). В системах с www-data используйте www-data.
Шаг 8 — Установка phpMyAdmin
phpMyAdmin полезен для быстрой работы с базой данных.
Скачайте архив (пример):
$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-english.tar.gz
$ sudo tar -xzf phpMyAdmin-5.2.1-english.tar.gz -C /var/www/html/openemr
$ 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-аутентификации. Например:
$cfg['blowfish_secret'] = 'Tc/HfLPBOAPxJ-rhQP}HJoZEK69c3j:m';Сохраните файл и поменяйте владельца каталога:
$ sudo chown -R nginx:nginx /var/www/html/openemr/sm175
$ sudo rm -rf /var/www/html/openemr/sm175/setupImportant: храните конфигурационные файлы phpMyAdmin в безопасном месте и ограничьте доступ по IP, если phpMyAdmin доступен в интернете.
Шаг 10 — Настройка PHP-FPM
Откройте пул PHP-FPM для редактирования (путь может отличаться для других версий PHP):
$ sudo nano /etc/php/8.2/fpm/pool.d/www.confУстановите пользователя и группу, под которыми будут работать процессы PHP (в примере — nginx):
user = nginx
group = nginxУстановите владельца для сокета:
listen.owner = nginx
listen.group = nginxСохраните изменения.
Отредактируйте параметры php.ini для повышения надёжности и поддержки OpenEMR (изменения показаны командами):
$ sudo sed -i 's/max_execution_time = 30/max_execution_time = 60/' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/max_input_time = 60/max_input_time = -1/' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/' /etc/php/8.2/fpm/php.ini
$ 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
$ sudo sed -i 's/;max_input_vars = 1000/max_input_vars = 3000/g' /etc/php/8.2/fpm/php.ini
$ 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
$ sudo chgrp -R nginx /var/lib/php/sessionsШаг 11 — Конфигурация Nginx для OpenEMR
Создайте конфигурацию vhost:
$ 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;
}Important: в блоке root должен быть путь /var/www/html/openemr (в исходной заметке был упомянут другой путь — измените при необходимости). Также проверьте путь сокета в fastcgi_pass — в разных дистрибутивах путь может быть /run/php/php8.2-fpm.sock или /run/php-fpm/www.sock.
Проверьте синтаксис Nginx и перезапустите сервис:
$ sudo nano /etc/nginx/nginx.confДобавьте перед include /etc/nginx/conf.d/*.conf;:
server_names_hash_bucket_size 64;Проверка и перезапуск:
$ sudo nginx -t
$ sudo systemctl restart nginxШаг 12 — Запуск инсталлятора OpenEMR через браузер
Откройте https://openemr.example.com в браузере. Вы увидите страницу проверки готовности установки — проверяется доступность файлов и прав доступа.

Если все надписи “ready” — продолжайте. На шаге выбора БД отметьте “I have already created the database” (мы создавали в шаге 4).

Заполните данные БД и параметры аккаунта администратора. Обратите внимание: имя администратора должно быть не менее 12 символов.

Инсталлятор создаст таблицы и покажет лог установки. На одном из шагов отобразятся рекомендуемые и текущие значения из php.ini — убедитесь, что они соответствуют требованиям (иногда инсталлятор неправильно показывает max_execution_time).

Выберите тему админ-панели (рекомендуется оставить по умолчанию и менять потом).

После завершения вы попадёте на страницу входа в систему.

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

phpMyAdmin останется доступен по адресу https://openemr.example.com/sm175/ (или по имени, которое вы указали при переименовании).

Проверка и тесты после установки
Краткий список проверок:
- Войдите в OpenEMR под администратором и проверьте базовую функциональность (создание пациента, назначение приёма).
- Откройте phpMyAdmin и проверьте структуру базы openemr.
- Проверьте логи Nginx (/var/log/nginx/openemr.error.log) и PHP-FPM (/var/log/php8.2-fpm.log) на предмет ошибок.
- Проверьте HTTPS-сертификат в браузере и выполнения
sudo certbot renew --dry-run.
Критерии приёмки
- Сайт доступен по HTTPS без предупреждений.
- Вход в систему работает, администратор может создать запись пациента.
- Автоматическое обновление сертификата прошло dry-run без ошибок.
- Резервное копирование/экспорт БД выполнено как тест.
Руководство по устранению неполадок (Troubleshooting)
- Ошибка 502 Bad Gateway в Nginx
- Обычно связана с тем, что PHP-FPM не запущен или сокет/адрес отличается. Проверить:
$ sudo systemctl status php8.2-fpm
$ sudo journalctl -u php8.2-fpm --no-pager | tail -n 50- Проверьте путь сокета в nginx-конфигурации и в /etc/php/8.2/fpm/pool.d/www.conf (listen = ...).- Проблемы с правами на файлы
- Убедитесь, что веб-процесс (nginx/www-data) владеет каталогом приложения и имеет доступ на запись в папки
sites/default/documents.
- Убедитесь, что веб-процесс (nginx/www-data) владеет каталогом приложения и имеет доступ на запись в папки
$ sudo chown -R nginx:nginx /var/www/html/openemr
$ sudo find /var/www/html/openemr -type d -exec chmod 755 {} \;
$ sudo find /var/www/html/openemr -type f -exec chmod 644 {} \;Ошибки в логах PHP
- Проверьте /var/log/php8.2-fpm.log и /var/log/nginx/openemr.error.log.
Сертификат не выдан
- Убедитесь, что DNS A/AAAA-записи указывают на сервер и что порт 80 открыт для проверки http-01 challenge.
Безопасность и жёсткая настройка (Security hardening)
- Отключите ненужные сервисы и оставьте минимально необходимые порты.
- Ограничьте доступ к phpMyAdmin по IP или используйте VPN/Jump host.
- Настройте регулярное обновление системы и автообновление пакетов безопасности (apt unattended-upgrades).
- Включите двухфакторную аутентификацию (MFA) для администраторов OpenEMR.
- Ограничьте доступ к административным страницам через Nginx (IP-ограничения, basic auth поверх HTTPS для дополнительного слоя).
- Регулярно делайте резервные копии БД и файлов (см. SOP ниже).
Резервное копирование и обновления (SOP)
Минимальный план:
- Ежедневные инкрементальные бэкапы базы данных и файлов.
- Еженедельные полные бэкапы.
- Перед обновлением OpenEMR создавайте снимок сервера (если возможно) и полную резервную копию БД.
- Тесты восстановления резервных копий обязаны проводиться не реже одного раза в квартал.
Пример команды для бэкапа MySQL:
$ mysqldump -u openemruser -p openemr | gzip > /backups/openemr-`date +%F`.sql.gzПлан обновления OpenEMR — мини-методология
- Подготовка тестовой среды, клонирование базы и файлов.
- Тестовое обновление в staging: проверка функционала и интеграций.
- Оповещение пользователей и окно обслуживания.
- Полный бэкап и создание контрольной точки (snapshot).
- Обновление на проде, повторная проверка критичных сценариев.
- Откат в случае проблем: восстановление snapshot / бэкапа.
Контрольные тесты и сценарии приёмки
- Тест 1 — Авторизация: успешный вход администратором.
- Тест 2 — Создание пациента: добавить пациента с именем, DOB, контактами.
- Тест 3 — Ведение медицинской записи: добавить запись, лабораторные результаты и сохранить.
- Тест 4 — Назначение приёма: создать приём в календаре, проверить уведомления.
- Тест 5 — Экспорт/импорт: экспортировать резервную копию базы и успешно импортировать в тестовой среде.
Критерии приёмки: все тесты выполняются без ошибок, логи не содержат критических ошибок.
Роли и чек-листы
Администратор системы (DevOps):
- Настроить и проверить брандмауэр.
- Установить и настроить Nginx, PHP-FPM, MariaDB.
- Настроить Certbot и проверить renew.
- Организовать бэкапы и SOP обновления.
Администратор приложения (OpenEMR admin):
- Создать аккаунт администратора, настроить MFA.
- Настроить темы и роли пользователей.
- Верифицировать шаблоны и скрипты биллинга.
Клинический пользователь:
- Проверить рабочий процесс: регистрация пациента, добавление записей, выдача рецептов.
- Сообщить о любых неконсистентных данных или сбоях в интерфейсе.
Когда этот подход может не подойти (Counterexamples)
- Если ваша организация использует централизованную СУБД (например, корпоративный кластер MariaDB/MySQL), локальная установка может конфликтовать с политиками безопасности.
- Для очень крупных инсталляций с высокой нагрузкой однопользовательская конфигурация Nginx+MariaDB на одном сервере может быть недостаточна — рассмотрите масштабирование и кластеризацию.
Короткий глоссарий (1 строка на термин)
- FQDN — полностью квалифицированное доменное имя сервера.
- Nginx — высокопроизводительный веб-сервер и обратный прокси.
- PHP-FPM — менеджер процессов PHP, рекомендуется для управления запросами PHP.
- MariaDB — форк MySQL, совместимая СУБД.
- Certbot — клиент для автоматического получения сертификатов Let’s Encrypt.
Факты и рекомендации
- Версии: Debian 12, PHP 8.2, OpenEMR 7.x (пример).
- Рекомендуемый memory_limit для PHP: минимум 256–512M для сред с большим количеством одновременных пользователей.
- Резервное копирование БД: ежедневное — минимум.
Заключение
Установка OpenEMR на Debian 12 включает стандартные шаги: настройка брандмауэра, установка Nginx, MariaDB, PHP, получение SSL и запуск веб-инсталлятора. После установки обязательно проверьте базовую функциональность, настройте MFA, автоматические обновления сертификата и процессы резервного копирования. Для продакшен-среды дополнительно применяйте жесткие политики доступа к phpMyAdmin и логирование.
Summary
- Инсталляция завершена, OpenEMR доступен по HTTPS.
- Настройте бэкапы и тесты восстановления.
- Примените рекомендации по безопасности и мониторингу.
Если остались вопросы — опишите вашу конфигурацию и ошибки, и я помогу с диагностикой.
Похожие материалы
Троян Herodotus: как он работает и как защититься
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить