3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Cloud9 に PHP 開発環境構築 (moodle)

Last updated at Posted at 2022-02-13

moodle のお勉強とプラグイン開発のための環境として
AWS Cloud9 に開発環境を構築しましたので手順を残しておきます。

moodle を例に環境構築していますが、PHPの汎用的な開発・デバッグ環境として利用できると思います。

# 利用環境

環境構築

AWS CloudShell で下記コマンドを実行し、Cloud9 環境を作成する。

aws cloud9 create-environment-ec2 \
--name MoodleDev \
--instance-type t3.small \
--image-id amazonlinux-2-x86_64

コマンドが成功すると environmentoId が表示される

Result
{
    "environmentId": "xxxxxxxxxxxxxxxxx"
}

default VPC を削除してしまっている場合は、次セクションの操作で EC2 を作成するサブネットを指定して環境構築します。

(オプション)Default VPC 以外に環境作成

まず、現リージョンのサブネットを確認する

aws ec2 describe-subnets --query "Subnets[*].[{ID:SubnetId,CIDR:CidrBlock},Tags[?Key=='Name'].Value][]"
Result
    {
        "ID": "subnet-0697cc495da4d4c45",
        "CIDR": "172.21.20.0/24"
    },
    [
        "PublicSub"
    ],
    {
        "ID": "subnet-03d83b3c53b2e1155",
        "CIDR": "10.0.100.0/24"
    },
    [
        "Pri-DebSubNet"
    ],

作成するサブネットを指定して Cloud9 環境を作成する。

aws cloud9 create-environment-ec2 \
--name MoodleDev \
--instance-type t3.small \
--image-id amazonlinux-2-x86_64 \
--subnet-id subnet-xxxxxxxxxxxxx

環境設定

以下の作業はCloud9Terminal で行う

タイムゾーン設定

タイムゾーンを日本に変更します

sudo timedatectl set-timezone Asia/Tokyo

設定を確認します

date

Sun Feb 13 14:07:38 JST 2022

PHP 環境設定

インストールされているPHPは 7.2なので、8.0をインストールします。

PHP 7.2 系を削除

sudo amazon-linux-extras disable lamp-mariadb10.2-php7.2
sudo amazon-linux-extras disable php7.2
sudo yum -y remove php-* 

PHP 8.0 系をインストール

sudo amazon-linux-extras enable php8.0
sudo amazon-linux-extras install -y php8.0
sudo yum -y install php-devel
sudo yum -y install php-pear

デバッガインストール

sudo pecl install xdebug

下記警告が出力されるが、別途設定してあるので問題ない

configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=/usr/lib64/php/modules/xdebug.so" to php.ini

拡張パッケージインストール(moodle用オプション)

zip パッケージ

php-zip

sudo yum -y install libzip-devel 
sudo pecl install zip

下記 Segmentation fault が出力されるが、別途設定してあるので問題ない

configuration option "php_ini" is not set to php.ini location
You should add "extension=zip.so" to php.ini
Segmentation fault

日本語パッケージ

php-mbstring

sudo yum -y install php-mbstring

インストールが成功したら設定ファイルを作成する。

/etc/php.d/20-mbstring.ini
; Enable mbstring extension module
extension=mbstring

; ↓ こちらを追記。  ↑ こちらは元々記載されている。
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On
mbstring.detect_order = auto

グラフィックライブラリ

php-gd

sudo yum -y install php-gd

国際化関数

php-intl

sudo yum -y install php-intl

PHP 設定変更(moodle用オプション)

POST できる上限数変更

max_input_vars パラメータを変更する

/etc/php.ini
; ↓ 元々コメントアウトされているので、非コメント化して値を変更
max_input_vars = 5000

xdebug 設定

Cloud9 IDE がデバッグできるように xdebug を設定します。

設定ファイル変更

xdeubg 3の設定を追加する。

/etc/php.d/30-xdebug.ini
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.mode=debug
;; ↓ こちらを追記。  ↑ こちらは元々記載されている。
xdebug.start_with_request=Yes
xdebug.log=/var/log/xdebug.log 

xdebug ログファイル準備

