EOLとなったバージョンのApache+Tomcat+MySQLの構成をEC2に構築する

はじめに

Apache 2.2 + Java 7 + MySQL 5.5 + Tomcat7の環境で検証をする必要があったので、 これらをソースからインストールする方法を記載する。
当然、どれもEOLのためセキュリティ的に脆弱な部分があることに留意する。
これらは全て検証で使用するため、公開サーバとすることはない。
例によってAWS EC2で構築する。

環境

Apache 2.2.34
OpenSSL 1.0.2k
Tomcat 7.0.79
MySQL 5.5.62
Java 7 (jdk7u80)

EC2の構築

まずは、インストール元となるインスタンスを構築する。
x86 アーキテクチャではなく arm アーキテクチャでは対応するビルドができない可能性があるため、今回は x86 アーキテクチャのインスタンスで実施する。

EC2の設定

下記のような設定で構築する。

OS: AmazonLinux2023
インスタンスタイプ: t3.micro
セキュリティグループ: 22, 80, 443, 8080を自分のIPのみ開放
ストレージ: gp3 8GB
ec2-setting

接続
ec2-connect-instance

※以前の記事でも記載したが、RLoginで接続する際に 鍵方式が SHA1 だとエラーが出る。
その場合は、SHA2-256, SHA2-512 のいずれかの方式に変更して接続すること。

ミドルウェアのインストール

接続が完了したら早速インストールの作業を始める。
全てEOLになっているため、通常のパッケージマネージャーから入れられない。
そのため、アーカイブされたソースからインストールする方法をとる。

make gccのインストール

sudo dnf install make gcc

↓この辺が入る。

Dependencies resolved.
===========================================================================================================================================================================================================
 Package                                              Architecture                             Version                                                 Repository                                     Size
===========================================================================================================================================================================================================
Installing:
 gcc                                                  x86_64                                   11.3.1-4.amzn2023.0.3                                   amazonlinux                                    32 M
 make                                                 x86_64                                   1:4.3-5.amzn2023.0.2                                    amazonlinux                                   534 k
Installing dependencies:
 annobin-docs                                         noarch                                   10.93-1.amzn2023.0.1                                    amazonlinux                                    92 k
 annobin-plugin-gcc                                   x86_64                                   10.93-1.amzn2023.0.1                                    amazonlinux                                   887 k
 cpp                                                  x86_64                                   11.3.1-4.amzn2023.0.3                                   amazonlinux                                    10 M
 gc                                                   x86_64                                   8.0.4-5.amzn2023.0.2                                    amazonlinux                                   105 k
 glibc-devel                                          x86_64                                   2.34-52.amzn2023.0.2                                    amazonlinux                                    48 k
 glibc-headers-x86                                    noarch                                   2.34-52.amzn2023.0.2                                    amazonlinux                                   448 k
 guile22                                              x86_64                                   2.2.7-2.amzn2023.0.2                                    amazonlinux                                   6.4 M
 kernel-headers                                       x86_64                                   6.1.21-1.45.amzn2023                                    amazonlinux                                   1.4 M
 libmpc                                               x86_64                                   1.2.1-2.amzn2023.0.2                                    amazonlinux                                    62 k
 libtool-ltdl                                         x86_64                                   2.4.7-1.amzn2023.0.3                                    amazonlinux                                    38 k
 libxcrypt-devel                                      x86_64                                   4.4.33-7.amzn2023                                       amazonlinux                                    32 k

Transaction Summary
===========================================================================================================================================================================================================
Install  13 Packages

OpenSSLインストール

ソースビルドに下記のパッケージが必要になるため事前に入れておく。

sudo dnf install perl zlib-devel
$ cd /usr/local/src
$ sudo wget https://ftp.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz
$ sudo tar xvfz openssl-1.0.2k.tar.gz
$ cd openssl-1.0.2k
$ sudo ./config shared zlib

↓下記が出ればOK

....
make[1]: Leaving directory '/usr/local/src/openssl-1.0.2k/test'
Configured for linux-x86_64.

インストール作業を実施する。

# makeの実施
$ sudo make depend
$ sudo make
$ sudo make test

# インストール
$ sudo make install

↓こんな感じで終了しているはず。

...
cp libcrypto.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/libcrypto.pc
cp libssl.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/libssl.pc
cp openssl.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/openssl.pc
[ec2-user@ip-172-31-35-61 openssl-1.0.2k]$ 

インストールしたOpenSSLを適用させる。

# confの作成
sudo sh -c "echo '/usr/local/ssl/lib' >> /etc/ld.so.conf.d/openssl-1.0.2k.conf"

# 確認
less /etc/ld.so.conf.d/openssl-1.0.2k.conf

/usr/local/ssl/lib
と書いてあればOK!

# 反映
sudo /sbin/ldconfig

# SSLの共有ライブラリがどれを見ているのか確認
ldconfig -p | grep -i libssl

[ec2-user@ip-172-31-35-61 openssl-1.0.2k]$ ldconfig -p | grep -i libssl
        libssl3.so (libc6,x86-64) => /lib64/libssl3.so
        libssl.so.3 (libc6,x86-64) => /lib64/libssl.so.3
        libssl.so.1.0.0 (libc6,x86-64) => /usr/local/ssl/lib/libssl.so.1.0.0
        libssl.so (libc6,x86-64) => /usr/local/ssl/lib/libssl.so
先程インストールしたディレクトリになっているのでOK

シンボリックリンクの変更

[ec2-user@ip-172-31-35-61 openssl-1.0.2k]$ openssl version
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)

現状だと、 openssl のバイナリが既にインストール済みのものを見ているので、これを変更する。

which コマンドで確認し、修正を行う。

[ec2-user@ip-172-31-35-61 openssl-1.0.2k]$ which openssl
/usr/bin/openssl

$ cd /usr/bin
$ sudo mv openssl openssl-3.0.8
$ sudo ln -s /usr/local/ssl/bin/openssl openssl
$ openssl version

[ec2-user@ip-172-31-35-61 bin]$ openssl version
OpenSSL 1.0.2k  26 Jan 2017

これでOpenSSLのインストール作業は完了

Apacheのインストール

