Установка OpenEMR · 13 min read · Sep 24, 2025
Как установить OpenEMR на Ubuntu 22.04

OpenEMR — это инструмент управления медицинской практикой и электронными медицинскими записями с открытым исходным кодом. Он сертифицирован Офисом национального координатора по информационным технологиям в области здравоохранения (ONC) и включает в себя интегрированные медицинские записи, управление практикой, планирование, электронную выставку счетов, интернационализацию, бесплатную поддержку и многое другое. Он может отслеживать демографические данные пациентов, планировать приемы, вести чрезвычайно подробные медицинские записи с лабораторными отчетами, медикаментами и процедурами, отслеживать их рецепты, помогать с медицинскими счетами, генерировать подробные отчеты и поддерживать несколько языков.
В этом руководстве вы узнаете, как установить программное обеспечение OpenEMR на сервере с Ubuntu 22.04.
Предварительные условия
- Сервер с установленной Ubuntu 20.04.
- Пользователь с правами 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 ubuntu-keyring unzip -yНекоторые из этих пакетов могут уже быть установлены на вашей системе.
Шаг 1 - Настройка брандмауэра
Первый шаг — настроить брандмауэр. Ubuntu по умолчанию поставляется с 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
Команда может нарушить существующие ssh соединения. Продолжить операцию (y|n)? y
Брандмауэр активен и включен при запуске системы
Проверьте статус брандмауэра снова.
$ 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
Ubuntu поставляется со старой версией 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 arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Обновите системные репозитории.
$ sudo apt update
Установите Nginx.
$ sudo apt install nginx
Проверьте установку.
$ nginx -v
nginx version: nginx/1.24.0
Запустите сервер Nginx.
$ sudo systemctl start nginx
Шаг 3 - Установка MySQL
Ubuntu 22.04 поставляется с последней версией MySQL. Вы можете установить его одной командой.
$ sudo apt install mysql-server
Проверьте версию MySQL.
$ mysql --version
mysql Ver 8.0.33-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))
Этот шаг необходим для версий MySQL 8.0.28 и выше. Войдите в оболочку MySQL.
$ sudo mysql
Выполните следующую команду, чтобы установить пароль для вашего пользователя root. Убедитесь, что он содержит комбинацию цифр, заглавных и строчных букв, а также специальных символов.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';
Выйдите из оболочки.
mysql> exit
Запустите скрипт безопасной установки MySQL.
$ sudo mysql_secure_installation
Сначала вас попросят ввести пароль root. Введите его. Далее вас попросят установить компонент проверки пароля. Он проверяет надежность паролей, используемых в MySQL. Нажмите Y, чтобы установить его. Затем вам будет предложено установить уровень политики проверки пароля. Выберите 2, так как это самый строгий уровень.
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
Затем введите N, чтобы отказаться от изменения пароля root. Также введите Y, чтобы удалить анонимных пользователей, запретить удаленный вход root, удалить тестовую базу данных и перезагрузить таблицы привилегий.
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!
Шаг 4 - Настройка MySQL
Войдите в оболочку MySQL. Введите свой пароль root, когда вас попросят.
$ sudo mysql -u root -p
Создайте тестовую базу данных.
mysql> CREATE DATABASE openemr;
Создайте учетную запись SQL пользователя.
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 и его расширений
Ubuntu 22.04 поставляется с версией PHP 8.1.2, которая немного устарела. Мы установим последнюю версию PHP 8.2 с помощью репозитория Ondrej.
$ sudo add-apt-repository ppa:ondrej/php
Далее установите 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.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
Шаг 6 - Установка SSL
Нам нужно установить Certbot для генерации SSL-сертификата. Вы можете установить Certbot, используя репозиторий Ubuntu, или получить последнюю версию с помощью инструмента Snapd. Мы будем использовать версию Snapd.
Ubuntu 22.04 поставляется с установленным 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
Выполните следующую команду, чтобы сгенерировать 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 на вашем сервере.
Сгенерируйте сертификат Diffie-Hellman group.
$ 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
.....
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
Проведите пробный запуск процесса, чтобы проверить, работает ли обновление 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/wwww/html -p
Переместите извлеченные файлы в веб-каталог.
$ sudo mv openemr-7.0.1 /var/www/html/openemr
Предоставьте права пользователю Nginx на корневой веб-каталог.
$ sudo chown -R nginx:nginx /var/www/html/openemr
Шаг 8 - Настройка 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 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
...
Найдите строки 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: user and group are set as the running user
; 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 с 128MB до 512MB.
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/' /etc/php/8.2/fpm/php.ini
Увеличьте размер загружаемого файла до 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
Увеличьте количество максимальных входных переменных до 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
Шаг 9 - Настройка 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/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;
}
Обратите внимание, что корневой каталог, который будет использоваться в конфигурации 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
Шаг 10 - Установка OpenEMR
Откройте URL https://openemr.example.com в вашем браузере, и вы увидите следующий экран настройки.

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

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

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

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

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

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

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

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

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

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

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

Теперь вы можете начать использовать OpenEMR для управления своим медицинским бизнесом.
Заключение
На этом наше руководство по установке OpenEMR на сервер Ubuntu 22.04 завершено. Если у вас есть какие-либо вопросы, оставляйте их в комментариях ниже.
Get new posts in your inbox
No spam. Unsubscribe anytime.