AWS(EC2)にJoomlaをインストールする

Joomlaをクラウドにインストールしてみるよ

とある事情にてJoomlaを利用したいという依頼が沸いてきたのでAWS(EC2)状に構築しました。
その際の構築手順を記しておきます。

はじめに

とある案件で Joomla インストール依頼が来ました。

当初はCMS 等を利用せず 静的な html ファイルを利用してサイトを構築する予定だったのですが、非デザイナー/エンジニアである方も構造 ( メニューとかリンクとか ) を弄れるようにしたかった様子。

構築先はAWS (Amazon Web Service) です。

構築作業を行って ( 多分 ) 普通に動くところまで行えたので手順を記しておきます。

※Redhat系Linux (6.x) でも同様の手順で構築可能と思われます (一部パッケージバージョンが異なる可能性あり)。
※Redhat 7.x の場合、mysql の代わりに mariadb にする等の変更が必要

写真 : 写真素材ぱくたそ
画像のフォント : 隼文字(Falcon Font)©霧風 隼

Joomlaとは

Joomla は世界的に有名なオープンソースの CMS です。
今では Wordpress に完全に水をあけられている感がありますが、Google トレンド によれば2009年途中あたりまでは(少なくとも世界的には) Wordpress を上回る人気を誇っていました。
世界的には現在も高いシェアを持っているオープンソースCMSの一つで、CMSを利用する際には十分選択肢の一つになるものといえるでしょう。

環境

環境は以下になります。
※Joomlaは最新版で構築作業される事をお勧めします。3.x系ならバージョンを上げてもインストール手順には影響しないはずです。

OS Amazon Linux 64bit
joomla 3.4.6
nginx 1.8.0-10.25
DB 5.5.46-1.10

Webサーバはnginx、DBはMySQLを利用します。

EC2インスタンスの作成

インスタンス作成

EC2 インスタンスを作成します。
私が作成を行った際には t2.micro を利用しました。
最近 t2.nano インスタンスが追加されましたが、これでも動作すると思います。( ある程度のチューニングは必要かも )

EC2 インスタンス生成に関しては、十分あれば十分? - EC2インスタンスの作成から起動まで も参考にしてください。( 少々古いですが ( メニューが日本語化されていない頃の記事 )、今も作成手順はほぼ同じ )

初期設定

インスタンスが生成されたら、EC2インスタンスを起動し初期設定を行います。

参考 : EC2インスタンス(Amazon Linux)の初期設定

パッケージのインストール

Joomla インストールに必要となるパッケージ ( mysql, nginx, php 等 ) に関しては、極力 yum を利用してインストールします。

MySQL

MySQLのインストール

以下を実行します。

※私が環境構築した時点では mysql55 がインストールされました。
5.6をインストールしたい場合は mysql56-server を指定してください。

# yum install mysql-server

MySQLの設定

MySQLの設定ファイルを編集します。

# vi /etc/my.cnf

以下を追記します。
( [ ... ] 部分は必要に応じて )

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
skip-character-set-client-handshake
character-set-server=utf8
collation-server=utf8_general_ci
init-connect=SET NAMES utf8

※文字コード関連の設定のみ記載しています。

MySQL起動

# /etc/rc.d/init.d/mysqld start

自動起動設定は以下で

# chkconfig mysqld on

Joomla 用データベース作成