例によって、 /usr/local/src に入れる。 Apache のモジュールについては、ほぼ全部入れているが適宜オプションを変更すること。

$ cd /usr/local/src
$ sudo curl -LO http://archive.apache.org/dist/httpd/httpd-2.2.34.tar.gz
$ sudo tar zxf httpd-2.2.34.tar.gz
$ cd httpd-2.2.34
$ sudo ./configure \
  --with-ssl=/usr/local/ssl \
  --enable-mods-shared=all \
  --enable-proxy \
  --enable-ssl \
  --enable-usertrack \
  --enable-so \
  --enable-authn-alias \
  --enable-cache \
  --enable-disk-cache \
  --enable-cgi \
  --enable-suexec

※オプションは下記が参考になる。
参考: https://httpd.apache.org/docs/2.2/programs/configure.html

↓下記のようになっていればOK

config.status: creating support/phf_abuse_log.cgi
config.status: creating support/split-logfile
config.status: creating build/rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands

インストール

$ sudo make
$ sudo make install

↓下記のようになっていればOK

mkdir /usr/local/apache2/man
mkdir /usr/local/apache2/man/man1
mkdir /usr/local/apache2/man/man8
mkdir /usr/local/apache2/manual
make[1]: Leaving directory '/usr/local/src/httpd-2.2.34'

確認する

cd /usr/local/apache2
[ec2-user@ip-172-31-35-61 apache2]$ ./bin/apachectl -V
Server version: Apache/2.2.34 (Unix)
Server built:   Apr  8 2023 17:49:41
Server's Module Magic Number: 20051115:43
Server loaded:  APR 1.5.2, APR-Util 1.5.4
Compiled using: APR 1.5.2, APR-Util 1.5.4
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr/local/apache2"
 -D SUEXEC_BIN="/usr/local/apache2/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

インストールできているようだ。

Apacheユーザで実行できるようにする。

apache ユーザを追加し権限を変更する。

$ sudo useradd -s /sbin/nologin apache
$ sudo usermod -G apache apache
$ sudo chown -R apache:apache /usr/local/apache2

起動ユーザを deamonapache に変更する。

$ sudo vi /usr/local/apache2/conf/httpd.conf
-User daemon
-Group daemon
+User apache
+Group apache

apache2-conf 129-130行目を修正する。

Apacheサービスの登録/自動起動設定

$ sudo vi /etc/systemd/system/httpd.service

下記のように記載して保存する。

[Unit]
Description=The Apache 2.2 HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
EnvironmentFile=/usr/local/apache2/conf/httpd.conf
ExecStart=/usr/local/apache2/bin/apachectl -k start
ExecReload=/usr/local/apache2/bin/apachectl -k graceful
ExecStop=/usr/local/apache2/bin/apachectl -k stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
# サービスの自動起動を有効にする
$ sudo systemctl enable httpd.service

# 確認
$ sudo systemctl list-unit-files | grep httpd.service

こんな感じになる

[ec2-user@ip-172-31-35-61 apache2]$ sudo systemctl list-unit-files | grep httpd.service
httpd.service                          enabled         disabled

実際に起動する。

# 起動
$ sudo systemctl start httpd.service

# 確認
$ sudo systemctl status httpd.service

 httpd.service - The Apache 2.2 HTTP Server
     Loaded: loaded (/etc/systemd/system/httpd.service; enabled; preset: disabled)
     Active: active (running) since Sat 2023-04-08 17:59:00 UTC; 4s ago
    Process: 101878 ExecStart=/usr/local/apache2/bin/apachectl -k start (code=exited, status=0/SUCCESS)
   Main PID: 101931 (httpd)
      Tasks: 6 (limit: 1055)
     Memory: 7.4M
        CPU: 54ms
     CGroup: /system.slice/httpd.service
             ├─101931 /usr/local/apache2/bin/httpd -k start
             ├─101932 /usr/local/apache2/bin/httpd -k start
             ├─101933 /usr/local/apache2/bin/httpd -k start
             ├─101934 /usr/local/apache2/bin/httpd -k start
             ├─101935 /usr/local/apache2/bin/httpd -k start
             └─101936 /usr/local/apache2/bin/httpd -k start

Apr 08 17:58:59 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting httpd.service - The Apache 2.2 HTTP Server...
Apr 08 17:59:00 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Started httpd.service - The Apache 2.2 HTTP Server.

いけてる!

プロセスを確認

[ec2-user@ip-172-31-35-61 apache2]$ ps -ef | grep httpd
root      101931       1  0 17:58 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    101932  101931  0 17:59 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    101933  101931  0 17:59 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    101934  101931  0 17:59 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    101935  101931  0 17:59 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    101936  101931  0 17:59 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
ec2-user  101942    1828  0 17:59 pts/0    00:00:00 grep --color=auto httpd

よさそう。

仕上げに、/usr/local/bin 内に Apachectl, httpdのシンボリックリンクを作成する。

$ cd /usr/local/bin
$ sudo ln -s /usr/local/apache2/bin/httpd httpd
$ sudo ln -s /usr/local/apache2/bin/apachectl apachectl

おまけ: ビルドオプションを忘れた場合に確認する方法

$ cd /usr/local/apache2/build
$ less config.nice

config.nice にビルド時のオプションが記載されている。

この時点でブラウザからアクセスできるか確認してみる。
apache2-http-access

It Works が出てるのでOK

SSL証明書の作成

適当なSSL証明書を作成しておく。

$ cd ~
$ openssl genrsa 2048 > server.key
$ openssl req -new -key server.key > server.csr

[ec2-user@ip-172-31-35-61 ~]$ openssl req -new -key server.key > server.csr
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:
A challenge password []:
An optional company name []:


$ openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt

[ec2-user@ip-172-31-35-61 ~]$ openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt
Signature ok
subject=/C=JP/ST=Tokyo/O=Internet Widgits Pty Ltd/CN=localhost
Getting Private key

こんな感じで作成、とっても適当!

Apache のディレクトリに入れておく。

$ cd ~
$ sudo mkdir -p /usr/local/apache2/ssl
$ sudo cp server* /usr/local/apache2/ssl

ssl.conf の修正

$ cd /usr/local/apache2/conf/extra/

