EXCEL VBAやPHP、Laravelに関するWINDOWS・WEBプログラミングの解説ブログです。

さくらVPSにPHP7.3・mySQL・phpMyAdmin・WordPress5.1・Laravel・nodejs/Expressインストール

前回の作業では、さくらVPSにApacheインストールから独自ドメイン設定、マルチドメイン設定、サイトのSSL化まで行いました。
今回は、さくらVPSにPHP7.3・mySQL・phpMyAdmin・WordPress5.1をインストール、ApacheでのBASIC認証まで行います。
当ページ内作業は2019年に実施した記録です。Laravelインストールを2020年11月に追加しました。

PHP7.3のインストール

まずはremiレポジトリをインストール。

[root@ik1-999-11122 www]# cd
[root@ik1-999-11122 ~]# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

さくらのマニュアルはPHP7.1ですが、どうせなら2019年時点最新のPHP7.3をインストール。

[root@ik1-999-11122 ~]# yum install –enablerepo=remi,remi-php73 php php-devel php-mbstring php-mysqlnd php-pdo php-gd

Complete!
[root@ik1-999-11122 ~]#

PHPのバージョン確認

[root@ik1-999-11122 ~]# php -v
PHP 7.3.5 (cli) (built: Apr 30 2019 08:37:17) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.5, Copyright (c) 1998-2018 Zend Technologies

PHPを有効にするために、Apacheを再起動

[root@ik1-999-11122 ~]# systemctl restart httpd

PHPファイルをアップロードし、動作することを確認。

MySQL5.7インストール

さくらのマニュアルではmariaDBをインストールするようですが、まだまだMySQLの普及率が高いこともあり、
今回はMySQLを導入することにします。

mariaDB削除。

[root@ik1-999-11122 ~]# yum remove mariadb-libs

MySQLインストール、5.7.26がインストール。

[root@ik1-999-11122 ~]# yum install http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

Complete!
[root@ik1-999-11122 ~]# yum -y install mysql-community-server

Complete!
[root@ik1-999-11122 ~]# mysqld -V
mysqld Ver 5.7.26 for Linux on x86_64 (MySQL Community Server (GPL))

MySQLを起動し、自動起動の設定をする。

[root@ik1-999-11122 ~]# systemctl start mysqld
[root@ik1-999-11122 ~]# systemctl enable mysqld
[root@ik1-999-11122 ~]# cat /var/log/mysqld.log | grep ‘password is generated’
2019-05-04T17:09:49.802942Z 1 [Note] A temporary password is generated for root@localhost: ここが初期のrootパスワード

MySQLの初期設定。
基本的に、yes。

[root@ik1-999-11122 ~]# mysql_secure_installation
Enter password for user root://初期パスワードを入力
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y //yでrootのパスワードを変更
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y //anonymous user不特定多数のユーザーを削除
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y //rootでリモートでのログインを不許可にしますか?
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y //testデータベースを削除しますか?
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y //設定を今反映しますか?
All done!

接続を確認

[root@ik1-999-11122 ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
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> exit
Bye

文字コードの設定

[root@ik1-999-11122 ~]# vi /etc/my.cnf

/etc/my.cnfに以下の4行を最後に追加。
character_set_serverでDB作成時のデフォルトの文字コードをutf8mb4とする。
skip-character-set-client-handshakeでクライアントがどんな文字コードを使っていても、文字コードを統一する。
PHPからMySQLに接続して、何故か文字化けするときに、このテキストで解決することがあるらしい。普段レンタルサーバを使っているので、あまり意識しないが。

character_set_server=utf8mb4
skip-character-set-client-handshake
explicit_defaults_for_timestamp = true
table_definition_cache = 400

MySQLを再起動して、設定を反映させる。
mySQLにログインして、設定を確認。

[root@ik1-999-11122 ~]# systemctl restart mysqld
[root@ik1-999-11122 ~]# mysql -u root -p
mysql> show variables like ‘char%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.01 sec)

phpMyAdminをインストール

レンタルサーバ同様に、ブラウザからMySQLに接続して操作するために、phpMyAdminをインストールする。

[root@ik1-999-11122 ~]# wget https://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.zip //ダウンロード
[root@ik1-999-11122 ~]# unzip phpMyAdmin-4.8.5-all-languages //解凍
[root@ik1-999-11122 ~]# rm phpMyAdmin-4.8.5-all-languages.zip //ZIPファイルは削除
[root@ik1-999-11122 ~]# mv phpMyAdmin-4.8.5-all-languages phpmyadmin //デイレクトリ名を分かり易く変更
[root@ik1-999-11122 ~]# mv phpmyadmin/ /var/www/html/phpmyadmin/ //phpmyadminを/var/www/html/に移動
[root@ik1-999-11122 ~]# chown -R apache /var/www/html/phpmyadmin/ //所有者をapacheに
[root@ik1-999-11122 ~]# chown -R apache.apache /var/www/html/phpmyadmin/ //グロープもapacheに
[root@ik1-999-11122 ~]# chmod -R 0755 /var/www/html/phpmyadmin/

