質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

0回答

1697閲覧

docker上のAlmaLinux9.0でApache2.4.54とPHP8.1.10をブラウザ上で動かしたい!

y_programming

総合スコア48

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2022/09/24 14:00

編集2022/09/25 00:09

前提

Windows10のDocker Desktopを使ったDocker上でAlmaLinux9.0のイメージからコンテナをつくり、そのコンテナの中で「Apache2.4.54」をインストールしております。そして、「php 8.1.10」をインストールしようとしています。いまのところ、後述します方法でコンテナをつくっています!

実現したいこと

windows10(ホストOS)のブラウザ上でPHPのソースコードがそのまま表示されてしまうため、PHPをインストールし、実行できるようにしたいです!
最終目的は、AlmaLinux9.0上で、PHP8.1.10且つApache2.4.54且つphpMyAdmin 5.2.0の環境をつくりたいと考えております。
今のところ手探りで進めていますが、PHP,Apache,phpMyAdminそれぞれのインストール方法が確立した暁には、Dockerfileにすべてまとめて自動化しようと目論んでおります!

発生している問題・エラーメッセージ

ところが、PHPのインストール手順で先に進めなくなってしまったのです。

事前に準備したDockerfile

Dockerfile

1FROM almalinux:9.0 2 3RUN set -x && \ 4 dnf -y update && \ 5 dnf -y upgrade && \ 6 dnf install -y which && \ 7 dnf install -y procps && \ 8 dnf install -y epel-release && \ 9 dnf -y install pcre-devel && \ 10 dnf -y install expat-devel && \ 11 dnf -y install wget && \ 12 dnf -y install make && \ 13 dnf -y install gcc && \ 14#Apacheより先にperlのインストール 15 cd /usr/local/src/ && \ 16 wget https://www.cpan.org/src/5.0/perl-5.36.0.tar.gz && \ 17 tar zxvf perl-5.36.0.tar.gz && \ 18 cd perl-5.36.0 && \ 19 ./configure.gnu –prefix=/usr/local/perl && \ 20 make && \ 21 make -i test && \ 22 make install && \ 23#aprのインストール 24 cd /usr/local/src/ && \ 25 wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.7.0.tar.gz && \ 26 tar xvzf apr-1.7.0.tar.gz && \ 27 cd apr-1.7.0/ && \ 28 dnf -y install gcc && \ 29 ./configure && \ 30 make && \ 31 make install && \ 32#apr-utilのインストール 33 cd /usr/local/src/ && \ 34 wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.6.1.tar.gz && \ 35 tar xvzf apr-util-1.6.1.tar.gz && \ 36 cd apr-util-1.6.1/ && \ 37 ./configure --with-apr=/usr/local/apr && \ 38 make && \ 39 make install && \ 40#Apache2.4.54のインストール 41 cd /usr/local/src/ && \ 42 wget https://dlcdn.apache.org/httpd/httpd-2.4.54.tar.gz && \ 43 tar xvzf httpd-2.4.54.tar.gz && \ 44 cd httpd-2.4.54/ && \ 45 ./configure --enable-so && \ 46 make && \ 47 make install && \ 48 cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.org

事前に準備したdocker-compose.yml

dockerハイフンcompose.yml

1version: '3.7' 2services: 3 web: 4 container_name: web 5 build: 6 context: . 7 dockerfile: Dockerfile 8 volumes: 9 - ./web/html:/data/www/html 10 ports: 11 - "8080:80" 12 privileged: true 13 tty: true

まず、上記の「Dockerfile」と「docker-compose.yml」があるディレクトリに行き、下記のコマンドでビルドをおこないました。

Dockerfileとdockerハイフンcompose.ymlをつかい、いざビルド

1docker-compose build --no-cache

をおこないました。少し待つとビルドがおわったため、次に

_コンテナを起動する!

1docker-compose up -d

をおこないました。これでコンテナがつくられたはずということで「docker ps」で確認してみますと、

_つくられたコンテナの状態

1CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2コンテナID    イメージ名 "/bin/bash" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp web

のようになりました。そして、

_コンテナへ忍び込み、実態を確認しにいきます

1docker exec -it web /bin/bash

とし、つくったコンテナの中へはいっていきます。PHPは、まだインストールしておりません。

PHPはまだはいっていません

1[root@コンテナID /]# php -v 2bash: php: command not found

Apacheは、下記の通りはいっていることを確認することができました。

_いつものコマンドでは出てこず、実体を直接指定するとバージョン確認ができる。バージョンは、想定通り2.4.54!

1[root@コンテナID /]# httpd -v 2bash: httpd: command not found 3[root@コンテナID /]# /usr/local/apache2/bin/httpd -v 4Server version: Apache/2.4.54 (Unix) 5Server built: Sep 24 2022 12:23:57

そして、以下のようにして、Apacheを起動してみました。

httpd.confでServerNameを指定していないのでAH0058のエラーが出るものの、Apacheの起動はできるものでした。

1[root@コンテナID /]# /usr/local/apache2/bin/httpd -k start 2AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.19.0.2. Set the 'ServerName' directive globally to suppress this message

そして、windows10(ホストOS)で「http://localhost:8080/」にアクセスしてみますと、

It works!