# バックアップを取って差分を取れるようにしておく。
$ sudo cp httpd-ssl.conf httpd-ssl.conf.bk
$ sudo vi httpd-ssl.conf
[ec2-user@ip-172-31-35-61 extra]$ diff -u httpd-ssl.conf.bk httpd-ssl.conf
--- httpd-ssl.conf.bk   2023-04-08 18:07:39.164674897 +0000
+++ httpd-ssl.conf      2023-04-08 18:09:04.955485116 +0000
@@ -112,8 +112,8 @@
 
 #   General setup for the virtual host
 DocumentRoot "/usr/local/apache2/htdocs"
-ServerName www.example.com:443
-ServerAdmin you@example.com
+#ServerName www.example.com:443
+#ServerAdmin you@example.com
 ErrorLog "/usr/local/apache2/logs/error_log"
 TransferLog "/usr/local/apache2/logs/access_log"
 
@@ -131,7 +131,7 @@
 #   Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
 #   require an ECC certificate which can also be configured in
 #   parallel.
-SSLCertificateFile "/usr/local/apache2/conf/server.crt"
+SSLCertificateFile "/usr/local/apache2/ssl/server.crt"
 #SSLCertificateFile "/usr/local/apache2/conf/server-dsa.crt"
 #SSLCertificateFile "/usr/local/apache2/conf/server-ecc.crt"
 
@@ -141,7 +141,7 @@
 #   you've both a RSA and a DSA private key you can configure
 #   both in parallel (to also allow the use of DSA ciphers, etc.)
 #   ECC keys, when in use, can also be configured in parallel
-SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
+SSLCertificateKeyFile "/usr/local/apache2/ssl/server.key"
 #SSLCertificateKeyFile "/usr/local/apache2/conf/server-dsa.key"
 #SSLCertificateKeyFile "/usr/local/apache2/conf/server-ecc.key"

httpd.conf の修正

cd /usr/local/apache2/conf/

# バックアップを取って差分を取れるようにしておく。
sudo cp httpd.conf httpd.conf.bk
sudo vi httpd.conf
--- httpd.conf.bk       2023-04-08 18:15:31.759104907 +0000
+++ httpd.conf  2023-04-08 18:16:08.459447728 +0000
@@ -178,8 +178,6 @@
 <Directory />
     Options FollowSymLinks
     AllowOverride None
-    Order deny,allow
-    Deny from all
 </Directory>
 
 #
@@ -477,7 +475,7 @@
 #Include conf/extra/httpd-default.conf
 
 # Secure (SSL/TLS) connections
-#Include conf/extra/httpd-ssl.conf
+Include conf/extra/httpd-ssl.conf
 #
 # Note: The following must must be present to support
 #       starting without SSL on platforms with no /dev/random equivalent

これで ssl 接続ができるようになっているはずなので確認してみる。

$ sudo systemctl restart httpd.service
$ sudo systemctl status httpd.service
(active runningになっていればOK)

apache2-https-access
証明書は自己証明書なので警告が出ているが、https でアクセスはできている。
これで Apache のインストールは完了

Javaのインストール

Tomcatを入れる前に、Javaを入れておく必要がある。

Java8をパッケージから入れる