しかし、http://IPアドレス/phpmyadminと打っても、アクセスできない。
設定ファイルの新規作成が必要でした。

[root@ik1-999-11122 ~]# vi /etc/httpd/conf.modules.d/phpmyadmin.conf //ファイルを新規作成
Alias /phpmyadmin “/var/www/html/phpmyadmin/”
<Directory “/var/www/html/phpmyadmin/”>
Order allow,deny
Allow from all
Require all granted
</Directory>

ダウンロードしたphpmyadminのSQLスクリプトの実行を行い、phpmyadmin用のデータベースを作成しておいた方が良いみたい。
mysql -u root -p
source /var/www/html/phpmyadmin/sql/create_tables.sql
を実行しておく。

httpdの再起動

[root@ik1-999-11122 ~]# systemctl restart httpd

http://IPアドレス/phpmyadmin/index.phpでphpmyadminを確認。

適当にDBを作成し、テーブルも作成し、データ登録をする。問題無い動作を確認。

セキュリティー的にゆるゆるすぎるので、phpmyadminには、mysqlのrootでのログインを禁止する。

[root@ik1-999-11122 ~]# mysql -u root -p
mysql> create database sample_db; //適当にデータベースを作成
Query OK, 1 row affected (0.00 sec)

mysql> create user ‘sample’@’localhost’ IDENTIFIED BY ‘パスワード’; //mysqlユーザーを作成
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on sample_db.* to ‘sample’@’localhost’; //作成したmysqlユーザーに作成したデータベースへの操作権限を与える
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges; //設定を反映
Query OK, 0 rows affected (0.01 sec)

phpmyadminの設定ファイルを作成。

[root@ik1-999-11122 ~]# cat /var/www/html/phpmyadmin/config.sample.inc.php
[root@ik1-999-11122 ~]# mv /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php
[root@ik1-999-11122 ~]# vi /var/www/html/phpmyadmin/config.inc.php
$cfg[‘Servers’][$i][‘AllowRoot’] = false;//末尾に追加 rootでのアクセスを禁止

rootでphpmyadminにアクセスできないこと、新たに作成したmysqlユーザーでphpmyadminにアクセスできたことを確認

ApacheにBASIC認証を設定

phpmyadminへは、rootからアクセスできないようにしたものの、やはりデイレクトリ全体へのアクセスを制御します。
ApacheにBASIC認証を設定します。

[root@ik1-999-11122 ~]# htpasswd -c /etc/httpd/conf.d/htpasswd webuser //ユーザーの登録ファイルの作成
New password:
Re-type new password:
Adding password for user webuser
[root@ik1-999-11122 ~]# chown apache:apache /etc/httpd/conf.d/htpasswd //権限設定
[root@ik1-999-11122 ~]# chmod 600 /etc/httpd/conf.d/htpasswd

[root@ik1-999-11122 ~]# vi /etc/httpd/conf.d/auth.conf //基本認証ファイルの新規作成

<Directory “/var/www/html/phpmyadmin”>
AuthType Basic
AuthName “Auth Require Area”
AuthUserFile /etc/httpd/conf.d/htpasswd
Require valid-user
</Directory>

[root@ik1-999-11122 ~]# systemctl restart httpd //apache再起動

phpmyadminにアクセス時に、認証ダイアログの表示を確認

WordPress5.1をインストール

ブログだけではなく、企業サイトでもWordPressというくらい普及しているCMSであるWordPressをさくらVPSに導入。

WordPress用のデータベースを作成

[root@ik1-999-11122 ~]# mysql -u root -p
mysql> create database wordpress_db;
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on wordpress_db.* to ‘webuser’@’localhost’;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

/var/www/html/web-web.work/public_html/でWordPressを運用します。
WordPressの最新はバージョン5.1ですので、これをダウンロードします。

[root@ik1-999-11122 ~]# cd /var/www/html/web-web.work/public_html/
[root@ik1-999-11122 public_html]# wget https://ja.wordpress.org/wordpress-5.1-ja.tar.gz
[root@ik1-999-11122 public_html]# tar xvzf wordpress-5.1-ja.tar.gz //解凍
[root@ik1-999-11122 public_html]# rm wordpress-5.1-ja.tar.gz //圧縮ファイルを削除
[root@ik1-999-11122 public_html]# chown -R apache:vpsuser * //所有者をapacheにして、グループをvpsuserに
[root@ik1-999-11122 public_html]# chmod -R g+w * //グループに書き込み権限を追加

