오픈소스 LMS (Moodle)설치(MS Azure)

Posted 2022. 1. 10. 16:43

moodle이라는 오픈소스 LMS를 MS Azure Cloud에 설치합니다.

docker-compose를 통해서 간단히 설치하는 방법도 있었지만 직접 APM형태로 설치&세팅하였습니다.

참고 설치 매뉴얼(한글)
https://techexpert.tips/ko/moodle-ko/%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%A6%AC%EB%88%85%EC%8A%A4%EC%97%90-%EB%AC%B4%EB%93%A4-%EC%84%A4%EC%B9%98/

 

I. MS Azure 인프라 설치

 

1. Azure 리소스그룹 생성
 > 그룹명 : lms-vnet-rg
 > : 10.2.0.0/22

2. 가상네트워크(lms-vnet), subnet (subnet1, subnet2) 생성( DB, Web분리예정)
 > lms-vnet : 10.2.0.0/22
 > subnet1 : 10.2.1.0/24 (Web Server)
 > subnet2 : 10.2.2.0/24 (DB 영역)

3. 가상머신 생성
 > OS : CentOS7.8-free
 > WEB : 2vcpu, 4GiB 메모리 / DB : 4vcpu, 16GiB 메모리
 > 위치 : 한국 중부

II. moodle 소스 설치를 위한 APM 설치

 

1. Database 설치(MariaDB)

//MariaDB용 yum repository를 업데이트한다.
sudo vi /etc/yum.repos.d/MariaDB.repo

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64/
gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1

//mariadb, mariadb-server를 설치
sudo yum install mariadb mariadb-server -y 

//설치된 mariadb를 실행
sudo systemctl start mariadb

//Character-set 설정 (MariaDB 10.3기준)
sudo vi /etc/my.cnf.d/mysql-clients.cnf 

[mysql]
default-character-set=utf8mb4
..
[mysqldump]
default-character-set=utf8mb4
..


sudo vi /etc/my.cnf.d/server.cnf

[server]
init-connect='SET NAMES utf8mb4'
lower_case_table_name=1
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# this is only for the mysqld standalone daemon
[mysqld]
default_storage_engine=innodb

//moodle용 Database와 사용자를 추가한다.(권한포함)
CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

//Create a user/password combination with appropriate permissions for the database. For example (MySQL again):
MariaDB [(none)]> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO 'moodleuser'@'localhost' IDENTIFIED BY 'moodleuser123!';
Query OK, 0 rows affected (0.003 sec)

//web-server접속용 권한
MariaDB [(none)]> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO 'moodleuser'@'10.2.1.0/255.255.255.0' IDENTIFIED BY 'moodleuser123!';
Query OK, 0 rows affected (0.005 sec)

 

2. ==== LMS Moodle 설치를 위한 Apache, PHP설치 ====

1). yum update ( 옵션 ) 
  sudo yum update -y

2). Apache 설치 

 sudo yum install httpd -y

 2.1) openssl, mod_ssl 설치 ( rpm -qa|grep OOO 으로 확인해서 설치되었다면 pass )

 sudo yum install mod_ssl -y 

 /etc/httpd/modules 아래에 mod_ssl.so 생성확인 

 2.2) ssl.conf 수정 및 인증서 복사 
  2.2.1 인증서 파일 복사하여 위치시킴.
  2.2.2 httpd.conf 를 수정하여 Rewrite 설정 (http -> https ) 

3). SELinux 해제 
    \> sudo vi /etc/selinux/config

    SELINUX=disabled 로 변경후 재부팅 
    임시로 적용 : sudo setenforce 0 

4). php 모듈 설치 

sudo yum install epel-release yum-utils
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm 

sudo yum-config-manager --enable remi-php73
sudo yum install php php-common php-opcache php-mcrypt php-cli php-gd php-curl php-mysqlnd php-xml php-pear php-pdo libapache2-mod-php php-mbstring php-xmlrpc php-zip php-bcmath php-ldap php-pspell php-curl php-intl php-soap -y 

5). 아파치 재시작 및 php 적용사항 확인 
  sudo systemctl restart httpd

  sudo vi /var/www/html/phpinfo.php

<?php
phpinfo()
?>

 

2. 소스 다운로드 및 설치 진행

최신버전 : https://download.moodle.org/releases/latest/

1). 소스 다운로드(최신버전은 별도 확인)
version3.8
 wget https://download.moodle.org/stable38/moodle-latest-38.tgz

version3.11
 wget https://download.moodle.org/download.php/stable311/moodle-3.11.4.tgz

2). 압축을 해제 
sudo tar -zxvf moodle-latest-38.tgz

해제된 소스를 Apache Document Root로 이동한다. 
cp /downloads/moodle /var/www/html/ -R