$ sudo dnf install java-1.8.0-amazon-corretto-devel
[ec2-user@ip-172-31-35-61 ~]$ java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment Corretto-8.362.08.1 (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM Corretto-8.362.08.1 (build 25.362-b08, mixed mode)

Java7をalternativesで切り替えられるようにする

  1. 下記URLから、 Linux x64jdk-7u80-linux-x64.tar.gz をダウンロードする。
    URL: https://www.oracle.com/jp/java/technologies/javase/javase7-archive-downloads.html java-archive-download

  2. オラクルのサインインを求められるので、サインインする。

  3. 再度URLにアクセスし、ダウンロードする。

  4. ダウンロードしたソースをファイル転送でサーバにいれる。
    以降は/home/ec2-user に入る想定で記載する。

  5. バイナリを /usr/local/src に入れ、解凍する。

$ cd /usr/local/src
$ sudo mv /home/ec2-user/jdk-7u80-linux-x64.tar.gz .
$ sudo tar xzvf jdk-7u80-linux-x64.tar.gz
  1. バージョンを確認しておく。
[ec2-user@ip-172-31-1-72 src]$ ./jdk1.7.0_80/bin/java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
  1. update-alternatives で入れる。
$ sudo update-alternatives --verbose --install /usr/bin/java java /usr/local/src/jdk1.7.0_80/bin/java 10

[ec2-user@ip-172-31-35-61 src]$ java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment Corretto-8.362.08.1 (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM Corretto-8.362.08.1 (build 25.362-b08, mixed mode)

この状態だとまだ切り替わっていない。 切り替えるには、 config オプションで変える。

  1. configjava の向き先を変える。
$ sudo update-alternatives --config java

[ec2-user@ip-172-31-35-61 src]$ sudo update-alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
   2           /usr/local/src/jdk1.7.0_80/bin/java

Enter to keep the current selection[+], or type selection number: 2

2 を選択して java の向き先を先程インストールししたディレクトリにする。

  1. 変更されたかの確認
[ec2-user@ip-172-31-35-61 src]$ java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

参考: https://qiita.com/yochapan/items/af86a320035f8db7daf4

Tomcatのインストール

Tomcat 7.0.79はアーカイブされているバージョンのため、アーカイブからパッケージをダウンロードしてインストールする。
リンク: https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.79/bin/

$ cd /usr/local/src
$ sudo wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.79/bin/apache-tomcat-7.0.79.tar.gz
$ sudo tar xvzf apache-tomcat-7.0.79.tar.gz
$ sudo mv apache-tomcat-7.0.79 /usr/local/tomcat
$ sudo useradd -d /usr/local/tomcat -s /bin/false tomcat
$ sudo chown -R tomcat: /usr/local/tomcat
$ sudo /usr/local/tomcat/bin/startup.sh

[ec2-user@ip-172-31-35-61 src]$ sudo /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

※スタートしたかを確認する。 tomcat-http-access

一応 起動時のJVMのバージョンも確認しておく。

[ec2-user@ip-172-31-35-61 conf]$ sudo /usr/local/tomcat/bin/version.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.79
Server built:   Jun 26 2017 16:25:20 UTC
Server number:  7.0.79.0
OS Name:        Linux
OS Version:     6.1.21-1.45.amzn2023.x86_64
Architecture:   amd64
JVM Version:    1.7.0_80-b15
JVM Vendor:     Oracle Corporation

JVM Version: 1.7.0_80-b15 となっているので問題なさそうだ。

AJPでApache経由でアクセスするようにする

Apacheの修正

$ cd /usr/local/apache2/conf
$ sudo cp httpd.conf httpd.conf.bk2
$ sudo vi httpd.conf
[ec2-user@ip-172-31-35-61 conf]$ diff -u httpd.conf.bk2 httpd.conf
--- httpd.conf.bk2      2023-04-08 18:48:43.227590261 +0000
+++ httpd.conf  2023-04-08 18:49:17.707911304 +0000
@@ -485,3 +485,4 @@
 SSLRandomSeed startup builtin
 SSLRandomSeed connect builtin
 </IfModule>
+ProxyPass / ajp://localhost:8009/

Tomcat の修正 (これは不要)

$ cd /usr/local/tomcat/conf
$ sudo cp server.xml server.xml.bk
$ sudo vi server.xml

server.xml を少し修正

[ec2-user@ip-172-31-35-61 conf]$ sudo diff -u server.xml.bk server.xml
--- server.xml.bk       2023-04-08 18:42:29.894113752 +0000
+++ server.xml  2023-04-08 18:43:17.214554519 +0000
@@ -90,8 +90,7 @@
     -->
 
     <!-- Define an AJP 1.3 Connector on port 8009 -->
-    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-
+    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
 
     <!-- An Engine represents the entry point (within Catalina) that processes
          every request.  The Engine implementation for Tomcat stand alone

どちらも再起動する。

$ sudo systemctl restart httpd.service
$ sudo /usr/local/tomcat/bin/shutdown.sh
$ sudo /usr/local/tomcat/bin/startup.sh

apache2-ajp-http-access apache2-ajp-https-access

Tomcatの自動起動の設定

ユニットファイルの作成

sudo vi /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat 7.0.79
ConditionPathExists=/usr/local/tomcat
After=httpd.service

[Service]
User=tomcat
Group=tomcat
Type=oneshot

ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=no
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

httpd.service の後に起動したいので、 After を指定しておく。

$ sudo systemctl daemon-reload
$ sudo systemctl list-unit-files --type=service | grep tomcat
$ sudo systemctl enable tomcat
$ sudo systemctl list-unit-files | grep tomcat.service

$ sudo systemctl status tomcat.service

log ファイルが root になっていると起動できないので、Tomcatを停止し下記を実施する。

$ sudo chown -R tomcat: logs/

これで下記のようにリスタートができるようになる。

$ sudo systemctl restart tomcat.service

[ec2-user@ip-172-31-35-61 conf]$ sudo systemctl status tomcat.service 
 tomcat.service - Apache Tomcat 7.0.79
     Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; preset: disabled)
     Active: active (exited) since Sat 2023-04-08 18:56:29 UTC; 6s ago
    Process: 105003 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 105003 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 1055)
     Memory: 3.9M
        CPU: 4.263s
     CGroup: /system.slice/tomcat.service

Apr 08 18:56:29 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting tomcat.service - Apache Tomcat 7.0.79...
Apr 08 18:56:29 ip-172-31-35-61.ap-northeast-1.compute.internal startup.sh[105003]: Tomcat started.
Apr 08 18:56:29 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Finished tomcat.service - Apache Tomcat 7.0.79.

MySQLのインストール

アーカイブされているバージョンのため、アーカイブからパッケージをダウンロードしてインストールする。 ※URLから直接 dnf install できなかったので wget でまずローカルに落としてから作業した。

$ cd ~
$ mkdir -p work/mysql && cd $_

# mysql5.5.62-server
$ wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-server-5.5.62-1.el7.x86_64.rpm
$ sudo dnf install MySQL-server-5.5.62-1.el7.x86_64.rpm

# mysql5.5.62-client
$ wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-client-5.5.62-1.el7.x86_64.rpm
$ sudo dnf install MySQL-client-5.5.62-1.el7.x86_64.rpm

# mysql5.5.62-devel
$ wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-devel-5.5.62-1.el7.x86_64.rpm
$ sudo dnf install MySQL-devel-5.5.62-1.el7.x86_64.rpm

インストール確認

[ec2-user@ip-172-31-35-61 mysql]$ mysql --version
mysql  Ver 14.14 Distrib 5.5.62, for Linux (x86_64) using readline 5.1

MySQLの自動起動設定

sudo systemctl enable mysql

確認

[ec2-user@ip-172-31-35-61 mysql]$ sudo systemctl status mysql
 mysql.service - LSB: start and stop MySQL
     Loaded: loaded (/etc/rc.d/init.d/mysql; generated)
     Active: inactive (dead)
       Docs: man:systemd-sysv-generator(8)
[ec2-user@ip-172-31-35-61 mysql]$ sudo systemctl start mysql
[ec2-user@ip-172-31-35-61 mysql]$ sudo systemctl start mysql
[ec2-user@ip-172-31-35-61 mysql]$ sudo systemctl status mysql
 mysql.service - LSB: start and stop MySQL
     Loaded: loaded (/etc/rc.d/init.d/mysql; generated)
     Active: active (running) since Sat 2023-04-08 19:00:10 UTC; 5s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 105974 ExecStart=/etc/rc.d/init.d/mysql start (code=exited, status=0/SUCCESS)
      Tasks: 17 (limit: 1055)
     Memory: 66.2M
        CPU: 204ms
     CGroup: /system.slice/mysql.service
             ├─105980 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/ip-172-31-35-61.ap-northeast-1.compute.internal.pid
             └─106066 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=ip-172-31-35-61.ap-northeast-1.compute.internal.err --pid-fil>