という表示がブラウザ上で確認できたため、Apacheの起動を確認することができました。
そして、「cat /usr/local/apache2/conf/http.conf」のコマンドでApacheの設定内容を見てみると、ドキュメントルートの場所を確認できました。

Apache2.4.54のデフォルトのドキュメントルート

1DocumentRoot "/usr/local/apache2/htdocs" 2<Directory "/usr/local/apache2/htdocs">

実際にそのドキュメントルートのディレクトリには、ブラウザ上に表示された通りのファイルが入っていることを確認できました。

http://localhost:8080/にアクセスしたときに表示されたものと同じであることを確認!

1[root@コンテナID /]# cat /usr/local/apache2/htdocs/index.html 2<html><body><h1>It works!</h1></body></html>

この「It works!」を表示しているのはHTMLのファイルですが、HTMLのみならずPHPも表示したいため、そのための手段を進めていきたいです。現時点では、PHP自体インストールされていないのでPHPのソースコードがそのまま画面に表示される状態となっております。

_用意したこのphpinfo.phpは「http://localhost:8080/phpinfo.php」にアクセス時に実行されることなく画面上でそのままソースが表示となります。

1<?php 2phpinfo();

しらべてみると、どうもPHPのインストール時にPHP実行のためのモジュールを同時に手に入れる必要があるらしいということがわかりました。
下記のリンクのマニュアルに沿って進めればそのモジュール(PHP8の場合php_moduleのようでした)が手に入った状態でPHPをインストールできるのかなと思い作業を進めていたのですが、
途中で詰んでしまい今回の質問を投稿させていただきました。
PHPのマニュアルでは、以下のページが該当箇所と考えております。
Apache 2.x (Unixシステム用)

_↑のマニュアルの中に書かれている、↓のモジュール読み込みを遂行できれば、PHPが実行できるのではと考えております。

1httpd.conf を編集し、PHP の共有モジュールをロードするよう設定します。 2 LoadModule 命令の右側に記述するパスは、システムの PHP 共有モジュール を指している必要があります。 3上記の make install により既にこの設定は 追加されている場合もありますが、確認が必要です。 4 5PHP 8: 6LoadModule php_module modules/libphp.so

マニュアルを参考にPHPのインストールを進めようと思い、以下の手順をおこないました。

cd /usr/local/src wget https://www.php.net/distributions/php-8.1.10.tar.gz --no-check-certificate tar xvzf php-8.1.10.tar.gz cd php-8.1.10 ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql

最後の「.configure~」をおこなった際にエラーが発生しました。内容は以下のものです。

checking for libxml-2.0 >= 2.9.0... no configure: error: Package requirements (libxml-2.0 >= 2.9.0) were not met: Package 'libxml-2.0', required by 'virtual:world', not found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML_CFLAGS and LIBXML_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.

上記のエラーからわかったことをまとめてみると、以下のようになるように思いました。

  • パッケージの要件 (libxml-2.0 >= 2.9.0) が満たされないため、configureでエラーが起きた。
  • 'virtual:world'に必要なパッケージ 'libxml-2.0' がない。
  • 環境変数「PKG_CONFIG_PATH」を設定する必要がある。
  • 環境変数「PKG_CONFIG_PATH」を設定しないのならば、環境変数「LIBXML_CFLAGS」と「LIBXML_LIBS」をそれぞれ設定する。

そこで、「libxml-2.0」をどうやったら手に入れることができるのかと思いしらべてみたところ、以下のページがでてきたため、そこからwgetでダウンロードしてみようと思い、下記の手順をおこなってみました。
https://gitlab.gnome.org/GNOME/libxml2/-/tree/master

cd /usr/local/src/ wget https://gitlab.gnome.org/GNOME/libxml2/-/archive/master/libxml2-master.tar.gz tar xvzf libxml2-master.tar.gz cd libxml2-master dnf -y group install 'Development Tools' ./autogen.sh

最後の「./autogen.sh」をおこなった際に、以下のエラーが発生しました。

I am going to run ./configure with no arguments - if you wish to pass any to it, please specify them on the ./autogen.sh command line. libtoolize: putting auxiliary files in '.'. libtoolize: copying file './ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'. libtoolize: copying file 'm4/libtool.m4' libtoolize: copying file 'm4/ltoptions.m4' libtoolize: copying file 'm4/ltsugar.m4' libtoolize: copying file 'm4/ltversion.m4' libtoolize: copying file 'm4/lt~obsolete.m4' configure.ac:42: error: require Automake 1.16.3, but have 1.16.2 autoreconf: automake failed with exit status: 1 configure: error: cannot find install-sh, install.sh, or shtool in "." "./.." "./../.." Configure script failed, check config.log for more info.

一番下に書いてあったように、「config.log」を確認してみると、「configure: exit 1」という追記があったようですが、
ここでどうしてよいかわからなくなり、手が止まってしまっている状態です。
PHP8.1.10のインストールを進めたいため何かしらヒントが欲しいのですが、何かご存じの方がもしいらっしゃいましたら教えていただけますと幸いです。

また、手順の不備へのご指摘等いただけますと嬉しいです、よろしくお願いたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_programming

2022/09/25 00:08

承知しました、追加いたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問