久しぶりの技術ネタ、と言いたいところですが、むしろ備忘録という扱いでしょうか。なかなかハマりました。
What IS Joomla! ?
「Joomla!」はCMSです。Wordpressとかと同じような感じ。この辺が他のCMSとの違いがわかりやすい情報でしょうか。
インストールをして、何度となくハマった経験から思うことは、「クセがすごい」ということ。使いにくいわけではなく、クセがあって、理解をするまで時間を要するという感じ。まさにリンクでも紹介されていたような、
慣れるまでに時間がかかる という説明はそのとおりだと思いますし、更に他のCMS(≒Wordpress)に慣れてしまうと、随分と不親切でわかりにくいなぁ、という印象です。
今回は委託業務での構築ですのでわからないだの何だの*1言っていられませんので、粛々と公式や外部識者の皆さんの情報(主にネット)を参考にしつつ進めます。公式よりもJoomla!日本語化プロジェクトサイトの方がお世話になったのでこちらを紹介しておきますね。
サーバの構築①
クライアントからはレンタルサーバーへの展開を依頼されていますが、テストサーバとしてVagrantを使うことにしました。Docker/Docker-composeでも良かったんですが、なんかまだ「サーバの動きが見えていない」状態なので、Dockerでのコンテナとしての構築よりは1個の(仮想)サーバを建ててそこで作るほうが理解しやすいかな、と考えて、慣れないシステムのサーバ構築は基本Vagrantを使ってテストしています*2。
具体的にはVagrantfileをご参照、というところですが、まず、
vagrant init bento/ubuntu-18.04
でVagrantfileを作ってから、少しいじります。
config.vm.network "private_network", ip: "192.168.33.10" #コメントアウトを外し、必要に応じてIPアドレスを変更する ... config.vm.synced_folder "./data", "/vagrant_data" #コメントアウトを外し、フォルダ名を任意に変更、更に、「ホスト側(作業中のマシン側)」の適切な場所にフォルダを作る。 #この場合はVagrantfileがある場所と同じ場所にdataフォルダを作る。 ... config.vm.provision "shell", inline: <<-SHELL #apt-getとかが使われている部分は削除、「SHELL」で囲まれた箇所に以下のコマンドを書く。 apt update apt upgrade -y apt autoremove -y apt autoclean apt install -y lamp-server^ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php apt install -y unzip SHELL ...
最近LAMPサーバ構築の時(ちなみに私はubuntuが基本)、いちいちapache2とphpと、とかaptコマンドを書かず、「タスク」とやらを指定する上記のような、
apt install -y lamp-server^
を使っています。必要なコンポーネントはこれでインストールしてくれるので大変便利。ちなみに、「タスク」とやらを指定するのが行末の"^"のようです。コレを忘れるとエラーになります。
※ただし、lamp-serverタスクとその後のphpinfo.phpファイル作成を、Ubuntuの古いバージョンでやろうとするとエラーが出てしまいます。MySQLのインストール時にUbuntu18の場合は後述の通りパスワード設定を行わないのでエラーが出ませんが、16とかで同じことをやったらパスワードの入力画面が表示されず(aptの-yオプションが利いています)にパスワード設定がされないのでインストールエラー、ということが起こります。
これでVagrantfileを保存して、ホスト側で
vagrant up
で勝手に起動してくれます。 http://[IPアドレス]でApacheの動作確認が、 http://[IPアドレス]/phpinfo.phpでPHPの動作確認+パラメータ確認ができます。 ちなみにphpinfoはこの後もうちょっと使います。
サーバの構築②
ここからは、
vagrant ssh
で仮想端末にログインしつつ、(ホスト側)ブラウザでの確認を併用していきます。 まず、仮想端末にphpMyAdminをインストールします。
sudo apt install phpmyadmin
Vagrantfileに書かない理由は、phpmyadminのインストール時にパスワードなどの設定が必要になるため。あらかじめ設定ファイルを書いておいてあとでdataフォルダから受け渡すというやり方もあるかとは思いますが、どうせこのあと更に端末での処理が入るんで自分で打っても大丈夫。
インストールが終わったら、phpMyAdminを起動する前にひと手間かけておきます。実は、Ubuntu18だとそもそもmySQLの運用が若干変わっていて、mySQLのルートユーザーのパスワードは最初に作られなくなりました*3。で、どうやるかと言うと、すごく簡単で、
sudo mysql
と、管理者権限(sudo)でmysqlコマンドを実行するとパスワードなしでのログインができる、ということになっているのですが。
で、mysqlで2つSQLを叩くのですが、やりたいことは本来であればrootユーザ権限でやっているDBやユーザの作成権限をphpmyadminユーザに与えてしまおう、ということで、
GRANT ALL PRIVILEGES ON *.* TO phpmyadmin@localhost IDENTIFIED BY 'パスワード' WITH GRANT OPTION; FLUSH PRIVILEGES;
のSQLを発行します*4。mysqlコマンドでインタラクティブにやってもいいですし、面倒なのでSQLを書いてdataフォルダに保存して実行してもいいかもしれません。
ここで、phpMyAdminを起動します。ブラウザでhttp://[IPアドレス]/phpmyadminで起動します。
クライアントからDB名等の指示があればそれに従いますが、そうでなければ専用ユーザを作ってさらにユーザと同名のDBを作り、更に同DBに対する全権限を与える、という手順でDBを作ってしまいます。 SQLだと5〜6行になるのかな。1画面でできるのでこっちのほうが楽かな、とは思いますが。
もう一つ、PHPの設定でJoomla!推奨設定があるので、/etc/php/[バージョン]/apache2/php.iniの設定を下記リンクを参考に変更し、apacheの再起動を行っておきます。
これでサーバの準備は完了です。
Joomla!のセットアップ
あらかじめホスト側でJoomla!の実行ファイル群をダウンロードしておき、dataフォルダに入れておきます。そして、今回はルート運用をするので/var/www直下にzipファイルの解凍をしておき、さらにフォルダ名をhtmlに変更します(もとのフォルダは削除してもリネームしてもどちらでもいい)。そして、htmlフォルダ(とその下層すべて)の所有者をwww-data(=apacheユーザ)に変更しておきます。
sudo chown -R www-data:www-data /var/www/html
これで、http://[ipアドレス]にアクセスするとJoomla!の自動セットアップが始まるので画面の指示通りに進めていけばセットアップが完了します。
使ってみての感想
CMSはセットアップしただけでは「ダサい」ブログっぽいページが表示されるだけですが*5、Joomla!も同様、本当にそっけないページが表示されます。で、テンプレートファイルを適用すると何か変わるのか、と思ったら全く変わらない。そのあとの調整がとてつもなく時間がかかるのですが、このあたりについてはおいおい投稿をしていきたいと思っています。
Joomla!は確かに難しい(とっつきにくい)ですが、Wordpressにはない、またはWordpressでの実現がちょっと難しいものがJoomla!では簡単に実装できたりしそうですので、実際の例を挙げつつ紹介していきたいなと思っています。
*1:こういうときに「やっぱりWordpressでの構築がいいですよね」と自分の得意分野にすぐ誘導するようなフリーランサーはイケてないですよね。わざわざ相手がJoomla!をしてしてきたのにはおそらく理由があるわけですよ。自分がWordpressが得意なのにJoomla!で、と言っている時点でWPのほうがいいと思うならその仕事は断るべきなんですよね。
*2:慣れてくるとDockerとかを積極的に使うようにしています。WordpressのテストはもうDocker-composeでやってます。それ用のyamlファイルも用意していますしね。
*3:自動でインストールしたからではなく、手動でmySQLをインストールしても同じなんで最初すごく悩みました。
*4:FLUSHコマンドは要らない気もするけれど...。
*5:意図していない限りはシステム屋としてあのデフォルト画面で運用するのは「やる気がない」としか考えられないですわね。あれで投稿に「Wordpressの導入実績多数!」とか書いてあっても信用できないって。