Apr 08 19:00:08 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting mysql.service - LSB: start and stop MySQL...
Apr 08 19:00:08 ip-172-31-35-61.ap-northeast-1.compute.internal mysql[105974]: Starting MySQL.
Apr 08 19:00:08 ip-172-31-35-61.ap-northeast-1.compute.internal mysql[105980]: Logging to '/var/lib/mysql/ip-172-31-35-61.ap-northeast-1.compute.internal.err'.
Apr 08 19:00:10 ip-172-31-35-61.ap-northeast-1.compute.internal mysql[105974]: . SUCCESS!
Apr 08 19:00:10 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Started mysql.service - LSB: start and stop MySQL.

mysql に入れるか確認

[ec2-user@ip-172-31-35-61 mysql]$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.62 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

後始末

$ cd ~
$ rm -fr work

my.cnfをカスタマイズする

$ sudo vi /etc/my.cnf.d/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

再起動

sudo systemctl restart mysql

# 確認
[ec2-user@ip-172-31-35-61 ~]$ sudo systemctl status mysql
 mysql.service - LSB: start and stop MySQL
     Loaded: loaded (/etc/rc.d/init.d/mysql; generated)
     Active: active (running) since Sat 2023-04-08 19:02:36 UTC; 4s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 106262 ExecStart=/etc/rc.d/init.d/mysql start (code=exited, status=0/SUCCESS)
      Tasks: 17 (limit: 1055)
     Memory: 36.2M
        CPU: 144ms
     CGroup: /system.slice/mysql.service
             ├─106268 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/ip-172-31-35-61.ap-northeast-1.compute.internal.pid
             └─106355 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=ip-172-31-35-61.ap-northeast-1.compute.internal.err --pid-fil>

Apr 08 19:02:34 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting mysql.service - LSB: start and stop MySQL...
Apr 08 19:02:36 ip-172-31-35-61.ap-northeast-1.compute.internal mysql[106262]: Starting MySQL.. SUCCESS!
Apr 08 19:02:36 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Started mysql.service - LSB: start and stop MySQL.

その他設定しておくこと

UTC->JSTへの修正

$ sudo timedatectl set-timezone Asia/Tokyo

確認

$ date
Sat Apr  8 19:06:40 UTC 2023

$ sudo timedatectl set-timezone Asia/Tokyo

$ date
Sun Apr  9 04:06:49 JST 2023

問題なく変更できている。

rsyslogのインストール

AmazonLinux2023 だと /var/log 系のログファイルがないので、 rsyslog を入れる。

$ sudo dnf install rsyslog

cronのインストール

$ sudo dnf install cronie-noanacron

サービス起動 & 自動起動設定

$ sudo systemctl start crond
$ sudo systemctl enable crond

オプション: Fake SMTPの導入

mailpit という 開発用のSMTPのダミーサーバがある。
これを使用することで、アプリケーションのメール送信を確認することができる。

Dockerのインストール

$ sudo dnf install docker

サービス起動 & 自動起動設定

$ sudo systemctl enable docker
$ sudo systemctl start docker
[ec2-user@ip-172-31-35-61 ~]$ docker version
Client:
 Version:           20.10.17
 API version:       1.41
 Go version:        go1.19.3
 Git commit:        100c701
 Built:             Mon Mar 13 22:41:42 2023
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version": dial unix /var/run/docker.sock: connect: permission denied

Docker composeのインストール

$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
$ mkdir -p $DOCKER_CONFIG/cli-plugins
$ curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose

$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
[ec2-user@ip-172-31-35-61 ~]$ docker compose version
Docker Compose version v2.4.1

ec2-userでDocker起動できるようにする

$ sudo usermod -a -G docker ec2-user
$ sudo chgrp docker /var/run/docker.sock

一度 ec2-user からログアウトしてログインし直す。

