在亚马逊的Linux2上构建LAMP环境


我整理了一下步骤,因为如果按照与CentOS相同的感觉来搭建LAMP环境,肯定会遇到困难。


安装Apache 2.4

$ sudo yum install httpd
~~
~ すんなりインストールできるはず
~~

# httpdを起動
$ sudo systemctl start httpd

# 動いているか確認 ( active (running) )とか表示されるはず
$ sudo systemctl status httpd

# システム起動時に毎回起動するように設定
$ sudo systemctl enable httpd

# 確認(enabled)と表示されていば成功
$ sudo systemctl is-enabled httpd

※忽略httpd.conf的配置。

安装PHP7.2

尝试下载php7.2或其他方式均无法成功。由于遇到问题,因此我专门为此情况撰写了这篇文章。

尝试查看amzn2-core存储库的PHP版本,发现…

$ sudo yum list | grep php

graphviz-php.x86_64                     2.30.1-21.amzn2.0.1           amzn2-core
php.x86_64                              5.4.16-45.amzn2.0.6           amzn2-core
php-bcmath.x86_64                       5.4.16-45.amzn2.0.6           amzn2-core
php-cli.x86_64                          5.4.16-45.amzn2.0.6           amzn2-core
php-common.x86_64                       5.4.16-45.amzn2.0.6           amzn2-core
php-dba.x86_64                          5.4.16-45.amzn2.0.6           amzn2-core
php-devel.x86_64                        5.4.16-45.amzn2.0.6           amzn2-core
php-embedded.x86_64                     5.4.16-45.amzn2.0.6           amzn2-core
php-enchant.x86_64                      5.4.16-45.amzn2.0.6           amzn2-core
php-fpm.x86_64                          5.4.16-45.amzn2.0.6           amzn2-core
php-gd.x86_64                           5.4.16-45.amzn2.0.6           amzn2-core
php-intl.x86_64                         5.4.16-45.amzn2.0.6           amzn2-core
php-ldap.x86_64                         5.4.16-45.amzn2.0.6           amzn2-core
php-mbstring.x86_64                     5.4.16-45.amzn2.0.6           amzn2-core
php-mysql.x86_64                        5.4.16-43.amzn2               amzn2-core
php-mysqlnd.x86_64                      5.4.16-45.amzn2.0.6           amzn2-core
php-odbc.x86_64                         5.4.16-45.amzn2.0.6           amzn2-core
php-pdo.x86_64                          5.4.16-45.amzn2.0.6           amzn2-core
php-pear.noarch                         1:1.10.5-7.amzn2.0.1          amzn2-core
php-pecl-memcache.x86_64                3.0.8-4.amzn2                 amzn2-core
php-pgsql.x86_64                        5.4.16-45.amzn2.0.6           amzn2-core
php-process.x86_64                      5.4.16-45.amzn2.0.6           amzn2-core
php-pspell.x86_64                       5.4.16-45.amzn2.0.6           amzn2-core
php-recode.x86_64                       5.4.16-45.amzn2.0.6           amzn2-core
php-snmp.x86_64                         5.4.16-45.amzn2.0.6           amzn2-core
php-soap.x86_64                         5.4.16-45.amzn2.0.6           amzn2-core
php-xml.x86_64                          5.4.16-45.amzn2.0.6           amzn2-core
php-xmlrpc.x86_64                       5.4.16-45.amzn2.0.6           amzn2-core
rrdtool-php.x86_64                      1.4.8-9.amzn2.0.1             amzn2-core
uuid-php.x86_64                         1.6.2-26.amzn2.0.1            amzn2-core

这个仓库只支持PHP5.4版本,不支持7.2版本。

于是我会执行以下命令。

$ amazon-linux-extras
  0  ansible2                 available    [ =2.4.2  =2.4.6 ]
  2  httpd_modules            available    [ =1.0 ]
  3  memcached1.5             available    [ =1.5.1 ]
  4  nginx1.12                available    [ =1.12.2 ]
  5  postgresql9.6            available    [ =9.6.6  =9.6.8 ]
  6  postgresql10             available    [ =10 ]
  8  redis4.0                 available    [ =4.0.5  =4.0.10 ]
  9  R3.4                     available    [ =3.4.3 ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2 ]
 11  vim                      available    [ =8.0 ]
 12  golang1.9                available    [ =1.9.2 ]
 13  ruby2.4                  available    [ =2.4.2  =2.4.4 ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11 ]
 16  php7.1                   available    [ =7.1.22 ]
 17  lamp-mariadb10.2-php7.2  available    \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5
          =10.2.10_7.2.8  =10.2.10_7.2.11 ]
 18  libreoffice              available    [ =5.0.6.2_15  =5.3.6.1 ]
 19  gimp                     available    [ =2.8.22 ]
 20  docker                   available    \
        [ =17.12.1  =18.03.1  =18.06.1 ]
 21  mate-desktop1.x          available    [ =1.19.0  =1.20.0 ]
 22  GraphicsMagick1.3        available    [ =1.3.29 ]
 23  tomcat8.5                available    [ =8.5.31  =8.5.32 ]
 24  epel                     available    [ =7.11 ]
 25  testing                  available    [ =1.0 ]
 26  ecs                      available    [ =stable ]
 27  corretto8                available    [ =1.8.0_192 ]
 28  firecracker              available    [ =0.11 ]

