CentOS7系にLEMP環境(Linux + Nginx + MySQL + PHP)を構築
2024/02/22
先日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との共存も可能らしいのでそちらも試してみたいところ。
参考サイト
関連記事
-
Nginxのバーチャルホスト設定とLet's Encryptの導入
NginxでVirtualHostの設定し、複数のドメインを同一サーバに割り当て ...