LAMP環境構築の備忘録です。
運用しているWebアプリケーションの環境で数台のサーバーにて運用しています。その環境がいくつかのバージョンが混在するまま LAMP環境でサービスを提供しています。
サーバーにより古い環境ではcentos6.x 古いバージョンのPHPでも運用しているものもいくつかあります。
ただ、システムも安易にバージョンアップするのも怖いものです。7から8年前に構築したPHPのWebアプリケーションも現在のPHP7.*ではまともに動かないのも事実です。
今回特に最新のバージョンということではなく、安定して?いる LAMP環境を構築してみようと思っています。
機会があればそれぞれ最新のバージョンにて試していきたいと思います。
macターミナルでの作業記録ですが、Windowsでは Tera Term 他のsshクライアントでも可能です。
OSインストール直後の調整
カゴヤのVPSサーバーを利用します。
SELinux, firewalld が初期段階ではインストールされていないようです。
また、iptables がデフォルトでインストールされていました。
SELinux を使用したい場合はインストールしましょう。
必要な場合は yumからインストールできます。
作成したインスタンスに ssh で接続します。
mac のターミナルより取得した ログイン認証用キーにより rootでログインします。
ログインしてターミナル上で初期設定等をします。
プロバイダーの用意してあるツールで「コマンド実行」である程度初期設定できますが、
やはりターミナルでコマンドを直接入力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
// インスタンスにログイン (ターミナル側でサーバーにログインする) $ ssh -i <取得したログイン用認証キーを保存したパス> root@xxx.xxx.xxx.xxx (取得したインスタンスのIPアドレス) // サーバーにログイン後サーバーでの操作 // sudo のインストール # yum -y install sudo // SELinux yumよりインストール # yum -y install selinux-policy-targeted setools # vi /etc/selinux/config ・ ・ SELINUX=disabled // 無効にする 今回はこの設定にしておきます。 # SELINUX=enforcing // 有効にする // iptablesの設定 デフォルトでインストールされているので iptables を利用します。 # vi /etc/sysconfig/iptables ・ ・ ・ *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT // <= 追加 -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT // <= 追加 COMMIT // iptables 再起動 $ sudo shutdown -r now ・ ・ // 再接続して // SELinux の確認 # getenforce Disabled // 必要に応じてユーザーを作成します。 // 今回はユーザーで作業します。 実行は sudo で行います。 $ sudo systemctl restart iptables // iptables 動作確認 $ sudo iptables --list Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination // Linuxを更新 // sudo yum -y update |
リポジトリーの追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// epel レポジトリーのインストール $ sudo yum install epel-release.noarch // epelを有効にする $ sudo vi /etc/yum.repos.d/epel.repo ・ ・ enabled=0 // enabled=1を変更 // remi レポジトリのインストール<br> $ sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm // remiを有効にする $ sudo vi /etc/yum.repos.d/epel.repo ・ ・ enabled=0 // enabled=1を変更 |
remi-release-7.rpmの内容を確認する
参考:
サイトで「remi」インストールするレポジトリを確認
以下抜粋
—————————————————————–
Distribution choice – Repository content
Maintained Enterprise Linux (RHEL / CentOS / Other clones)
Enterprise Linux 8 – repository auto-configuration package : remi-release-8.rpm
Enterprise Linux 7 – repository auto-configuration package : remi-release-7.rpm
Enterprise Linux 6 – repository auto-configuration package : remi-release-6.rpm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// remi-release-7.rpmの内容を確認する $ cd /etc/yum.repos.d $ ls -al 合計 108 drwxr-xr-x 2 root root 4096 7月 10 06:33 . drwxr-xr-x 87 root root 4096 7月 10 09:21 .. -rw-r--r-- 1 root root 1664 11月 23 2018 CentOS-Base.repo -rw-r--r-- 1 root root 1309 11月 23 2018 CentOS-CR.repo -rw-r--r-- 1 root root 649 11月 23 2018 CentOS-Debuginfo.repo -rw-r--r-- 1 root root 630 11月 23 2018 CentOS-Media.repo -rw-r--r-- 1 root root 1331 11月 23 2018 CentOS-Sources.repo -rw-r--r-- 1 root root 5701 11月 23 2018 CentOS-Vault.repo -rw-r--r-- 1 root root 314 11月 23 2018 CentOS-fasttrack.repo -rw-r--r-- 1 root root 1050 10月 3 2017 epel-testing.repo -rw-r--r-- 1 root root 951 7月 10 06:09 epel.repo -rw-r--r-- 1 root root 1440 9月 12 2016 mysql-community-source.repo -rw-r--r-- 1 root root 1416 9月 12 2016 mysql-community.repo -rw-r--r-- 1 root root 446 3月 8 16:34 remi-glpi91.repo -rw-r--r-- 1 root root 446 3月 8 16:34 remi-glpi92.repo -rw-r--r-- 1 root root 446 3月 8 16:34 remi-glpi93.repo -rw-r--r-- 1 root root 446 3月 8 16:34 remi-glpi94.repo -rw-r--r-- 1 root root 855 3月 8 16:34 remi-modular.repo -rw-r--r-- 1 root root 456 3月 8 16:34 remi-php54.repo -rw-r--r-- 1 root root 1314 3月 8 16:34 remi-php70.repo -rw-r--r-- 1 root root 1314 3月 8 16:34 remi-php71.repo -rw-r--r-- 1 root root 1314 3月 8 16:34 remi-php72.repo -rw-r--r-- 1 root root 1314 3月 8 16:34 remi-php73.repo -rw-r--r-- 1 root root 750 3月 8 16:34 remi-safe.repo -rw-r--r-- 1 root root 2605 3月 8 16:34 remi.repo -rw-r--r-- 1 root root 219 9月 17 2014 vz.repo |
Apacheのインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Apacheのインストール // インストール $ sudo yum install httpd // 起動 $ sudo systemctl start httpd.service //自動起動の設定 $ sudo systemctl enable httpd.service //バージョン確認 $ sudo apachectl -v Server version: Apache/2.4.6 (CentOS) Server built: Apr 24 2019 13:45:48 |
Mysql5.7のインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
//MariaDBの削除 $ sudo yum remove mariadb-libs $ sudo rm -rf /var/lib/mysql/ // MySQL5.7のインストール // RPMパッケージを取得 $ sudo rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm // パッケージ情報確認 $ sudo yum info mysql-community-server 読み込んだプラグイン:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.cat.net * extras: mirrors.cat.net * remi-safe: ftp.riken.jp * updates: mirrors.cat.net インストール済みパッケージ 名前 : mysql-community-server アーキテクチャー : x86_64 バージョン : 5.7.26 リリース : 1.el7 容量 : 746 M リポジトリー : installed 提供元リポジトリー : mysql57-community 要約 : A very fast and reliable SQL database server URL : http://www.mysql.com/ ライセンス : Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Under GPLv2 license as shown in the : Description field. ・ ・ // インストール $ sudo yum -y install mysql-community-server // 確認 $ sudo mysql -V mysql Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using EditLine wrapper # 起動 $ sudo systemctl start mysqld $ sudo systemctl enable mysqld.service // この時点で 「root用」 の一的なパスワードが自動生成されますが、その内容は // ログ 「/var/log/mysqld.log」に記録されます。 // このパスワードを利用してmysqlの初期設定に入ります。 // パスワード確認 $ sudo cat /var/log/mysqld.log | grep 'password is generated' 2019-07-09T21:38:46.518129Z 1 [Note] A temporary password is generated for root@localhost: xxxxxxxxxxxxxx |
mysql初期設定
mysql5.7 のパスワードポリシーの初期値はMEDIUMとなっておりその条件は以下の通りです。
mysqlのパスワード8文字以上
大文字、小文字、数字、英数字以外の特殊文字をそれぞれ1文字以上含む
参考:
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
$ sudo mysql_secure_installation ・ ・ Enter password for user root: ・ ・ New password: # 新しいパスワードを入力 ・ ・ Re-enter new password: # パスワード再入力 ・ ・ // プラグイン用のパスワードも設定する。変更する場合は y Estimated strength of the password: 100 Change the password for root ? ((Press y|Y for Yes, any other key for No) : y ・ ・ New password: // 新しいパスワードを入力 ・ ・ Re-enter new password: // 新しいパスワードを入力 ・ ・ // anonymous user の削除の確認 Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. ・ ・ // リモートホストからのrootユーザでのログインを禁止 Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success. // testデータベース削除 Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. ・ ・ // # 変更を有効にするためリロード Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done! // mysqlに変更したパスワードでログイン $ mysql -u root -p Enter password: // 新しいパスワードを入力 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.26 MySQL Community Server (GPL) Copyright (c) 2000, 2019, 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> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql> select version(); +-----------+ | version() | +-----------+ | 5.7.26 | +-----------+ 1 row in set (0.01 sec) mysql> SHOW VARIABLES LIKE 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.01 sec) mysql> \q |
my.cnfの設定と確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
// mysqlの設定ファイルを編集 $ sudo vi /etc/my.cnf [mysqld] ・ ・ default-storage-engine=InnoDB innodb_file_per_table ・ character-set-server = utf8 collation-server = utf8_general_ci ・ ・ // 最終行に追加 [mysql] default-character-set = utf8 [client] default-character-set = utf8 // mysqld を再起動 $ sudo systemctl restart mysqld mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (1.20 sec) mysql> SHOW VARIABLES LIKE 'innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.00 sec) |
phpのインストール
1 2 3 4 5 6 7 8 9 10 11 |
// php インストール $ sudo yum --enablerepo=remi-php70 install -y php php-cli php-devel php-common php-mbstring php-mysql php-fpm php-gd php-opcache php-pdo php-xml // 今回ここでは 「remi-php70」 でインストールしましたが、 // 「remi-php71」 「remi-php72」 「remi-php72」 「remi-php73」 でも可能です。 // バージョン確認 $ php -v PHP 7.0.33 (cli) (built: Jul 2 2019 18:38:15) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.33, Copyright (c) 1999-2017, by Zend Technologies |
php設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
// php.ini 設定 // デフォルトのphp.iniをバックアップしておく $ sudo cp /etc/php.ini /etc/php.ini.back // /etc/php.iniをエディターで編集 $ sudo vi /etc/php.ini // 主な変更内容をまとめてみました。 // エラー表示の設定を変更 // 開発環境においてはSTRICTを含めたすべてのレポートをさせる error_reporting = E_ALL | E_STRICT // エラーがあった際にブラウザなどにエラー内容を表示するように設定 display_errors = On () // log_errorsの設定を変更 エラーがあった際にブラウザなどにエラー内容を表示するように設定 log_errors = On (エラーログを吐く設定を有効にしておく) // error_logの設定を変更(/var/log/php.logに吐くように設定) error_log = /var/log/php.log // 文字コード関連の設定 default_charset = "UTF-8" mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.encoding_translation = Off mbstring.http_input = pass mbstring.http_output = pass mbstring.detect_order = auto // メモリ管理に関する設定 memory_limit = 32MB PHPの1プロセスが利用可能なメモリー容量の設定。 post_max_size = 16M // ファイルアップロードを受け付ける際の、最大のファイル受付サイズを設定 upload_max_filesize = 8M // セキュリティに関する設定 expose_php = Off session.hash_function = 1 // セッションID発行のハッシュアルゴリズムをSHA-1(160bit)へ変更, 0だとMD5(128bit) // 生成されたハッシュを32桁にしたい場合は、併せてsession.hash_bits_per_character = 5とする session.entropy_file = /dev/urandom /dev/urandomが存在するときのみ // PHPファイルのタグを<?php ?>のみ利用可能と制限(<? ?>などを使用不可にする) short_open_tag = Off register_argc_argv = On //PHPプログラムの1つの最大実行時間の設定 max_execution_time = 30 // php(httpd)の再起動 $ sudo systemctl restart httpd |