さくらVPSを利用して、LAMP環境(php7.4.9 + apache2.4.6 + mysql8.0.21)の構築をしたので、手順をメモします。この記事では、VPSの申し込み手続きは完了していて、サーバにログインできる状態から作業を進めていきます。
yum update をする
まずサーバにログインすると、初期インストール時のままになっているため、最新にアップデートしてから作業を進めていきましょう。
$ yum update
読み込んだプラグイン:fastestmirror, langpacks
Determining fastest mirrors
epel/x86_64/metalink ...
開発ツールのインストールをする
下記のコマンドを使うと、開発関連ツールを一括でサーバにインストールすることができます。linux操作を進めていく上で、便利ツールを一括で入れてくれるため、オススメです。
$ yum groupinstall "Development Tools"
作業用ユーザを追加します
初期インストール時でログイン可能なユーザは、rootのみです。rootユーザは、全ての操作が可能なadminユーザなだけに外部にアクセス情報が漏れてしまうと、多大な被害になることが考えられます。そのため、不正アクセス等の攻撃対象として、常に狙われています。攻撃を受ける危険性を減らすには、rootユーザのログインをできないようにして、一般ユーザのみログインを許可する設定を行ないます。
一般ユーザの作成は「useradd」コマンドを使います。
例:「staff」という名前のユーザを作成する場合は、
$ useradd staff
このようにすることでstaffユーザを作ることができます。
作業用ユーザのパスワード変更
先ほど作成したstaffユーザのパスワードを設定します。下記のようなコマンドを実行して、パスワードを入れることで、任意のパスワードに変更できます。
$ passwd staff
ユーザー staff のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
作業用ユーザでログイン
ここまでできたら、作成したユーザでログインしてみましょう。
$ ssh xxx.xx.xxx.xx -l staff
staff@xxx.xx.xxx.xx's password:
SAKURA Internet [Virtual Private Server SERVICE]
作成したユーザでログインできました。ログインができたら、今後は、rootユーザではなく、作成したユーザでログインするようにしていきましょう。もしログインができなければ、何かが誤って設定されていますので、正しいかどうか確認する、再度設定をし直しましょう。
wheel グループに対する sudo 設定の有効化
作成したユーザで、sudoコマンドが使えるように設定します。sudo とは、別のユーザとしてコマンドを実行するコマンドであり、一般ユーザでも rootユーザ と同じ権限で操作可能な状態にします。
$ usermod -G wheel staff
先ほど作成したユーザを、wheelグループに追加し、sudo コマンドが使えるようにしていきます。具体的には、wheelグループに追加するのですが、wheelとは、rootユーザの特権を得ることのできるユーザーの属するグループの名称です。ここに追加すると、rootユーザと同等の権限を付与することができます。設定が完了したら、staffユーザからrootに切り替えられるかを確認します。
$ sudo -s
[sudo] staff のパスワード:
$
無事に、root権限になることができました。
SSHの設定変更
rootユーザに関するSSHサーバの設定を変更します。セキュリティを高めるために、SSHでrootアカウントのログインを許可しないようにしていきます。設定を変更するためには、/etc/ssh/sshd_config を編集します。設定ファイルを開いたら、下記の部分を変更します。
$ vim /etc/ssh/sshd_config
#PermitRootLogin yes # root でのログインを許可するかの指定です。
↓
PermitRootLogin no # yes(rootログインできる) を no(rootログインできない)に
ファイルを保存後、設定を有効化させるために、sshd を再起動します。
$ systemctl restart sshd
これで完了です。念のため、問題なく稼働しているかも確認します。下記のコマンドを実行し、sshd が、”Active: active (running)” なのを確認します。
$ systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since 木 2020-xx-xx xx:xx:xx JST; xxs ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 10900 (sshd)
CGroup: /system.slice/sshd.service
├─10900 /usr/sbin/sshd -D
├─10901 sshd: root [priv]
└─10902 sshd: root [net]
もし「dead」(停止中)となっている場合は、正常に起動していませんので、設定が間違っていないかを確認してください。
PHPインストール
remiレポジトリの追加
$ yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
読み込んだプラグイン:fastestmirror, langpacks
remi-release-7.rpm | 20 kB 00:00:00
/var/tmp/yum-root-SDGXpk/remi-release-7.rpm を調べています: remi-release-7.8-1.el7.remi.noarch
/var/tmp/yum-root-SDGXpk/remi-release-7.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ remi-release.noarch 0:7.8-1.el7.remi を インストール
--> 依存性解決を終了しました。
依存性を解決しました
=====================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
=====================================================================================================
インストール中:
remi-release noarch 7.8-1.el7.remi /remi-release-7 28 k
トランザクションの要約
=====================================================================================================
インストール 1 パッケージ
合計容量: 28 k
インストール容量: 28 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : remi-release-7.8-1.el7.remi.noarch 1/1
検証中 : remi-release-7.8-1.el7.remi.noarch 1/1
インストール:
remi-release.noarch 0:7.8-1.el7.remi
完了しました!
OSのデフォルトインストールを行なった場合は、恐らく、PHP7.4系に関するパッケージを探してみても見つかりません。最新のPHPではなく、用意されているレポジトリが古いと思いますので、確認をしていきましょう。
remiレポジトリの追加の確認
$ yum info --enablerepo=remi,remi-php74 php
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp-srv2.kddilabs.jp
* epel: d2lzkl7pfhq30w.cloudfront.net
* extras: ftp-srv2.kddilabs.jp
* remi: ftp.riken.jp
* remi-php74: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp-srv2.kddilabs.jp
remi | 3.0 kB 00:00:00
remi-php74 | 3.0 kB 00:00:00
remi-safe | 3.0 kB 00:00:00
(1/3): remi-php74/primary_db | 217 kB 00:00:00
(2/3): remi-safe/primary_db | 1.8 MB 00:00:00
(3/3): remi/primary_db | 2.7 MB 00:00:00
利用可能なパッケージ
名前 : php
アーキテクチャー : x86_64
バージョン : 7.4.9
リリース : 1.el7.remi
容量 : 3.4 M
リポジトリー : remi-php74
要約 : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
ライセンス : PHP and Zend and BSD and MIT and ASL 1.0 and NCSA
説明 : PHP is an HTML-embedded scripting language. PHP attempts to make it
: easy for developers to write dynamically generated web pages. PHP also
: offers built-in database integration for several commercial and
: non-commercial database management systems, so writing a
: database-enabled webpage with PHP is fairly simple. The most common
: use of PHP coding is probably as a replacement for CGI scripts.
:
: The php package contains the module (often referred to as mod_php)
: which adds support for the PHP language to Apache HTTP Server.
remiレポジトリでPHP7.4系の導入に利用するレポジトリは”remi-php74″レポジトリになります。remi-php74レポジトリはデフォルトでは有効になっていませんので、PHP.4系に関連したyumコマンドをインストールするだけ有効にします。やり方は、yum install ~~~~ を行なう際に、yumコマンドにオプションである”–enable-repo=remi,remi-php74”を付けるようにしてください。具体的には、以下のように実行していきます。
phpインストール
$ yum install --enablerepo=remi,remi-php74 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql
PHP 7.4系のパッケージは、”yum install”コマンドでインストールすることができます。これで、PHPのインストールは完了です。
PHPの動作確認
問題なくインストールされているか確認をしていきます。
$ php -v
PHP 7.4.9 (cli) (built: Aug 4 2020 08:28:13) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
上記のように表示されていれば、正常にインストールされています。
PHPの設定変更
PHPの設定もこの時点では初期状態になっていますので、使いやすいように設定を変更していきます。
・PHPの設定ファイルの場所を確認する
$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
設定ファイルの場所は、/etc/php.ini だということがわかりました。
・設定を変える
$ vim /etc/php.ini
こちらで設定ファイルが開きますので、下記の項目を修正していきます。
・PHPバージョンを非表示にする
expose_php = On
↓
expose_php = Off
デフォルトの設定では、httpヘッダーにバージョンを表示しています。バージョンは公開しないほうがセキュアになりますので、非表示にする設定を行ないます。
・ファイルのアップロード最大サイズを変更する
post_max_size = 8M
↓
post_max_size = 20M
upload_max_filesize = 2M
↓
upload_max_filesize = 20M
デフォルト設定ではアップロードできるファイルのサイズが2MBになっていますが、最近は扱うファイルサイズが増えているのでもう少し上げておきます。ここでは、20Mに変更します。
・タイムゾーンの変更
;date.timezone =
↓
date.timezone = "Asia/Tokyo"
タイムゾーンの設定をします。日本の場合は”Asia/Tokyo”になりますので、date.timezoneに入力しておきます。この設定は非常に重要で環境によっては設定されていないと日時がおかしくなってしまったり、エラーが出力されますので気を付けましょう。
・日本語を使うための設定
;mbstring.language = Japanese
↓
mbstring.language = Japanese
言語の設定は、利用環境によって異なると思いますが、ここでは日本語を扱うことを前提に設定をします。
・エンコーディングの設定
;mbstring.internal_encoding =
↓
mbstring.internal_encoding = UTF-8
OS、環境に合わせて、UTF-8に設定します。
;mbstring.http_input =
↓
mbstring.http_input = UTF-8
OS、環境に合わせて、UTF-8に設定します。
・出力文字コードの設定
;mbstring.http_output =
↓
mbstring.http_output = pass
HTTP 出力文字コードを指定する設定です。自動変換をされることがありますので、勝手に変換されないようにpassを設定します。
・HTTP入力変換を有効にする
;mbstring.encoding_translation = Off
↓
mbstring.encoding_translation = On
文字化けが発生した場合は、OFFに戻してください。
・文字コード自動検出の優先順位を定義します
;mbstring.detect_order = auto
↓
mbstring.detect_order = auto
autoの場合、UTF-8が最初に選択されるので、autoになるようにしておきます。
・コードとして変換できない文字がある場合に、代替の文字を出力しないようにする。
;mbstring.substitute_character = none
↓
mbstring.substitute_character = none
コードとして変換できない文字がある場合に、代替の文字を出力しないようにします。
設定の反映
$ systemctl restart httpd.service
これで設定完了です。
apacheの自動起動設定
$ systemctl enable httpd.service
$ apachectl -v
Server version: Apache/2.4.6 (CentOS)
Server built: Apr 2 2020 13:13:23
apacheの自動起動設定も行なっておきます。
動作確認
$ vim /var/www/html/index.php
<?php phpinfo(); ?>
ブラウザからアクセスを確認してみてください。phpinfoの画面が表示できることを確認します。サイトがあるホスト名がwww.xxxxxx.comの場合は以下のようにブラウザに入力します。
https://www.xxxxxx.com/index.php
確認できたでしょうか。ここまで問題なくできていれば、残すはmysqlのみです。
mysql8.0のインストール
リポジトリの設定
$ yum install https://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64/mysql80-community-release-el7-3.noarch.rpm
mysql80-communityリポジトリが有効になっていますので、このままこちらを利用します。
インストール
$ install mysql-community-server
mysqlをインストールします。
起動させる
$ systemctl start mysqld.service
ここまで問題なければ、mysqlが動きます。
自動起動設定
$ systemctl enable mysqld.service
mysqldの自動起動設定も行なっておきます。
パスワードを確認する
mysqlをインストールした後に、rootユーザのパスワードがlogに出ているので確認します。
$ grep password /var/log/mysqld.log
2020-08-20T06:12:59.960173Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: xxxxxxxxx
パスワードをメモしておきます。”xxxxxxxxx”の箇所なります。
mysql_secure_installationの実行
mysqlの初期設定を進めます。
$ mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
New password:
Re-enter new password:
Remove anonymous users? (Press y|Y for Yes, any other key for No) :
... skipping.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
... skipping.
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) :
... skipping.
All done!
rootユーザのパスワードもこの中で更新していきます。
ログイン確認
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.21 MySQL Community Server - GPL
Copyright (c) 2000, 2020, 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>
先ほど設定したパスワードでログインできることを確認します。
作業ユーザの作成
rootユーザだと、全ての権限を持ったユーザなので、利用シーンごとにユーザを作成します。今回は、wpというデータベースを扱うことのできるユーザを作成します。
mysql> create database wp;
Query OK, 1 row affected (0.02 sec)
mysql> create user 'staff'@'%' identified by 'xK!gta2qwp';
Query OK, 0 rows affected (0.02 sec)
mysql> grant all on wp.* to 'staff'@'%' with grant option;
Query OK, 0 rows affected (0.01 sec)
create user でユーザを作成しており、grant all で権限を付与しています。すべて終われば、作成完了です。
作業ユーザの確認
先ほど作成したユーザでログインしてみましょう。
$ mysql -u staff -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.21 MySQL Community Server - GPL
Copyright (c) 2000, 2020, 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 |
+--------------------+
| wp |
+--------------------+
2 rows in set (0.01 sec)
mysql> use wp;
Database changed
mysql> show tables;
Empty set (0.01 sec)
このように進むことができていれば、完了です。