Moodle 설치 · 12 min read · Sep 24, 2025
Debian 9에 Moodle eLearning 플랫폼 설치하기

Moodle은 PHP로 작성된 유연하고 강력한 무료 오픈 소스 과정 관리 시스템 및 e-learning 플랫폼으로, 일반적으로 Apache/Nginx 웹 서버에서 PHP 및 MySQL/MariaDB 데이터베이스 관리 시스템과 함께 Linux에 배포됩니다. 이는 LAMP 또는 LEMP 스택으로도 알려져 있습니다.
이 튜토리얼에서는 귀하의 시설에서 e-learning 플랫폼을 만들기 위해 Debian 9 릴리스에서 최신 버전의 Moodle을 설치하고 구성하는 방법을 설명합니다.
Moodle 플랫폼은 교육자와 훈련자가 과정 데이터를 저장하고 학생, 성적 및 온라인 과정을 추적하는 데 사용할 수 있는 직관적인 웹 인터페이스를 제공합니다. 전 세계 대부분의 주요 대학들은 학생과 교사를 위한 교육 활동을 용이하게 하기 위해 Moodle e-learning 플랫폼을 배포하고 있습니다.
요구 사항
Moodle을 성공적으로 설치하고 배포하기 위해 귀하의 서버는 아래 요구 사항을 충족해야 합니다.
- 최소 소프트웨어 요구 사항이 설치된 Debian 9 서버, 물리적 서버 머신 또는 가상 사설 서버에서
- 콘솔 또는 SSH를 통해 루트 계정에 직접 접근하거나 sudo 유틸리티를 통해 루트 권한을 가진 계정에 원격 또는 직접 접근
- 정적 IP 주소로 구성된 네트워크 인터페이스 카드
- Moodle 이메일 등록, 알림 또는 기타 유형의 기능을 사용하기 위해 IMAP, POP3 및 SMTP 서비스에 접근할 수 있는 메일 서버를 귀하의 시설에 적절히 설정해야 합니다.
- 배포에 따라 개인 또는 공용 도메인 이름, 웹 서비스에 대한 적절한 DNS 레코드가 구성되어 있어야 합니다. 유효하거나 등록된 도메인 이름이 없는 경우, 설치를 수행하고 서버 IP 주소를 통해 웹사이트에 접근할 수 있습니다.
Apache, PHP 및 MySQL 설치
첫 번째 단계로, Moodle 플랫폼을 설치하고 구성하기 전에 루트 계정 또는 루트 권한이 있는 계정으로 서버에 로그인하고 아래 명령어를 실행하여 Debian 시스템 리포지토리 및 소프트웨어 패키지를 업데이트합니다.
apt updateapt upgrade다음으로, 시스템 소프트웨어를 업데이트한 후, 아래 명령어를 실행하여 Debian 서버의 이름을 구성합니다. 호스트 이름 변수를 귀하의 설정에 맞게 교체해야 합니다. 아래 예시와 같이.
hostnamectl set-hostname www.myblog.com그런 다음, 아래 명령어를 실행하여 머신의 호스트 이름과 호스트 파일을 확인할 수 있습니다.
hostnamectlcat /etc/hostnamehostname –shostname –f커널 업데이트를 적용하고 호스트 이름 변경을 적용하기 위해 아래 명령어를 실행하여 머신을 재부팅합니다.
systemctl rebootMoodle 학습 플랫폼을 배포하는 데 가장 중요한 LAMP 구성 요소 중 하나는 웹 애플리케이션이 사용자, 세션, 연락처 및 기타 데이터를 저장하는 데 사용하는 RDBMS 데이터베이스입니다. 이 튜토리얼에서는 MySQL 데이터베이스에 루프백 접근을 통해 MariaDB 데이터베이스 백엔드로 Moodle CMS를 구성합니다. 이는 데이터베이스에 localhost 또는 127.0.0.1 주소를 통해서만 접근할 수 있음을 의미합니다. MySQL 데이터베이스에 대한 외부 연결은 허용되지 않습니다. Debian 9 서버에 MariaDB 데이터베이스 서버 및 클라이언트를 설치하기 위해 아래 명령어를 실행합니다.
apt install mariadb-server mariadb-clientMariaDB 데이터베이스가 Debian 서버에 설치가 완료되면 아래 예시와 같이 netstat 명령어를 실행하여 서비스가 실행 중인지 확인하고 localhost의 포트 3306에서 연결을 수신하는지 확인합니다.
netstat –tlpn | grep mysql만약 netstat 네트워크 유틸리티가 Debian 시스템에 기본적으로 설치되어 있지 않다면, 아래 명령어를 실행하여 설치합니다.
apt install net-toolsMySQL 루트 계정은 Debian 9 설치 시 적절하게 보안되지 않습니다. 루트 비밀번호 없이 데이터베이스에 로그인할 수 있습니다. 루트 계정을 보안하기 위해 MySQL 서버 콘솔에 로그인하고 아래 명령어를 실행하여 보안을 강화합니다.
mysql -h localhostWelcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> use mysql;Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changedMariaDB [mysql]> update user set plugin='' where user='root';Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0MariaDB [mysql]> flush privileges;Query OK, 0 rows affected (0.00 sec)MariaDB [mysql]> exitBye루트 계정의 보안을 적절히 강화한 후, 데이터베이스 콘솔에 로그인하고 루트 계정에 비밀번호를 제공하지 않습니다. 루트 계정에 비밀번호가 제공되지 않으면 데이터베이스 접근이 거부되어야 하며, 아래 명령어 예시와 같이 나타납니다.
mysql -h localhost -u rootERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)MySQL 데이터베이스 콘솔에 로그인하려면 root 비밀번호를 제공해야 하며, 아래 명령어 샘플과 같이 나타납니다.
mysql -h localhost -u root -pEnter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 15
Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> exit
ByeMoodle CMS는 대부분 PHP 서버 사이드 프로그래밍 언어로 작성된 웹 기반 애플리케이션입니다. 지금까지 우리는 LAMP의 MySQL 데이터베이스 구성 요소만 설치했습니다. 애플리케이션의 PHP 파일 스크립트를 실행하기 위해서는 Apache HTTP 서버와 PHP 처리 게이트웨이가 시스템에 설치되고 작동해야 합니다. Apache 웹 서버와 PHP 인터프리터 및 애플리케이션이 제대로 실행되기 위해 필요한 모든 PHP 모듈을 설치하기 위해 서버 콘솔에서 아래 명령어를 실행합니다.
apt install apache2 libapache2-mod-php7.0 php7.0 php7.0-mysql php7.0-gd php7.0-opcache php7.0-json php7.0-mbstring php7.0-xml php7.0-ldap php7.0-cli php7.0-curl php7.0-ldap php7.0-zip php7.0-bcmath php-imagick php7.0-xmlrpc php7.0-soap php7.0-intl설치된 모든 PHP 모듈이 시스템에서 활성화되었는지 확인하기 위해 아래 명령어를 실행합니다.
php7.0 –mApache와 PHP가 설치된 후, 아래 명령어를 실행하여 웹 서버가 실행 중인지 확인하고 포트 80에서 네트워크 연결을 수신하는지 확인합니다.
netstat –tlpnnetstat 명령어 출력에서 Apache 웹 서버가 포트 80에서 들어오는 네트워크 연결을 수신하고 있음을 확인할 수 있습니다. 동일한 작업을 위해 Debian 9에 기본적으로 자동으로 설치된 ss 명령어를 사용할 수도 있습니다.
ss- tulpn만약 UFW 방화벽 애플리케이션이 Debian 서버에 설치되고 활성화되어 있다면, 아래 명령어를 실행하여 HTTP 트래픽이 방화벽을 통과할 수 있도록 새로운 규칙을 추가해야 합니다.
ufw allow WWW또는
ufw allow 80/tcp만약 iptables 원시 규칙이 시스템 관리자가 Debian 서버에서 방화벽 규칙을 관리하기 위해 사용된다면, 방문자가 온라인 애플리케이션을 탐색할 수 있도록 방화벽에서 포트 80의 수신 트래픽을 허용하는 다음 규칙을 추가합니다.
apt-get install -y iptables-persistentiptables -I INPUT -p tcp --destination-port 80 -j ACCEPTnetfilter-persistent savesystemctl restart netfilter-persistentsystemctl status netfilter-persistentsystemctl enable netfilter-persistent.service원격으로 SSH를 통해 Debian 서버를 관리하는 경우, 아래 규칙을 추가하여 머신에 대한 수신 SSH 연결을 허용해야 합니다.
iptables -I INPUT -p tcp --destination-port 22 -j ACCEPTnetfilter-persistent savesystemctl restart netfilter-persistentMoodle 애플리케이션이 제대로 실행되기 위해 필요한 다음 Apache 모듈을 활성화하고 활성화해야 할 수도 있습니다. 아래 명령어를 실행합니다.
a2enmod rewritesystemctl restart apache2마지막으로, 클라이언트의 브라우저에서 Debian 머신의 IP 주소 또는 도메인 이름 또는 서버 FQDN을 통해 HTTP 프로토콜로 Apache 웹 서버 기본 웹 페이지가 표시되는지 테스트합니다. 아래 이미지와 같이. 머신의 IP 주소를 모르는 경우, ifconfig 또는 ip a 명령어를 실행하여 서버의 IP 주소를 확인합니다.