[ec2-user@ip-172-31-35-61 ~]$ docker version
Client:
 Version:           20.10.17
 API version:       1.41
 Go version:        go1.19.3
 Git commit:        100c701
 Built:             Mon Mar 13 22:41:42 2023
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.17
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.19.3
  Git commit:       a89b842
  Built:            Mon Mar 13 00:00:00 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.19
  GitCommit:        1e1ea6e986c6c86565bc33d52e34b81b3e2bc71f
 runc:
  Version:          1.1.4
  GitCommit:        5fd4c4d144137e991c4acebb2146ab1483a97925
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[ec2-user@ip-172-31-35-61 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Got permission denied が出なくなったのでOK

mailpitの導入

$ cd ~
$ mkdir -p mailpit && cd $_
$ vi compose.yml

compose.yml は下記のように記載する。

services:
  mailpit:
    image: axllent/mailpit:v1.4.0
    ports:
      - 8025:8025
      - 25:1025

ホストのポート25をコンテナのポート1025に繋げる形にする。

docker compose up -d
[ec2-user@ip-172-31-35-61 mailpit]$ docker compose ps
NAME                COMMAND             SERVICE             STATUS              PORTS
mailpit-mailpit-1   "/mailpit"          mailpit             running             0.0.0.0:25->1025/tcp, 0.0.0.0:8025->8025/tcp, :::25->1025/tcp, :::8025->8025/tcp

これでセットアップは完了だが、AWSの方でセキュリティグループの 8025を開ける必要があるので開けて確認をする。

最終的に下記のようなセキュリティグループの設定になっている。
aws-security-group

アクセスの確認をする。 mailpit-access OK

メール送信をテストする

sendmailを入れる。

$ sudo dnf install sendmail

下記をサーバで実行する。

sendmail -t <<EOL
From: foo@example.com
To: bar@example.com
Subject: test
testmail1
testmail2
EOL

実際にmailpit にメールが来ていることが確認できる。
mailpit-testmail

確認: 再起動後にApache, Tomcat, MySQLが起動しているか

EC2でインスタンスの再起動 or reboot コマンドを実行する。

ps aux

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  3.5  1.7  23152 16440 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 32
root           2  0.0  0.0      0     0 ?        S    04:38   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   04:38   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   04:38   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   04:38   0:00 [slub_flushwq]
root           6  0.0  0.0      0     0 ?        I<   04:38   0:00 [netns]
root           7  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/0:0-cgroup_destroy]
root           8  0.0  0.0      0     0 ?        I<   04:38   0:00 [kworker/0:0H-events_highpri]
root           9  0.4  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:0-flush-259:0]
root          10  0.0  0.0      0     0 ?        I<   04:38   0:00 [mm_percpu_wq]
root          11  0.0  0.0      0     0 ?        I    04:38   0:00 [rcu_tasks_kthread]
root          12  0.0  0.0      0     0 ?        I    04:38   0:00 [rcu_tasks_rude_kthread]
root          13  0.0  0.0      0     0 ?        I    04:38   0:00 [rcu_tasks_trace_kthread]
root          14  0.1  0.0      0     0 ?        S    04:38   0:00 [ksoftirqd/0]
root          15  0.1  0.0      0     0 ?        I    04:38   0:00 [rcu_preempt]
root          16  0.0  0.0      0     0 ?        S    04:38   0:00 [migration/0]
root          17  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/0:1-cgroup_destroy]
root          18  0.0  0.0      0     0 ?        S    04:38   0:00 [cpuhp/0]
root          19  0.0  0.0      0     0 ?        S    04:38   0:00 [cpuhp/1]
root          20  0.1  0.0      0     0 ?        S    04:38   0:00 [migration/1]
root          21  0.1  0.0      0     0 ?        S    04:38   0:00 [ksoftirqd/1]
root          22  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/1:0-cgroup_destroy]
root          23  0.0  0.0      0     0 ?        I<   04:38   0:00 [kworker/1:0H-events_highpri]
root          25  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:1-flush-259:0]
root          26  0.0  0.0      0     0 ?        S    04:38   0:00 [kdevtmpfs]
root          27  0.0  0.0      0     0 ?        I<   04:38   0:00 [inet_frag_wq]
root          28  0.0  0.0      0     0 ?        S    04:38   0:00 [kauditd]
root          29  0.0  0.0      0     0 ?        S    04:38   0:00 [khungtaskd]
root          30  0.0  0.0      0     0 ?        S    04:38   0:00 [oom_reaper]
root          31  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:2-flush-259:0]
root          32  0.0  0.0      0     0 ?        I<   04:38   0:00 [writeback]
root          33  0.0  0.0      0     0 ?        S    04:38   0:00 [kcompactd0]
root          34  0.0  0.0      0     0 ?        SN   04:38   0:00 [khugepaged]
root          35  0.0  0.0      0     0 ?        I<   04:38   0:00 [kintegrityd]
root          36  0.0  0.0      0     0 ?        I<   04:38   0:00 [kblockd]
root          37  0.0  0.0      0     0 ?        I<   04:38   0:00 [blkcg_punt_bio]
root          38  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/1:1-events]
root          39  0.0  0.0      0     0 ?        I<   04:38   0:00 [tpm_dev_wq]
root          40  0.0  0.0      0     0 ?        I<   04:38   0:00 [md]
root          41  0.0  0.0      0     0 ?        I<   04:38   0:00 [edac-poller]
root          42  0.0  0.0      0     0 ?        S    04:38   0:00 [watchdogd]
root          44  0.0  0.0      0     0 ?        I<   04:38   0:00 [kworker/0:1H-kblockd]
root          48  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:3-flush-259:0]
root          49  0.0  0.0      0     0 ?        S    04:38   0:00 [kswapd0]
root          67  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfsalloc]
root          68  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs_mru_cache]
root          70  0.0  0.0      0     0 ?        I<   04:38   0:00 [kthrotld]
root          73  0.1  0.0      0     0 ?        I    04:38   0:00 [kworker/1:2-cgroup_destroy]
root          86  0.0  0.0      0     0 ?        S    04:38   0:00 [xenbus_probe]
root         117  0.0  0.0      0     0 ?        I<   04:38   0:00 [nvme-wq]
root         119  0.0  0.0      0     0 ?        I<   04:38   0:00 [nvme-reset-wq]
root         121  0.0  0.0      0     0 ?        I<   04:38   0:00 [nvme-delete-wq]
root         127  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:4-flush-259:0]
root         128  0.0  0.0      0     0 ?        I<   04:38   0:00 [mld]
root         145  0.0  0.0      0     0 ?        I<   04:38   0:00 [ipv6_addrconf]
root         146  0.0  0.0      0     0 ?        I<   04:38   0:00 [kworker/1:1H-xfs-log/nvme0n1p1]
root         149  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:5-events_unbound]
root         166  0.0  0.0      0     0 ?        I<   04:38   0:00 [kstrp]
root         178  0.0  0.0      0     0 ?        I<   04:38   0:00 [zswap-shrink]
root         179  0.0  0.0      0     0 ?        I<   04:38   0:00 [kworker/u5:0]
root         356  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/0:2-events]
root         357  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/1:3-events]
root         713  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-buf/nvme0n1]
root         714  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-conv/nvme0n]
root         715  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-reclaim/nvm]
root         716  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-blockgc/nvm]
root         717  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-inodegc/nvm]
root         718  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-log/nvme0n1]
root         719  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-cil/nvme0n1]
root         720  0.0  0.0      0     0 ?        S    04:38   0:00 [xfsaild/nvme0n1p1]
root         725  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/0:3-events_power_efficient]
root         726  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/0:4-cgroup_destroy]
root         766  0.8  1.9  50376 18452 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-journald
root        1136  0.4  1.2  37200 11764 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-udevd
systemd+    1150  0.6  1.4  21168 13516 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-resolved
root        1153  0.0  0.2  36024  2384 ?        S<sl 04:38   0:00 /sbin/auditd
root        1159  0.0  0.0      0     0 ?        I<   04:38   0:00 [ena]
root        1165  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:6-flush-259:0]
root        1173  0.0  0.0      0     0 ?        I<   04:38   0:00 [cryptd]
dbus        1237  0.1  0.4   8376  3904 ?        Ss   04:38   0:00 /usr/bin/dbus-broker-launch --scope system --audit
dbus        1270  0.1  0.3   5264  2884 ?        S    04:38   0:00 dbus-broker --log 4 --controller 9 --machine-id ec2160a5242b2c02755b13cec8fa10c6 --max-bytes 536870912 --max-fds 4096 --max-matches 1638
root        1305  0.0  0.7  15260  6520 ?        Ss   04:38   0:00 /usr/bin/systemd-inhibit --what=handle-suspend-key:handle-hibernate-key --who=noah --why=acpid instead --mode=block /usr/sbin/acpid -f
root        1308  0.0  0.3  81328  3092 ?        Ssl  04:38   0:00 /usr/sbin/irqbalance --foreground
libstor+    1309  0.0  0.2  11792  2088 ?        Ss   04:38   0:00 /usr/bin/lsmd -d
root        1311  132  0.7 164768  6868 ?        Ssl  04:38   0:22 /usr/sbin/rngd -f -x pkcs11 -x nist
root        1312  2.5  0.6 180788  5736 ?        Ssl  04:38   0:00 /usr/sbin/rsyslogd -n
root        1313  0.1  1.1 261044 11052 ?        Ss   04:38   0:00 /usr/sbin/sssd -i --logger=files
systemd+    1321  0.4  1.0 235736  9680 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-networkd
root        1327  0.0  0.0      0     0 ?        I<   04:38   0:00 [rpciod]
root        1328  0.0  0.0      0     0 ?        I<   04:38   0:00 [xprtiod]
root        1332  0.6  1.3 262528 12516 ?        S    04:38   0:00 /usr/libexec/sssd/sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files
chrony      1334  0.0  0.3  95776  3600 ?        S    04:38   0:00 /usr/sbin/chronyd -F 2
root        1344  0.4  4.2 276456 39704 ?        S    04:38   0:00 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
root        1350  0.7  4.5 1300204 41900 ?       Ssl  04:38   0:00 /usr/bin/containerd
root        1351  0.0  0.3 281008  3588 ?        Ssl  04:38   0:00 /usr/sbin/gssproxy -D
root        1365  0.2  1.0  17572 10044 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-logind
root        1382  0.0  0.1   2668  1136 ?        S    04:38   0:00 /usr/sbin/acpid -f
root        1411  0.0  0.7  27096  7136 ?        Ss   04:38   0:00 /usr/local/apache2/bin/httpd -k start
tomcat      1448 28.7  7.3 1659696 68440 ?       Sl   04:38   0:04 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.Clas
apache      1494  0.0  0.4  38396  3824 ?        S    04:38   0:00 /usr/local/apache2/bin/httpd -k start
apache      1495  0.0  0.4  38396  3824 ?        S    04:38   0:00 /usr/local/apache2/bin/httpd -k start
apache      1496  0.0  0.4  38396  3824 ?        S    04:38   0:00 /usr/local/apache2/bin/httpd -k start
apache      1497  0.0  0.4  38396  3824 ?        S    04:38   0:00 /usr/local/apache2/bin/httpd -k start
apache      1498  0.0  0.4  38396  3824 ?        S    04:38   0:00 /usr/local/apache2/bin/httpd -k start
root        1526  0.0  1.3 723192 12872 ?        Ssl  04:38   0:00 /usr/bin/amazon-ssm-agent
root        1527  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/1:4-events]
root        1532  0.0  0.8  29104  7992 ?        Ss   04:38   0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root        1540  1.5  6.8 1404380 63616 ?       Ssl  04:38   0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=32768:65536
root        1542  0.0  0.2  20544  2668 ?        Ss   04:38   0:00 /usr/sbin/atd -f
root        1543  0.0  0.3 233420  3704 ?        Ss   04:38   0:00 /usr/sbin/crond -n
root        1544  0.0  0.1 221344  1072 tty1     Ss+  04:38   0:00 /sbin/agetty -o -p -- \u --noclear - linux
root        1545  0.0  0.1 221388  1068 ttyS0    Ss+  04:38   0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,57600,38400,9600 - vt220
root        1548  0.0  0.4 232300  3920 ?        S    04:38   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/ip-172-31-35-61.ap-northeast-1.compute.internal.pid
mysql       1642  0.4  4.7 489956 43672 ?        Sl   04:38   0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=ip-172-31-35-61.a
root        1646  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:7-flush-259:0]
root        1739  0.8  2.4 733964 22808 ?        Sl   04:38   0:00 /usr/bin/ssm-agent-worker
root        1859  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:8-events_unbound]
root        1920  0.4  1.1  41860 10800 ?        Ss   04:38   0:00 sshd: ec2-user [priv]
root        1923  0.6  0.7  15260  6568 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-userdbd
root        1924  0.0  0.8  24704  7704 ?        S    04:38   0:00 systemd-userwork
root        1925  0.0  0.8  24704  7704 ?        S    04:38   0:00 systemd-userwork
root        1926  0.0  0.8  24876  7772 ?        S    04:38   0:00 systemd-userwork
ec2-user    1928  1.5  1.3  19844 12960 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd --user
ec2-user    1930  0.0  0.6  44816  6476 ?        S    04:38   0:00 (sd-pam)
ec2-user    1937  0.1  0.7  42204  6844 ?        R    04:38   0:00 sshd: ec2-user@pts/0
ec2-user    1938  0.4  0.5 233060  5052 pts/0    Ss   04:38   0:00 -bash
root        1942  1.0  0.9  16996  8588 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-hostnamed
root        1961  0.5  0.9 260288  8408 pts/0    S    04:38   0:00 sudo su
root        1963  0.0  0.5 245536  4856 pts/0    S    04:38   0:00 su
root        1964  1.0  0.5 233096  5100 pts/0    S    04:38   0:00 bash
root        1981  0.0  0.3 232520  2932 pts/0    R+   04:38   0:00 ps aux
[ec2-user@ip-172-31-35-61 ~]$ sudo systemctl status httpd.service
 httpd.service - The Apache 2.2 HTTP Server
     Loaded: loaded (/etc/systemd/system/httpd.service; enabled; preset: disabled)
     Active: active (running) since Sun 2023-04-09 04:38:12 JST; 1min 9s ago
    Process: 1354 ExecStart=/usr/local/apache2/bin/apachectl -k start (code=exited, status=0/SUCCESS)
   Main PID: 1411 (httpd)
      Tasks: 6 (limit: 1055)
     Memory: 11.8M
        CPU: 61ms
     CGroup: /system.slice/httpd.service
             ├─1411 /usr/local/apache2/bin/httpd -k start
             ├─1494 /usr/local/apache2/bin/httpd -k start
             ├─1495 /usr/local/apache2/bin/httpd -k start
             ├─1496 /usr/local/apache2/bin/httpd -k start
             ├─1497 /usr/local/apache2/bin/httpd -k start
             └─1498 /usr/local/apache2/bin/httpd -k start

