LoginSignup
3
2

More than 3 years have passed since last update.

Amazon Linux2でLNPP環境を構築する

Last updated at Posted at 2021-01-03

Amazon Linux2上に、LAMP環境ならぬLNPP環境を構築する手順です。
コマンドには、適宜sudoをつけて実行してください。

LAMPとの比較

今回構築するLNPP環境を、お馴染みLAMP環境と比較すると以下の通り。

LNPP LAMP
OS Linux Linux
WEBサーバ Nginx Apache
DB PostgreSQL MySQL
プログラミング言語 PHP PHP

WEBサーバをApacheではなく、Nginx、DBをMySQLではなく、PostgreSQLにしています。
※呼び方間違ってたら教えてください。

環境、バージョン情報

  • OS: Amazon Linux2
  • WEBサーバ: Nginx1.18.0
  • DB: PostgeSQL 11.5
  • プログラミング言語: PHP 7.4.11
  • クライアントPC: Windows10(PuTTYにてAmazon Linux2に接続)

手順

1. タイムゾーンの変更

まず、日本時間で使用するため、Amazon Linux2自体のタイムゾーンの設定を変更します。
以下のコマンドを実行し、/etc/sysconfig/clockを編集しましょう。

vi /etc/sysconfig/clock

以下の通り、記入し、保存します。

ZONE="Asia/Tokyo"
UTC=true

2. ソフトウェアのインストール

まず、Amazon Linux2環境にSSH接続して、環境の構築に必要な各種ソフトウェアをインストールします。
今回は、Amazon Linux2のExtras Libraryのお力を借りることにしました。

(1) 以下のコマンドを実行し、Extras Libraryで利用可能なトピックの一覧を確認します。

amazon-linux-extras

初期状態では以下のようになっているはず。

・・(以上省略)
 35  kernel-ng                available    [ =stable ]
 36  BCC                      available    [ =0.x  =stable ]
 37  mono                     available    [ =5.x  =stable ]
 38  nginx1=latest            available      [ =stable ]
 39  ruby2.6                  available    [ =2.6  =stable ]
 40  mock                     available    [ =stable ]
 41  postgresql11=latest      available     [ =11  =stable ]
 42  php7.4=latest            available     [ =stable ]
 43  livepatch                available    [ =stable ]
 44  python3.8                available    [ =stable ]
 45  haproxy2                 available    [ =stable ]
(以下省略)・・

(2) Nginx, PostgreSQL, PHPをインストールします。
以下3つのコマンドを順に実行しましょう。

amazon-linux-extras install nginx1
amazon-linux-extras install postgresql11
amazon-linux-extras install php7.4

※うちPostgreSQLは、psqlのコマンドがインストールされるだけのようなので、普通にインストールもします(以下のコマンドを実行すればOK!)

yum install postgresql-server postgresql-devel postgresql-contrib

(3) 再度、amazon-linux-extrasコマンドを実行し、Nginx, PostgreSQL, PHPが有効になっていることを確認します。

amazon-linux-extras

以下のように、available → enabledに変わっていればOK!

・・(以上省略)
 35  kernel-ng                available    [ =stable ]
 36  BCC                      available    [ =0.x  =stable ]
 37  mono                     available    [ =5.x  =stable ]
 38  nginx1=latest            enabled      [ =stable ]
 39  ruby2.6                  available    [ =2.6  =stable ]
 40  mock                     available    [ =stable ]
 41  postgresql11=latest      enabled      [ =11  =stable ]
 42  php7.4=latest            enabled      [ =stable ]
 43  livepatch                available    [ =stable ]
 44  python3.8                available    [ =stable ]
 45  haproxy2                 available    [ =stable ]
(以下省略)・・

3. Nginx

(1) まず、以下のコマンドを実行し、Nginxの設定を確認しましょう。

vi /etc/nginx/nginx.conf

HTTP接続の場合のドキュメントルートは、
/usr/share/nginx/html
ですので、配下にWEBページで表示させたいファイルを作成します(もちろん設定変更してもOK)

ちなみに、該当箇所は以下(rootと記載のある部分)。

・・(以上省略)
    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
(以下省略)・・

(2) 以下の通り実行して、PHPの設定内容を表示する、index.phpを作成しましょう。

vi /usr/share/nginx/html/index.php

ファイルが開いたら、insertモードで以下の内容をコピペ→保存します。

<?php 
phpinfo();

(3) Nginxを起動します。

systemctl start nginx.service

(4) ブラウザで以下のURLを叩いて、PHP設定内容が表示されることを確認します。

http://パブリック IPv4 DNS/index.php

image.png

