本日はインすこールモノ。
ん?すこ?そうですね。
いや、前振り考えてる場合じゃない。
わりかし余裕ないんで。半沢始まるまでに書く。
・・・あれ、半沢来週に延期?なんじゃそりゃぁぁぁ!
さて、順調にいけばPHP8が今年中には出るっぽいですね。
あとCakePHP4も既に出ているっぽい。
調べたら既にCakePHP4.1とか出ているっぽい。
自分の立ち位置など、最近そうした情報に疎い環境になってきたが、意識して最新に触れるようにしたくてラズパイに最新のPHPを入れて弄ってみる。
言い訳だな。
というわけで、巷に情報が腐るほどあると思うけれども、ラズパイにApache2.4とPHP7.4を入れてWEBサーバーに仕立てていく。
ちなみに、環境としては以下のようにラズパイ4を2台用意。
- WEBサーバー(今回対象)
- hostname:RaspberryPi402
- ipアドレス:192.168.0.12
- DBサーバー(すでに構築済み)
- hostname:RaspberryPi403
- ipアドレス:192.168.0.13
- database:MySQL8.0.20
1.Apache2のインストール
をする。
$ sudo apt update $ sudo apt upgrade $ sudo apt install apache2
ufw(Firewall)を入れてるので、ポート番号=80を開放する。家でSSLは別に使用しないので443は開放しない。してもよいけど。しない。いや、開放しとくか。
$ sudo ufw allow 80 $ sudo ufw allow 443
<裏話>
本当は。
2020/09/06時点でApache2.4の最新は2.4.46で、ラズパイの標準リポジトリ?では2.4.38で、最新バージョンをインストールしようと試みたが失敗。
libcrypt1.debをインスコする時に、インスコするとlibc6壊すよ、って言ってエラー。
現状の標準リポのlibc6はlibcrypt1と統合されてるんかね?
というわけで、Apache2.4の最新はインストールできませんでした。ちくしょー。
</裏話>
2.PHP7.4のインストール
をする。
通常のリポジトリ(?)からapt installするとPHPの最新は7.3になってしまう。
最新PHP7.4を入れるには以下の手順でリポジトリ(?)をまずは登録。そしてパッケージリスト更新。
$ su - root # wget -O - https://packages.sury.org/php/apt.gpg | apt-key add - # echo "deb https://packages.sury.org/php/ `lsb_release -cs` main" >> /etc/apt/sources.list.d/php.list # apt update # apt upgrade
リスト中にPHP7.4があることを確認。
# apt policy php php: インストールされているバージョン: (なし) 候補: 2:7.4+76+0~20200511.26+debian10~1.gbpc9beb6 バージョンテーブル: 2:7.4+76+0~20200511.26+debian10~1.gbpc9beb6 500 500 https://packages.sury.org/php buster/main armhf Packages 2:7.3+69 500 500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages
実際にPHP7.4関連のパッケージを検索してみる。デバッグシンボルパッケージは無視。
# apt search php7.4 | grep ^php7.4* | grep -v "dbgsym" WARNING: apt does not have a stable CLI interface. Use with caution in scripts. php7.4/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd all php7.4-bcmath/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-bz2/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-cgi/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-cli/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-common/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-curl/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-dba/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-dev/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-enchant/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-fpm/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-gd/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-gmp/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-imap/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-interbase/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-intl/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-json/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-ldap/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-mbstring/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-mysql/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-odbc/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-opcache/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-pgsql/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-phpdbg/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-pspell/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-readline/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-snmp/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-soap/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-sqlite3/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-sybase/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-tidy/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-xml/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-xmlrpc/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf php7.4-xsl/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd all php7.4-zip/不明 7.4.9-1+0~20200807.24+debian10~1.gbp7962cd armhf
とりあえず、apache2のモジュールlibapache2-mod-php7.4と上記全部をインストール。
apt -y install libapache2-mod-php7.4 \ php7.4 \ php7.4-bcmath \ php7.4-bz2 \ php7.4-cgi \ php7.4-cli \ php7.4-common \ php7.4-curl \ php7.4-dba \ php7.4-dev \ php7.4-enchant \ php7.4-fpm \ php7.4-gd \ php7.4-gmp \ php7.4-imap \ php7.4-interbase \ php7.4-intl \ php7.4-json \ php7.4-ldap \ php7.4-mbstring \ php7.4-mysql \ php7.4-odbc \ php7.4-opcache \ php7.4-pgsql \ php7.4-phpdbg \ php7.4-pspell \ php7.4-readline \ php7.4-snmp \ php7.4-soap \ php7.4-sqlite3 \ php7.4-sybase \ php7.4-tidy \ php7.4-xml \ php7.4-xmlrpc \ php7.4-xsl \ php7.4-zip
インストールされたPHPのバージョン確認。
# php -v PHP 7.4.9 (cli) (built: Aug 7 2020 14:55:48) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies
これでPHPの最新がインストールされた。
3.設定
をする。
まずapache2のconfigが正しいかどうかテスト。
# apache2ctl configtest AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK
おっとぅ?エラってる。
なので、fqdn.confを作成してServerNameを設定。サーバー名は適当。
# vim /etc/apache2/conf-available/fqdn.conf ServerName raspi-webserver
あとはPHPを使えるように設定。
# vim /etc/apache2/mods-available/mime.conf : AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-bzip2 .bz2 AddType application/x-httpd-php .php # 追加 AddType application/x-httpd-php-source .phps # 追加 : : AddHandler cgi-script .cgi .php # .phpを追加 :
設定を反映させてapache2を再起動。
# a2enconf fqdn # apache2ctl configtest Syntax OK # systemctl reload apache2
とりあえず、動作確認ド定番のphpinfoを表示させてみる。
# vim /var/www/html/test.php <?php phpinfo(); ?>
ブラウザーから以下に接続。
はい、OK。
本当は、途中libapache2-mod-php7.4入れ忘れててphpinfo表示されなくて焦って時間食ったってのは内緒だ。
4.PHP7.4からMySQL8.0へ接続するテスト
もう1台のラズパイにはMySQL8が入ってるので、そこと接続してデータ取ってきて表示させるテストもしてみる。
MySQL8.0.20@192.168.0.13上での準備
やってることはtestdb作って、そこに接続するユーザーを2つ作成。
ユーザーの1つはMySQLサーバー上のユーザー。もう1つのユーザーはPHP側から接続するユーザー。
そんでもってtesttblてテーブル作って1レコードinsert。
$ mysql -u root -p : : mysql> create database testdb; Query OK, 1 row affected (0.02 sec) mysql> create user testuser@localhost identified by 'testpassword'; Query OK, 0 rows affected (0.01 sec) mysql> create user testuser@'192.168.0.12' identified by 'testpassword'; Query OK, 0 rows affected (0.01 sec) mysql> grant all privileges on testdb.* to testuser@localhost; Query OK, 0 rows affected (0.02 sec) mysql> exit; $ mysql -u testuser -p : : mysql> use testdb; Database changed mysql> create table testtbl ( -> id int not null auto_increment -> ,name varchar(100) -> ,insuser char(10) not null -> ,insdatetime timestamp not null default current_timestamp -> ,upduser char(10) not null -> ,upddatetime timestamp not null default current_timestamp on update current_timestamp -> ,primary key( id ) -> ) -> ; Query OK, 0 rows affected (0.09 sec) mysql> insert into testtbl(name,insuser,upduser) values('あああああ','testuser01','testuser01'); Query OK, 1 row affected (0.06 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> select * from testtbl; +----+-----------------+------------+---------------------+------------+---------------------+ | id | name | insuser | insdatetime | upduser | upddatetime | +----+-----------------+------------+---------------------+------------+---------------------+ | 1 | あああああ | testuser01 | 2020-09-01 22:29:21 | testuser01 | 2020-09-01 22:29:21 | +----+-----------------+------------+---------------------+------------+---------------------+ 1 row in set (0.00 sec) mysql>
PHP7.4.9@192.168.0.12上での準備
やってることはapache2のドキュメントルート上にMySQLに接続してSELECTして取得したレコードを表示する、ただそれだけのphpファイルを用意。
# vim /var/www/html/testdb.php <?php echo "<!doctype html>\n"; echo "<html class='no-js' lang='ja'>\n"; echo "<head>\n"; echo " <meta charset='utf-8'>\n"; echo " <title></title>\n"; echo " <link rel='stylesheet' href='css/test.css'>\n"; echo "</head>\n"; echo "<body>\n"; try{ echo "<h1>PHPからMySQLへの接続テスト</h1>\n"; // MySQLへ接続する $db = new PDO("mysql:dbname=testdb;host=192.168.0.13", "testuser", "testpassword"); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "<h2>SQL文</h2>\n"; echo "<div>\n"; echo "SELECT * FROM testtbl\n"; echo "</div>\n"; // クエリを送信する $sql = $db->prepare( "SELECT * FROM testtbl" ); $sql->execute(); echo "<h2>結果</h2>\n"; echo "<div>\n"; //結果セットを取得・表示する $all = $sql->fetchAll(); foreach ($all as $data){ var_dump($data); } echo "</div>\n"; $db = null; }catch(PDOException $e){ echo $e->getMessage(); exit; } echo "</body>\n"; echo "</html>\n"; ?>
実行
ブラウザーから以下に接続。
はい、OK。
5.まとめ
今日は以上!
半沢生放送、俺は意外に面白かった。
6.参考
今回も先人の方たちに感謝。
【Ubuntu 18.04 LTS Server】Apache2とPHP7.2を動かす | The modern stone age.
コメント