勉強したことのメモ

webプログラマが勉強したことのメモ。

CentOS7系にLEMP環境(Linux + Nginx + MySQL + PHP)を構築

      2021/08/08

先日KAGOYAのVPSからIndigoに移行した際にCentOS6から7へバージョンアップし、CentOS7.5でLAMP環境を構築した。今回はCentOS7でLEMP環境を、さらにPHPは7系ではなく8系を導入してみたい。以下に対応方法をメモ。

 

作業内容

基本的に全ての作業はrootユーザで行う。rootユーザでログインするには以下コマンドを打つ。

#rootログイン
sudo su -

各種サーバ設定

#swap設定
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
 
#設定ファイルを開く
vi /etc/fstab
 
#再起動時にswap領域が認識されるよう以下を追記
/swapfile               swap                   swap    defaults        0 0

#selinuxの状態を確認
getenforce

#設定ファイルを書き換え
vi /etc/selinux/config

#変更前
SELINUX=enforcing

#変更後
SELINUX=disabled

#設定ファイルを開く
vi /etc/ssh/sshd_config

#書き換え前
#Port 22

#書き換え後(任意の数値に変更)
Port 7777

#許可するポートを追加(任意の数値を追加)
semanage port --add --type ssh_port_t --proto tcp 7777

#許可中のポートを確認
semanage port --list

#再起動
systemctl start sshd

#日時設定
timedatectl set-timezone Asia/Tokyo

#日時確認
date

#日本語関連のパッケージをインストール
yum -y install ibus-kkc vlgothic-*

#文字セットを変更
localectl set-locale LANG=ja_JP.UTF-8

#設定を反映させる
source /etc/locale.conf

#文字セットを確認
echo $LANG

#以下が表示されればOK
en_US.UTF-8

#適当なコマンドで言語を確認
date

#日本語で表示される
2021年  8月  6日 金曜日 14:40:08 JST

#サーバ再起動
reboot

以前とは違い日本語設定を導入した。

PHPインストール

#yumのアップデート
yum update

#Remiリポジトリのインストール
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

#PHPのインストール
yum -y install --enablerepo=remi,remi-php80 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql

#バージョンの確認
php -v

当方の環境ではPHP8.0.9がインストールできた。

Nginxインストール

#レポジトリを追加
vi /etc/yum.repos.d/nginx.repo

#以下をファイルに記述する
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

#Nginxインストール
yum -y install nginx

#バージョン確認
nginx -v
nginx version: nginx/1.21.1

#設定ファイルを編集
vi /etc/nginx/conf.d/default.conf

#変更前
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

#変更後
    server_name  test.com;
    location / {
        root   /usr/share/nginx/html;
       # index  index.html index.htm;
        index index.php;
    }
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

#自動起動設定
systemctl enable nginx

#Nginxの起動
systemctl start nginx

この時点でブラウザからIPアドレスを入力するとページが表示される。ただ、PHPは動かなかったので調べてみるとphp-fpmというものを導入しないといけないらしい。以下で導入する。

php-fpmインストール

#php-fpmインストール
yum -y install --enablerepo=remi,remi-php80 php-fpm

#設定ファイルの編集
vi /etc/php-fpm.d/www.conf

#変更前
user = apache
group = apache

#変更後
user = nginx
group = nginx

#自動起動設定
systemctl enable php-fpm

#php-fpmの起動
systemctl start php-fpm

この時点でPHPが動作した。

MySQLインストール

#MariaDB削除
yum -y remove mariadb-libs

#リポジトリのインストール
yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

#MySQLのインストール
yum -y install --enablerepo=mysql80-community mysql-community-server mysql-community-devel

#バージョン確認
mysqld --version

#MySQLの起動
systemctl start mysqld

#ステータス確認
systemctl status mysqld

#自動起動設定
systemctl enable mysqld

#自動起動確認
systemctl list-unit-files -t service | grep mysqld

#初期パスワードを確認
cat /var/log/mysqld.log | grep 'temporary password'