※パブリック IPv4 DNSはAWSのコンソール(EC2)より、確認できます。

4. PostgreSQL

続いてPostgreSQLの設定を行います。

(1) まず、以下のコマンドを実行して初期化をしましょう。

postgresql-setup initdb

(2) 設定ファイルの格納先を確認します。

find / -name pg_hba.conf

自分の場合は、以下の通りでした。

/var/lib/pgsql/data/pg_hba.conf

(3) 設定ファイルを開き、以下の通り内容を変更して、一時的にパスワードがなくてもログインできるようにします(後続の手順で設定)。

vi /var/lib/pgsql/data/pg_hba.conf

■変更前

・・(以上省略)
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident
(以下省略)・・

↓ (「ident」(2ヶ所)を「trust」に変更)

■変更後

・・(以上省略)
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
(以下省略)・・

(4) PostgreSQLを起動し、ログイン → パスワード設定します。

systemctl start postgresql.service
psql -h localhost -p 5432 -U postgres

「postgres=#」と表示されたらログインできているので、以下のDDLを実行してパスワード設定しましょう。

alter role postgres with password 'postgres';

※上記では、ユーザー: postgresのパスワードをpostgresに設定しています。

(5) 設定ファイルを以下の通り変更して、パスワードなしではログインできないようにします。

・・(以上省略)
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
(以下省略)・・

※(3)の「■変更後」の「trust」(2ヶ所)を「md5」に変更しています。

(6) 日本時間で使用するため、PostgreSQLのタイムゾーンの変更を行います。
以下のコマンドを実行して、設定ファイルpostgresql.confを検索しましょう。

find / -name postgresql.conf -type f

自分の場合は、以下にありました。

/var/lib/pgsql/data/postgresql.conf

(7) postgresql.confを開いて、タイムゾーンをAsia/Tokyoに設定しましょう。
ログファイルのタイムゾーンを設定するlog_timezoneも合わせて変更しておくとよいでしょう。

・・(以上省略)
log_timezone = 'Asia/Tokyo'
・・(途中省略)・・
timezone = 'Asia/Tokyo'
(以下省略)・・

(8) postgresql.confの設定を保存したら、PostgreSQLを再起動して、変更を反映させます。

systemctl restart postgresql.service

(9) 念のため、PostgreSQLにログインして、変更が反映されているか確認しておきましょう。

-- ログイン
psql -h localhost -p 5432 -U postgres
-- ログイン後、以下のコマンドを実行
select current_timestamp;

日本時間が表示されればOKです!

(10) 続いて、PDO接続するための、pdo_pgsqlが存在するか確認します(今回はPHP→PostgreSQLの接続にPDOを使用するため)

php -m | grep pdo

pdo_pgsqlが表示されなければ、以下コマンドを実行してインストールします。

yum install --enablerepo=remi,remi-php74 php-pgsql

(11) fpm-phpを再起動して、変更を反映させます。

systemctl restart php-fpm

※WEBサーバがApacheの場合はApacheの再起動なのですが、Nginxの場合はfpm-phpが再起動の対象となります。

(12) ブラウザから接続確認するためのpostgres.phpを作成しましょう。

vi /usr/share/nginx/html/postgres.php

insertモードにて、以下の通り記述→保存。

<?php

$DBHOST = "127.0.0.1";
$DBPORT = "5432";
$DBNAME = "postgres";
$DBUSER = "postgres";
$DBPASS = "postgres";

try{
  //DB接続
  $dbh = new PDO("pgsql:host=$DBHOST;port=$DBPORT;dbname=$DBNAME;user=$DBUSER;password=$DBPASS");
  print("接続成功".'<br>');
}catch(PDOException $e){
  print("接続失敗".'<br>');
  print($e.'<br>');
  die();
}
//データベースへの接続を閉じる
$dbh = null;
?>

※ソースコードは、@ga_ku さんの PHPでPostgreSQLに接続する方法 | Qiitaより拝借しました(一部改変)。

(13) ブラウザで以下のURLを叩いて、「接続成功」と表示されればOK!

http://パブリック IPv4 DNS/postgres.php

image.png

これにて、環境構築 → ブラウザからの動作確認が一通りできました!

終わりに

Apache, MySQLもいいけれど、あまり馴染みのないNginx, PostgreSQLにも触れてみたくって。
特にPostgreSQLとPHPの連携のところ(PDO)で躓いたけど、できてよかったです。

変更履歴

日付 変更内容
2021/02/14 タイムゾーンの変更手順を追加

参考

LAMPとの比較

手順

1. タイムゾーンの変更

2. ソフトウェアのインストール

3. Nginx

4. PostgreSQL

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2