AlmaLinuxにApache+Tomcat+PostgreSQL

LABO

はじめに

前回立ち上げたAWSのLightsailのサーバ(OS:Almalinux)に「Apache + Tomcat + PostgreSQL」の環境を構築します。
ここでの目標は業務でよくある組合せの環境を構築することです。

  1. 表記のミドルウェアのインストール
  2. PostgreSQLの初期化とアクセス確認
  3. 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ユーザに切り替えます。

プロンプトがrootに変わったら切り替わっています。
切り替わったら次のコマンドを実行してください。

実行すると、ずらっとインストールログが流れていくと思います。
しばらくすると、最後にこんな感じのログが流れて完了します。(長いので最後だけ)

これでapacheのインストールは完了しました。
簡単です。

この「yum」からはじまるコマンドでインストールすることを、パッケージからインストールすると言います。
昔はソースとコンパイラをダウンロードして、コンパイル環境を作ってからコンパイルする感じで非常に手間がかかりましたが、今はこんなに簡単にインストールできます。
なお、yumは基本的にパッケージに登録されている最新のバージョンでインストールされます。
(今回は2024/05/03時点のバージョンでインストールしています)

パッケージについて詳しく知りたい人は以下のRedhatのマニュアルをどうぞ

ともあれインストールされたか確認してみましょう。
まずは、インストールされたバージョンの確認は以下のコマンドでできます。

上記の結果から今回インストールされたapacheのバージョンは2.4.57であることがわかります。

次に、インスタンス起動時に自動的にapacheが立ち上がるようにサービスの登録を行います。
以下のコマンドを実行してください。

これで、次回起動時に自動的にapacheが起動されます。
なお、「/etc/systemd/system/」「/usr/lib/systemd/system/」の関係性などは今は知らなくても問題ありません。
今はこうすればサービスに登録できるんだな程度でいいです。

詳しく知りたい方は以下をどうぞ

サービスに登録しただけでは、apacheは起動しません。
次のコマンドでapacheを起動します。

ちゃんと起動されたかを確認するには次のコマンドで確認します。

こんな感じになると思うので、Activeがactive(runnning)となっていれば起動されていると思ってください。
systemctlコマンドは簡単に以下の様に覚えておくと良いです。

いずれもroot権限がないと実行できないので注意です。

さて、これでapacheが起動されたので、実際にブラウザからアクセスしてみます。
URLは「http://パブリックIPアドレス」でアクセスできます。
こんな画面が出たら成功です。

既にこの段階で、インターネットを通じてサーバで用意したページが表示されています。

Javaをインストールしてみる

先にTomcatの実行環境となるJavaをインストールします。

最近は「amazon corretto」を使用することが多いので、ここでも「Amazon corretto」をインストールしてみることとします。
まず、下に従ってパッケージの更新をします。

細かいことが知りたい場合は下のページを参照願います。

こんな感じでコマンドを実行します。

パッケージが更新されたら、yumをつかってAmazonCorrettoをインストールします。

実行すると、ずらっとインストールログが流れてきます。(Apacheの時と同じ)
しばらくすると、最後にこんな感じのログが流れて完了します。(長いのでこれも最後だけ)

正常にインストールされているか確認してみます。

こんな感じでインストールされたJavaのバージョンが表示されたら成功です。

Tomcatをインストールしてみる

では、Tomcatのインストールコマンドを実行します。

実行すると、ずらっとインストールログが流れてきます。(Apacheの時よりも長い)
しばらくすると、最後にこんな感じのログが流れて完了します。(長いのでこれも最後だけ)

これでTomcatのインストールも完了しました。
さて、インストールされたTomcatのバージョンを調べてみます。

バージョンのほかに、JVMも先ほどインストールしたAmazonCorrettoを参照していることがわかります。
あ、ついでにtomcatが起動したか確認したいのでいつもの猫ちゃんのページをインストールします。
インストール結果は省略しますね。

ここで、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

では、これにそって順次実行していきます。

完了したら今まで行ってきたのと同じように「Complete!」とでます。
次です。

これは実行が終わったら、すんっと終わるだけです。
では、本体のインストールに入ります。

かなりずらずらとインストールログが流れますが「Complete!」とでれば完了です。
これで本体はインストールされましたが、使うための初期設定をします。

「Initializing database … OK」とでたら完了です。
最後にサービスの登録と

サービスの起動を行えば

これで、データベースは起動されました。

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)

以下のコマンドでファイルが編集できます。

ファイルが開くとこんな感じの画面になると思います。
実はいろいろな設定項目があり、自分の用途に合わせて修正が可能です。
これは、興味があればいろいろといじってみてください。
そのための、自分のサーバです。

今回はパラメータの編集ではなく、以下の様に最終行にProxyPass、ProxyPassReverseを追加する。

これを追加して保存してください。
これで、apacheに対して行われたリクエストがすべて、AJPプロトコルを通じてlocalhost:8009に転送される。
(実際にはTomcatの設定も必要になるが)

次にTomatの設定ファイルを修正します。
/usr/share/tomcat/conf/配下にserver.xmlと言うファイルがあるのでこれを修正します。

まずは、この記述の個所を探してください。

この記述があることで8080ポートでtomcatがhttp通信を待ち受けてしまいますので、ajpだけで通信するようにするために、コメント化します。

次に、この記述の個所を探してください。
コメントアウトされています。

これを、こんな感じに修正します。

修正出来たら保存してください。
ApacheとTomcatを再起動して変更した設定を反映します。

ここでもうひと手間必要になります。
Redhat系LinuxではSELinuxが導入されておりLightsailでは最初から有効になっています。

詳しくは下記を参照願います。

まず以下のコマンドをうってhttpdの設定状態を確認すると、以下のようにoffとなっているかもしれません。

この場合、このオプションをonにしてあげないとApache→Tomcatの通信ができません。
以下のコマンドで有効にしてあげます。

これで有効になりました。
コマンド実行後もう一度ステータスを確認すると以下の様になっているはずです。

これで、ApacheからTomcatに連携するための準備は完了です。
では、実際に「http://パブリックIPアドレス」にアクセスしてみます。
先ほどまでは、このアドレスでアクセスするとApacheの用意したページ(以下のページ)が表示されていたと思います。

でも、今回は「http://パブリックIPアドレス」にアクセスすると、以下のページが表示されるはずです。

では逆に、先ほどまでこのページが表示されていた「http://パブリックIPアドレス:8080」にもアクセスしてみてください。

今度は、アクセスできなくなっています。
これは、80番ポートでリクエストをうけたApacheが、Tomcatに連携しているためで
逆に直接アクセスできていたTomcatの8080ポートがリクエストを受付なくなったからです。

ここからアプリなどを制作して今度はTomcat→JSP→PostgreSQLなどで通信をしていくことになりますが、今回はミドルウェアをそろえたところまでで終わりとします。

簡易版(コマンドだけ)

一連に行ったインストールコマンドはこちら

さいごに

まずは、やってみることが大事です。
読んで満足くするのではなく、試してみる事です。
この投稿通りやってもうまくいかないところが出てくるかもしれません。
それらを解決する情報、手段はネットの中にいっぱいあります。
自分なりに調べて、到達するそれが大事です。

なお、今回の環境構築で出来上がる全体像はこちら

結構広範囲の環境が構築されています。

関連投稿

もしよければこちらも試してみてください


コメント

タイトルとURLをコピーしました