sudo touch /var/log/xdebug.log
sudo chmod 666 /var/log/xdebug.log

Cloud 9 IDE の xdebug 追加

Cloud9 IDE のランナーを追加する
AWS Cloud9 統合開発環境 (IDE) でビルダー、ランナー、デバッガーの操作 ドキュメント

mkdir /home/ec2-user/environment/.c9/runners/
/home/ec2-user/environment/.c9/runners/xdebug.run
// This file overrides the built-in PHP (built-in web server) runner
// For more information see http://docs.aws.amazon.com/console/cloud9/change-runner
{
  "script": [
   "cat "
  ],
  "selector": "^.*\\.(php)$",
  "working_dir": "$project_path",
  "debugger": "xdebug",
  "debugport": 9003,
  "info": "Starting PHP xdebug Server",
  "trackId": "PHPServer"
}

httpd 設定

DocumentRoot 変更

/etc/httpd/conf/httpd.conf
# 元々ある DocumentRoot をコメントアウト
# DocumentRoot "/var/www/html"

# 下記パラメータを追記
DocumentRoot "/home/ec2-user/environment"
<Directory "/home/ec2-user/environment">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

パーミッション変更

Apache プロセスが、プロジェクトツリーにアクセスできるようにパーミンション変更

cd /home
chmod 777 ec2-user

サーバ再起動

各サーバプロセスを再起動しておく

sudo systemctl restart httpd
sudo systemctl restart php-fpm

EC2 セキュリティグループ設定

ブラウザからどこからでもアクセスできるようにセキュリティグループのインバウンドルールを設定する。

セキュリティグループ一覧取得

設定変更するセキュリティグループを特定する。

aws ec2 describe-security-groups --query "SecurityGroups[].[GroupName,GroupId]" --output table     
Result
--------------------------------------------------------------+---------------+
|                          DescribeSecurityGroups             |               |
+-------------------------------------------------------------+---------------+
|  aws-cloud9-MoodleDev-xxxxxxx-InstanceSecurityGroup-yyyyyy  |  sg-hogehoge  |
|  default                                                    |  sg-fugafuga1 |
|  default                                                    |  sg-fugafuga2 |
+-------------------------------------------------------------+---------------+

aws-cloud9 から始まるグループの ID をメモする。

セキュリティグループ変更

Cloud9 で使用しているEC2セキュリティグループのインバウンドルールを追加する。

AWS-ドキュメント

aws ec2 authorize-security-group-ingress --protocol tcp --port 80 --cidr 0.0.0.0/0 --group-id {セキュリティグループID} 

結果は以下の通りになる

Result
{
    "Return": true,  // ← 成功を表す
    "SecurityGroupRules": [
        {
            "SecurityGroupRuleId": "sgr-mohemohe", 
            "FromPort": 80,  // ← 80 番
            "GroupOwnerId": "1234567890", 
            "ToPort": 80,       // ← 80 番
            "IpProtocol": "tcp", 
            "CidrIpv4": "0.0.0.0/0", 
            "GroupId": "sg-hogehoge", 
            "IsEgress": false
        }
    ]
}

動作確認

EC2 IPアドレス確認

EC2 インスタンスのパブリックIPアドレスを確認しておく

aws ec2 describe-instances コマンドドキュメント

aws ec2 describe-instances --query "Reservations[*].Instances[*].PublicIpAddress"
Result
[
    [
        "52.194.219.49"
    ]
]

PHP 動作確認

phpinfo()を出力する準備をするためのファイルを作成する。

/home/ec2-user/environment/info.php
<?php phpinfo(); ?>

正しく出力されるか確認する
(IPAddressはサンプルです。ここで取得したIPアドレスを入力します。)

curl http://52.194.219.49/info.php 

<html>〜</html>

ブラウザでアクセスする

上記URLにブラウザでアクセスして、PHP の情報が表示されることを確認する。

ここから下は moodle を例にセットアップします。

moodle以外でも、ご自身のプロジェクトを展開することによってさまざまな
PHPプロジェクトの開発環境に対応できると思います。

MariaDB インストール

リポジトリ追加