3. 접근권한 및 설정 변경

3). 웹서버에게 moodle 디렉토리 소유권을 부여하고 접근권한을 변경한다.

 sudo chown apache.apache /var/www/html/moodle -R
 sudo chmod 0755 /var/www/html/moodle -R

4). Moodle 데이터 업로드 디렉토리를 생성 후 접근권한을 변경한다. 
  (SELinux가 해제되어 있지 않으면 설치시 오류가 발생한다.)

 sudo mkdir /var/www/moodledata
 sudo chown apache /var/www/moodledata -R

 sudo chmod 0777 /var/www/moodledata -R

5). http://domain.com/moodle/ 로 접속하면 설치가 진행된다.
   앞서 설치된 DB 접속정보를 입력하여 설치를 마무리 한다.
   설치후 변경은 config.php정보를 수정한다.

 

4. Google smtp 연동사용

회원가입, 수강신청등의 이유로 메일연동이 필요하다. smtp를 구글메일로 사용하기 위한 일반적인 설정.

설정시 AWS에 설치된 타시스템에서는 정상적으로 작동했는데, MS Azure에서는 미작동한다. 이유가?
PHP Mail 테스트로도 발송이 안되고 아래와 같이 오류가 발생함.
아래 오류를 획득하기 위해서 /etc/php.ini에서 error log 출력을 위한 설정을 변경해야한다. (별도구글링 )

오류
2021-11-23 11:06:40     SERVER -> CLIENT: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbv
                                          534-5.7.14 5flh2VmuG9Rpp1NcnLIkbChbKw0FMwuzjkRkz76Ka-FP7xOgVcUXwDM6sJkX2MWXNeLeI
                                          534-5.7.14 i0CgTViB6ZJK5jAW0tSA1NpT5CZNSXumtvLT_qzu2YMrun2Cacr1yNcLDOQHImm7>
                                          534-5.7.14 Please log in via your web browser and then try again.
                                          534-5.7.14  Learn more at
                                          534 5.7.14  https://support.google.com/mail/answer/78754 t66sm11915990pfd.150 - gsmtp
2021-11-23 11:06:40     SMTP ERROR: Password command failed: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbv
                                          534-5.7.14 5flh2VmuG9Rpp1NcnLIkbChbKw0FMwuzjkRkz76Ka-FP7xOgVcUXwDM6sJkX2MWXNeLeI
                                          534-5.7.14 i0CgTViB6ZJK5jAW0tSA1NpT5CZNSXumtvLT_qzu2YMrun2Cacr1yNcLDOQHImm7>
                                          534-5.7.14 Please log in via your web browser and then try again.
                                          534-5.7.14  Learn more at
                                          534 5.7.14  https://support.google.com/mail/answer/78754 t66sm11915990pfd.150 - gsmtp
2021-11-23 11:06:40     SMTP Error: Could not authenticate.
2021-11-23 11:06:40     CLIENT -> SERVER: QUIT
2021-11-23 11:06:40     SERVER -> CLIENT: 221 2.0.0 closing connection t66sm11915990pfd.150 - gsmtp
2021-11-23 11:06:40     SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

 

해결방법은 아래와 같다.

 

사용하려고 하는 gmail계정의 보안/인증에서 2단계인증 후 앱 비밀번호 생성해서 해당정보를 설정해줘야한다.

요약

1. 앱 비밀번호 생성시 앱을 선택하고자 할때 기타(맞춤이름)를 선택한다.
2. Smtp Client 로 명시하고 생성을 클릭
3. 생성된 비밀번호를 복사하여 사용자 Password 에 넣는다.
   계정정보는 기존정보를 그대로 넣거나 넣지않아도 정상 작동된다.



하나의 회의공간을 서로다른 회사가 사용하는데, 예약시스템으로 관리할 필요가 생겼다. 

예약시스템 관리하는 오픈소스를 찾아보았다.

회의내용등이 외부로 공개되는것을 원치 않아 내부에서만 사용하는 설치형태 기준으로 찾아보기로 했다.

(구글캘린더 응용등은 배제)

1. Coworkers - 친숙한 java 기반의 회의실(자원) 예약시스템, 설치를 해봤으나 기능이 좀 미비하고, 중간에 오류가 발생함(아마도 설정이나 소스를 제대로 확인하지 못해서 발생한게 아닌가 싶다.)

2. Booked - PHP로 개발된 예약시스템. 문서화 및 설치가이드가 잘되어 있는듯하여 이 제품으로 선택

 - 공식사이트 - https://www.bookedscheduler.com/

   ( 초기에는 사이트에서 다운로드를 지원했으나 3.0버전업 이후에 지원하지 않음. )

 - github에서 구버전(2.8.5) 다운로드 진행 : https://github.com/effgarces/BookedScheduler

 - 공식포럼 : https://forums.bookedscheduler.com/ 

 - 설치가이드 : 소스를 다운받으면 installation.md5에 영문으로 친절하게 가이드되어 있음

 

