OpenEMR 설치 · 11 min read · Sep 24, 2025
Ubuntu 22.04에 OpenEMR 설치하는 방법

OpenEMR은 오픈 소스 전자 건강 기록 및 의료 실무 관리 도구입니다. 이는 국가 건강 정보 기술 조정관 사무소(ONC)에서 인증받았으며, 통합 건강 기록, 실무 관리, 일정 관리, 전자 청구, 국제화, 무료 지원 등 많은 기능을 제공합니다. 환자 인구 통계를 추적하고, 환자를 일정에 맞추고, 실험실 보고서, 약물 및 절차와 함께 매우 상세한 건강 기록을 유지하며, 처방전을 추적하고, 의료 청구를 도와주고, 상세 보고서를 생성하며, 다국어 지원을 제공합니다.
이 튜토리얼에서는 Ubuntu 22.04에서 OpenEMR 소프트웨어를 설치하는 방법을 배웁니다.
전제 조건
- Ubuntu 20.04를 실행하는 서버.
- 비 루트 sudo 사용자.
openemr.example.com과 같은 완전한 도메인 이름(FQDN).- 모든 것이 업데이트되었는지 확인하십시오.
$ 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(간단한 방화벽)를 제공합니다.
방화벽이 실행 중인지 확인하십시오.
$ sudo ufw status
다음과 같은 출력이 표시됩니다.
상태: 비활성
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
유사한 출력을 볼 수 있어야 합니다.
상태: 활성
목적지 작업 출처
-- ------ ----
OpenSSH 허용 모든 곳
80/tcp 허용 모든 곳
443 허용 모든 곳
OpenSSH (v6) 허용 모든 곳 (v6)
80/tcp (v6) 허용 모든 곳 (v6)
443 (v6) 허용 모든 곳 (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 버전: 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
루트 사용자에 대한 비밀번호를 설정하는 다음 명령을 실행합니다. 숫자, 대문자, 소문자 및 특수 문자가 혼합되어 있는지 확인하십시오.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';
셸을 종료합니다.
mysql> exit
MySQL 보안 설치 스크립트를 실행합니다.
$ sudo mysql_secure_installation
먼저 루트 비밀번호를 입력하라는 메시지가 표시됩니다. 입력하십시오. 다음으로, 비밀번호 유효성 검사 구성 요소를 설치할 것인지 묻는 메시지가 표시됩니다. 이는 MySQL에서 사용되는 비밀번호의 강도를 확인합니다. 설치하려면 Y를 누르십시오. 다음으로 비밀번호 유효성 검사 정책의 수준을 설정하라는 메시지가 표시됩니다. 가장 강력한 2를 선택하십시오.
MySQL 서버 배포 보안 설정.
사용자 root의 비밀번호를 입력하십시오:
VALIDATE PASSWORD COMPONENT를 사용하여 비밀번호를 테스트하고 보안을 개선할 수 있습니다. 비밀번호의 강도를 확인하고 사용자가 충분히 안전한 비밀번호만 설정할 수 있도록 합니다. VALIDATE PASSWORD 구성 요소를 설정하시겠습니까?
예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오: Y
비밀번호 유효성 검사 정책의 세 가지 수준이 있습니다:
낮음 길이 >= 8
중간 길이 >= 8, 숫자, 혼합 대소문자 및 특수 문자
강력함 길이 >= 8, 숫자, 혼합 대소문자, 특수 문자 및 사전 파일
0 = 낮음, 1 = 중간 및 2 = 강력함을 입력하십시오: 2
기존 비밀번호를 root에 사용합니다.
비밀번호의 예상 강도: 100
다음으로 루트 비밀번호 변경을 거부하려면 N을 입력하십시오. 또한 익명 사용자를 제거하고 원격 루트 로그인을 금지하며 테스트 데이터베이스를 제거하고 권한 테이블을 다시 로드하라는 메시지가 표시되면 Y를 입력하십시오.
루트 비밀번호를 변경하시겠습니까? ((예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : N
... 건너뜁니다.
기본적으로 MySQL 설치에는 익명 사용자가 있으며, 사용자 계정을 생성하지 않고도 MySQL에 로그인할 수 있습니다. 이는 테스트를 위한 것이며 설치를 조금 더 원활하게 진행하기 위한 것입니다. 프로덕션 환경으로 이동하기 전에 제거해야 합니다.
익명 사용자를 제거하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : Y
성공.
보통 루트는 'localhost'에서만 연결할 수 있어야 합니다. 이는 누군가가 네트워크에서 루트 비밀번호를 추측할 수 없도록 보장합니다.
원격으로 루트 로그인을 금지하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : Y
성공.
기본적으로 MySQL에는 'test'라는 데이터베이스가 있으며 누구나 접근할 수 있습니다. 이는 테스트를 위한 것이며 프로덕션 환경으로 이동하기 전에 제거해야 합니다.
테스트 데이터베이스 및 그에 대한 접근을 제거하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : Y
- 테스트 데이터베이스 삭제 중...
성공.
- 테스트 데이터베이스에 대한 권한 제거 중...
성공.
권한 테이블을 다시 로드하면 지금까지 수행된 모든 변경 사항이 즉시 적용됩니다.
권한 테이블을 지금 다시 로드하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : Y
성공.
모두 완료되었습니다!
4단계 - MySQL 구성
MySQL 셸에 로그인합니다. 프롬프트가 표시되면 루트 비밀번호를 입력하십시오.
$ 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 버전을 제공합니다. Ondrej의 PHP 저장소를 사용하여 최신 PHP 8.2 버전을 설치하겠습니다.
$ sudo add-apt-repository ppa:ondrej/php
다음으로 OpenEMR에 필요한 PHP 및 확장 프로그램을 설치합니다.
$ 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 설치
SSL 인증서를 생성하기 위해 Certbot을 설치해야 합니다. Ubuntu의 저장소를 사용하여 Certbot을 설치하거나 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 그룹 인증서를 생성합니다.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Certbot 갱신 스케줄러 서비스를 확인합니다.
$ sudo systemctl list-timers
snap.certbot.renew.service가 실행될 서비스 중 하나로 표시됩니다.
다음 남은 시간 마지막 경과 단위 활성화
.....
일요일 2023-02-26 06:32:00 UTC 9시간 남음 토요일 2023-02-25 18:04:05 UTC 2시간 59분 전 snap.certbot.renew.timer snap.certbot.renew.service
일요일 2023-02-26 06:43:20 UTC 9시간 남음 토요일 2023-02-25 10:49:23 UTC 10시간 전 apt-daily-upgrade.timer apt-daily-upgrade.service
일요일 2023-02-26 09:00:06 UTC 11시간 남음 토요일 2023-02-25 20:58:06 UTC 5분 전 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
PHP 프로세스의 Unix 사용자/그룹을 nginx로 설정해야 합니다. 파일에서 user=www-data 및 group=www-data 줄을 찾아 nginx로 변경합니다.
...
; 프로세스의 Unix 사용자/그룹
; 참고: 사용자는 필수입니다. 그룹이 설정되지 않으면 기본 사용자의 그룹이 사용됩니다.
; RPM: httpd와 동일한 디렉토리에 접근할 수 있도록 선택된 apache 사용자
user = nginx
; RPM: 로그 디렉토리에 쓸 수 있는 그룹을 유지합니다.
group = nginx
...
파일에서 listen.owner = www-data 및 listen.group = www-data 줄을 찾아 nginx로 변경합니다.
; unix 소켓에 대한 권한을 설정합니다. Linux에서는 웹 서버에서 연결을 허용하기 위해 읽기/쓰기 권한이 설정되어야 합니다. 많은 BSD 파생 시스템은 권한에 관계없이 연결을 허용합니다. 소유자와 그룹은 이름이나 숫자 ID로 지정할 수 있습니다.
; 기본값: 사용자와 그룹은 실행 중인 사용자로 설정됩니다.
; 모드는 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;
# 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;
}
# PHP 스크립트를 FastCGI 서버로 전달
location ~* \.php$ {
try_files $uri =404;
fastcgi_index index.php;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # PHP 버전에 따라 다름
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
include fastcgi_params;
}
# 쓰기 가능한 파일/디렉토리에 대한 접근 거부
location ~* ^/sites/*/(documents|edi|era) {
deny all;
return 404;
}
# 특정 디렉토리에 대한 접근 거부
location ~* ^/(contrib|tests) {
deny all;
return 404;
}
# 대안으로 이러한 파일에 대한 모든 접근을 거부할 수 있습니다
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;
}
}
# 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: 구성 파일 /etc/nginx/nginx.conf 구문이 올바릅니다
nginx: 구성 파일 /etc/nginx/nginx.conf 테스트가 성공했습니다
Nginx 서비스를 재시작합니다.
$ sudo systemctl restart nginx
10단계 - OpenEMR 설치
브라우저에서 URL https://openemr.example.com을 열면 다음 설치 화면이 표시됩니다.

여기에서 파일 권한을 확인하고 1단계로 진행할 수 있는지 확인합니다. 녹색으로 ready라는 단어가 보이면 진행할 수 있다는 의미입니다. 파란색 버튼을 클릭하여 1단계로 진행합니다.

다음 페이지에서는 설치 프로그램이 데이터베이스를 생성할 것인지 아니면 미리 만들어진 것을 사용할 것인지 묻습니다. I have already created the database 옵션을 선택하고 버튼을 클릭하여 2단계로 진행합니다.

다음 페이지에서는 이전 4단계에서 구성한 데이터베이스 자격 증명을 입력합니다. 또한 관리자 계정 자격 증명을 입력하십시오. 사용자 이름이 12자 이상이어야 하며 그렇지 않으면 오류가 발생합니다. 여기에서 이중 인증(2FA)을 활성화할 수 있지만 설치 후에 구성하는 것이 좋습니다. 데이터베이스 및 사용자 계정을 생성하는 버튼을 클릭합니다.

다음 페이지에서는 설치 상태를 보여주며 사용자 이름과 비밀번호를 표시합니다. 4단계로 진행하는 버튼을 클릭합니다.

다음 페이지에서는 php.ini 파일에서 권장 및 현재 값을 나열합니다. 현재 값이 요구 사항을 충족하는지 확인하십시오. 설치 프로그램은 이유 없이 max_input_time 및 max_execution_time 변수에 대해 잘못된 값을 표시합니다. 이를 무시할 수 있습니다. 현재 값을 확인하려면 다음 명령을 사용할 수 있습니다.
만족스러우면 5단계로 진행하는 버튼을 클릭합니다.

다음 단계에서는 Apache 서버 설정을 나열하지만 Nginx 서버를 사용하고 있으므로 무시합니다. 다음 페이지로 진행하는 버튼을 클릭합니다.

여기에서 관리 패널의 테마를 선택하라는 메시지가 표시됩니다. Keep Current 옵션을 선택하고 버튼을 클릭하여 진행합니다. 나중에 관리 패널에서 테마를 변경할 수 있지만 어떻게 보이는지 확인할 수는 없습니다. 설치 페이지에서 선택하면 선택하기 전에 어떻게 보이는지 확인할 수 있습니다. 기본 테마를 유지하겠습니다.

마지막 페이지에서는 소프트웨어 및 계정 자격 증명에 대한 최종 메모를 나열합니다. 시작 버튼을 클릭하여 로그인 페이지를 엽니다.

OpenEMR 등록 팝업이 표시되어 사이트의 공지를 받을 수 있습니다. 무시하고 자격 증명을 입력한 후 로그인 버튼을 클릭하여 대시보드에 접근합니다.

설치 중에 이중 인증을 구성하지 않았다면 오른쪽 상단의 아바타 아이콘을 클릭하고 MFA 관리 옵션을 선택하여 구성합니다.

다음 페이지에서 드롭다운 메뉴에서 인증 방법을 선택하고 구성을 시작합니다.

여기에서부터 OpenEMR을 사용하여 건강 비즈니스를 관리할 수 있습니다.
결론
이로써 Ubuntu 22.04 서버에 OpenEMR을 설치하는 튜토리얼이 종료됩니다. 질문이 있으시면 아래 댓글로 남겨주세요.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.