デフォルトのままだと 5.x系のリポジトリを参照してしまうので、10.5系のリポジトリを追加する

/etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

インストール

もともとインストールされている MariaDbのコンポーネントが php7.2系なので削除する。

インストールされているパッケージを確認する

yum list installed | grep mariadb
Result
mariadb.x86_64                 3:10.2.38-1.amzn2.0.1          @amzn2extra-lamp-mariadb10.2-php7.2
mariadb-common.x86_64          3:10.2.38-1.amzn2.0.1          @amzn2extra-lamp-mariadb10.2-php7.2
mariadb-config.x86_64          3:10.2.38-1.amzn2.0.1          @amzn2extra-lamp-mariadb10.2-php7.2
mariadb-libs.x86_64            3:10.2.38-1.amzn2.0.1          @amzn2extra-lamp-mariadb10.2-php7.2

パッケージを削除する

sudo yum -y remove maria*

新しいMariaDBをインストールする

sudo yum -y install mariadb
sudo yum -y install mariadb-server 

MariaDBを起動する

sudo systemctl start mariadb 

MariaDB ユーザ作成

データベースに接続して、DBのユーザを作成する

MariaDB に接続する

sudo mysql -h localhost -P 3306 -u root

DBでのコマンドが成功した場合は、以下の結果が表示される
Query OK, 0 rows affected (0.001 sec)

新しいユーザを作成し、権限を付与する

CREATE USER moodleuser@localhost IDENTIFIED BY 'moodle';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO moodleuser@localhost;

作成されたユーザを確認する

SELECT User, Host FROM mysql.user;
Result
+-------------+----------------------------------------------+
| User        | Host                                         |
+-------------+----------------------------------------------+
|             | ip-10-0-1-88.ap-northeast-1.compute.internal |
|             | localhost                                    |
| mariadb.sys | localhost                                    |
| moodleuser  | localhost                                    |
| mysql       | localhost                                    |
| root        | localhost                                    |
+-------------+----------------------------------------------+
6 rows in set (0.001 sec)

ユーザパスワード設定

set PASSWORD for moodleuser@localhost=PASSWORD('moodle');

一度、データベースから切断する

exit

データベース作成

作成したmoodleuserでログインし直してデータベースを作成する

mysql -h localhost -P 3306 -u moodleuser  -p

パスワード入力を促されるので ここで設定したパスワードを入力する。

Enter password: moodle (←入力したパスワードは表示されない)

データベースを作成する

CREATE DATABASE moodle ;

データベースが作成できたらデータベースから切断する

exit

Moodle インストール

git リポジトリからクローンする

cd ~/environment
git clone https://github.com/moodle/moodle.git
cd moodle

利用したいバージョンに切り替える

git checkout v3.11.5

データフォルダ作成

moodle のテンポラリデータフォルダを作成する

cd ~/environment
mkdir moodledata

moodleサーバセットアップ時にコンフィグファイルを書き込むので、書き込みパーミッション設定する

chmod 777 moodledata
chmod 777 moodle

moodle セットアップ

ブラウザでURLアクセスする。

http://52.193.176.188/moodle/

言語を選択してください

日本語 (ja)

パスを確認する

データディレクトリはそのまま

データベースドライバを選択する

MariaDB (native/mariadb) を選択する

データベース設定

項目 設定値
データベースホスト localhost (デフォルト)
データベース名 moodle (デフォルト)
データベースユーザ moodleuser
データベースパスワード moodle
テーブル接頭辞 mdl_ (デフォルト)
データベースポート 3306

著作権表示

内容を確認し続けるボタンをクリック

インストレーション - Moodle 3.11.5 (Build: 20220117)

内容を確認し続けるボタンをクリック
(この後しばらく待ち時間が発生)

プラグインインストール結果画面)

内容を確認し続けるボタン をクリック

一般設定

  • パスワード
  • メールアドレス
  • タイムゾーン

入力しプロファイルを更新するをクリック

フロントページ設定

  • 長いサイト名
  • サイト省略名
  • [新しい設定]-[送信メール設定] を空っぽ

入力し変更を保存するをクリック

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?