由于找到了目标为7.2的版本,我们应该将其安装上去。

可以先詳細確認一下。

$ amazon-linux-extras info php7.2
php7.2 recommends php-cli                    # yum install php-cli
php7.2 recommends php-pdo                    # yum install php-pdo
php7.2 recommends php-fpm                    # yum install php-fpm
php7.2 recommends php-json                   # yum install php-json
php7.2 recommends php-mysqlnd                # yum install php-mysqlnd

安装命令如下。

$ sudo amazon-linux-extras install php7.2

我需要同时检查一下版本。

$ amazon-linux-extras
~~
 15  php7.2=latest            enabled      \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11 ]
  _  php7.1                   available    [ =7.1.22 ]
~~

这样就安装好了PHP 7.2版本。

接下来是扩展模块。

$ yum list php* | grep amzn2extra-php7.2
php-cli.x86_64                      7.2.11-1.amzn2.0.1        @amzn2extra-php7.2
php-common.x86_64                   7.2.11-1.amzn2.0.1        @amzn2extra-php7.2
php-fpm.x86_64                      7.2.11-1.amzn2.0.1        @amzn2extra-php7.2
php-json.x86_64                     7.2.11-1.amzn2.0.1        @amzn2extra-php7.2
php-mysqlnd.x86_64                  7.2.11-1.amzn2.0.1        @amzn2extra-php7.2
php-pdo.x86_64                      7.2.11-1.amzn2.0.1        @amzn2extra-php7.2
php.x86_64                          7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-bcmath.x86_64                   7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-dba.x86_64                      7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-dbg.x86_64                      7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-devel.x86_64                    7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-embedded.x86_64                 7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-enchant.x86_64                  7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-gd.x86_64                       7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-gmp.x86_64                      7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-intl.x86_64                     7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-ldap.x86_64                     7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-mbstring.x86_64                 7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-odbc.x86_64                     7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-opcache.x86_64                  7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-pecl-apcu.x86_64                5.1.12-3.amzn2.0.1        amzn2extra-php7.2 
php-pecl-apcu-devel.noarch          5.1.12-3.amzn2.0.1        amzn2extra-php7.2 
php-pecl-igbinary.x86_64            2.0.7-3.amzn2.0.1         amzn2extra-php7.2 
php-pecl-igbinary-devel.noarch      2.0.7-3.amzn2.0.1         amzn2extra-php7.2 
php-pecl-imagick.x86_64             3.4.3-3.amzn2.0.1         amzn2extra-php7.2 
php-pecl-imagick-devel.noarch       3.4.3-3.amzn2.0.1         amzn2extra-php7.2 
php-pecl-mcrypt.x86_64              1.0.1-3.amzn2.0.1         amzn2extra-php7.2 
php-pecl-memcached.x86_64           3.0.4-3.amzn2.0.1         amzn2extra-php7.2 
php-pecl-msgpack.x86_64             2.0.2-3.amzn2.0.1         amzn2extra-php7.2 
php-pecl-msgpack-devel.noarch       2.0.2-3.amzn2.0.1         amzn2extra-php7.2 
php-pecl-oauth.x86_64               2.0.2-3.amzn2.0.1         amzn2extra-php7.2 
php-pecl-ssh2.x86_64                1.1.2-3.amzn2.0.1         amzn2extra-php7.2 
php-pecl-uuid.x86_64                1.0.4-3.amzn2.0.1         amzn2extra-php7.2 
php-pecl-zip.x86_64                 1.15.2-3.amzn2.0.1        amzn2extra-php7.2 
php-pgsql.x86_64                    7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-process.x86_64                  7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-pspell.x86_64                   7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-recode.x86_64                   7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-snmp.x86_64                     7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-soap.x86_64                     7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-xml.x86_64                      7.2.11-1.amzn2.0.1        amzn2extra-php7.2 
php-xmlrpc.x86_64                   7.2.11-1.amzn2.0.1        amzn2extra-php7.2

选择所需的内容,在yum中进行安装。
右侧列有“@”符号的是已安装的模块。
暂时来说,以下这些扩展模块应该足够放入PHP中了吧?

$ sudo yum install php-cli php-common php-devel php-fpm php-gd php-mysqlnd php-mbstring php-pdo php-xml

php.ini的配置

# 失敗した時のためにバックアップを取っておく
$ sudo cp /etc/php.ini /etc/php.ini.default

# viでファイルを開いて編集(保存は同じく:wq)
$ sudo vi /etc/php.ini

# HTTPヘッダにPHPのバージョンを記載しない
# expose_php = On
  expose_php = Off

# メモリ上限を引き上げる
# memory_limit = 128M
  memory_limit = 512M

# エラーログのパスを変更
# error_log = errors.log
  error_log = /var/log/php_errors.log