https://web-web.work/wordpress/ にアクセスし、WordPressのインストール画面を確認。

先ほど作成したmySQL用一般ユーザー、WordPress用データベース名などを、WordPressのインストール画面で入力し、インストールをブラウザ上で進める。
さくらVPSにWordPress5.1が無事インストールできたことを確認。

Laravelをインストール

[root@ik1-999-11122 ~]# cd /var/www/html/web-web.work/public_html/

[root@ik1-999-11122 public_html]# composer global require “laravel/installer”
Changed current directory to /root/.config/composer
Do not run Composer as root/super user! See https://getcomposer.org/root for details

ルートで作業するなと怒られますが続行します

引き続きLaravelプロジェクトを作成します

[root@ik1-999-11122 public_html]# composer create-project –prefer-dist laravel/laravel laravelapp

こちらもルートで作業するなと怒られますが続行します

laravelapp が出来ているのが確認できます

[root@ik1-999-11122 public_html]# ls
laravelapp

[root@ik1-999-11122 public_html]# ls -l laravelapp/
total 252
-rw-r–r– 1 root root 3738 Nov 18 01:40 README.md
drwxr-xr-x 7 root root 77 Nov 18 01:40 app
-rwxr-xr-x 1 root root 1686 Nov 18 01:40 artisan
drwxr-xr-x 3 root root 32 Nov 18 01:40 bootstrap
-rw-r–r– 1 root root 1612 Nov 18 01:40 composer.json
-rw-r–r– 1 root root 220879 Nov 21 01:26 composer.lock
drwxr-xr-x 2 root root 4096 Nov 18 01:40 config
drwxr-xr-x 5 root root 70 Nov 18 01:40 database
-rw-r–r– 1 root root 944 Nov 18 01:40 package.json
-rw-r–r– 1 root root 1202 Nov 18 01:40 phpunit.xml
drwxr-xr-x 2 root root 90 Nov 18 01:40 public
drwxr-xr-x 6 root root 48 Nov 18 01:40 resources
drwxr-xr-x 2 root root 71 Nov 18 01:40 routes
-rw-r–r– 1 root root 563 Nov 18 01:40 server.php
drwxr-xr-x 5 root root 43 Nov 18 01:40 storage
drwxr-xr-x 4 root root 79 Nov 18 01:40 tests
drwxr-xr-x 44 root root 4096 Nov 21 01:26 vendor
-rw-r–r– 1 root root 559 Nov 18 01:40 webpack.mix.js

デイレクトリの権限を変更します
storageデイレクトリとbootstrap/cacheを書き込み可能にします

[root@ik1-999-11122 public_html]# cd laravelapp/
[root@ik1-999-11122 laravelapp]# chmod -R a+w storage/
[root@ik1-999-11122 laravelapp]# chmod -R a+w bootstrap/cache/

Laravel8.15の初期画面を /laravelapp/public/で確認しました

laravelapp/routes/の権限を変更し、SFTPからアップロードできるようにします

[root@ik1-999-11122 laravelapp]# chmod -R a+w routes/

laravelapp/routes/web.phpを書き換えてルーティングを確認します
こちらを追記します

Route::get(‘test’, function () {
return ‘<html><body><h1>Test</h1><p>This is a test page.</p></body></html>’;
});

wep.phpをSFTPでサーバのファイルと差替えます。
/laravelapp/public/testで以下の表示を確認しました!

PHP7.3のインストール

artisanコマンドでコントローラを作成します

[root@ik1-999-11122 laravelapp]# php artisan make:controller TestController
Controller created successfully.

TestController.phpを確認しました

[root@ik1-999-11122 laravelapp]# ls -l app/Http/Controllers/
total 12
-rw-r–r– 1 root root 361 Nov 18 01:40 Controller.php
-rw-r–r– 1 root root 121 Nov 21 08:27 TestController.php

Controllerデイレクトリのパーミッションを変更し、SFTPでファイルのアップロードをできるようにします

[root@ik1-999-11122 laravelapp]# chmod -R a+w app/Http/Controllers/

TestController.phpに追記します

web.phpに下記追記します。また、Laravel8は、use Illuminate\Support\Facades\Route;の下に次の一行追加が必要でした。

use App\Http\Controllers\TestController;

ルーティングの指定もLaravel7と異なります。

Route::get(‘/testcontroller’, [TestController::class, ‘index’]);

ブラウザに /laravelapp/public/testcontrollerを指定すると下表示確認できました!

 

nodebrewをインストール

[root@ik1-999-11122 ~]# curl -L git.io/nodebrew | perl – setup

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
0 0 0 0 0 0 0 0 –:–:– 0:00:01 –:–:– 0
0 0 0 0 0 0 0 0 –:–:– 0:00:02 –:–:– 0
100 24696 100 24696 0 0 9964 0 0:00:02 0:00:02 –:–:– 100k
Fetching nodebrew…
Installed nodebrew in $HOME/.nodebrew

