apache + perl + cgi + mysql(DBD::mysql, DBI)環境をMacBook Air(M1)のDockerに構築
下図のようにMacBook Air(M1) 上の Docker に Ubuntuを入れて、そこに apache + perl + cgi + mysql(DBD::mysql, DBI)環境を作成する。
■1. Docker コンテナ作成
(1.1)Dockerイメージの取得
docker image pull amd64/ubuntu:focal
(1.2)Dockerコンテナ作成
docker run -p 8080:80 -p 3307:3306 -it -d --name ubuntu amd64/ubuntu:focal
■2. 作成したDockerコンテナの環境構築
(2.1)作ったDockerコンテナにログイン
docker exec -it ubuntu /bin/bash
(2.2)以下を実行し環境を構築
apt update
apt install -y apache2
timezone を聞かれるので適当に応える。
apt install -y wget
apt install -y gcc
apt install -y make
apt install -y mysql-server
apt install -y libmysqlclient-dev
apt install libssl-dev
wget https://www.cpan.org/modules/by-module/DBI/DBI-1.643.tar.gz
tar xvzf DBI-1.643.tar.gz
cd DBI-1.643
perl Makefile.PL
make
make install
cpan update
cpan install DBD::mysql
a2enmod cgid
(2023/4/25追記)
DBIのインストールは、以下ではなく、
wget https://www.cpan.org/modules/by-module/DBI/DBI-1.643.tar.gz tar xvzf DBI-1.643.tar.gz cd DBI-1.643 perl Makefile.PL make make install
以下の方法でもOKです。
cpan install DBI
■3. MySQLのDB作成とサンプルデータ投入
(3.1)DBとユーザ作成
mysqld_safe --user=mysql & mysql -u root mysql>create database mydb; mysql>create user 'test'@localhost identified by 'test'; mysql>grant all privileges on mydb.* to 'test'@localhost; mysql>alter user 'test'@localhost IDENTIFIED WITH mysql_native_password by 'test'; mysql>quit
(3.2)DBに接続しデータをINSERTする。
mysql -u test -p mysql>test mysql>use mydb; mysql>create table m_id(id varchar(30), name varchar(30)); mysql>insert into m_id values('001','admin'); mysql>insert into m_id values('002','Smith'); mysql>insert into m_id values('003','Johnson'); mysql>insert into m_id values('004','Williams'); mysql>commit; mysql>quit
■4. サンプルCGIの設置
(4.1)以下のパスに以下のテスト用Perlプログラム配置
パス:/usr/lib/cgi-bin/test.cgi
ソース:
#!/usr/bin/perl use strict; use DBI; my $DB_HOST="127.0.0.1"; my $DB_PORT="3306"; my $DB_NAME="mydb"; my $DB_USER="test"; my $DB_PASS="test"; sub get_db_conn() { my $dbh=undef; eval { $dbh = DBI->connect("dbi:mysql:dbname=$DB_NAME;host=$DB_HOST;port=$DB_PORT","$DB_USER","$DB_PASS"); }; if($@){ print STDERR "DB ERROR $@n"; $dbh = undef; } return $dbh; } my $dbh = get_db_conn(); my $sql = "select id, name from m_id"; my $sth = $dbh->prepare($sql); $sth->execute(); print "Content-type: text/html;\n\n"; print "<html>"; print "<body>"; print "<table border=1>"; while(my $ary_ref = $sth->fetchrow_arrayref){ my($id, $name) = @$ary_ref; print "<tr><td>$id</td><td>$name</td></tr>"; } print "</table>"; print "</body>"; print "</html>";
(4.2)実行権限をつける
chmod ugo+x /usr/lib/cgi-bin/test.cgi
■5. 動作確認
(5.1)apache起動
apachectl start
(5.2)MacのWebブラウザ上で以下にアクセス
http://localhost:8080/cgi-bin/test.cgi