#以下のように表示される(xxxxxxxxxxx部分がパスワード)
A temporary password is generated for root@localhost: xxxxxxxxxxx

#MySQLにログイン
mysql -u root -p

#パスワードポリシーをLOWに変更する
mysql> set global validate_password.policy=LOW;
mysql> exit;

#初期設定
mysql_secure_installation

#MySQLユーザを追加
mysql -u root -p
mysql> CREATE USER 'testuser' IDENTIFIED BY 'testpass';

#ユーザの確認
mysql> SELECT user, host FROM mysql.user;
mysql> exit;

Let's Encryptインストール

#certbotのインストール
yum -y install epel-release
yum -y install certbot-nginx

#証明書インストールのテスト
certbot certonly --webroot -w /usr/share/nginx/html -d test.com --email test@test.com --dry-run

#問題無ければ証明書インストール
certbot certonly --webroot -w /usr/share/nginx/html -d test.com --email test@test.com

#自動更新設定
systemctl start certbot-renew.timer
systemctl enable certbot-renew.timer
systemctl list-timers --all

apacheではドキュメントルートは「/var/www/html」だけどNginxだと「/usr/share/nginx/html」になるようなので注意する。尚、証明書が正常に導入できても以下設定を行わないとhttpsで接続できない。

Nginxの再設定

#設定ファイルを編集
vi /etc/nginx/conf.d/default.conf

#変更前
    listen       80;

#変更後
    listen       80 default_server;
    listen       443 ssl;
    ssl_certificate     /etc/letsencrypt/live/test.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/test.com/privkey.pem;

#php-fpmの再起動
systemctl restart php-fpm

 

トラブル

Let's Encryptインストール時のエラー

過去の記事を参考に以下でcerbotを導入しても証明書インストール時にエラーとなった。

yum -y install certbot python-certbot-apache

以下でインストールすること。
yum -y install certbot-nginx

ファイルをアップロードしてもブラウザで表示できない

「/var/www/html」直下にファイルをアップロードしてもブラウザで表示できなかった。調べてみるとNginxだと「/usr/share/nginx/html」がドキュメントルートになるので、こちらにアップロードしないといけない。

 

所感

Nginxは全く触ったことが無いので、ひとまずはPHPプログラムやWordPressを設置したり等、色々試してみたい。また、Apacheとの共存も可能らしいのでそちらも試してみたいところ。

 

参考サイト

https://qiita.com/nooboolean/items/fcc2a264e341b2bef567

https://qiita.com/tomy0610/items/0884c77f1ac52957fa96

 - Nginx, VPS, サーバー

  関連記事

サーバーリソース監視にsar(sysstat)が便利だった

過去にサーバーリソース監視のmuninとかcactiを何度か入れようとして挫折し ...

コマンドでMySQLに郵便番号データを入れる

練習としてコマンドから郵便番号データを入れた際のメモ。 --------- 1: ...

サーバー監視はNew Relicが楽に導入できて便利

サーバー監視はNew Relicが楽に導入できて便利だった。 メモリ使用率やCP ...

お手軽に負荷分散(DNSラウンドロビン)を行う方法

サーバ設定か何かの記事を見ていて「DNSラウンドロビン」という聞いたことのない言 ...

Class ‘DOMDocument’ not foundエラーの対処

PHPでphpQueryというライブラリを利用しようとすると「Fatal err ...

CPIのレンタルサーバでRewriteEngineを使用する場合の注意点

CPIのレンタルサーバで開発する案件があり、htaccessファイルを用いてRe ...

VPSにメールサーバを導入する方法

VPSにメールサーバを導入したかった。具体的にはThunderbirdでメールの ...

CentOSでサーバ時間のずれを調整する

他サーバとのやり取りをするにあたり、サーバごとに微妙に時間が異なっているというこ ...

htaccessとhttpd.confの優先度

既に完成しているシステムを引き継ぐことがあり、そこのリライトルール設定を変更した ...

apacheでキャッシュ設定を行う

apacheでキャッシュを設定できると聞いたので 対応した内容のメモ。 mod_ ...