이후 어느순간 유료화 정책으로 변경되면서 소스다운로드가 사라졌다. 완전히 사라진건 아니고 숨겨졌다.

아래 github를 통해서 다운로드 해야한다. (22.05.01 updated)

https://github.com/effgarces/BookedScheduler

 

설치유형 : AWS EC2 개설해서 DB(MariaDB), Apache2.x로 직접 설치

설치순서 : 일반적인 APM설치의 과정을 거친다. 

 

1. MySQL(MariaDB)설치

2. Apache 설치

3. PHP설치

4. 방화벽 오픈

 

1. DB설치

CREATE DATABASE `booked`;
CREATE USER 'booked_user'@'localhost' identified by 'PASSWORD';
CREATE USER 'booked_user'@'127.0.0.1' identified by 'PASSWORD';

GRANT ALL on booked.* to 'booked_user'@'localhost';
GRANT ALL on booked.* to 'booked_user'@'127.0.0.1';

SET foreign_key_checks = 0;

 

2. Apache 설치

 //apache 설치
 \> sudo yum install -y httpd
...
 //apache 시작
 \> sudo systemctl start httpd

 //리부팅시 자동실행
 \> sudo systemctl enable httpd

 

3. PHP 및 모듈 설치

///////////// PHP7 설치 /////////////
sudo yum install epel-release yum-utils
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm 

sudo yum-config-manager --enable remi-php73
sudo yum install php php-common php-opcache php-mcrypt php-cli php-gd php-curl php-mysqlnd php-xml php-pear php-pdo

sudo systemctl restart httpd

sudo vi /var/www/html/phpinfo.php

<?php
phpinfo()
?>

브라우져에서 http://SERVER-ADDRESS/phpinfo.php로 확인

 

4. 방화벽 해제

\> sudo vi /etc/selinux/config

SELINUX=disabled 로 변경.

 

5. 소스 배포 및 권한변경

특별한 이유가 없다면 /var/www/html에 배포한다.

sudo chown -R apache:apache /var/www/html

//tpl, tpl_c는 아래와 같이 권한을 변경
//설치과정에서 권한오류가 발생한다면 777변경 후 설치완료 후 755로 변경한다.
sudo chmod 755 tpl
sudo chmod 755 tpl_c

 

6. 설치스크립트 진행

http://SERVER-ADDRESS/Web/install/ 페이지에서 설치 진행

 

 

 

 

 



사용하던 갤럭시 이온 노트북(NT950XCJ)의 기존 512GB SSD 용량이 부족해서 SSD를 추가하게 되었다.

어떤 모델로 구매할까 생각하다 얼마전 우연히 기사를 통해 알게된 SK Hynix SSD Gold P31 nvme 로 결정.

아무망설임 없이 최저가 구매 결제 완료.

그런데 가격비교사이트에서 SSD M.2 nvme의 를 찾아보다가 nvme가 여러개의 모델, 정확하게는 폼팩터가 존재한다느 사실을 알고나서 급 고민. 

M.2(2260), M.2(2280), M.2(22110)  뭔 차이일까?

당연히 일단 M.2 nvme는 노트북에서 당연히 호환히 될꺼라고 생각하고 고민 1도 없이 결제한것이다.

SK hynix Gold P31 NVMe M.2(2280)

결론은 M.2(2280)이 가장 일반적인 모델이라는것. 2280에서 앞의 22는 ssd 폭이 22mm라는거고 80은 길이가 80mm라는 거란다. 

왠만한 노트북은 대부분 M.2(2280)이면 사이즈 문제는 없단다.

일단 안심하고 혹시 초기모델에 대한 호환성여부와 관련 기사를 검색.

LG그램에서 일부 문제가 있었다는 기사가 검색됨. 21년 3월.

 

삼성노트북인데, 괜히 SK hynix꺼 샀나하는 생각도 들어서 구매업체 Q&A에 확인문의.

돌아온 답은 (예상했던대로) "노트북제조사 삼성이나 SSD 제조사(SK hynix)에 문의해보라" 는 별 도움안되는 내용의 답변만 받았다. 

 

다음날 물건 받고 바로 설치해보니 아무문제 없이 설치 끝.

 

SK hynix SSD도 이제 호환성문제는 대부분 해결된게 아닌가 하는 생각과 함께 결론은 삼성 갤럭시 이온1과 호환성 전혀 문제 없는것으로 결론.

 



« PREV : 1 : 2 : 3 : 4 : ··· : 15 : NEXT »