はじめに
前回立ち上げたAWSのLightsailのサーバ(OS:Almalinux)に「Apache + Tomcat + PostgreSQL」の環境を構築します。
ここでの目標は業務でよくある組合せの環境を構築することです。
- 表記のミドルウェアのインストール
- PostgreSQLの初期化とアクセス確認
- Apache→TomcatのAJP連携
なお、AWSのLightsailで立ち上げた環境を前提にしています。
不慣れな人も対象にするので当たり前じゃんみたいなところも軽く説明していたりもします。
なお、Almalinuxとは書いていますが、Redhat系なら他のディストリビューションでもほとんど変わりません。
前回のAWSのLightsail構築についてはこちらを参照
まずはサーバにSSHでログイン
私は基本的にTeratermでつなげて作業していますが、サーバで作業できるコンソールがあれば何でもいいです。
(以降Teratermのイメージで)
Teratermで作業するために先にSSHキーをダウンロードしておいてください。
以下のリンクからダウンロードできます。
また、ダウンロードしたファイルは大事に他の人の渡らないように保管してください。
(この作業はダウンロードが済んでいれば毎回行う必要はありません。)
キーをダウンロードしたら、Teratermを起動してください。
IPアドレスを入力して、ServiceはSSH(多分でデフォルトなのでそのまま)、TCPPort#は22のままで接続(「OK」ボタン)する。
ちなみに、ここで言うIPアドレスは前回説明したLightsailの画面で言うとこの部分です。
(IPアドレスは画像から消しています)
初めてのサーバに接続する場合は「OK」ボタンを押すとこんな画面になります。
そのまま「Continue」ボタンを押してください。
警告が出ている意味は「え?知らないサーバだけど大丈夫?」ってことですが、出来立てほやほやのサーバに初めて接続するので当たり前と言えば当たり前です。
なので、無視して接続してください
以下の画面がでますので、User name に「ec2-user」(これはLightsailでログインする際のデフォルトで設定されているユーザです)を入力してください。
次に、「Use RSA/DSA/E…」のオプションを選択して、先ほどダウンロードしたキーファイルを選択してください。
ファイル名は拡張子.pemと言うファイルのはずです。
ユーザの入力と、ファイルの選択が終わったら「OK」を押してください。
以下の様なプロンプトが表示されたらログインできました。
(歯抜け部分はIPアドレスなので気にしないでください)
ちょっとした設定
ここから先の説明の前にちょっとイメージが異なるところは事前にこんな設定をしているからです。
もしよければ試してください。
Apacheをインストールしてみる
ログイン直後はec2-userのままでインストール権限を持っていないので、先にrootユーザに切り替えます。
[ec2-user:~]$ sudo su – root
[root:~]$
プロンプトがrootに変わったら切り替わっています。
切り替わったら次のコマンドを実行してください。
[root:~]$ yum -y install httpd
実行すると、ずらっとインストールログが流れていくと思います。
しばらくすると、最後にこんな感じのログが流れて完了します。(長いので最後だけ)
:
Installed:
almalinux-logos-httpd-90.5.1-1.1.el9.noarch apr-1.7.0-12.el9_3.x86_64 apr-util-1.6.1-23.el9.x86_64
apr-util-bdb-1.6.1-23.el9.x86_64 apr-util-openssl-1.6.1-23.el9.x86_64 httpd-2.4.57-5.el9.x86_64
httpd-core-2.4.57-5.el9.x86_64 httpd-filesystem-2.4.57-5.el9.noarch httpd-tools-2.4.57-5.el9.x86_64
mailcap-2.1.49-5.el9.noarch mod_http2-1.15.19-5.el9_3.1.x86_64 mod_lua-2.4.57-5.el9.x86_64
Complete!
これでapacheのインストールは完了しました。
簡単です。
この「yum」からはじまるコマンドでインストールすることを、パッケージからインストールすると言います。
昔はソースとコンパイラをダウンロードして、コンパイル環境を作ってからコンパイルする感じで非常に手間がかかりましたが、今はこんなに簡単にインストールできます。
なお、yumは基本的にパッケージに登録されている最新のバージョンでインストールされます。
(今回は2024/05/03時点のバージョンでインストールしています)
パッケージについて詳しく知りたい人は以下のRedhatのマニュアルをどうぞ
ともあれインストールされたか確認してみましょう。
まずは、インストールされたバージョンの確認は以下のコマンドでできます。
[root:~]$ httpd -v
Server version: Apache/2.4.57 (AlmaLinux)
Server built: Jul 20 2023 00:00:00
上記の結果から今回インストールされたapacheのバージョンは2.4.57であることがわかります。
次に、インスタンス起動時に自動的にapacheが立ち上がるようにサービスの登録を行います。
以下のコマンドを実行してください。
[root:~]$ systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
これで、次回起動時に自動的にapacheが起動されます。
なお、「/etc/systemd/system/」「/usr/lib/systemd/system/」の関係性などは今は知らなくても問題ありません。
今はこうすればサービスに登録できるんだな程度でいいです。
詳しく知りたい方は以下をどうぞ
サービスに登録しただけでは、apacheは起動しません。
次のコマンドでapacheを起動します。
[root:~]$ systemctl start httpd
ちゃんと起動されたかを確認するには次のコマンドで確認します。
[root:~]$ systemctl status httpd
● httpd.service – The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
Active: active (running) since Tue 2024-04-30 07:56:53 UTC; 11s ago
Docs: man:httpd.service(8)
Main PID: 28923 (httpd)
Status: “Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec: 0 B/sec”
Tasks: 213 (limit: 2268)
Memory: 15.3M
CPU: 69ms
CGroup: /system.slice/httpd.service
├28923 /usr/sbin/httpd -DFOREGROUND
├28924 /usr/sbin/httpd -DFOREGROUND
├28925 /usr/sbin/httpd -DFOREGROUND
├28926 /usr/sbin/httpd -DFOREGROUND
└28927 /usr/sbin/httpd -DFOREGROUND
Apr 30 07:56:53 ip-172-26-8-233.ap-northeast-1.compute.internal systemd[1]: Starting The Apache HTTP Server…
Apr 30 07:56:53 ip-172-26-8-233.ap-northeast-1.compute.internal systemd[1]: Started The Apache HTTP Server.
Apr 30 07:56:53 ip-172-26-8-233.ap-northeast-1.compute.internal httpd[28923]: Server configured, listening on: port 80
こんな感じになると思うので、Activeがactive(runnning)となっていれば起動されていると思ってください。
systemctlコマンドは簡単に以下の様に覚えておくと良いです。
[root:~]$ systemctl start httpd ⇐ サービスの起動
[root:~]$ systemctl stop httpd ⇐ サービスの停止
[root:~]$ systemctl restart httpd ⇐ サービスの再起動
[root:~]$ systemctl status httpd ⇐サービスの状態確認
いずれもroot権限がないと実行できないので注意です。
さて、これでapacheが起動されたので、実際にブラウザからアクセスしてみます。
URLは「http://パブリックIPアドレス」でアクセスできます。
こんな画面が出たら成功です。
既にこの段階で、インターネットを通じてサーバで用意したページが表示されています。
Javaをインストールしてみる
先にTomcatの実行環境となるJavaをインストールします。
最近は「amazon corretto」を使用することが多いので、ここでも「Amazon corretto」をインストールしてみることとします。
まず、下に従ってパッケージの更新をします。
細かいことが知りたい場合は下のページを参照願います。
こんな感じでコマンドを実行します。
[root:~]$ rpm –import https://yum.corretto.aws/corretto.key
[root:~]$ curl -L -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 147 100 147 0 0 3418 0 –:–:– –:–:– –:–:– 3418
パッケージが更新されたら、yumをつかってAmazonCorrettoをインストールします。
[root:~]$ yum install -y java-11-amazon-corretto-devel
実行すると、ずらっとインストールログが流れてきます。(Apacheの時と同じ)
しばらくすると、最後にこんな感じのログが流れて完了します。(長いのでこれも最後だけ)
:
Installed:
java-11-amazon-corretto-devel-1:11.0.23.9-1.x86_64
Complete!
正常にインストールされているか確認してみます。
[root:~]$ java -version
openjdk version “11.0.23” 2024-04-16 LTS
OpenJDK Runtime Environment Corretto-11.0.23.9.1 (build 11.0.23+9-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.23.9.1 (build 11.0.23+9-LTS, mixed mode)
こんな感じでインストールされたJavaのバージョンが表示されたら成功です。
Tomcatをインストールしてみる
では、Tomcatのインストールコマンドを実行します。
[root:~]$ yum -y install tomcat
実行すると、ずらっとインストールログが流れてきます。(Apacheの時よりも長い)
しばらくすると、最後にこんな感じのログが流れて完了します。(長いのでこれも最後だけ)
:
tomcat-el-3.0-api-1:9.0.62-37.el9_3.2.noarch tomcat-jsp-2.3-api-1:9.0.62-37.el9_3.2.noarch
tomcat-lib-1:9.0.62-37.el9_3.2.noarch tomcat-servlet-4.0-api-1:9.0.62-37.el9_3.2.noarch
tzdata-java-2024a-1.el9.noarch
Complete!
これでTomcatのインストールも完了しました。
さて、インストールされたTomcatのバージョンを調べてみます。
[root:~]$ tomcat version
NOTE: Picked up JDK_JAVA_OPTIONS: –add-opens=java.base/java.lang=ALL-UNNAMED –add-opens=java.base/java.io=ALL-UNNAMED –add-opens=java.base/java.util=ALL-UNNAMED –add-opens=java.base/java.util.concurrent=ALL-UNNAMED –add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
Server version: Apache Tomcat/9.0.62
Server built: Jan 6 1970 00:33:03 UTC
Server number: 9.0.62.0
OS Name: Linux
OS Version: 5.14.0-362.18.1.el9_3.x86_64
Architecture: amd64
JVM Version: 11.0.23+9-LTS
JVM Vendor: Amazon.com Inc.
バージョンのほかに、JVMも先ほどインストールしたAmazonCorrettoを参照していることがわかります。
あ、ついでにtomcatが起動したか確認したいのでいつもの猫ちゃんのページをインストールします。
インストール結果は省略しますね。
[root:~]$ yum -y install tomcat-webapps
ここで、Tomcatもサービスに登録して
[root:~]$ systemctl enable tomcat
Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service → /usr/lib/systemd/system/tomcat.service.
サービスの起動をします。
[root:~]$ systemctl start tomcat
さて、Tomcatが起動しているかクライアントから確認したいのですが、ひとつAWS Lightsail側の設定が必要になります。
それはネットワーク設定です。
Tomcatは8080ポート(デフォルト)で待機するので、8080ポートの通信が出来るようにしてやらないと、クライアントから接続に行っても入り口ではじかれてしまいます。
次の設定を行ってください。
まずかAmazon LightSail の設定画面からインスタンスを選択し「ネットワーク」のタブを開いてください。
そこのファイアウォール設定で、以下のように設定して「8080」ポートを開けてください。
こんな感じにリストに反映されたらファイアウォールの設定は完了です。
では早速Tomcatのトップ画面を見に行きましょう。
URLは「http://パブリックIPアドレス:8080」でアクセスできます。
こんな画面が出たら成功です。
PostgreSQLをインストールしてみる
PostgreSQLですが、インストールコマンドは実はこのサイトに行くとコマンドを支持してくれます。
実際にそのページに飛んでみて、PostgreSQL Yum Repositoryの項目に移動して、今回インストールするPostgreSQLとOSのバージョン、アーキテクチャを選択します。
折角なので最新のPostgreSQLを入れたいのでバージョンは16で入れてみます。
すると、「4.Copy, paste and run the relevant parts of the setup script」の欄に実行すべきスクリプトが表示されますので、これをコピーして順に実行するだけです。
#Install the repository RPM:
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
#Disable the built-in PostgreSQL module:
sudo dnf -qy module disable postgresql
#Install PostgreSQL:
sudo dnf install -y postgresql16-server
#Optionally initialize the database and enable automatic start:
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
sudo systemctl enable postgresql-16
sudo systemctl start postgresql-16
では、これにそって順次実行していきます。
[root:~]$ dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
完了したら今まで行ってきたのと同じように「Complete!」とでます。
次です。
[root:~]$ dnf -qy module disable postgresql
これは実行が終わったら、すんっと終わるだけです。
では、本体のインストールに入ります。
[root:~]$ dnf install -y postgresql16-server
かなりずらずらとインストールログが流れますが「Complete!」とでれば完了です。
これで本体はインストールされましたが、使うための初期設定をします。
[root:~]$ /usr/pgsql-16/bin/postgresql-16-setup initdb
「Initializing database … OK」とでたら完了です。
最後にサービスの登録と
[root:~]$ systemctl enable postgresql-16
サービスの起動を行えば
[root:~]$ systemctl start postgresql-16
これで、データベースは起動されました。
Apache→TomcatのAJP連携
最後に、ApacheとTomcatが連携できるような設定をするところまでで、この投稿は終了とします。
なぜこんなことが必要なのかは別の投稿を作成しようと思いますので、ここでは触れません。
ただ、サービスを展開する上ではこの設定は良く行われますし、私のところでは必須の設定にしています。
まずは、apacheの設定を行います。
/etc/httpd/conf/配下にhttpd.confと言うファイルがあると思います。
これがApacheの設定ファイルです。
viと言うテキストエディタを使って開きます。
viと言うのはwindowsで言うところのメモ帳みたいなアプリです。
Linuxではこれをつかってテキストを編集していきます。
※ほかにもvim等のテキストエディタはありますのでお好みでインストールしてください
ここでは標準で入っているviを使用します。
ただ、すべての操作をキーボードで行うのでwindowsのテキストエディタに慣れているとちょっと苦戦するかもしれません。
ここでviの使い方まで説明すると終わらないのでviの使い方は個別に調べてみてください。
(おすすめ→https://docs.oracle.com/cd/E19253-01/816-3946/editorvi-tbl-83/index.html)
以下のコマンドでファイルが編集できます。
[root:~]$ vi /etc/httpd/conf/httpd.conf
ファイルが開くとこんな感じの画面になると思います。
実はいろいろな設定項目があり、自分の用途に合わせて修正が可能です。
これは、興味があればいろいろといじってみてください。
そのための、自分のサーバです。
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
#
# See the httpd.conf(5) man page for more information on this configuration,
# and httpd.service(8) on using and configuring the httpd service.
#
# Do NOT simply read the instructions in here without understanding
# what they do. They’re here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
#
今回はパラメータの編集ではなく、以下の様に最終行にProxyPass、ProxyPassReverseを追加する。
# Supplemental configuration
#
# Load config files in the “/etc/httpd/conf.d” directory, if any.
IncludeOptional conf.d/*.conf
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
これを追加して保存してください。
これで、apacheに対して行われたリクエストがすべて、AJPプロトコルを通じてlocalhost:8009に転送される。
(実際にはTomcatの設定も必要になるが)
次にTomatの設定ファイルを修正します。
/usr/share/tomcat/conf/配下にserver.xmlと言うファイルがあるのでこれを修正します。
[root:~]$ vi /usr/share/tomcat/conf/server.xml
まずは、この記述の個所を探してください。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
この記述があることで8080ポートでtomcatがhttp通信を待ち受けてしまいますので、ajpだけで通信するようにするために、コメント化します。
<!--
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
次に、この記述の個所を探してください。
コメントアウトされています。
<!-- Define an AJP 1.3 Connector on port 8009 -->
<!--
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443" />
-->
これを、こんな感じに修正します。
<Connector protocol="AJP/1.3"
port="8009"
secretRequired="false"
redirectPort="8443" />
修正出来たら保存してください。
ApacheとTomcatを再起動して変更した設定を反映します。
[root:~]$ systemctl restart httpd
[root:~]$ systemctl restart tomcat
ここでもうひと手間必要になります。
Redhat系LinuxではSELinuxが導入されておりLightsailでは最初から有効になっています。
詳しくは下記を参照願います。
まず以下のコマンドをうってhttpdの設定状態を確認すると、以下のようにoffとなっているかもしれません。
[root:~]$ getsebool httpd_can_network_connect
httpd_can_network_connect –> off
この場合、このオプションをonにしてあげないとApache→Tomcatの通信ができません。
以下のコマンドで有効にしてあげます。
[root:~]$ setsebool -P httpd_can_network_connect on
これで有効になりました。
コマンド実行後もう一度ステータスを確認すると以下の様になっているはずです。
[root:~]$ getsebool httpd_can_network_connect
httpd_can_network_connect –> on
これで、ApacheからTomcatに連携するための準備は完了です。
では、実際に「http://パブリックIPアドレス」にアクセスしてみます。
先ほどまでは、このアドレスでアクセスするとApacheの用意したページ(以下のページ)が表示されていたと思います。
でも、今回は「http://パブリックIPアドレス」にアクセスすると、以下のページが表示されるはずです。
では逆に、先ほどまでこのページが表示されていた「http://パブリックIPアドレス:8080」にもアクセスしてみてください。
今度は、アクセスできなくなっています。
これは、80番ポートでリクエストをうけたApacheが、Tomcatに連携しているためで
逆に直接アクセスできていたTomcatの8080ポートがリクエストを受付なくなったからです。
ここからアプリなどを制作して今度はTomcat→JSP→PostgreSQLなどで通信をしていくことになりますが、今回はミドルウェアをそろえたところまでで終わりとします。
簡易版(コマンドだけ)
一連に行ったインストールコマンドはこちら
sudo su – root
yum -y install httpd
systemctl enable httpd
systemctl start httpd
rpm –import https://yum.corretto.aws/corretto.key
curl -L -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
yum install -y java-11-amazon-corretto-devel
yum -y install tomcat
yum -y install tomcat-webapps
systemctl enable tomcat
systemctl start tomcat
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf -qy module disable postgresql
dnf install -y postgresql16-server
/usr/pgsql-16/bin/postgresql-16-setup initdb
systemctl enable postgresql-16
systemctl start postgresql-16
vi /etc/httpd/conf/httpd.conf
————以下を追記————
ProxyPass / ajp://localhost:8009/
———————————-
vi /usr/share/tomcat/conf/server.xml
————以下を追記————
<Connector protocol=”AJP/1.3″
port=”8009″
secretRequired=”false”
redirectPort=”8443″ />
———————————-
systemctl restart httpd
setsebool -P httpd_can_network_connect on
さいごに
まずは、やってみることが大事です。
読んで満足くするのではなく、試してみる事です。
この投稿通りやってもうまくいかないところが出てくるかもしれません。
それらを解決する情報、手段はネットの中にいっぱいあります。
自分なりに調べて、到達するそれが大事です。
なお、今回の環境構築で出来上がる全体像はこちら
結構広範囲の環境が構築されています。
関連投稿
もしよければこちらも試してみてください
コメント