勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

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

   2024/02/22  Nginx VPS サーバー

先日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 サーバー

  関連記事

Nginxのバーチャルホスト設定とLet's Encryptの導入

NginxでVirtualHostの設定し、複数のドメインを同一サーバに割り当て ...