Mysql に接続しJoomla用データベースを作成しておきます。

  1. MySQLに接続します。(yum でインストールした場合、パスワード無しで接続可能)
    # mysql
    
  2. joomla用データベースを作成します。
    以下では DB名='joomla' で作成。
    DB名や接続ユーザ名は適宜変更して下さい。
    mysql> create database joomla;
    
  3. joomla 用データベースにアクセスするためのユーザを作成します。
    ユーザ名も 'joomla' としています。('joomla'@'部分)
    'パスワード' 部分には 適当なパスワードを設定して下さい。
    mysql> grant all privileges on `joomla`.* to 'joomla'@'localhost' identified by 'パスワード';
    mysql> flush privileges;
    
  4. Mysqlから抜けます。
    mysql> quit;
    

※上記では最低限の手順を説明しています。
上述の通り Mysqlへのrootユーザによる接続はパスワード無しで可能になっています。
特に運用環境の場合、mysql_secure_installation を実行する等してください。

PHP

PHPのインストール

Joomla 3.x 自体は php5.3.10 以降で動作しますが、モジュール ( プラグイン ) の中には5.6を要求するものがあったりします ( 実際バックアップ関連モジュールで5.6を要求された )

普通に yum install php すると 5.3.xx がインストールされるので (記事執筆時点)、5.6 をインストールします。

参考 : Technical Requirements - joomla.org

# yum install php56 php56-mysqlnd php56-fpm php56-mbstring php56-xml

php以外に php-mysqlnd(Mysqlライブラリ), php-fpm (apacheを利用する場合のmod_phpに相当), php-mbstring (joomla インストール時にチェックされる), php-xml (未インストール時テーマプレビュー時等にエラー) も併せてインストールしています。

PHPの設定

php.ini を編集します。

# vi /etc/php.ini

以下を設定します。(抜粋)

upload_max_filesize = 20M
post_max_size = 20M
;output_buffering = 4096 ;コメントアウトする

アップロード可能なファイルのサイズ上限設定、及び、output_buffering 設定の無効化 ( joomla では無効推奨 ) を行っています。サイズ上限に関しては要件に応じて適宜変更して下さい。

php-fpmの設定

yum でインストールした場合、php-fpm のユーザが apache になっているので (この問題で少々はまった)、ユーザを変更しておきます。

# vi /etc/php-fpm.d/www.conf

以下を ( apache から nginx に ) 変更します。( 抜粋)

user = nginx
group = nginx

php-fpm に関しても自動起動設定を(必要に応じて)行います。

# chkconfig php-fpm on

Nginx

Nginxのインストール

# yum install nginx

Nginxの設定

# vi /etc/nginx/nginx.conf

以下で設定します。(抜粋)

参考 : Nginx - Joomla! Documentation

    server {
        listen       80;
        server_name  localhost;
        #root         /usr/share/nginx/html;
        root         /usr/share/nginx/html/joomla; # joomlaサブディレクトリを作ってインストールするため
        client_max_body_size 20M;   # アップロードファイルサイズ上限

        #charset koi8-r;

        #access_log  /var/log/nginx/host.access.log  main;

        index index.php index.html index.htm default.html default.htm;
        # Support Clean (aka Search Engine Friendly) URLs
        location / {
            try_files $uri $uri/ /index.php?$args;
        }

        # deny running scripts inside writable directories
        location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
            return 403;
            error_page 403 /403_error.html;
        }

        # redirect server error pages to the static page /40x.html
        error_page 404 /404.html;
        location = /40x.html {
        }

        # redirect server error pages to the static page /50x.html
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
        #    root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        # caching of files
        location ~* \.(ico|pdf|flv)$ {
                expires 1y;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
                expires 14d;
        }
    }

Nginx起動設定

Nginx も必要に応じて自動起動設定します。

# chkconfig nginx on

Joomla

Joomla に関しては最新版が yum では提供されていないため、公式サイトからパッケージをダウンロードしてインストール(展開)します。

Nginx のドキュメントルートである /usr/share/nginx/html/ 直下にインストールでも構いませんが、ここではサブディレクトリを切ってインストールする事にします。

  1. サブディレクトリを作成し、ここに移動します。
    # mkdir /usr/share/nginx/html/joomla
    # cd /usr/share/nginx/html/joomla
    
  2. Joomla を取得して展開します。
    # wget https://github.com/joomla/joomla-cms/releases/download/3.4.6/Joomla_3.4.6-Stable-Full_Package.zip
    # unzip Joomla_3.4.6-Stable-Full_Package.zip
    
  3. zip ファイルは削除します。必要であれば適当なディレクトリにバックアップして下さい。
    # rm Joomla_3.4.6-Stable-Full_Package.zip
    
  4. joomlaディレクトリのオーナー(パーミッション)を設定します。
    # cd /usr/share/nginx/html
    # chown nginx:nginx joomla -R
    

Nginx, php-fpm の起動

Nginx、及び、php-fpm の設定が完了したら、これらを起動します。

# /etc/rc.d/init.d/nginx start
# /etc/rc.d/init.d/php-fpm start

Joomlaインストール