Apr 09 04:38:11 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting httpd.service - The Apache 2.2 HTTP Server...
Apr 09 04:38:12 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Started httpd.service - The Apache 2.2 HTTP Server.
[ec2-user@ip-172-31-35-61 ~]$ systemctl status tomcat.service
 tomcat.service - Apache Tomcat 7.0.79
     Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; preset: disabled)
     Active: active (exited) since Sun 2023-04-09 04:38:12 JST; 1min 15s ago
    Process: 1418 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 1418 (code=exited, status=0/SUCCESS)
      Tasks: 36 (limit: 1055)
     Memory: 91.2M
        CPU: 4.693s
     CGroup: /system.slice/tomcat.service
             └─1448 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize>

Apr 09 04:38:12 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting tomcat.service - Apache Tomcat 7.0.79...
Apr 09 04:38:12 ip-172-31-35-61.ap-northeast-1.compute.internal startup.sh[1418]: Tomcat started.
Apr 09 04:38:12 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Finished tomcat.service - Apache Tomcat 7.0.79.
[ec2-user@ip-172-31-35-61 ~]$ systemctl status mysql.service
 mysql.service - LSB: start and stop MySQL
     Loaded: loaded (/etc/rc.d/init.d/mysql; generated)
     Active: active (running) since Sun 2023-04-09 04:38:16 JST; 1min 18s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 1530 ExecStart=/etc/rc.d/init.d/mysql start (code=exited, status=0/SUCCESS)
      Tasks: 17 (limit: 1055)
     Memory: 49.9M
        CPU: 237ms
     CGroup: /system.slice/mysql.service
             ├─1548 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/ip-172-31-35-61.ap-northeast-1.compute.internal.pid
             └─1642 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=ip-172-31-35-61.ap-northeast-1.compute.internal.err --pid-file=>