========================================
Export a path to nodebrew:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================

.bash_profileにパスを通す

[root@ik1-999-11122 ~]# vim .bash_profile

# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
PATH=$HOME/.nodebrew/current/bin:$PATH
export PATH

[root@ik1-999-11122 ~]# source ~/.bash_profile

[root@ik1-999-11122 ~]# nodebrew -v

nodebrew 1.1.0

[root@ik1-999-11122 ~]# nodebrew -v

nodebrew 1.1.0

Usage:
nodebrew help Show this message
nodebrew install <version> Download and install <version> (from binary)
nodebrew compile <version> Download and install <version> (from source)
nodebrew install-binary <version> Alias of install (For backward compatibility)
nodebrew uninstall <version> Uninstall <version>
nodebrew use <version> Use <version>
nodebrew list List installed versions
nodebrew ls Alias for list
nodebrew ls-remote List remote versions
nodebrew ls-all List remote and installed versions
nodebrew alias <key> <value> Set alias
nodebrew unalias <key> Remove alias
nodebrew clean <version> | all Remove source file
nodebrew selfupdate Update nodebrew
nodebrew migrate-package <version> Install global NPM packages contained in <version> to current version
nodebrew exec <version> — <command> Execute <command> using specified <version>

Example:
# install
nodebrew install v8.9.4

# use a specific version number
nodebrew use v8.9.4

インストール対象のバージョンを確認する

[root@ik1-999-11122 ~]# nodebrew ls-remote

安定版をインストール

[root@ik1-999-11122 ~]# nodebrew install-binary stable

Fetching: https://nodejs.org/dist/v16.5.0/node-v16.5.0-linux-x64.tar.gz
######################################################################## 100.0%
Installed successfully

16.5.0のインストールを確認

[root@ik1-999-11122 ~]# nodebrew ls

v16.5.0

nodebrewを使うことを宣言

[root@ik1-999-11122 ~]# nodebrew use v16.5.0

use v16.5.0

[root@ik1-999-11122 ~]# node -v

v16.5.0

npmのインストールも確認

[root@ik1-999-11122 ~]# npm -v

7.19.1

ファイアウォールの起動の確認 起動している

[root@ik1-999-11122 ~]# firewall-cmd –state

running

有効になっているサービスの確認 3000が当然開いていない

[root@ik1-999-11122 ~]# firewall-cmd –list-all

3000番ポートを開放する

[root@ik1-999-11122 ~]# firewall-cmd –add-port=3000/tcp –permanent

success

[root@ik1-999-11122 ~]# firewall-cmd –reload

success

3000番の開放を確認した

[root@ik1-999-11122 ~]# firewall-cmd –list-all

デイレクトリ移動

[root@ik1-999-11122 ~]# cd /var/www/html/web-web.work/public_html/

デイレクトリ作成、そこへ移動

[root@ik1-999-11122 public_html]# mkdir exp

[root@ik1-999-11122 public_html]# cd exp/

ENTERだけを押す

[root@ik1-999-11122 exp]# npm init

This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See npm help init for definitive documentation on these fields
and exactly what they do.

Use npm install <pkg> afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (exp)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /var/www/html/web-web.work/public_html/exp/package.json:

{
“name”: “exp”,
“version”: “1.0.0”,
“description”: “”,
“main”: “index.js”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1″
},
“author”: “”,
“license”: “ISC”
}

Is this OK? (yes)
npm notice
npm notice New minor version of npm available! 7.19.1 -> 7.20.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v7.20.2
npm notice Run npm install -g npm@7.20.2 to update!
npm notice

EXPRESSのインストール

[root@ik1-999-11122 exp]# npm install express

EXPRESSのインストールされたバージョンを確認

[root@ik1-999-11122 exp]# npm view express version

4.17.1

app.jsの作成

[root@ik1-999-11122 exp]# vim app.js

const express = require(‘express’);
const app = express();
const port = 3000;

app.get(‘/’,(req,res) => {
res.send(‘Hello World! First Express’);
});

app.listen(port, () => {
console.log(‘This application use at ${port}’);
});

[root@ik1-999-11122 exp]# node app.js

This application use at ${port}

http://web-web.work:3000/
で動作を確認した

サーバの動作を Ctrl + c で停止する

node.jsのプロセスを永続化させる foreverをインストールする

[root@ik1-999-11122 exp]# npm install forever

forever start が使えないので、-gを加える

[root@ik1-999-11122 exp]# npm install forever -g

app.jsを起動する

[root@ik1-999-11122 exp]# forever start app.js

http://web-web.work:3000/
動作を確認した!