上記手順が完了したら、設定を行ったホストにWebブラウザからアクセスし、Joomla の Webインストーラに従ってJoomlaインストールを完了させます。

  1. インストール先ホストにWebブラウザでアクセスします。
    JoomlaのWebインストーラページが表示されます。
    Joomla Webインストーラ
    はじめにメイン設定画面が表示されるので、それぞれの入力項目には適当な値を設定して下さい。
    設定が完了したら 右上にある [次へ] ボタンをクリックします。

    設定に問題がある場合、その旨エラー表示がなされるので、メッセージに従って対応して下さい。

  2. データベース設定画面になるので、DB作成時に指定した値を入力します。
    Joomla Webインストーラ
    設定が完了したら [次へ] ボタンをクリックします。
  3. FTP設定画面が表示されます。タブ表示部分に(オプション)とありますが、FTPは無効でOKです。必要な場合には適宜設定して下さい。無効であってもブラグイン等のインストールは管理画面(Webブラウザ)から行えます。
    Joomla Webインストーラ
    [次へ] ボタンをクリックします。
  4. 最終確認画面が表示されます。
    Joomla Webインストーラ
    • サンプルデータのインストールに関しては、Joomla初心者ならばインストールしてみると良いかもしれません。
      ( どういったデータでサイトを作成すればよいかの参考になるかも )
    • メイン設定、データベース設定、FTP設定に関しては Webインストーラで設定した値が表示されるので必要に応じて再確認して下さい。
    • インストール前の確認に関しては、ここで赤表示がある場合、正しくインストールが行えません。( "configuration.phpは書き込み可能" は除く )
    • 推奨設定に関しては赤表示でもインストールは行えますが、可能であれば修正してからインストールした方がよいでしょう。

    設定に問題がなければ [次へ] ボタンをクリックします。

  5. インストールが行われます。
    Joomla Webインストーラ
  6. インストールが完了すると完了画面が表示されます。
    Joomla Webインストーラ

    configuration.phpが書き込み不可能だった場合、画面下部に configuration.php の内容がテキストエリアに出力されるので、この内容をコピーし、joomla のインストール先に configuration.php を作成します。

  7. configuration.php を作成します。
    # cd /usr/share/nginx/html/joomla/
    # vi configuration.php
    

    完了画面からコピーした configuration.php の内容をコピーし、保存します。

    所有権を nginx に変更しておきます。

    # chown nginx:nginx configuration.php
    
  8. Webインストーラの完了画面には、installationディレクトリを削除する旨メッセージ出力されています。[installationディレクトリ削除]ボタンをクリックして削除します。
    削除が行えない場合、その旨メッセージ出力されるので、以下で削除を行ってください。
    # cd /usr/share/nginx/html/joomla/
    # rm installation -rf
    

Joomla の利用

configuration.php の設定、及び、installation ディレクトリの削除が行えれば、Joomla サイト(管理画面含む)が利用可能になっているはずです。

Webインストーラの完了画面にある、[サイト] / [管理画面] ボタンをクリックするか、Webブラウザで以下にアクセスする事で Joomla を利用する事ができます。

サイト http://インストール先ホスト名(またはIPアドレス)/
管理画面 http://インストール先ホスト名(またはIPアドレス)/administrator/

その他

脆弱性への対応

joomla ではこれまでプラグイン含めて数々の幾つかの脆弱性が発見されています。
運用環境で利用する場合、プラグイン含めて脆弱性がある場合には適切にバージョンアップする等の対応を行う必要があります。

不正ログインの防止

管理画面に不正にログインする攻撃もよく行われているようなので、管理画面へのアクセスには基本認証をかける、アクセス可能なネットワークを制限する等の対策を行った方がよいでしょう。

当然ですが強度の弱いパスワードの利用も避けましょう。

※joomlaで運用されていたサイトをハッキングされて、Webサイトをクローズせざるを得なくなったという話も実際に聞いた事がある。

※このあたりに関しては Wordpress 等も同様 (数々の幾つかの脆弱性が発見されている点含め)。

チューニング等

上記手順では、DB(MySQL), Webサーバ(Nginx), PHP 等に関しては最低限の設定を行ったのみで、運用やパフォーマンス、セキュリティ等を考慮したチューニング作業は行っておりません。( 実際の作業では設定したものもあるが、手順からは省略 )

場合によってはこれら追加設定が必要になるかもしれません

まとめ

Joomla最新版に関しては日本語の記事/ブログ等は殆どない状況に陥っているような気がしているのですが、Wordpressとの知名度/シェア等が開く原因としてこれが一番大きい気がします ( 負のスパイラル状態 )。

弊社ではかつてJoomlaを利用したサイト構築を行っていたために今回のリクエストがあったわけですが、今後も Joomlaの関する記事を書くかどうかは不明です。
※PHPベースのオープンソースCMSでは、個人的に Joomla よりも Drupal 押しなので

使い方に関してもここでは一切説明しておりませんが、これらに関してはご了承ください。