Установка OpenEMR на сервер с Rocky Linux 9
О чём статья
- Полная пошаговая инструкция по установке OpenEMR на Rocky Linux 9.
- Проверенные команды и конфигурации для Nginx, MySQL, PHP-FPM, SELinux и Certbot.
- Рекомендации по безопасности и соответствию при работе с медицинскими данными.
Предварительные требования
- Сервер с Rocky Linux 9.
- Нераутовый пользователь с sudo-привилегиями.
- Полностью квалифицированное доменное имя (FQDN), например openemr.example.com.
- Система обновлена:
$ sudo dnf update- Установите базовые утилиты (некоторые из них могут уже быть установлены):
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -yВажное: используйте отдельный тестовый сервер перед развёртыванием в продуктиве. Медицинские данные требуют защиты и резервного копирования.
Шаг 1 — Настройка файрвола
Rocky Linux использует firewalld. Проверьте состояние:
$ sudo firewall-cmd --state
runningПросмотрите активные службы в зоне по умолчанию (public):
$ sudo firewall-cmd --permanent --list-servicesОткройте HTTP и HTTPS:
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reloadПроверьте список ещё раз, чтобы убедиться, что http/https присутствуют.
Шаг 2 — Установка Nginx
Rocky Linux 9 может поставляться со старой версией Nginx. Подключите официальный репозиторий Nginx.
Создайте файл /etc/yum.repos.d/nginx.repo и вставьте конфигурацию репозитория (см. пример в исходной инструкции).
Установите Nginx:
$ sudo dnf install -y nginxПроверьте версию и запустите сервис:
$ nginx -v
$ sudo systemctl enable nginx --now
$ sudo systemctl status nginxЕсли сервис активен — переходите дальше.
Шаг 3 — Установка MySQL
Установите MySQL-сервер и выполните первоначальную настройку безопасности:
$ sudo dnf install mysql-server
$ mysql --version
$ sudo systemctl enable mysqld --now
$ sudo mysql_secure_installationПри запуске mysql_secure_installation рекомендуется включить компонент Validate Password и задать строгую политику (STRONG/2). Удалите анонимных пользователей, отключите удалённый вход root и удалите тестовую базу.
Шаг 4 — Конфигурация MySQL для OpenEMR
Войдите в консоль MySQL и создайте базу данных и пользователя:
$ sudo mysql -u root -p
mysql> CREATE DATABASE openemr;
mysql> CREATE USER 'openemruser'@'localhost' IDENTIFIED BY 'Your_password2';
mysql> GRANT ALL PRIVILEGES ON openemr.* TO 'openemruser'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exitСовет: используйте надёжные пароли, храните их в менеджере паролей и ограничьте доступ к базе по хостам, если это возможно.
Шаг 5 — Установка PHP 8.2 и расширений
OpenEMR требует совместимых версий PHP и нескольких расширений. Установите EPEL и Remi репозитории, затем включите поток PHP 8.2:
$ sudo dnf install epel-release -y
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.2
$ sudo dnf 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 php-ldap
$ sudo dnf install libtiff-tools --enablerepo=crb
$ php --version
$ sudo systemctl enable php-fpm --nowУбедитесь, что сервис php-fpm запущен.
Шаг 6 — Установка Certbot и SSL
Для получения сертификата Let’s Encrypt установите snapd и certbot через snap:
$ sudo dnf install -y snapd
$ sudo systemctl enable snapd --now
$ sudo snap install core && sudo snap refresh core
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
$ certbot --versionЗапрос сертификата для Nginx (замените 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.
Создайте DH-параметры:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096Проверьте работу планировщика автопродления и выполните тест продления:
$ sudo systemctl list-timers
$ sudo certbot renew --dry-runЕсли ошибок нет — автоматическое обновление сертификатов настроено.
Шаг 7 — Скачивание 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
$ sudo mv openemr-7.0.1 /var/www/html/openemr
$ sudo chown -R nginx:nginx /var/www/html/openemrПрава: веб-серверу (nginx) должен принадлежать каталог приложения.
Шаг 8 — Настройка SELinux
Назначьте правильный контекст безопасности для каталога OpenEMR:
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/openemr(/.*)?"
$ sudo restorecon -Rv /var/www/html/openemr/
$ sudo setsebool -P httpd_can_network_connect_db 1
$ sudo setsebool -P httpd_can_network_connect 1Эти разрешения позволяют Nginx/PHP-FPM подключаться к базе данных и внешним сервисам (например, SMTP).
Шаг 9 — Настройка PHP-FPM
Отредактируйте /etc/php-fpm.d/www.conf, чтобы PHP работал от пользователя nginx:
$ sudo nano /etc/php-fpm.d/www.confИзмените user и group на nginx, а также настройки владельца сокета:
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
;listen.acl_users = apache,nginx # закомментируйтеОтредактируйте /etc/php.ini для увеличения таймаутов и лимитов (примеры команд далее):
$ sudo sed -i 's/max_execution_time = 30/max_execution_time = 60/' /etc/php.ini
$ sudo sed -i 's/max_input_time = 60/max_input_time = -1/' /etc/php.ini
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/' /etc/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 30M/' /etc/php.ini
$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 30M/' /etc/php.ini
$ sudo sed -i 's/;max_input_vars = 1000/max_input_vars = 3000/g' /etc/php.ini
$ sudo sed -i 's/;mysqli.allow_local_infile = On/mysqli.allow_local_infile = On/g' /etc/php.ini
$ sudo systemctl restart php-fpm
$ sudo chgrp -R nginx /var/lib/php/sessionПримечание: повышенные лимиты полезны для миграций и больших отчётов, но следите за использованием памяти.
Шаг 10 — Настройка Nginx для OpenEMR
Создайте файл /etc/nginx/conf.d/openemr.conf со следующим содержимым (замените server_name на ваш домен):
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;
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;
}Добавьте строку server_names_hash_bucket_size 64; в /etc/nginx/nginx.conf перед include /etc/nginx/conf.d/*.conf;.
Проверьте синтаксис и перезапустите nginx:
$ sudo nginx -t
$ sudo systemctl restart nginxШаг 11 — Установка через веб-интерфейс OpenEMR
Откройте в браузере https://openemr.example.com и следуйте мастеру установки.

На этапе проверки файловых разрешений убедитесь, что все требуемые позиции помечены как “готово” (ready). Если какие-то позиции не готовы — проверьте права и контексты SELinux.

Выберите вариант «I have already created the database» (мы уже создали базу на Шаге 4).

Заполните данные подключения к базе и учётные данные администратора. Учётное имя администратора должно быть 12 или более символов.

Инсталлятор создаст таблицы и пользователя, после чего покажет статус установки.

Проверьте рекомендации php.ini. Инсталлятор иногда неверно отображает max_execution_time — ориентируйтесь на реальные значения в /etc/php.ini.

Поскольку используется Nginx, раздел про Apache можно пропустить.

Выберите тему (можно оставить по умолчанию «Keep Current»).

После завершения нажмите Start, чтобы открыть страницу входа.


Настройте многофакторную аутентификацию (MFA) через меню аватара — рекомендуется включить сразу после установки.

Выберите тип аутентификации и следуйте инструкциям на экране.

Поздравляем — OpenEMR установлен и готов к работе.
Безопасность и защита данных (рекомендации)
Важно: OpenEMR хранит медицинские данные — применяйте комплексную стратегию безопасности.
- Шифрование в транзите: HTTPS/TLS 1.2+ (см. конфигурацию Nginx выше).
- Шифрование в покое: используйте шифрование дисков и зашифрованные бэкапы.
- Жёсткие разрешения файлов: только nginx/php-fpm должны иметь доступ к файловой структуре приложения.
- SELinux: держите включённым и применяйте контексты для web-каталогов.
- Бэкап: регулярные инкрементные и полные бэкапы базы данных и файлов; проверяйте восстановление на тестовой системе.
- Логирование и мониторинг: настройте централизованный сбор логов (syslog/ELK/Influx + Grafana).
- Аутентификация: включите MFA для административных аккаунтов.
- Обновления: регулярно патчите систему, PHP, OpenEMR и зависимости.
Соответствие и конфиденциальность (коротко)
OpenEMR может использоваться в средах, подпадающих под HIPAA/GDPR. Общие рекомендации:
- Минимизируйте объём персональных данных и храните только необходимое.
- Документируйте доступы, аудит логов и обзоры.
- Подпишите договоры с подрядчиками, если данные передаются третьим лицам.
- При межгосударственных передачах данных соблюдайте локальные требования (например, GDPR в ЕС).
Необходим подробный юридический/комплайенс-аудит перед использованием в клинических приложениях.
Устранение неполадок (частые проблемы)
Ошибка 500 после установки
- Проверьте логи Nginx (/var/log/nginx/openemr.error.log) и PHP-FPM (/var/log/php-fpm/error.log).
- Убедитесь, что сокет /run/php-fpm/www.sock имеет права на чтение/запись для nginx.
- Проверьте контексты SELinux (restorecon) и права владельца файлов.
Проблемы с подключением к базе
- Проверьте, что MySQL слушает локальные подключения и пользователь/пароль корректны.
- Убедитесь, что
httpd_can_network_connect_dbвключён.
Certbot не выдаёт сертификат
- Убедитесь, что домен резолвится на IP сервера и порты 80/443 открыты.
- Проверьте, не использует ли конфигурация Nginx неправильные location-блоки.
Установщик показывает некорректные значения php.ini
- Проверьте значения напрямую в /etc/php.ini и перезапустите php-fpm.
Альтернативные подходы и архитектуры
- Apache + PHP-FPM: если вы предпочитаете Apache, используйте его вместо Nginx — настройки модулей и .htaccess будут иными.
- Docker/Podman: развёртывание в контейнерах ускоряет изоляцию и обновления; потребует настройки томов и сетей для базы и SSL.
- Kubernetes: для крупномасштабных инсталляций с высокой доступностью — требует больше DevOps усилий.
Плюсы контейнеров: изоляция, воспроизводимость, удобство CI/CD. Минусы: сложнее настроить безопасные обновления и хранилище данных.
Тестовые сценарии и критерии приёмки
Критерии приёмки (минимум):
- Веб-интерфейс доступен по HTTPS и показывает страницу входа.
- Установка завершена без ошибок, все проверки «готово».
- Вход в систему под созданным администратором успешен.
- Создание тестовой медицинской записи (демография + одно лечение) проходит успешно.
- Резервное копирование БД и восстановление тестовой копии выполняются без ошибок.
Минимальный набор тест-кейсов:
- Пройти установочный мастер от начала до конца.
- Залогиниться под админом и создать пользователя с ролью врача.
- Внести демографию пациента и сохранить запись с документом.
- Сгенерировать отчёт и экспортировать его в PDF.
- Выполнить бэкап БД и восстановить его на тестовом сервере.
Чек-листы по ролям
Системный администратор:
- Обновить систему и репозитории.
- Настроить файрвол и SELinux.
- Установить и настроить Nginx, PHP-FPM и MySQL.
- Настроить Certbot и автопродление сертификатов.
- Настроить мониторинг и бэкапы.
Администратор OpenEMR / IT-поддержка:
- Завести учётные записи пользователей и роли.
- Настроить MFA и политики паролей.
- Проверить интеграцию с SMTP и внешними сервисами.
- Настроить автоматические бэкапы и процедуру восстановления.
Врач / Клиницист:
- Создать тестового пациента и заполнить необходимые поля.
- Проверить загрузку и просмотр прикреплённых файлов и лабораторных результатов.
- Проверить экспорт/импорт данных в требуемых форматах.
Офис-менеджер / Биллинг:
- Настроить электронное выставление счетов и интеграцию с платёжными системами (если требуется).
- Протестировать отчёты по оплатам и расчётам.
План обновлений и миграции (высокоуровнево)
- Создайте полную резервную копию БД и файлов.
- Проверьте совместимость новой версии OpenEMR с установленными модулями и PHP.
- Выполните обновление на тестовом стенде и выполните регрессионное тестирование.
- Во время окна обслуживания примените обновление на проде.
- После обновления проверьте логи, целостность данных и работоспособность ключевых функций.
Безопасная политика бэкапов
- Создавайте ежедневные инкрементальные и еженедельные полные бэкапы.
- Храните минимум 30 дней бэкапов (политика зависит от регуляций).
- Используйте шифрование для хранения и передачи бэкапов.
- Периодически тестируйте процедуру восстановления.
Короткий факт-бокс
- Поддерживаемая версия PHP: 8.2 (рекомендуется для OpenEMR 7.x).
- Рекомендуемая память для PHP: минимум 512 MB на приложение в пиковой нагрузке.
- Порты: 80 (HTTP), 443 (HTTPS), 3306 (MySQL локальный).
Сравнение: Nginx vs Apache для OpenEMR (кратко)
- Nginx: эффективнее при высоких нагрузках, статические файлы, reverse-proxy; требует конфигурации для PHP-FPM.
- Apache: проще интегрировать с .htaccess и модулем mod_php; может быть более привычен администраторам.
Выбор зависит от навыков команды и требований производительности.
Сценарии отказа — когда этот план может не подойти
- Если требуется HA-кластер с автоматическим масштабированием, потребуется архитектура с несколькими нодами и общим хранилищем (например, S3, NFS) и балансировщиком.
- Если политика данных запрещает использование публичных CA — потребуется внутренняя PKI или коммерческий CA.
- Для крупных организаций предпочтительнее контейнеризация и оркестрация.
Краткий глоссарий (1 строка)
- FQDN — полное доменное имя сервера; TLS — протокол шифрования транспортного уровня; SELinux — система управления доступом на уровне ядра.
Чек-лист для проверки после установки
- Доступ по HTTPS к openemr.example.com
- Успешная авторизация администратора
- Создание и восстановление тестового бэкапа
- Включён MFA для административных учётных записей
- Нормальные значения php.ini и отсутствующие ошибки в логах
Решение проблем — быстрые команды
- Проверка логов nginx:
sudo tail -n 200 /var/log/nginx/openemr.error.log- Проверка статуса php-fpm:
sudo systemctl status php-fpm- Проверка контекстов SELinux:
sudo semanage fcontext -l | grep openemr
sudo restorecon -Rv /var/www/html/openemr/Короткое объявление для команды (100–200 слов)
Мы успешно подготовили инструкцию по установке OpenEMR на Rocky Linux 9. Документ включает полную пошаговую установку Nginx, MySQL, PHP 8.2 и Certbot, а также рекомендации по безопасности и чек-листы для ролей. Используйте руководство для развёртывания тестовой среды, выполните все проверки и только затем переносите систему в продуктив. Особое внимание уделите шифрованию, бэкапам и настройке MFA — OpenEMR хранит чувствительные медицинские данные, и защита должна быть приоритетом.
Заключение
Эта инструкция завершает процесс установки OpenEMR на Rocky Linux 9. После установки рекомендуется провести полноценное тестирование, настроить регулярные бэкапы, включить MFA и документировать процессы восстановления. Если остались вопросы — задавайте в комментариях или обращайтесь к документации OpenEMR.

ALT: Скриншот структуры файлов OpenEMR в веб-каталоге сервера
ALT: Мастер установки OpenEMR — проверка прав файлов и требований
ALT: Мастер установки — выбор способа создания базы данных для OpenEMR
ALT: Форма ввода параметров доступа к базе данных и учётной записи администратора
ALT: Статус создания базы данных и административного пользователя
ALT: Страница проверки настроек PHP в мастере установки OpenEMR
ALT: Экран с настройками сервера (информация для Apache, пропущена при использовании Nginx)
ALT: Выбор темы интерфейса администратора OpenEMR
ALT: Финальный экран мастера установки с итоговыми заметками и кнопкой запуска
ALT: Экран входа в OpenEMR
ALT: Основная панель управления OpenEMR после входа
ALT: Меню управления многофакторной аутентификацией в OpenEMR
ALT: Страница выбора типа многофакторной аутентификации
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента