Moodle環境構築 その2

Pocket

Moodleの環境構築、その1に引き続き後半戦になります。

残りの作業は以下。
⑦ファイルのパーミッション変更
⑧データ用のディレクトリ作成
⑨.htaccessによるアクセス制限
⑩Moodleインストール
⑪Moodle設定
⑫その他の設定

まずは作業を行う準備として、①でダウンロードしてきた「moodle-latest-29.tgz」をサーバーにファイル転送します。
私はWinSCPというツールを使っているのですが、残念ながらssh-keygenで生成した鍵はPuTTY形式ではないので使えないらしい。。。

というわけでPuTTYgenというツールを使って鍵をコンバートします。
参考にした記事:PuTTY を使用した Windows から Linux インスタンスへの接続

サイトからPuttygenをダウンロードします。手順は以下。
・サイトのDownloadリンクを選択
e_01_install_3

・BinariesのPuTTYgenの部分にあるputtyege.exeリンクを選択
e_01_install_4

・ダウンロードしたputtygen.exeを実行し、Loadボタン押下
e_01_install_5

・ファイルエクスプローラが表示されるので、ssh-keygenで生成した秘密鍵を選択

・パスフレーズが要求されるので、(設定していれば)入力。
※鍵生成時にパスフレーズを設定していない場合は未入力
e_01_install_6

・画面のSave private keyボタンを押下し、適当な場所にPuTTY形式の秘密鍵を保存
e_01_install_7

上記で生成したPuTTY形式(拡張子.ppk)の秘密鍵を使えば、WinSCPを使ったファイル転送が可能になります。

というわけで、①でダウンロードしてきた「moodle-latest-29.tgz」をサーバーにファイル転送。とりあえずホームディレクトリに配置した後、SSHで以下コマンドを実行してファイルを移動。

sudo mv ~/moodle-latest-29.tar.gz /var/www/html/

※圧縮ファイルは解凍せずにそのまま転送(解凍したものを転送するとファイル数が多いので、一部失敗した時に確認が面倒だからだと思います)

以下のコマンドで展開。

cd /var/www/html
sudo tar xvzf moodle-latest-29.tar.gz

一応色々設定終わるまでApache止めておきます(動かしたままでもいいですが、今回ApacheはMoodle専用なので)。

sudo systemctl stop httpd.service

⑦ファイルのパーミッション変更

以下のコマンドで、展開したmoodleフォルダ配下のパーミッションを変更します。

sudo chown -R root /var/www/html/moodle
sudo chmod -R 0755 /var/www/html/moodle

⑧データ用のディレクトリ作成

インストール手順を見るとデータディレクトリについて、以下の注意点が記述されています。
(1)Apache等のWEBサーバーで公開するディレクトリを使うとセキュリティホールになる
(2)想定される使用量に応じて適切なフリースペース割り当てが必要

まず(1)は公開ディレクトリを「/var/www/html」にしているので、今回データ用のディレクトリを「/var/www/moodledata」とします。

次に(2)は以下コマンドで「/var/www」配下のフリースペースをチェック。

df /var/www

実行結果は以下のようになりました。「/」配下(ルート下)の使用率が表示されています。

Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/simfs     104857600 1383884 103473716   2% / 

とりあえずAvailableが使用可能なフリースペース(Kバイト単位)なので、
103473716KB≒100GB程度の空きがあるようです。

ディレクトリ作成とパーミッションの変更(WEBサーバーからの読み書きを許可)。

sudo mkdir /var/www/moodledata
sudo chmod 0777 /var/www/moodledata

更にACL(アクセス制御リスト)も設定しておきましょうと書かれています。必須ではないようですが、折角なのでやってみます。
ちなみに手順を見ると「chmod -R +a」というコマンドを使用してACLを設定していますが、CentOSでこのコマンドを実行すると+aは無効なモードと怒られます。ちょっと検索してみた感じだとMacとかならできるみたい?
CentOSではACLをパッケージインストールし、setfaclコマンドを使ってACLを設定するようです。

まずはパッケージaclがインストール済みかチェック。

yum list installed | grep acl

acl.x86_64とlibacl.x86_64が表示されたのでインストール済みのようです。
(未インストールの場合は「yum install acl」でインストール)

以下のコマンドでApacheのユーザーにのみrwx(読み込み/書込み/実行)の権限を与えます。

setfacl -m u:Apacheユーザー:rwx /var/www/moodledata

※ApacheユーザーはApacheを実行するユーザー
(とりあえず/etc/httpd/conf/httpd.confファイルを見て、Userに誰が指定されているかを確認すると良いと思います)

もしPHPをコマンドラインから実行する場合は、あらかじめ上記と同様にPHPを実行する予定のあるユーザーに権限を与えるようです。(今回は予定がないので省略)

パーミッションを確認。

ls -al /var/www

実行結果。

drwxrwxrwx+  2 root root 4096 Nov  7 01:46 moodledata

※左端のdrw…の最後に+が設定されていれば、ACLが設定されているという意味

⑨.htaccessによるアクセス制限

ホスティングサービス等を利用している場合はアクセス制限が難しいので、.htaccessを使いましょうと指示されています。.htaccessはhttpd.confを直接操作せず、ディレクトリ単位でApacheの設定を記述できる設定ファイルです。配置ディレクトリ配下にのみ設定が反映されます。

とりあえずこれもやっておきます。まずはhttpd.confを確認し、.htaccessが有効な設定になっているか確認します。

sudo vi /etc/httpd/conf/httpd.conf

とりあえず今回は/var/www/moodledataにだけ設定すればよいので、ファイル内に以下を記述して保存します。

<Directory "/var/www/moodledata">
    AllowOverride Limit
</Directory>

※ディレクトリ/var/www/moodledata内で.htaccessを有効にする設定(AllowOverrideディレクティブ)
※Limitはアクセス制御のみ設定を許可

.htaccessファイルを作成。

vi /var/www/moodledata/.htaccess

以下を記述してファイルを保存。

order deny,allow
deny from all

※このディレクトリ対するWEBアクセスを拒否する(許可設定がないので、WEBアクセス不可能になる)

⑩Moodleインストール

いよいよMoodleのインストールです。

moodleディレクトリの所有ユーザーをApacheユーザーに変更。

chown Apacheユーザー /var/www/html/moodle

ディレクトリを移動し、Apacheユーザー権限でphpコマンドを使い、install.phpを実行

cd /var/www/moodle/admin/cli
sudo -u Apacheユーザー /usr/bin/php install.php

対話式で入力が要請されるので、都度対応します。
言語設定のようなので、日本語の「ja」と入力。

type value, press Enter to use default value (en)
:ja

moodleディレクトリの所有ユーザーをrootに変更

chown -R root /path/to/moodle

ここのパーミッションは良くわかりません。手順では設定が分からなければデフォルトのままにして下さいとあるので、何も入力せずにEnter。

== データディレクトリパーミッション ==
値を入力してください。デフォルト値 (2777) を使用するにはEnterキーを押してくださ い。
:

最初にmoodleディレクトリの所有ユーザーをApacheユーザーに変更したのは、途中で実行したinstall.phpで生成されるファイルの所有ユーザーをApacheユーザーにしたいためのようです。一時的な対応なので、最後に所有ユーザーをrootに戻しています。

ここも良くわからないので何も入力せずにEnterと思ったら、「値が正しくありません、再度入力して下さい。」と怒られました。とりあえず「http://サーバーIPアドレス/moodle」としておきます。
※ドメイン取得済みであれば、上記のサーバーIPアドレスはサーバーのFQDN(ドメイン名)にしましょう。

== ウェブアドレス ==
値を入力してください。
:http://サーバーIPアドレス/moodle

データディレクトリは「/var/www/moodledata」入力。

== データディレクトリ ==
値を入力してください。デフォルト値 (/var/www/html/moodledata) を使用するにはEnterキーを押してください。
:/var/www/moodledata

データベースドライバはmariadbなので、「mariadb」と入力。

== データベースドライバを選択する ==
 mysqli
 mariadb
値を入力してください。デフォルト値 (mysqli) を使用するにはEnterキーを押してくだ さい。
:mariadb

データベースホストは同一マシン内のデータベースを使うのでlocalhost(デフォルト値)。何も入力せずにEnter。

== データベースホスト : ==
値を入力してください。デフォルト値 (localhost) を使用するにはEnterキーを押してください。
:

データベース名は⑥Moodle用データベース/ユーザー作成で作成したMoodle用データベースの名称を設定します。(もしmoodleという名前にしているのであれば入力不要)

== データベース名 : ==
値を入力してください。デフォルト値 (moodle) を使用するにはEnterキーを押してくだ さい。
:Moodle用データベース名

多分、Moodleから生成されるテーブル名の接頭辞の設定だと思います。おまかせで問題ないので何も入力せずにEnter。

== テーブル接頭辞 ==
値を入力してください。デフォルト値 (mdl_) を使用するにはEnterキーを押してくださ い。
:

データベースの接続ポートも特に変更していないのであれば、何も入力せずにEnter。

== データベースポート ==
値を入力してください。デフォルト値 () を使用するにはEnterキーを押してください。
:

ソケットもデフォルトにするので、何も入力せずにEnter。

== Unixソケット ==
値を入力してください。デフォルト値 () を使用するにはEnterキーを押してください。
:

データベースユーザは⑥Moodle用データベース/ユーザー作成で作成したMoodle用のデータベースユーザーを設定します。

== データベースユーザ : ==
値を入力してください。デフォルト値 (root) を使用するにはEnterキーを押してくださ い。
:Moodle用のデータベースユーザー名

データベースパスワードは⑥Moodle用データベース/ユーザー作成で作成したMoodle用のデータベースユーザーのパスワードを設定します。

== データベースパスワード : ==
値を入力してください。
:Moodle用のデータベースユーザーのパスワード

長いサイト名はMoodleのサイトに付ける名前(例えば○○大学△△学部教育サイト等)を入力するようです。後で設定できるでしょ、きっと・・・と思いつつ、とりあえず適当な名前を入力しました。

== 長いサイト名 ==
値を入力してください。
:サイト名称

サイトを単語として省略した名称を設定するようです。適当な名前を入力しました。

== サイト省略名 (例 単語) ==
値を入力してください。
:サイト省略名

Moodleにログインする際に使う管理者IDです。デフォルトのままは良くないかなと思ったので、適当なIDを決めて入力しました。(デフォルト(admin)でも動作します)

== 管理者アカウントユーザ名 ==
値を入力してください。デフォルト値 (admin) を使用するにはEnterキーを押してください。
:Moodleの管理者ID

Moodleにログインする際に使う管理者アカウントのパスワード。適当なパスワードを決めて入力。

== 新しい管理者パスワード ==
値を入力してください。
:Mooldeの管理者アカウントのパスワード

Moodleにログインする際に使う管理者アカウントのメールアドレス。後でも設定できると思うので、とりあえず何も入力せずにEnter。

== 新しい管理ユーザメールアドレス ==
値を入力してください。デフォルト値 () を使用するにはEnterキーを押してください。
:

以下、ライセンス等表示されるので、理解できたらy入力。

== 著作権表示 ==
Moodle  - Modular Object-Oriented Dynamic Learning Environment
Copyright (C) 1999 onwards Martin Dougiamas (http://moodle.com)

このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行された GNU 一般公衆利用許諾契約書 (バージョン2か、希望によってはそれ以降のバージョンのうちどれか) の定める条件の下で再頒布または改変することができます。

このプログラムは有用であることを願って頒布されますが、*全くの無保証*です。商業可能性の保証や特定の目的への適合性は、言外に示されたものも含め全く存在しません。

詳しくはMoodleライセンス情報をご覧ください:
http://docs.moodle.org/ja/%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9

これらの要件を読んで理解できましたか?
y (yes) または n (no) を入力してください。
:y

以下のような表示がなされました。どうやらphpモジュールが不足しているようです。

== 動作環境 ==
!! php_extension gd !!
必ずインストールおよび有効化してください。画像変換のため、MoodleではGD拡張モジュールが必要です。

!! php_extension dom !!
必ずインストールおよび有効化してください。

以下コマンドでgdとdom(xml)をインストール。

sudo yum install php-gd php-xml

Apache起動。

sudo systemctl start httpd.service

※Apacheを停止してなかった場合も設定ファイルを変更しているので、再起動が必要

万が一設定をミスってしまった場合、Moodleディレクトリ直下に「config.php」というファイルがあります。(/var/www/moodle/config.php)この中身を編集すれば、先ほど対話式で設定した内容を変更できます。

ブラウザから、以下のURLにアクセス。画面が表示されたら、Continueボタンを押下。
URL:http://サーバーのIPアドレス/moodle
e_01_install_8

私の環境では以下のようなServer checks画面が表示されました。StatusがCheckになっている4項目(PHP拡張のxmlrpc/soap/intl、PHP設定のopcache enable)に問題があるようです。それぞれ対応していきます。
e_01_install_9

とりあえずインストールできるパッケージを確認。

yum list | grep php

表示されたパッケージの中で、必要なものは以下。
・php-xmlrpc
・php-soap
・phpintl

インストール。

sudo yum install php-xmlrpc php-soap php-intl

OPcacheはPHPのバージョンによってインストール手順が異なるようです。
具体的にはPHP5.2/5.3/5.4の場合と、PHP5.5.0以降で2パターンあるらしい。
参考サイト

今回、PHPのバージョンは5.4.16(CentOS7で2015/11時点でのyum最新)を使用しているため、バージョン5.4の手順に従います。
どうやらOPcacheというPECL(PHP拡張モジュール)はPHPにバンドルされていないらしいので、手動でインストールする必要があるとのこと。
手順に従ってインストール作業を進めます。

peclコマンドを使うため、必要なパッケージをインストールします。

sudo yum install php-devel php-pear

コマンドがインストールされたか確認。

which pecl

「/usr/bin/pecl」等、peclコマンドのパスが表示されればインストール完了。

次はzendopcacheのインストール。

sudo pecl install zendopcache

以下のようなメッセージが表示され、インストールに失敗しました。

checking for cc... no
checking for gcc... no
configure: error: in `/var/tmp/pear-build-rootDKzT6Q/zendopcache-7.0.5':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
ERROR: `/var/tmp/zendopcache/configure' failed

gccがないと言われてます。とりあえずコンパイル等行うのであればmakeも必要になるだろうと推測し、両方をインストール。

sudo yum install gcc make

改めてzendopcacheのインストール。

sudo pecl install zendopcache

以下のようなメッセージが表示され、インストールに成功します。

Build process completed successfully
Installing '/usr/lib64/php/modules/opcache.so'
install ok: channel://pecl.php.net/zendopcache-7.0.5
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=opcache.so" to php.ini

どうやら設定ファイル(php.ini)を編集し、「zend_extension=opcache.so」の記述(モジュールの有効化)を追加すべきと言われています。

とりあえずopcache.soの場所を探しておきます。

find / -iname opcache.so

私の環境では「/usr/lib64/php/modules/opcache.so」でした。

設定ファイル編集。

sudo vi /etc/php.ini

とりあえずコメントでDynamic Extensionsと書かれた場所付近に以下を追記。

zend_extension=/usr/lib64/php/modules/opcache.so

ちなみにMoodle画面でopcacheによる設定エラーからリンクで設定例に飛べます。php.iniに設定すべき内容が記述されているので、これも記述します。
知識不足で良く分からないのですが、恐らく[○○]といった書き方は設定を区切っていると思われるので、[PHP]の終わり(次の[CLI Server]の直前)に追記しています。とりあえずModule Settingsというコメントの直後辺りに記述すれば良いと思います。

[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0

PHP設定を変更したので、Apache再起動。

sudo systemctl restart httpd.service

Moodleのページを開くと、以下のように全てステータスがOKになっています。スッキリ!!画面下部の「Continue」ボタンを押下するとブラウザからのインストールに進みます。

e_01_install_14

次の画面でインストールが全部成功(Success)していたら、同じく画面下部の「Continue」ボタンを押下。

e_01_install_15

さて、最後に来てまた設定項目が多い画面が・・・以下の必要事項を記入して「Update profile」ボタンを押下。

【設定内容】
・Username(必須):ユーザー名:任意のユーザーIDを入力
・Choose an authentication method:メソッドの認証?:変更不可でした
・New password(必須):パスワード:任意のパスワードを入力(※大小文字混在必須)
・First name(必須):苗字:任意の苗字を入力
・Surname(必須):名前:任意の名前を入力
・Email address(必須):メールアドレス:自分のメールアドレスを記入
・Email display:メールアドレス公開:Allow only other cource menbers to see my email address(コースのメンバーだけに公開)
・City/town:国/都市:未記入
・Select a country:国の選択:Japanを選択
・Timezone:タイムゾーン:Asia/Tokyoを選択
・Description:説明:未記入
※Generalの項目のみ入力し、Additional namesとOptionalは今回全く入力しませんでした

e_01_install_16

(※中略)

e_01_install_17

次の画面ではフロントページの設定等を行います。必要事項を記入して「Save changes」ボタンを押下。
【設定内容】
・Full site name:サイトのフルネーム:任意の名前を入力
・Short name for site(eg single word):サイトの短縮名(英単語1文字):任意の名前を入力
・Front page sammary:フロントページの概要:必要なら入力
・Default timezon:タイムゾーン:Asia/Tokyoを選択
・Self registration:自己認証:自己認証の意味がイマイチ分からないですが、セキュリティ的に無効にするかメールドメインで制限すべきとあるのでDisable(無効)を選択

e_01_install_18

e_01_install_19

 

とりあえずここまでくればMoodle画面が見れるようになるはずです。

それでは引き続き、最後の仕上げです。

⑪Moodle設定

Moodleの画面から幾つか設定を行います。手順で示されているのは以下4つですが、私の環境ではひとまずEメールは使わず、プロキシも利用していないので省略します。
・Eメール設定(必要なら)
・プロキシ設定(必要なら)
・システムパス設定
・タイムゾーン設定

・システムパス設定
du/aspell/dotの3つのコマンド(バイナリ)のパスを設定します。
バイナリの場所を調べるには以下コマンドを実行。

which コマンド名

私の環境ではduのみインストールされており、aspellとdotはインストールされていませんでした。
まずaspellコマンドをインストール。

sudo yum install aspell

dotコマンドはGraphvizに含まれているようなので、Graphvizをインストール。

sudo yum install graphviz

※関連パッケージが大量にインストールされる

Moodleに管理者でログインした状態で、管理->サイト管理->サーバ->システムパスを選択し、それぞれのコマンドのパスを記述して変更を保存します。

※画面が日本語表示になっていない場合、画面上部から「日本語(ja)」を選択

e_01_install_20

・タイムゾーン設定
Moodleに管理者でログインした状態で、管理->サイト管理->ロケーション->ロケーション設定を選択し、以下の項目を設定します。設定後、「変更を保存する」ボタン押下。
【設定項目】
・タイムゾーンを強制する:アジア/東京(必要なければ設定しなくても構いません)
・デフォルトの国:日本

e_01_install_21

※デフォルトタイムゾーンはインストール時の設定から「アジア/東京」になっているはず

⑫その他の設定

手順によると、以下を行うように指示されています。
・cronの設定:バックアップ実行のタスクスケジュール(cronスクリプト)を設定
・バックアップの設定:サイトバックアップ自動コースバックアップを確認
・メールの動作確認:テストユーザを作って実際にメール受信を確認
・Moodleサイトを安全にする:セキュリティ推奨を確認

これらは追々、必要なものをピックアップして別のページで情報を残そうと思います。

かなり長くなりましたが、これでMoodleが使える状態になりました。(疲れたー)

 

広告

Pocket