Apr 09 04:38:14 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting mysql.service - LSB: start and stop MySQL...
Apr 09 04:38:16 ip-172-31-35-61.ap-northeast-1.compute.internal mysql[1530]: Starting MySQL.. SUCCESS!
Apr 09 04:38:16 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Started mysql.service - LSB: start and stop MySQL.

大丈夫そうだ。

アクセス確認もしておく。

curl localhost

[ec2-user@ip-172-31-35-61 ~]$ curl localhost
<!DOCTYPE html>


<html lang="en">
    <head>
        <title>Apache Tomcat/7.0.79</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>

    <body>
        <div id="wrapper">
            <div id="navigation" class="curved container">
                <span id="nav-home"><a href="http://tomcat.apache.org/">Home</a></span>

取得できているので起動はしてそうだ。

mysql

[ec2-user@ip-172-31-35-61 ~]$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.62 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

入れるのでOK

今度 mailpit も自動起動化しよう。

番外編: mailpitの自動起動化

$ sudo vi /etc/systemd/system/mailpit.service

Unitファイルの作成

[Unit]
Description=mailpit on docker
ConditionPathExists=/home/ec2-user/mailpit
After=docker.service

[Service]
User=ec2-user
Group=ec2-user
Type=oneshot

ExecStart=docker compose -f /home/ec2-user/mailpit/compose.yml up -d
ExecStop=docker compose -f /home/ec2-user/mailpit/compose.yml down
Restart=no
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

自動起動の設定

$ sudo systemctl daemon-reload
$ sudo systemctl list-unit-files --type=service | grep mailpit
$ sudo systemctl enable mailpit.service
$ sudo systemctl list-unit-files | grep mailpit.service

イケてる・・・!?

[ec2-user@ip-172-31-35-61 ~]$ sudo systemctl restart mailpit.service
[ec2-user@ip-172-31-35-61 ~]$ sudo systemctl status mailpit.service
 mailpit.service - mailpit on docker
     Loaded: loaded (/etc/systemd/system/mailpit.service; enabled; preset: disabled)
     Active: active (exited) since Sun 2023-04-09 04:50:50 JST; 5s ago
    Process: 3148 ExecStart=docker compose -f /home/ec2-user/mailpit/compose.yml up -d (code=exited, status=0/SUCCESS)
   Main PID: 3148 (code=exited, status=0/SUCCESS)
        CPU: 100ms

Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting mailpit.service - mailpit on docker...
Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Network mailpit_default  Creating
Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Network mailpit_default  Created
Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Container mailpit-mailpit-1  Creating
Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Container mailpit-mailpit-1  Created
Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Container mailpit-mailpit-1  Starting
Apr 09 04:50:50 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Container mailpit-mailpit-1  Started
Apr 09 04:50:50 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Finished mailpit.service - mailpit on docker.

再起動して確認してみる。

ちゃんと起動している・・・!

[ec2-user@ip-172-31-35-61 ~]$ docker ps
CONTAINER ID   IMAGE                    COMMAND      CREATED              STATUS          PORTS                                                                              NAMES
0c0003c80d2d   axllent/mailpit:v1.4.0   "/mailpit"   About a minute ago   Up 59 seconds   0.0.0.0:8025->8025/tcp, :::8025->8025/tcp, 0.0.0.0:25->1025/tcp, :::25->1025/tcp   mailpit-mailpit-1
[ec2-user@ip-172-31-35-61 ~]$ curl localhost:8025
<!DOCTYPE html>
<html lang="en" class="h-100">

<head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
        <meta name="referrer" content="no-referrer">
        <meta name="robots" content="noindex, nofollow, noarchive">
        <link rel="icon" href="favicon.svg">
        <title>Mailpit</title>
        <link rel=stylesheet href="dist/app.css">
</head>

<body class="h-100">
        <div class="container-fluid h-100 d-flex flex-column" id="app">
                <noscript>You require JavaScript to use this app.</noscript>
        </div>

        <script src="dist/app.js"></script>
</body>

</html>

すばらっ!

参考

おわりに

ソースから全部インストールするのは久々の作業だったのでかなり時間がかかった。
ただやはり勉強にはなるなあ。
パッケージ管理ツールに頼り切りなので、このあたり力になることはやっていきたい。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。