# POST送信の許容サイズを引き上げる
# post_max_size = 8M
  post_max_size = 16M

# アップロードファイルの許容サイズを引き上げる
# upload_max_filesize = 2M
  upload_max_filesize = 8M

# timezoneの設定
# date.timezone =
  date.timezone = Asia/Tokyo

# 文字コード検出のデフォルト値を定義
  mbstring.detect_order = auto

我试了很多种方式,但好像这样就可以了。

请确认php.ini文件是否正确。

$ sudo service httpd configtest
Syntax OK

$ sudo systemctl restart httpd

安装MySQL8.0

先入为主的风格是先放入新内容来思考。

$ sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

$ sudo yum install --enablerepo=mysql80-community mysql-community-server

进行初始密码检查后,使用root账户登录。

$ sudo cat /var/log/mysqld.log | grep "temporary password"
2018-XX-XXT00:XX:XX.XXXXXXZ 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: [初期パスワード]

$ mysql -u root -p
Enter password: [上記で確認できた初期パスワード]
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '[一時的な任意のパスワード]';
-- ※初回のrootパスワード変更は必須です。これを設定しないと次ができません。

在使用上述步骤设置任意密码时,有许多限制条件。
混合使用英文字母、数字和符号,且密码长度不能少于8个字符…我无法记住这样的密码,太麻烦了。
因此,以下步骤将创建一个稍简单的密码。

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+

mysql> SET GLOBAL validate_password.length=6;
mysql> SET GLOBAL validate_password.policy=LOW;
--これでパスワードの長さのみをチェックするようになりました

mysql>  ALTER USER 'root'@'localhost' identified WITH mysql_native_passwordBY '設定したいパスワード';

※ 在SQL8中,如果不添加mysql_native_password,将默认设置为「caching_sha2_password」。
在后续的phpMyAdmin外部连接中可能会遇到问题,所以在这里进行设置。
这样mysql的配置就完成了。

进行 phpMyAdmin 的安装

暂时先下载和解压缩

cd /usr/local/src
$ sudo wget sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.8.3/phpMyAdmin-4.8.3-all-languages.tar.gz
$ sudo tar zxvf phpMyAdmin-4.8.3-all-languages.tar.gz 

将phpMyAdmin安装在www目录下,以实现对其的Web访问。

sudo mv phpMyAdmin-4.0.3-all-languages /var/www/phpMyAdmin
sudo chown -R root:apache /var/www/phpMyAdmin/

修改配置文件

sudo vi /etc/httpd/conf.d/phpmyadmin.conf

中身----
Alias /phpMyAdmin "/var/www/phpMyAdmin"

<Directory "/var/www/phpMyAdmin">
Order allow,deny
Allow from all
</Directory>
---ここまで

sudo apachectl -t             // 設定ファイルが正しいか確認
sudo systemctl restart httpd  //アパッチ再起動

フルアクセスできるようにしておく
sudo mkdir /var/www/phpMyAdmin/config
sudo chmod 777 /var/www/phpMyAdmin/config

如果是针对SQL8的情况,可能无法从外部进行登录。
即使尝试从外部连接的phpMyAdmin登录,也应该会出现以下类似的错误提示。

错误内容 (È cuò

SQLSTATE[HY000] [2054] 服务器要求使用客户端未知的身份验证方法


应对措施

根据环境的不同,需要设置my.cnf。执行以下操作以从安装候选项中搜索其位置。

$ mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

# llコマンドでファイルを探していく
$ ll /etc/my.cnf
-rw-r--r-- 1 root root 1297 Nov 29 10:12 /etc/my.cnf
$ ll /etc/mysql/my.cnf
ls: cannot access /etc/mysql/my.conf: No such file or directory
$ ll /usr/etc/my.cnf
ls: cannot access /usr/etc/my.cnf: No such file or directory

找到了,修改了my.cnf。

$sudo vi /etc/mysql/my.cnf
# 末尾に
# default_authentication_plugin= mysql_native_password
# を追記する。

重新启动mysql和Apache。

$ sudo systemctl restart mysqld
$ sudo systemctl restart httpd

这样你应该能够从外部连接到phpMyAdmin。
如果无法连接,请修改(或追加)phpmyadmin.conf文件中的以下行。

# 外部接続設定?
#Allow from 127.0.0.1
Allow from all

最终

我认为在Amazon Linux2上已经成功设置了LAMP环境。辛苦了。

为了从外部程序访问MySQL,需要准确指定主机名并准备相应的用户。
此外,为了管理phpMyAdmin中的多个数据库连接,需要进行一些调整。
这些问题将在将来逐步解决。


最后,为了确保万无一失,请确认版本。

$ php -v
PHP 7.2.11 (cli) (built: Oct 24 2018 17:51:11) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

$ mysql --version
mysql  Ver 8.0.13 for Linux on x86_64 (MySQL Community Server - GPL)

$ httpd -v
Server version: Apache/2.4.34 ()
Server built:   Sep  1 2018 05:35:00

广告
将在 10 秒后关闭
bannerAds