다음 단계에서는 PHP 기본 구성 파일을 편집하여 다음 PHP 변수가 활성화되고 PHP timezone 설정이 올바르게 구성되어 시스템 지리적 위치와 일치하는지 확인합니다. /etc/php/7.0/apache2/php.ini 파일을 편집하기 위해 열고 다음 줄이 다음과 같이 설정되어 있는지 확인합니다. 또한, 처음에 PHP 구성 파일의 백업을 만듭니다.
cp /etc/php/7.0/apache2/php.ini{,.backup}nano /etc/php/7.0/apache2/php.iniphp.ini 구성 파일에서 다음 변수를 검색, 편집 및 변경합니다:
file_uploads = On
memory_limit = 128M
post_max_size = 80M
upload_max_filesize = 80M
default_charset = UTF-8
date.timezone = Europe/London대용량 파일 첨부를 지원하기 위해 upload_max_file_size 변수를 적절히 증가시키고, PHP 문서에서 제공하는 시간대 목록을 참조하여 귀하의 지리적 시간에 따라 date.timezone 변수를 적절히 교체합니다. http://php.net/manual/en/timezones.php
웹사이트 페이지의 로드 속도를 증가시키기 위해 PHP7에 사용할 수 있는 OPCache 플러그인을 통해 아래와 같이 PHP 인터프리터 구성 파일의 하단에 다음 OPCache 설정을 추가합니다:
nano /etc/php/7.0/apache2/conf.d/10-opcache.ini[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1php.ini 구성 파일을 닫고, 아래 명령어를 실행하여 OPCache 변수가 올바르게 추가되었는지 확인합니다.
grep opcache /etc/php/7.0/apache2/conf.d/10-opcache.ini위의 모든 변경을 완료한 후, 아래 명령어를 실행하여 Apache 데몬을 재시작하여 새로운 변경 사항을 적용합니다.
systemctl restart apache2HTTPS 프로토콜을 통해 Moodle 웹 인터페이스에 접근하기 위해 클라이언트의 트래픽을 보호하기 위해 아래 명령어를 실행하여 Apache 웹 서버 SSL 모듈 및 SSL 사이트 구성 파일을 활성화합니다.
a2enmod ssla2ensite default-ssl.conf다음으로, 텍스트 편집기로 Apache 기본 SSL 사이트 구성 파일을 열고 DocumentRoot 지시문 뒤에 다음 코드 줄을 추가하여 URL 재작성 규칙을 활성화합니다. 아래 샘플과 같이:
nano /etc/apache2/sites-enabled/default-ssl.conf** SSL 사이트 구성 파일 발췌:
Options +FollowSymlinks
AllowOverride All
Require all granted
다음으로, VirtualHost 줄을 아래 발췌와 같이 변경합니다:
SSL Apache 파일을 닫고 /etc/apache2/sites-enabled/000-default.conf 파일을 편집하기 위해 열고 SSL 구성 파일과 동일한 URL 재작성 규칙을 추가합니다. DocumentRoot 문 뒤에 아래 예시와 같이 코드 줄을 삽입합니다.
Options +FollowSymlinks
AllowOverride All
Require all granted
마지막으로, 지금까지 구성된 모든 규칙을 적용하기 위해 Apache 데몬을 재시작하고 HTTP 프로토콜을 통해 도메인에 방문합니다. Apache 설치 시 자동으로 발급된 Self-Signed 인증서 쌍을 사용하고 있기 때문에 인증서는 브라우저에서 신뢰되지 않으며, 오류 경고가 브라우저에 표시되어야 합니다.
systemctl restart apache2신뢰되지 않는 인증서를 수락하고 계속하여 Apache 기본 웹 페이지로 리디렉션되도록 합니다.
만약 UFW 방화벽 애플리케이션이 HTTPS 포트에 대한 수신 네트워크 연결을 차단한다면, 아래 명령어를 실행하여 HTTPS 트래픽이 방화벽을 통과할 수 있도록 새로운 규칙을 추가해야 합니다.
ufw allow ‘WWW Full’또는
ufw allow 443/tcpiptables가 네트워크 수준에서 Debian 시스템을 보호하기 위해 설치된 기본 방화벽 애플리케이션인 경우, 방문자가 귀하의 도메인 이름을 탐색할 수 있도록 방화벽에서 포트 443의 수신 트래픽을 허용하는 다음 규칙을 추가합니다.
iptables -I INPUT -p tcp --destination-port 443 -j ACCEPTnetfilter-persistent savesystemctl restart netfilter-persistentsystemctl status netfilter-persistent마지막으로, 모든 서버 PHP 변수를 표시하기 위해 아래 명령어를 실행하여 PHP 정보 파일을 생성하고, 브라우저에서 다음 URL의 PHP 정보 스크립트 파일을 방문하여 PHP 시간대가 올바르게 구성되었는지 확인합니다. 아래 이미지와 같이 date 설정으로 스크롤하여 PHP 시간대 구성을 확인합니다.
echo ''| tee /var/www/html/info.php다음으로, Moodle이 정보를 저장하는 데 필요한 데이터베이스를 생성하기 전에 MariaDB 서버에 몇 가지 변경을 하고 적절한 문자 집합을 설정해야 합니다. MariaDB 클라이언트 구성 파일을 열고 [client] 지시문 뒤에 다음 줄을 추가합니다. 아래 샘플과 같이:
nano /etc/mysql/mariadb.conf.d/50-client.cnf[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
default-character-set = utf8mb4다음으로, mysql.cnf 파일을 열고 [mysql] 문 뒤에 위와 동일한 줄을 추가합니다:
nano /etc/mysql/conf.d/mysql.cnfmysql.cnf 파일 발췌:
default-character-set = utf8mb4MariaDB 서버 구성 파일을 열고 [mysqld] 문 뒤에 아래 줄을 추가하여 MySQL 엔진 innodb가 Barracuda 파일 형식과 utf8mb4 문자 집합을 사용하도록 합니다.
nano /etc/mysql/mariadb.conf.d/50-server.cnf50-server.cnf 파일 발췌:
[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake지금까지 데이터베이스에 대해 수행한 모든 변경 사항을 적용하기 위해 MySQL 데몬을 재시작하고 아래 명령어를 실행하여 서비스가 실행 중인지 확인합니다.
systemctl restart mysqlsystemctl status mysql마지막으로, MariaDB 데이터베이스 콘솔에 로그인하고 애플리케이션 데이터베이스를 관리하는 데 사용할 사용자 및 비밀번호와 함께 애플리케이션용 데이터베이스를 생성합니다. 아래 명령어를 실행합니다. 데이터베이스 이름, 사용자 및 비밀번호를 적절히 교체해야 합니다.
mysql –u root -pWelcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> CREATE DATABASE moodle_db;Query OK, 1 row affected (0.00 sec)**
MariaDB [(none)]> grant all privileges on moodle_db.* to 'moodle_user'@'localhost' identified by 'password1234';Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> flush privileges;Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> exitByeMoodle 설치
Moodle CMS 애플리케이션을 설치하기 위한 모든 시스템 요구 사항이 충족된 후, https://download.moodle.org/releases/latest/에서 Moodle 공식 다운로드 페이지를 방문하여 최신 zip 압축 아카이브를 시스템에 다운로드합니다. 아래 명령어를 실행합니다.
wget https://download.moodle.org/download.php/direct/stable34/moodle-latest-34.zipzip 아카이브 다운로드가 완료되면 Moodle zip 아카이브 파일을 현재 작업 디렉토리에 추출하고 아래 명령어를 실행하여 추출된 파일을 나열합니다. 또한, Apache 웹 서버가 웹 루트 경로에 설치한 기본 index.html 파일을 제거하고 이전에 생성한 info.php 파일도 삭제합니다.
unzip moodle-latest-34.ziplsrm /var/www/html/index.htmlrm /var/www/html/info.php그런 다음, Moodle 추출 디렉토리의 모든 내용을 웹 서버 문서 루트 경로에 복사하기 위해 아래 명령어를 실행합니다. 또한, 다음 숨겨진 점 파일을 웹 루트 경로에 복사해야 합니다.
cp -rf moodle/* /var/www/html/cp -rf moodle/.eslint* /var/www/html/cp -rf moodle/.gherkin-lintrc /var/www/html/cp -rf moodle/.jshintrc /var/www/html/cp -rf moodle/.s* /var/www/html/cp -rf moodle/.travis.yml /var/www/html/다음으로, Moodle 데이터 디렉토리를 서버 문서 루트 위에 하나의 레벨로 생성하고 아래 명령어를 실행하여 Apache 런타임 사용자에게 웹 루트 경로와 Moodle 데이터 디렉토리에 대한 전체 쓰기 권한을 부여합니다. ls 명령어를 사용하여 /var/www/html/ 디렉토리에 설치된 파일의 권한을 나열합니다.
mkdir /var/www/moodledatachown -R www-data:www-data /var/www/moodledata/chown -R www-data:www-data /var/www/html/ls -al /var/www/html/이제 웹 인터페이스 설치 프로그램을 통해 Moodle CMS 설치를 시작합니다. 브라우저를 열고 HTTPS 프로토콜을 통해 서버 IP 주소 또는 도메인 이름으로 이동합니다. 첫 번째 설치 화면에서 설치 언어를 선택하고 다음 버튼을 눌러 계속 진행합니다.

다음 화면에서 설치 프로그램은 웹 서버 주소, Moodle 디렉토리 경로 및 Moodle 데이터 디렉토리 경로를 확인하라는 메시지를 표시합니다. 첫 번째 두 경로 변수를 기본값으로 두고 Moodle 데이터 디렉토리 경로에 /var/www/moodledata를 추가합니다. 아래 이미지와 같이. 다음 버튼을 눌러 계속 진행합니다.

다음 화면에서 데이터베이스 드라이버로 MariaDB (native/mariadb)를 선택하고 다음 버튼을 눌러 설치 프로세스를 계속 진행합니다.

다음으로, 데이터베이스 설정을 추가합니다. 데이터베이스 호스트, 이름, 사용자 및 비밀번호와 같은 정보를 입력합니다. Moodle 데이터베이스에 대해 이전에 구성한 데이터베이스 이름 및 자격 증명을 사용합니다.
데이터베이스 호스트는 localhost로 설정해야 합니다. 자신의 데이터베이스 테이블 접두사를 추가하고 데이터베이스 포트로 3306을 사용한 후 다음 버튼을 눌러 이 단계를 완료하고 설치 프로세스를 계속 진행합니다.

다음 화면에서 Moodle 라이센스 약관을 읽고 계속 버튼을 눌러 라이센스 약관을 확인합니다.

다음으로, Moodle 설치 스크립트는 설치 프로세스를 계속하기 위해 모든 요구 사항이 충족되었는지 확인하기 위해 일련의 서버 검사를 수행합니다. 모든 데이터베이스 및 PHP 확장이 OK로 설정되어 있는지 확인하고 페이지 하단으로 스크롤하여 계속 버튼을 눌러 설치 프로세스를 진행합니다.

다음으로, 설치 프로그램이 일련의 모듈을 설치하는 동안 기다리고 계속 버튼을 다시 눌러 다음 단계로 이동합니다.

다음 단계에서 Moodle 관리자 계정을 추가하고 이 계정에 대한 강력한 비밀번호를 선택하고 이름, 성, 이메일, 도시, 국가, 시간대 및 설명과 같은 모든 계정 정보를 입력합니다. 완료되면 프로필 업데이트 버튼을 눌러 관리자 계정 정보를 저장합니다.

다음으로, 전체 사이트 이름을 설정하고 짧은 사이트 이름과 프런트 페이지 요약을 추가한 후 아래로 스크롤하여 변경 사항 저장 버튼을 눌러 설치 프로세스를 완료합니다.

설치 프로세스를 완료하면 Moodle 관리 대시보드로 리디렉션됩니다. 여기에서 등록 양식을 사용하여 Moodle.net 포털에 애플리케이션을 등록할 수 있습니다.

Moodle 프론트엔드 페이지에 접근하기 위해 브라우저를 열고 HTTPS 프로토콜을 통해 서버 IP 주소 또는 도메인 이름으로 이동합니다.

마지막으로, Debian 서버 콘솔로 돌아가서 웹사이트 문서 루트 경로에 위치할 .htaccess 파일을 생성하기 위해 아래 명령어를 실행합니다.
nano /var/www/html/.htaccess.htaccess 파일에 아래 줄을 추가하여 기본 PHP 서버 설정을 조작하여 자신의 서버 리소스 및 구성에 맞게 조정할 수 있습니다.
.htaccess 파일 발췌:
# PHP 설정 수정
php_value register_globals 1
php_value upload_max_filesize 100M
php_value post_max_size 100M
Options -Indexes크론 설치
정기적으로 Moodle 유지 관리 스크립트를 실행하여 이메일을 전송하고, 데이터베이스를 정리하고, 피드를 업데이트하거나 기타 작업을 수행하기 위해 아래 크론 작업을 10분마다 실행하도록 추가합니다. 아래 명령어를 실행합니다.
crontab -u www-data -e다음 줄을 추가하고 크론 작업을 저장합니다.
*/10 * * * * /usr/bin/php7.0 /var/www/html/admin/cli/cron.php >/dev/null축하합니다! Debian 9 서버에 Moodle CMS를 성공적으로 설치하고 구성했습니다. Moodle 문서 페이지는 다음 주소에서 찾을 수 있습니다: https://docs.moodle.org/23/en/Main_page
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.