使用Amazon Linux 2来构建LNPP环境
以下是在Amazon Linux 2上构建LNPP环境的步骤。请在命令前加上适当的sudo执行。
与LAMP进行比较
将本次构建的LNPP环境与常见的LAMP环境进行比较,结果如下。
我们选择使用Nginx作为WEB服务器而不是Apache,以及使用PostgreSQL而不是MySQL作为数据库。如果使用术语不正确,请指正。
环境和版本信息
-
- OS: Amazon Linux2
-
- WEBサーバ: Nginx1.18.0
-
- DB: PostgeSQL 11.5
-
- プログラミング言語: PHP 7.4.11
- クライアントPC: Windows10(PuTTYにてAmazon Linux2に接続)
操作步骤
1. 时区的变更 de
首先,为了在日本时间使用,需要更改Amazon Linux 2本身的时区设置。
执行以下命令,编辑/etc/sysconfig/clock文件。
vi /etc/sysconfig/clock
请按以下方式填写并保存。
ZONE="Asia/Tokyo"
UTC=true
2. 软件安装
首先,我們需要通過SSH連接到Amazon Linux2環境,然後安裝所需的各種軟件進行環境設置。
這次我們決定使用Amazon Linux2的Extras Library來幫助我們完成這個任務。
执行以下命令以查看 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 ]
(以下省略)・・
安装Nginx、PostgreSQL和PHP。
按照以下三个命令的顺序执行。
amazon-linux-extras install nginx1
amazon-linux-extras install postgresql11
amazon-linux-extras install php7.4
由於在Ubuntu中似乎只安裝了psql命令,所以我們還需要正常安裝PostgreSQL(只需執行以下命令即可!)。
yum install postgresql-server postgresql-devel postgresql-contrib
重新执行amazon-linux-extras命令,确认Nginx,PostgreSQL和PHP已启用。
amazon-linux-extras
只要以下内容已变更为“启用”,就可以了!
・・(以上省略)
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 – Nginx是一款流行的开源Web服务器。
首先,执行以下命令,确认Nginx的配置。
vi /etc/nginx/nginx.conf
如果使用HTTP连接,则文档根目录是/usr/share/nginx/html。因此,在此目录下创建您想在网页中显示的文件(当然,也可以进行设置更改)。
顺便提一句,相关部分如下(指有 “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;
(以下省略)・・
创建一个名为index.php的文件,按照以下方式执行并显示PHP的设置内容。
vi /usr/share/nginx/html/index.php
当文件打开时,请在插入模式下复制并保存以下内容。
<?php
phpinfo();
(3) 启动Nginx。
systemctl start nginx.service
使用浏览器打开以下URL,确认PHP设置内容是否会显示出来。
http://パブリック IPv4 DNS/index.php

你可以在AWS控制台(EC2)上确认公共IPv4 DNS。
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
(以下省略)・・
启动并登录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」。
为了在日本时间使用,我们需要更改PostgreSQL的时区设置。
请执行以下命令来搜索配置文件postgresql.conf。
find / -name postgresql.conf -type f
在我的情况下,它如下所示。
/var/lib/pgsql/data/postgresql.conf
打开postgresql.conf文件,并将时区设置为Asia/Tokyo。同时,建议您也修改日志文件的时区设置log_timezone。
・・(以上省略)
log_timezone = 'Asia/Tokyo'
・・(途中省略)・・
timezone = 'Asia/Tokyo'
(以下省略)・・
保存了postgresql.conf的配置后,重新启动PostgreSQL以使更改生效。
systemctl restart postgresql.service
为了确保,我们登录到PostgreSQL,检查一下更改是否已经生效。
-- ログイン
psql -h localhost -p 5432 -U postgres
-- ログイン後、以下のコマンドを実行
select current_timestamp;
只要显示日本时间就可以了!
接下来,我们需要确认是否存在pdo_pgsql来进行PDO连接(因为本次需要使用PDO将PHP连接到PostgreSQL)。
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
在插入模式下,按照以下方式进行记录→保存。
<?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 在Qiita上的文章“如何使用PHP连接到PostgreSQL”的参考中借鉴过来的(经过了一些修改)。
在浏览器中输入以下URL,如果显示”连接成功”,则表示一切正常!
http://パブリック IPv4 DNS/postgres.php

在这里,环境设定 → 通过浏览器进行了一系列的操作确认!
结束
我喜欢Apache和MySQL,但我也想尝试一下不太熟悉的Nginx和PostgreSQL。
尤其是在PostgreSQL和PHP的连接(PDO)方面遇到了一些问题,但最终还是成功了,真是太好了。
更改记录
请你们在购物之前先参考一下顾客的评价。
与LAMP进行比较
- LAMP(ランプ)・Linux豆知識 055| Linuc
操作步骤
1. 时区的更改
- AmazonLinuxでのタイムゾーン設定 | Qiita
2. 软件安装
-
- Amazon Linux 2 を実行している EC2 インスタンスに Extras Library からソフトウェアパッケージをインストールする方法を教えてください。 | aws
-
- Extras library (Amazon Linux 2) | aws
- Amazon linux2にpostgresqlをインストールする手順 | 瀬戸内の雲のように
3. Nginx (一个开源的Web服务器软件)
- Nginx設定のまとめ | Qiita
4. PostgreSQL (PostgreSQL数据库)
-
- postgresのパスワードが分からない場合 | diadia
-
- PostgreSQL 認証に失敗しないための Ident、MD5、Trust 比較 | etuts+
-
- PostgreSQLのデフォルトのタイムゾーン | かずきのBlog@hatena
-
- 19.8. エラー報告とログ取得 | PostgreSQL 11.5文書
- [centos7]nginxでphp.iniの設定を反映させる | Yuki猫のおうち